胡思旗
2023-08-29 b80ee8c883f279e843071e6b53ab9cddec3f88a0
登录流程对接、项目列表组件封装
15 files modified
5 files added
9207 ■■■■■ changed files
.eslintrc.js 2 ●●● patch | view | raw | blame | history
package-lock.json 1649 ●●●●● patch | view | raw | blame | history
package.json 2 ●●●●● patch | view | raw | blame | history
src/api/http/config.ts 5 ●●●●● patch | view | raw | blame | history
src/api/http/request.ts 2 ●●● patch | view | raw | blame | history
src/api/http/type.ts 1 ●●●● patch | view | raw | blame | history
src/api/manage.ts 11 ●●●● patch | view | raw | blame | history
src/components/Search/Select.vue 31 ●●●●● patch | view | raw | blame | history
src/components/common/topbar.vue 6 ●●●●● patch | view | raw | blame | history
src/pages/page-web/index.vue 25 ●●●● patch | view | raw | blame | history
src/pages/page-web/projects/members.vue 38 ●●●●● patch | view | raw | blame | history
src/pages/page-web/projects/project_list/index.vue 2 ●●● patch | view | raw | blame | history
src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue 105 ●●●●● patch | view | raw | blame | history
src/pages/page-web/projects/project_list/list_page.vue/components/data.ts 19 ●●●●● patch | view | raw | blame | history
src/pages/page-web/projects/project_list/list_page.vue/data.ts 16 ●●●●● patch | view | raw | blame | history
src/pages/page-web/projects/project_list/list_page.vue/list.vue 90 ●●●●● patch | view | raw | blame | history
src/styles/flex.style.scss 99 ●●●●● patch | view | raw | blame | history
src/types/enums.ts 1 ●●●● patch | view | raw | blame | history
src/utils/crypto.ts 75 ●●●●● patch | view | raw | blame | history
yarn.lock 7028 ●●●● patch | view | raw | blame | history
.eslintrc.js
@@ -3,7 +3,7 @@
    browser: true,
    commonjs: true,
    es2021: true,
    node: true
    node: true,
  },
  extends: ['standard', 'plugin:vue/vue3-essential', './.eslintrc-auto-import.json'],
  parserOptions: {
package-lock.json
@@ -32,6 +32,7 @@
        "vuex": "^4.0.2"
      },
      "devDependencies": {
        "@types/crypto-js": "^4.1.1",
        "@types/node": "^16.3.2",
        "@types/urlencode": "^1.1.2",
        "@typescript-eslint/eslint-plugin": "^5.8.1",
@@ -39,6 +40,7 @@
        "@vitejs/plugin-vue": "^1.2.4",
        "@vue/compiler-sfc": "^3.0.5",
        "cesium": "^1.108.0",
        "crypto-js": "^4.1.1",
        "eslint": "^7.30.0",
        "eslint-config-standard": "^16.0.3",
        "eslint-plugin-import": "^2.23.4",
@@ -48,7 +50,8 @@
        "rollup-plugin-external-globals": "^0.6.1",
        "sass": "^1.35.1",
        "typescript": "^4.5.4",
        "vite": "^2.9.16",
        "unplugin-auto-import": "^0.16.6",
        "vite": "^4.4.9",
        "vite-plugin-cesium": "^1.2.22",
        "vite-plugin-eslint": "^1.3.0",
        "vite-plugin-style-import": "^1.0.1",
@@ -92,6 +95,12 @@
      "peerDependencies": {
        "vue": ">=3.0.3"
      }
    },
    "node_modules/@antfu/utils": {
      "version": "0.7.6",
      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.6.tgz",
      "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==",
      "dev": true
    },
    "node_modules/@babel/code-frame": {
      "version": "7.12.11",
@@ -645,16 +654,331 @@
        "node": ">=10"
      }
    },
    "node_modules/@esbuild/android-arm": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
      "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
      "cpu": [
        "arm"
      ],
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/android-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
      "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/android-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
      "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/darwin-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
      "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/darwin-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
      "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/freebsd-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
      "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/freebsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
      "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-arm": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
      "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
      "cpu": [
        "arm"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
      "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-ia32": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
      "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
      "cpu": [
        "ia32"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-loong64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
      "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
      "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
      "cpu": [
        "loong64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-mips64el": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
      "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
      "cpu": [
        "mips64el"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-ppc64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
      "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
      "cpu": [
        "ppc64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-riscv64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
      "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
      "cpu": [
        "riscv64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-s390x": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
      "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
      "cpu": [
        "s390x"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/linux-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
      "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/netbsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
      "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/openbsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
      "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/sunos-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
      "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/win32-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
      "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/win32-ia32": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
      "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
      "cpu": [
        "ia32"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/@esbuild/win32-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
      "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
@@ -802,6 +1126,12 @@
        "node": ">= 10"
      }
    },
    "node_modules/@jridgewell/sourcemap-codec": {
      "version": "1.4.15",
      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
      "dev": true
    },
    "node_modules/@nodelib/fs.scandir": {
      "version": "2.1.5",
      "resolved": "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz",
@@ -941,12 +1271,17 @@
      "integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA==",
      "dev": true
    },
    "node_modules/@types/crypto-js": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz",
      "integrity": "sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==",
      "dev": true
    },
    "node_modules/@types/estree": {
      "version": "0.0.50",
      "resolved": "https://registry.npmmirror.com/@types/estree/download/@types/estree-0.0.50.tgz?cache=0&sync_timestamp=1637266061438&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Festree%2Fdownload%2F%40types%2Festree-0.0.50.tgz",
      "integrity": "sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=",
      "dev": true,
      "license": "MIT"
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz",
      "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
      "dev": true
    },
    "node_modules/@types/json-schema": {
      "version": "7.0.9",
@@ -972,7 +1307,7 @@
      "version": "16.11.19",
      "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-16.11.19.tgz",
      "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==",
      "dev": true,
      "devOptional": true,
      "license": "MIT"
    },
    "node_modules/@types/svgo": {
@@ -2032,11 +2367,10 @@
      "license": "0BSD"
    },
    "node_modules/chokidar": {
      "version": "3.5.2",
      "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.2.tgz",
      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
      "version": "3.5.3",
      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
      "devOptional": true,
      "license": "MIT",
      "dependencies": {
        "anymatch": "~3.1.2",
        "braces": "~3.0.2",
@@ -2357,6 +2691,12 @@
      "engines": {
        "node": ">= 8"
      }
    },
    "node_modules/crypto-js": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz",
      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==",
      "dev": true
    },
    "node_modules/css-select": {
      "version": "4.2.1",
@@ -2872,9 +3212,9 @@
      }
    },
    "node_modules/esbuild": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz",
      "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz",
      "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
      "hasInstallScript": true,
      "bin": {
        "esbuild": "bin/esbuild"
@@ -2883,327 +3223,28 @@
        "node": ">=12"
      },
      "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"
      }
    },
    "node_modules/esbuild-android-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
      "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-android-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
      "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "android"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-darwin-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
      "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-darwin-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
      "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "darwin"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-freebsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
      "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-freebsd-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
      "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "freebsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-32": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
      "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
      "cpu": [
        "ia32"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
      "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-arm": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
      "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
      "cpu": [
        "arm"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
      "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-mips64le": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
      "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
      "cpu": [
        "mips64el"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-ppc64le": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
      "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
      "cpu": [
        "ppc64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-riscv64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
      "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
      "cpu": [
        "riscv64"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-linux-s390x": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
      "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
      "cpu": [
        "s390x"
      ],
      "optional": true,
      "os": [
        "linux"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-netbsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
      "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "netbsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-openbsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
      "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "openbsd"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-sunos-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
      "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "sunos"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-windows-32": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
      "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
      "cpu": [
        "ia32"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-windows-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
      "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
      "cpu": [
        "x64"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/esbuild-windows-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
      "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
      "cpu": [
        "arm64"
      ],
      "optional": true,
      "os": [
        "win32"
      ],
      "engines": {
        "node": ">=12"
        "@esbuild/android-arm": "0.18.20",
        "@esbuild/android-arm64": "0.18.20",
        "@esbuild/android-x64": "0.18.20",
        "@esbuild/darwin-arm64": "0.18.20",
        "@esbuild/darwin-x64": "0.18.20",
        "@esbuild/freebsd-arm64": "0.18.20",
        "@esbuild/freebsd-x64": "0.18.20",
        "@esbuild/linux-arm": "0.18.20",
        "@esbuild/linux-arm64": "0.18.20",
        "@esbuild/linux-ia32": "0.18.20",
        "@esbuild/linux-loong64": "0.18.20",
        "@esbuild/linux-mips64el": "0.18.20",
        "@esbuild/linux-ppc64": "0.18.20",
        "@esbuild/linux-riscv64": "0.18.20",
        "@esbuild/linux-s390x": "0.18.20",
        "@esbuild/linux-x64": "0.18.20",
        "@esbuild/netbsd-x64": "0.18.20",
        "@esbuild/openbsd-x64": "0.18.20",
        "@esbuild/sunos-x64": "0.18.20",
        "@esbuild/win32-arm64": "0.18.20",
        "@esbuild/win32-ia32": "0.18.20",
        "@esbuild/win32-x64": "0.18.20"
      }
    },
    "node_modules/escalade": {
@@ -3975,10 +4016,9 @@
      "license": "MIT"
    },
    "node_modules/fast-glob": {
      "version": "3.2.10",
      "resolved": "https://registry.npmmirror.com/fast-glob/download/fast-glob-3.2.10.tgz",
      "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==",
      "license": "MIT",
      "version": "3.3.1",
      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz",
      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
      "dependencies": {
        "@nodelib/fs.stat": "^2.0.2",
        "@nodelib/fs.walk": "^1.2.3",
@@ -4199,6 +4239,7 @@
      "version": "1.1.1",
      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/functional-red-black-tree": {
@@ -4344,6 +4385,7 @@
      "version": "1.0.3",
      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
      "dev": true,
      "license": "MIT",
      "dependencies": {
        "function-bind": "^1.1.1"
@@ -4753,6 +4795,7 @@
      "version": "2.13.0",
      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz",
      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
      "dev": true,
      "dependencies": {
        "has": "^1.0.3"
      }
@@ -5118,6 +5161,12 @@
        "json5": "lib/cli.js"
      }
    },
    "node_modules/jsonc-parser": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
      "dev": true
    },
    "node_modules/jsonfile": {
      "version": "6.1.0",
      "resolved": "https://registry.nlark.com/jsonfile/download/jsonfile-6.1.0.tgz",
@@ -5200,6 +5249,15 @@
      },
      "engines": {
        "node": ">=4.0.0"
      }
    },
    "node_modules/local-pkg": {
      "version": "0.4.3",
      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz",
      "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==",
      "dev": true,
      "engines": {
        "node": ">=14"
      }
    },
    "node_modules/locate-path": {
@@ -5471,6 +5529,30 @@
      },
      "bin": {
        "mkdirp": "bin/cmd.js"
      }
    },
    "node_modules/mlly": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.4.1.tgz",
      "integrity": "sha512-SCDs78Q2o09jiZiE2WziwVBEqXQ02XkGdUy45cbJf+BpYRIjArXRJ1Wbowxkb+NaM9DWvS3UC9GiO/6eqvQ/pg==",
      "dev": true,
      "dependencies": {
        "acorn": "^8.10.0",
        "pathe": "^1.1.1",
        "pkg-types": "^1.0.3",
        "ufo": "^1.3.0"
      }
    },
    "node_modules/mlly/node_modules/acorn": {
      "version": "8.10.0",
      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
      "dev": true,
      "bin": {
        "acorn": "bin/acorn"
      },
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/moment": {
@@ -6129,6 +6211,7 @@
      "version": "1.0.7",
      "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/path-type": {
@@ -6140,6 +6223,12 @@
      "engines": {
        "node": ">=8"
      }
    },
    "node_modules/pathe": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz",
      "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
      "dev": true
    },
    "node_modules/picocolors": {
      "version": "1.0.0",
@@ -6157,6 +6246,17 @@
      },
      "funding": {
        "url": "https://github.com/sponsors/jonschlinkert"
      }
    },
    "node_modules/pkg-types": {
      "version": "1.0.3",
      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz",
      "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
      "dev": true,
      "dependencies": {
        "jsonc-parser": "^3.2.0",
        "mlly": "^1.2.0",
        "pathe": "^1.1.0"
      }
    },
    "node_modules/posix-character-classes": {
@@ -6552,6 +6652,7 @@
      "version": "1.22.4",
      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz",
      "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
      "dev": true,
      "dependencies": {
        "is-core-module": "^2.13.0",
        "path-parse": "^1.0.7",
@@ -6623,6 +6724,7 @@
      "version": "2.68.0",
      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.68.0.tgz",
      "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==",
      "dev": true,
      "bin": {
        "rollup": "dist/bin/rollup"
      },
@@ -6714,6 +6816,12 @@
      "dependencies": {
        "compute-scroll-into-view": "^1.0.17"
      }
    },
    "node_modules/scule": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.0.0.tgz",
      "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==",
      "dev": true
    },
    "node_modules/semver": {
      "version": "7.3.5",
@@ -7493,6 +7601,27 @@
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/strip-literal": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz",
      "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==",
      "dev": true,
      "dependencies": {
        "acorn": "^8.10.0"
      }
    },
    "node_modules/strip-literal/node_modules/acorn": {
      "version": "8.10.0",
      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
      "dev": true,
      "bin": {
        "acorn": "bin/acorn"
      },
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/supports-color": {
      "version": "7.2.0",
      "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
@@ -7510,6 +7639,7 @@
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz",
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
      "dev": true,
      "license": "MIT",
      "engines": {
        "node": ">= 0.4"
@@ -8116,6 +8246,12 @@
        "node": ">=4.2.0"
      }
    },
    "node_modules/ufo": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.3.0.tgz",
      "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==",
      "dev": true
    },
    "node_modules/unbox-primitive": {
      "version": "1.0.1",
      "resolved": "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706302651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz",
@@ -8130,6 +8266,68 @@
      },
      "funding": {
        "url": "https://github.com/sponsors/ljharb"
      }
    },
    "node_modules/unimport": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.2.0.tgz",
      "integrity": "sha512-9buxPxkNwxwxAlH/RfOFHxtQTUrlmBGi9Ai9HezY2yYbkoOhgJTYPI6+WqxI1EZphoM9cw1SHoCFRkXSb8/fjQ==",
      "dev": true,
      "dependencies": {
        "@rollup/pluginutils": "^5.0.3",
        "escape-string-regexp": "^5.0.0",
        "fast-glob": "^3.3.1",
        "local-pkg": "^0.4.3",
        "magic-string": "^0.30.3",
        "mlly": "^1.4.0",
        "pathe": "^1.1.1",
        "pkg-types": "^1.0.3",
        "scule": "^1.0.0",
        "strip-literal": "^1.3.0",
        "unplugin": "^1.4.0"
      }
    },
    "node_modules/unimport/node_modules/@rollup/pluginutils": {
      "version": "5.0.4",
      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
      "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
      "dev": true,
      "dependencies": {
        "@types/estree": "^1.0.0",
        "estree-walker": "^2.0.2",
        "picomatch": "^2.3.1"
      },
      "engines": {
        "node": ">=14.0.0"
      },
      "peerDependencies": {
        "rollup": "^1.20.0||^2.0.0||^3.0.0"
      },
      "peerDependenciesMeta": {
        "rollup": {
          "optional": true
        }
      }
    },
    "node_modules/unimport/node_modules/escape-string-regexp": {
      "version": "5.0.0",
      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
      "dev": true,
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/unimport/node_modules/magic-string": {
      "version": "0.30.3",
      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.3.tgz",
      "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
      "dev": true,
      "dependencies": {
        "@jridgewell/sourcemap-codec": "^1.4.15"
      },
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/union-value": {
@@ -8155,6 +8353,116 @@
      "license": "MIT",
      "engines": {
        "node": ">= 10.0.0"
      }
    },
    "node_modules/unplugin": {
      "version": "1.4.0",
      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.4.0.tgz",
      "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==",
      "dev": true,
      "dependencies": {
        "acorn": "^8.9.0",
        "chokidar": "^3.5.3",
        "webpack-sources": "^3.2.3",
        "webpack-virtual-modules": "^0.5.0"
      }
    },
    "node_modules/unplugin-auto-import": {
      "version": "0.16.6",
      "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.16.6.tgz",
      "integrity": "sha512-M+YIITkx3C/Hg38hp8HmswP5mShUUyJOzpifv7RTlAbeFlO2Tyw0pwrogSSxnipHDPTtI8VHFBpkYkNKzYSuyA==",
      "dev": true,
      "dependencies": {
        "@antfu/utils": "^0.7.5",
        "@rollup/pluginutils": "^5.0.2",
        "fast-glob": "^3.3.0",
        "local-pkg": "^0.4.3",
        "magic-string": "^0.30.1",
        "minimatch": "^9.0.2",
        "unimport": "^3.0.14",
        "unplugin": "^1.3.2"
      },
      "engines": {
        "node": ">=14"
      },
      "peerDependencies": {
        "@nuxt/kit": "^3.2.2",
        "@vueuse/core": "*"
      },
      "peerDependenciesMeta": {
        "@nuxt/kit": {
          "optional": true
        },
        "@vueuse/core": {
          "optional": true
        }
      }
    },
    "node_modules/unplugin-auto-import/node_modules/@rollup/pluginutils": {
      "version": "5.0.4",
      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
      "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
      "dev": true,
      "dependencies": {
        "@types/estree": "^1.0.0",
        "estree-walker": "^2.0.2",
        "picomatch": "^2.3.1"
      },
      "engines": {
        "node": ">=14.0.0"
      },
      "peerDependencies": {
        "rollup": "^1.20.0||^2.0.0||^3.0.0"
      },
      "peerDependenciesMeta": {
        "rollup": {
          "optional": true
        }
      }
    },
    "node_modules/unplugin-auto-import/node_modules/brace-expansion": {
      "version": "2.0.1",
      "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
      "dev": true,
      "dependencies": {
        "balanced-match": "^1.0.0"
      }
    },
    "node_modules/unplugin-auto-import/node_modules/magic-string": {
      "version": "0.30.3",
      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.3.tgz",
      "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
      "dev": true,
      "dependencies": {
        "@jridgewell/sourcemap-codec": "^1.4.15"
      },
      "engines": {
        "node": ">=12"
      }
    },
    "node_modules/unplugin-auto-import/node_modules/minimatch": {
      "version": "9.0.3",
      "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz",
      "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
      "dev": true,
      "dependencies": {
        "brace-expansion": "^2.0.1"
      },
      "engines": {
        "node": ">=16 || 14 >=14.17"
      }
    },
    "node_modules/unplugin/node_modules/acorn": {
      "version": "8.10.0",
      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
      "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
      "dev": true,
      "bin": {
        "acorn": "bin/acorn"
      },
      "engines": {
        "node": ">=0.4.0"
      }
    },
    "node_modules/unset-value": {
@@ -8374,37 +8682,52 @@
      }
    },
    "node_modules/vite": {
      "version": "2.9.16",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-2.9.16.tgz",
      "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==",
      "version": "4.4.9",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz",
      "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
      "dependencies": {
        "esbuild": "^0.14.27",
        "postcss": "^8.4.13",
        "resolve": "^1.22.0",
        "rollup": ">=2.59.0 <2.78.0"
        "esbuild": "^0.18.10",
        "postcss": "^8.4.27",
        "rollup": "^3.27.1"
      },
      "bin": {
        "vite": "bin/vite.js"
      },
      "engines": {
        "node": ">=12.2.0"
        "node": "^14.18.0 || >=16.0.0"
      },
      "optionalDependencies": {
        "fsevents": "~2.3.2"
      },
      "peerDependencies": {
        "@types/node": ">= 14",
        "less": "*",
        "lightningcss": "^1.21.0",
        "sass": "*",
        "stylus": "*"
        "stylus": "*",
        "sugarss": "*",
        "terser": "^5.4.0"
      },
      "peerDependenciesMeta": {
        "@types/node": {
          "optional": true
        },
        "less": {
          "optional": true
        },
        "lightningcss": {
          "optional": true
        },
        "sass": {
          "optional": true
        },
        "stylus": {
          "optional": true
        },
        "sugarss": {
          "optional": true
        },
        "terser": {
          "optional": true
        }
      }
@@ -8558,6 +8881,21 @@
      "integrity": "sha512-8oODvR4inPCVbfeWkxmV++sP6qypH7DfxBAzCT3Erm7XnoK8aTuRls30wXlXL6LDB6e090vTELOYyreGe7OOLA==",
      "dev": true,
      "license": "MIT"
    },
    "node_modules/vite/node_modules/rollup": {
      "version": "3.28.1",
      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.28.1.tgz",
      "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==",
      "bin": {
        "rollup": "dist/bin/rollup"
      },
      "engines": {
        "node": ">=14.18.0",
        "npm": ">=8.0.0"
      },
      "optionalDependencies": {
        "fsevents": "~2.3.2"
      }
    },
    "node_modules/vue": {
      "version": "3.2.26",
@@ -8716,6 +9054,21 @@
        "loose-envify": "^1.0.0"
      }
    },
    "node_modules/webpack-sources": {
      "version": "3.2.3",
      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
      "dev": true,
      "engines": {
        "node": ">=10.13.0"
      }
    },
    "node_modules/webpack-virtual-modules": {
      "version": "0.5.0",
      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
      "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
      "dev": true
    },
    "node_modules/which": {
      "version": "2.0.2",
      "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
@@ -8829,6 +9182,12 @@
        "@types/lodash": "^4.14.165",
        "lodash": "^4.17.15"
      }
    },
    "@antfu/utils": {
      "version": "0.7.6",
      "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.6.tgz",
      "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==",
      "dev": true
    },
    "@babel/code-frame": {
      "version": "7.12.11",
@@ -9216,10 +9575,136 @@
      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz",
      "integrity": "sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8="
    },
    "@esbuild/android-arm": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
      "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
      "optional": true
    },
    "@esbuild/android-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
      "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
      "optional": true
    },
    "@esbuild/android-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
      "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
      "optional": true
    },
    "@esbuild/darwin-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
      "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
      "optional": true
    },
    "@esbuild/darwin-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
      "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
      "optional": true
    },
    "@esbuild/freebsd-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
      "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
      "optional": true
    },
    "@esbuild/freebsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
      "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
      "optional": true
    },
    "@esbuild/linux-arm": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
      "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
      "optional": true
    },
    "@esbuild/linux-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
      "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
      "optional": true
    },
    "@esbuild/linux-ia32": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
      "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
      "optional": true
    },
    "@esbuild/linux-loong64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz",
      "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==",
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
      "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
      "optional": true
    },
    "@esbuild/linux-mips64el": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
      "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
      "optional": true
    },
    "@esbuild/linux-ppc64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
      "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
      "optional": true
    },
    "@esbuild/linux-riscv64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
      "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
      "optional": true
    },
    "@esbuild/linux-s390x": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
      "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
      "optional": true
    },
    "@esbuild/linux-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
      "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
      "optional": true
    },
    "@esbuild/netbsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
      "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
      "optional": true
    },
    "@esbuild/openbsd-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
      "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
      "optional": true
    },
    "@esbuild/sunos-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
      "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
      "optional": true
    },
    "@esbuild/win32-arm64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
      "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
      "optional": true
    },
    "@esbuild/win32-ia32": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
      "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
      "optional": true
    },
    "@esbuild/win32-x64": {
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
      "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
      "optional": true
    },
    "@eslint/eslintrc": {
@@ -9324,6 +9809,12 @@
        "@intlify/runtime": "9.1.9",
        "@intlify/shared": "9.1.9"
      }
    },
    "@jridgewell/sourcemap-codec": {
      "version": "1.4.15",
      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
      "dev": true
    },
    "@nodelib/fs.scandir": {
      "version": "2.1.5",
@@ -9443,10 +9934,16 @@
      "integrity": "sha512-qVfOiFh0U8ZSkLgA6tf7kj2MciqRbSCWaJZRwftVO7UbtVDNsZAXpWXqvCDtIefvjC83UJB+vHTDOGm5ibXjEA==",
      "dev": true
    },
    "@types/crypto-js": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.1.1.tgz",
      "integrity": "sha512-BG7fQKZ689HIoc5h+6D2Dgq1fABRa0RbBWKBd9SP/MVRVXROflpm5fhwyATX5duFmbStzyzyycPB8qUYKDH3NA==",
      "dev": true
    },
    "@types/estree": {
      "version": "0.0.50",
      "resolved": "https://registry.npmmirror.com/@types/estree/download/@types/estree-0.0.50.tgz?cache=0&sync_timestamp=1637266061438&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Festree%2Fdownload%2F%40types%2Festree-0.0.50.tgz",
      "integrity": "sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM=",
      "version": "1.0.1",
      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.1.tgz",
      "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
      "dev": true
    },
    "@types/json-schema": {
@@ -9470,7 +9967,7 @@
      "version": "16.11.19",
      "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-16.11.19.tgz",
      "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==",
      "dev": true
      "devOptional": true
    },
    "@types/svgo": {
      "version": "2.6.1",
@@ -10227,9 +10724,9 @@
      }
    },
    "chokidar": {
      "version": "3.5.2",
      "resolved": "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.2.tgz",
      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
      "version": "3.5.3",
      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz",
      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
      "devOptional": true,
      "requires": {
        "anymatch": "~3.1.2",
@@ -10469,6 +10966,12 @@
        "shebang-command": "^2.0.0",
        "which": "^2.0.1"
      }
    },
    "crypto-js": {
      "version": "4.1.1",
      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz",
      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==",
      "dev": true
    },
    "css-select": {
      "version": "4.2.1",
@@ -10858,152 +11361,33 @@
      }
    },
    "esbuild": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.14.54.tgz",
      "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==",
      "version": "0.18.20",
      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.18.20.tgz",
      "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
      "requires": {
        "@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/android-arm": "0.18.20",
        "@esbuild/android-arm64": "0.18.20",
        "@esbuild/android-x64": "0.18.20",
        "@esbuild/darwin-arm64": "0.18.20",
        "@esbuild/darwin-x64": "0.18.20",
        "@esbuild/freebsd-arm64": "0.18.20",
        "@esbuild/freebsd-x64": "0.18.20",
        "@esbuild/linux-arm": "0.18.20",
        "@esbuild/linux-arm64": "0.18.20",
        "@esbuild/linux-ia32": "0.18.20",
        "@esbuild/linux-loong64": "0.18.20",
        "@esbuild/linux-mips64el": "0.18.20",
        "@esbuild/linux-ppc64": "0.18.20",
        "@esbuild/linux-riscv64": "0.18.20",
        "@esbuild/linux-s390x": "0.18.20",
        "@esbuild/linux-x64": "0.18.20",
        "@esbuild/netbsd-x64": "0.18.20",
        "@esbuild/openbsd-x64": "0.18.20",
        "@esbuild/sunos-x64": "0.18.20",
        "@esbuild/win32-arm64": "0.18.20",
        "@esbuild/win32-ia32": "0.18.20",
        "@esbuild/win32-x64": "0.18.20"
      }
    },
    "esbuild-android-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz",
      "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==",
      "optional": true
    },
    "esbuild-android-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz",
      "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==",
      "optional": true
    },
    "esbuild-darwin-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz",
      "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==",
      "optional": true
    },
    "esbuild-darwin-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz",
      "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==",
      "optional": true
    },
    "esbuild-freebsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz",
      "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==",
      "optional": true
    },
    "esbuild-freebsd-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz",
      "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==",
      "optional": true
    },
    "esbuild-linux-32": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz",
      "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==",
      "optional": true
    },
    "esbuild-linux-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz",
      "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==",
      "optional": true
    },
    "esbuild-linux-arm": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz",
      "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==",
      "optional": true
    },
    "esbuild-linux-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz",
      "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==",
      "optional": true
    },
    "esbuild-linux-mips64le": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz",
      "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==",
      "optional": true
    },
    "esbuild-linux-ppc64le": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz",
      "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==",
      "optional": true
    },
    "esbuild-linux-riscv64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz",
      "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==",
      "optional": true
    },
    "esbuild-linux-s390x": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz",
      "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==",
      "optional": true
    },
    "esbuild-netbsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz",
      "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==",
      "optional": true
    },
    "esbuild-openbsd-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz",
      "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==",
      "optional": true
    },
    "esbuild-sunos-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz",
      "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==",
      "optional": true
    },
    "esbuild-windows-32": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz",
      "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==",
      "optional": true
    },
    "esbuild-windows-64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz",
      "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==",
      "optional": true
    },
    "esbuild-windows-arm64": {
      "version": "0.14.54",
      "resolved": "https://registry.npmmirror.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz",
      "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==",
      "optional": true
    },
    "escalade": {
      "version": "3.1.1",
@@ -11547,9 +11931,9 @@
      "dev": true
    },
    "fast-glob": {
      "version": "3.2.10",
      "resolved": "https://registry.npmmirror.com/fast-glob/download/fast-glob-3.2.10.tgz",
      "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==",
      "version": "3.3.1",
      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.1.tgz",
      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
      "requires": {
        "@nodelib/fs.stat": "^2.0.2",
        "@nodelib/fs.walk": "^1.2.3",
@@ -11698,7 +12082,8 @@
    "function-bind": {
      "version": "1.1.1",
      "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
      "dev": true
    },
    "functional-red-black-tree": {
      "version": "1.0.1",
@@ -11797,6 +12182,7 @@
      "version": "1.0.3",
      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
      "dev": true,
      "requires": {
        "function-bind": "^1.1.1"
      }
@@ -12090,6 +12476,7 @@
      "version": "2.13.0",
      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.0.tgz",
      "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
      "dev": true,
      "requires": {
        "has": "^1.0.3"
      }
@@ -12332,6 +12719,12 @@
        "minimist": "^1.2.0"
      }
    },
    "jsonc-parser": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
      "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
      "dev": true
    },
    "jsonfile": {
      "version": "6.1.0",
      "resolved": "https://registry.nlark.com/jsonfile/download/jsonfile-6.1.0.tgz",
@@ -12396,6 +12789,12 @@
        "emojis-list": "^3.0.0",
        "json5": "^1.0.1"
      }
    },
    "local-pkg": {
      "version": "0.4.3",
      "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz",
      "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==",
      "dev": true
    },
    "locate-path": {
      "version": "2.0.0",
@@ -12599,6 +12998,26 @@
      "dev": true,
      "requires": {
        "minimist": "^1.2.5"
      }
    },
    "mlly": {
      "version": "1.4.1",
      "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.4.1.tgz",
      "integrity": "sha512-SCDs78Q2o09jiZiE2WziwVBEqXQ02XkGdUy45cbJf+BpYRIjArXRJ1Wbowxkb+NaM9DWvS3UC9GiO/6eqvQ/pg==",
      "dev": true,
      "requires": {
        "acorn": "^8.10.0",
        "pathe": "^1.1.1",
        "pkg-types": "^1.0.3",
        "ufo": "^1.3.0"
      },
      "dependencies": {
        "acorn": {
          "version": "8.10.0",
          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
          "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
          "dev": true
        }
      }
    },
    "moment": {
@@ -13094,12 +13513,19 @@
    "path-parse": {
      "version": "1.0.7",
      "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU="
      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
      "dev": true
    },
    "path-type": {
      "version": "4.0.0",
      "resolved": "https://registry.nlark.com/path-type/download/path-type-4.0.0.tgz",
      "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs=",
      "dev": true
    },
    "pathe": {
      "version": "1.1.1",
      "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz",
      "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
      "dev": true
    },
    "picocolors": {
@@ -13111,6 +13537,17 @@
      "version": "2.3.1",
      "resolved": "https://registry.npmmirror.com/picomatch/download/picomatch-2.3.1.tgz",
      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
    },
    "pkg-types": {
      "version": "1.0.3",
      "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz",
      "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
      "dev": true,
      "requires": {
        "jsonc-parser": "^3.2.0",
        "mlly": "^1.2.0",
        "pathe": "^1.1.0"
      }
    },
    "posix-character-classes": {
      "version": "0.1.1",
@@ -13392,6 +13829,7 @@
      "version": "1.22.4",
      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.4.tgz",
      "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
      "dev": true,
      "requires": {
        "is-core-module": "^2.13.0",
        "path-parse": "^1.0.7",
@@ -13439,6 +13877,7 @@
      "version": "2.68.0",
      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.68.0.tgz",
      "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==",
      "dev": true,
      "requires": {
        "fsevents": "~2.3.2"
      }
@@ -13495,6 +13934,12 @@
      "requires": {
        "compute-scroll-into-view": "^1.0.17"
      }
    },
    "scule": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/scule/-/scule-1.0.0.tgz",
      "integrity": "sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==",
      "dev": true
    },
    "semver": {
      "version": "7.3.5",
@@ -14086,6 +14531,23 @@
      "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
      "dev": true
    },
    "strip-literal": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz",
      "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==",
      "dev": true,
      "requires": {
        "acorn": "^8.10.0"
      },
      "dependencies": {
        "acorn": {
          "version": "8.10.0",
          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
          "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
          "dev": true
        }
      }
    },
    "supports-color": {
      "version": "7.2.0",
      "resolved": "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz",
@@ -14098,7 +14560,8 @@
    "supports-preserve-symlinks-flag": {
      "version": "1.0.0",
      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz",
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
      "dev": true
    },
    "svg-baker": {
      "version": "1.7.0",
@@ -14539,6 +15002,12 @@
      "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
      "dev": true
    },
    "ufo": {
      "version": "1.3.0",
      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.3.0.tgz",
      "integrity": "sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==",
      "dev": true
    },
    "unbox-primitive": {
      "version": "1.0.1",
      "resolved": "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706302651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz",
@@ -14549,6 +15018,53 @@
        "has-bigints": "^1.0.1",
        "has-symbols": "^1.0.2",
        "which-boxed-primitive": "^1.0.2"
      }
    },
    "unimport": {
      "version": "3.2.0",
      "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.2.0.tgz",
      "integrity": "sha512-9buxPxkNwxwxAlH/RfOFHxtQTUrlmBGi9Ai9HezY2yYbkoOhgJTYPI6+WqxI1EZphoM9cw1SHoCFRkXSb8/fjQ==",
      "dev": true,
      "requires": {
        "@rollup/pluginutils": "^5.0.3",
        "escape-string-regexp": "^5.0.0",
        "fast-glob": "^3.3.1",
        "local-pkg": "^0.4.3",
        "magic-string": "^0.30.3",
        "mlly": "^1.4.0",
        "pathe": "^1.1.1",
        "pkg-types": "^1.0.3",
        "scule": "^1.0.0",
        "strip-literal": "^1.3.0",
        "unplugin": "^1.4.0"
      },
      "dependencies": {
        "@rollup/pluginutils": {
          "version": "5.0.4",
          "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
          "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
          "dev": true,
          "requires": {
            "@types/estree": "^1.0.0",
            "estree-walker": "^2.0.2",
            "picomatch": "^2.3.1"
          }
        },
        "escape-string-regexp": {
          "version": "5.0.0",
          "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
          "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
          "dev": true
        },
        "magic-string": {
          "version": "0.30.3",
          "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.3.tgz",
          "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
          "dev": true,
          "requires": {
            "@jridgewell/sourcemap-codec": "^1.4.15"
          }
        }
      }
    },
    "union-value": {
@@ -14567,6 +15083,82 @@
      "version": "2.0.0",
      "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-2.0.0.tgz?cache=0&sync_timestamp=1603179967633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-2.0.0.tgz",
      "integrity": "sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc="
    },
    "unplugin": {
      "version": "1.4.0",
      "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.4.0.tgz",
      "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==",
      "dev": true,
      "requires": {
        "acorn": "^8.9.0",
        "chokidar": "^3.5.3",
        "webpack-sources": "^3.2.3",
        "webpack-virtual-modules": "^0.5.0"
      },
      "dependencies": {
        "acorn": {
          "version": "8.10.0",
          "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz",
          "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
          "dev": true
        }
      }
    },
    "unplugin-auto-import": {
      "version": "0.16.6",
      "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.16.6.tgz",
      "integrity": "sha512-M+YIITkx3C/Hg38hp8HmswP5mShUUyJOzpifv7RTlAbeFlO2Tyw0pwrogSSxnipHDPTtI8VHFBpkYkNKzYSuyA==",
      "dev": true,
      "requires": {
        "@antfu/utils": "^0.7.5",
        "@rollup/pluginutils": "^5.0.2",
        "fast-glob": "^3.3.0",
        "local-pkg": "^0.4.3",
        "magic-string": "^0.30.1",
        "minimatch": "^9.0.2",
        "unimport": "^3.0.14",
        "unplugin": "^1.3.2"
      },
      "dependencies": {
        "@rollup/pluginutils": {
          "version": "5.0.4",
          "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.4.tgz",
          "integrity": "sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==",
          "dev": true,
          "requires": {
            "@types/estree": "^1.0.0",
            "estree-walker": "^2.0.2",
            "picomatch": "^2.3.1"
          }
        },
        "brace-expansion": {
          "version": "2.0.1",
          "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
          "dev": true,
          "requires": {
            "balanced-match": "^1.0.0"
          }
        },
        "magic-string": {
          "version": "0.30.3",
          "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.3.tgz",
          "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
          "dev": true,
          "requires": {
            "@jridgewell/sourcemap-codec": "^1.4.15"
          }
        },
        "minimatch": {
          "version": "9.0.3",
          "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.3.tgz",
          "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
          "dev": true,
          "requires": {
            "brace-expansion": "^2.0.1"
          }
        }
      }
    },
    "unset-value": {
      "version": "1.0.0",
@@ -14754,15 +15346,24 @@
      }
    },
    "vite": {
      "version": "2.9.16",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-2.9.16.tgz",
      "integrity": "sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==",
      "version": "4.4.9",
      "resolved": "https://registry.npmmirror.com/vite/-/vite-4.4.9.tgz",
      "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
      "requires": {
        "esbuild": "^0.14.27",
        "esbuild": "^0.18.10",
        "fsevents": "~2.3.2",
        "postcss": "^8.4.13",
        "resolve": "^1.22.0",
        "rollup": ">=2.59.0 <2.78.0"
        "postcss": "^8.4.27",
        "rollup": "^3.27.1"
      },
      "dependencies": {
        "rollup": {
          "version": "3.28.1",
          "resolved": "https://registry.npmmirror.com/rollup/-/rollup-3.28.1.tgz",
          "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==",
          "requires": {
            "fsevents": "~2.3.2"
          }
        }
      }
    },
    "vite-plugin-cesium": {
@@ -14983,6 +15584,18 @@
        "loose-envify": "^1.0.0"
      }
    },
    "webpack-sources": {
      "version": "3.2.3",
      "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz",
      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
      "dev": true
    },
    "webpack-virtual-modules": {
      "version": "0.5.0",
      "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
      "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
      "dev": true
    },
    "which": {
      "version": "2.0.2",
      "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz",
package.json
@@ -32,6 +32,7 @@
    "vuex": "^4.0.2"
  },
  "devDependencies": {
    "@types/crypto-js": "^4.1.1",
    "@types/node": "^16.3.2",
    "@types/urlencode": "^1.1.2",
    "@typescript-eslint/eslint-plugin": "^5.8.1",
@@ -39,6 +40,7 @@
    "@vitejs/plugin-vue": "^1.2.4",
    "@vue/compiler-sfc": "^3.0.5",
    "cesium": "^1.108.0",
    "crypto-js": "^4.1.1",
    "eslint": "^7.30.0",
    "eslint-config-standard": "^16.0.3",
    "eslint-plugin-import": "^2.23.4",
src/api/http/config.ts
@@ -2,7 +2,7 @@
 * @Author: 胡思旗 931347610@qq.com
 * @Date: 2023-08-22 09:55:39
 * @LastEditors: 胡思旗 931347610@qq.com
 * @LastEditTime: 2023-08-22 14:23:46
 * @LastEditTime: 2023-08-29 14:59:18
 * @FilePath: \Cloud-API-Demo-Web\src\api\http\config.ts
 * @Description:
 *
@@ -16,7 +16,8 @@
  appLicense: 'Please enter the app license.', // You need to go to the development website to apply.
  // http
  baseURL: 'http://172.16.13.129:6789', // This url must end with "/". Example: 'http://192.168.1.1:6789/'
  // http://172.16.13.64:8100
  baseURL: 'http://172.16.13.129:8100', // This url must end with "/". Example: 'http://192.168.1.1:6789/'
  // ws://172.16.13.129:6789/api/v1/ws
  websocketURL: '', // Example: 'ws://192.168.1.1:6789/api/v1/ws'
src/api/http/request.ts
@@ -34,7 +34,7 @@
instance.interceptors.response.use(
  response => {
    console.info('URL: ' + response.config.baseURL + response.config.url, '\nData: ', response.data, '\nResponse:', response)
    if (response.data.code && response.data.code !== 0) {
    if (response.data.code && !response.data.success) {
      message.error(response.data.message)
    }
    return response
src/api/http/type.ts
@@ -22,6 +22,7 @@
 code: number;
 data: T;
 message: string;
 success:boolean;
}
export type IStatus = 'WAITING' | 'DOING' | 'SUCCESS' | 'FAILED';
src/api/manage.ts
@@ -2,13 +2,12 @@
import request, { CommonListResponse, IListWorkspaceResponse, IPage, IWorkspaceResponse } from '/@/api/http/request'
import { Device } from '/@/types/device'
const HTTP_PREFIX = '/manage/api/v1'
const HTTP_PREFIX = '/system/auth'
// login
export interface LoginBody {
 username: string,
 password: string,
 flag: number,
}
export interface BindBody {
  device_sn: string,
@@ -29,11 +28,17 @@
}
export const login = async function (body: LoginBody): Promise<IWorkspaceResponse<any>> {
  const url = `${HTTP_PREFIX}/login`
  const url = `${HTTP_PREFIX}/login/password`
  const result = await request.post(url, body)
  return result.data
}
export const loginOut = async function (): Promise<IWorkspaceResponse<any>> {
  const url = `${HTTP_PREFIX}/logout`
  const result = await request.delete(url)
  return result.data
}
// Refresh Token
export const refreshToken = async function (body: {}): Promise<IWorkspaceResponse<any>> {
  const url = `${HTTP_PREFIX}/token/refresh`
src/components/Search/Select.vue
New file
@@ -0,0 +1,31 @@
<template>
    <div>
        <a-select v-bind="$attrs" ref="select" v-model:value="value" :options="options" @change="handleChange">
          <template #suffixIcon><CaretDownOutlined class="ant-select-suffix" /></template>
        </a-select>
    </div>
</template>
<script setup lang="ts">
import { computed, defineProps, defineEmits } from 'vue'
import { CaretDownOutlined } from '@ant-design/icons-vue'
const emit = defineEmits(['update:modelValue', 'handleChange'])
type Option = {
    label: string,
    value: string
}
const props = defineProps({
  options: {
    type: Object as () => Option[],
    required: true,
  },
  modelValue: String,
})
const value = computed({
  get: () => props.modelValue,
  set: (val) => emit('update:modelValue', val),
})
const handleChange = (e: any) => {
  emit('handleChange', e)
}
</script>
src/components/common/topbar.vue
@@ -40,7 +40,7 @@
import { message } from 'ant-design-vue'
import { defineComponent, onMounted, ref } from 'vue'
import { getRoot } from '/@/root'
import { getPlatformInfo } from '/@/api/manage'
import { getPlatformInfo, loginOut } from '/@/api/manage'
import { ELocalStorageKey, ERouterName } from '/@/types'
import { UserOutlined, ExportOutlined } from '@ant-design/icons-vue'
import cloudapi from '/@/assets/icons/cloudapi.png'
@@ -80,7 +80,9 @@
  selected.value = path
}
const logout = () => {
const logout = async () => {
  const res = await loginOut()
  console.log(res, 'Res')
  localStorage.clear()
  root.$router.push(ERouterName.LOGIN)
}
src/pages/page-web/index.vue
@@ -53,14 +53,15 @@
import { login, LoginBody } from '/@/api/manage'
import { getRoot } from '/@/root'
import { ELocalStorageKey, ERouterName, EUserType } from '/@/types'
import { encrypt, decrypt } from '/@/utils/crypto'
import router from '/@/router'
const root = getRoot()
const formState: UnwrapRef<LoginBody> = reactive({
  username: 'adminPC',
  password: 'adminPC',
  flag: EUserType.Web,
  username: 'admin',
  password: 'Yes@!#$20230523',
  // flag: EUserType.Web,
})
const loginBtnDisabled = computed(() => {
@@ -68,16 +69,14 @@
})
const onSubmit = async (e: any) => {
  const result = await login(formState)
  if (result.code === 0) {
    localStorage.setItem(ELocalStorageKey.Token, result.data.access_token)
    localStorage.setItem(ELocalStorageKey.WorkspaceId, result.data.workspace_id)
    localStorage.setItem(ELocalStorageKey.Username, result.data.username)
    localStorage.setItem(ELocalStorageKey.UserId, result.data.user_id)
    localStorage.setItem(ELocalStorageKey.Flag, EUserType.Web.toString())
    root.$router.push(ERouterName.MEMBERS)
  } else {
    message.error(result.message)
  const password = encrypt(formState.password)
  const result = await login({ ...formState, password })
  if (result.success) {
    localStorage.setItem(ELocalStorageKey.Token, result.data.token)
    localStorage.setItem(ELocalStorageKey.Username, result.data.user.username)
    localStorage.setItem(ELocalStorageKey.UserInfo, result.data.user)
    console.log(root)
    root.$router.push(ERouterName.PROJECT_LIST)
  }
}
src/pages/page-web/projects/members.vue
@@ -3,8 +3,8 @@
  <div class="table flex-display flex-column">
    <a-table :columns="columns" :data-source="data.member" :pagination="paginationProp" @change="refreshData" row-key="user_id"
    :row-selection="rowSelection" :rowClassName="(record, index) => ((index % 2) === 0 ? 'table-striped' : null)" :scroll="{ x: '100%', y: 600 }">
      <template v-for="col in ['mqtt_username', 'mqtt_password']" #[col]="{ text, record }" :key="col">
        <div>
      <template v-for="col in ['organization_name', 'user_role', ]" #[col]="{ text, record }" :key="col">
        <div v-if="col == 'organization_name'">
          <a-input
            v-if="editableData[record.user_id]"
            v-model:value="editableData[record.user_id][col]"
@@ -14,6 +14,9 @@
            {{ text }}
          </template>
        </div>
        <!-- <div v-else-if="col == 'user_role'"> -->
          <!--  -->
        <!-- </div> -->
      </template>
      <template #action="{ record }">
        <div class="editable-row-operations">
@@ -25,8 +28,9 @@
              <span @click="() => delete editableData[record.user_id]" class="ml15" style="color: #e70102;"><CloseOutlined /></span>
            </a-tooltip>
          </span>
          <span v-else class="fz18 flex-align-center flex-row" style="color: #2d8cf0">
          <span v-else class="fz18 flex-align-center flex-justify-between flex-row" style="color: #2d8cf0">
            <EditOutlined @click="edit(record)" />
            <DeleteOutlined @click="del(record)" />
          </span>
        </div>
      </template>
@@ -41,29 +45,29 @@
import { IPage } from '/@/api/http/type'
import { getAllUsersInfo, updateUserInfo } from '/@/api/manage'
import { ELocalStorageKey } from '/@/types'
import { EditOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons-vue'
import { EditOutlined, DeleteOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons-vue'
export interface Member {
    user_id: string
    username: string
    user_type: string
    workspace_name: string
    organization_name: string
    project: string
    create_time: string
    mqtt_username: string
    mqtt_password: string
    user_role: string
    join_way: string
}
interface MemberData {
  member: Member[]
}
const columns = [
  { title: 'Account', dataIndex: 'username', width: 150, sorter: (a: Member, b: Member) => a.username.localeCompare(b.username), className: 'titleStyle' },
  { title: 'User Type', dataIndex: 'user_type', width: 150, className: 'titleStyle' },
  { title: 'Workspace Name', dataIndex: 'workspace_name', width: 150, className: 'titleStyle' },
  { title: 'Mqtt Username', dataIndex: 'mqtt_username', width: 150, className: 'titleStyle', slots: { customRender: 'mqtt_username' } },
  { title: 'Mqtt Password', dataIndex: 'mqtt_password', width: 150, className: 'titleStyle', slots: { customRender: 'mqtt_password' } },
  { title: 'Joined', dataIndex: 'create_time', width: 150, sorter: (a: Member, b: Member) => a.create_time.localeCompare(b.create_time), className: 'titleStyle' },
  { title: 'Action', dataIndex: 'action', width: 100, className: 'titleStyle', slots: { customRender: 'action' } },
  { title: '账号', dataIndex: 'username', width: 150, sorter: (a: Member, b: Member) => a.username.localeCompare(b.username), className: 'titleStyle' },
  { title: '人员组织名称', dataIndex: 'organization_name', sorter: (a: Member, b: Member) => a.organization_name.localeCompare(b.organization_name), width: 150, className: 'titleStyle' },
  { title: '用户角色', dataIndex: 'user_role', width: 150, className: 'titleStyle', slots: { customRender: 'user_role' } },
  { title: '所属项目', dataIndex: 'project', width: 150, className: 'titleStyle' },
  { title: '加入方式', dataIndex: 'join_way', width: 150, className: 'titleStyle', slots: { customRender: 'join_way' } },
  { title: '加入时间', dataIndex: 'create_time', width: 150, sorter: (a: Member, b: Member) => a.create_time.localeCompare(b.create_time), className: 'titleStyle' },
  { title: '操作', dataIndex: 'action', width: 70, className: 'titleStyle', slots: { customRender: 'action' } },
]
const data = reactive<MemberData>({
@@ -124,6 +128,10 @@
  editableData[record.user_id] = record
}
const del = (record: Member) => {
  console.log(record)
}
function save (record: Member) {
  delete editableData[record.user_id]
  updateUserInfo(workspaceId, record.user_id, record).then(res => {
src/pages/page-web/projects/project_list/index.vue
@@ -34,7 +34,7 @@
    width: 100%;
    .left_content {
        width: 335px;
        width: 370px;
        min-height: 100vh;
        background-color: black;
        color: $text-white-basic;
src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue
New file
@@ -0,0 +1,105 @@
<!--
 * @Author: 胡思旗 931347610@qq.com
 * @Date: 2023-08-28 15:23:47
 * @LastEditors: 胡思旗 931347610@qq.com
 * @LastEditTime: 2023-08-28 16:19:49
 * @FilePath: \Cloud-API-Demo-Web\src\pages\page-web\projects\project_list\list_page.vue\components\ProjectList.vue
 * @Description:项目列表组件
 *
 * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
-->
<template>
    <div class="project-box flex-display flex-align-center">
        <div class="project-card" v-for="item in cardList" :key="item.id">
            <div class="project-left">
                <div class="head mb10 flex-display flex-align-center flex-justify-between">
                    <div class="head-left flex-display flex-align-center">
                        <a-tag color="#87d068">进行中</a-tag>
                        <span class="head-text">5</span>
                    </div>
                    <div class="head-right">
                        <a-dropdown>
                            <dash-outlined />
                            <template #overlay>
                                <a-menu>
                                    <a-menu-item>
                                        <a href="javascript:;">编辑</a>
                                    </a-menu-item>
                                    <a-menu-item>
                                        <a href="javascript:;">归档</a>
                                    </a-menu-item>
                                    <a-menu-item>
                                        <a href="javascript:;">删除</a>
                                    </a-menu-item>
                                </a-menu>
                            </template>
                        </a-dropdown>
                    </div>
                </div>
                <div class="wrapper">
                    <div class="introduction mb10">5</div>
                    <div class="time mb5">创建时间: 2023/08/28</div>
                    <div class="manager mb5 flex-display flex-align-center">
                        <user-outlined />
                        <div class="user_name ml10">接口活</div>
                    </div>
                </div>
            </div>
            <div>
                <div class="enter">
                    <export-outlined />
                </div>
            </div>
        </div>
    </div>
</template>
<script setup lang="ts">
import { DashOutlined, UserOutlined, ExportOutlined } from '@ant-design/icons-vue'
import { defineProps } from 'vue'
import { status, projectCard } from './data'
const props = defineProps({
  cardList: {
    type: Array as () => projectCard[],
    required: true,
  },
})
</script>
<style scoped lang="scss">
.project-box {
    .project-card {
        cursor: pointer;
        width: 100%;
        min-height: 120px;
        background: #232323;
        user-select: none;
        border-bottom: 1px solid #4f4f4f;
        display: flex;
    }
    .project-left {
        padding: 16px;
        flex: 1;
        width: calc(100% - 48px);
        box-sizing: border-box;
        .head {
            .head-left {
                font-size: 16px;
            }
        }
    }
    .enter {
        background: #303030;
        width: 48px;
        display: flex;
        align-items: center;
        justify-content: center;
        color: #fff;
        height: 100%;
        cursor: pointer;
    }
}
</style>
src/pages/page-web/projects/project_list/list_page.vue/components/data.ts
New file
@@ -0,0 +1,19 @@
export enum status{
    进行中=1,
    已归档=2
}
type Menber={
    id:string
    projectId:string
    memberCallSign:string
    roleId:string
    userId:string
}
export type projectCard={
    id:string
    status:number
    name:string
    introduction:string
    create_time:string
    memberList: Array<Menber>
}
src/pages/page-web/projects/project_list/list_page.vue/data.ts
New file
@@ -0,0 +1,16 @@
export const statusOption = [
  { label: '全部状态', value: '' },
  { label: '进行中', value: '0' },
  { label: '已归档', value: '1' },
]
export const projectOption = [
  { label: '全部项目', value: '' },
  { label: '已加入', value: '0' },
  { label: '未加入', value: '1' },
]
export const sortOption = [
  { label: '创建时间倒叙', value: '' },
  { label: '创建时间正序', value: '0' },
  { label: '项目名称倒叙', value: '1' },
  { label: '项目名称正序', value: '1' },
]
src/pages/page-web/projects/project_list/list_page.vue/list.vue
@@ -1,18 +1,98 @@
<template>
    <div>
        我是列表页面
        <button @click="goDetail">列表详情</button>
  <div class="project">
    <div class="side-header">
      <div class="side-option flex-display flex-align-center flex-justify-between">
        <h2 class="title">项目列表</h2>
        <PlusCircleOutlined :style="{ fontSize: '20px' }" />
      </div>
      <div class="border-bottom"></div>
    </div>
    <div class="side-filter-warp">
      <div class="side-filter flex-display flex-align-center flex-justify-between">
        <Select :bordered="false" :options="statusOption" v-model="params.status" @handleChange="statusHandleChange" />
        <Select :bordered="false" :options="projectOption" v-model="params.project" @handleChange="projectHandleChange" />
        <Select :bordered="false" :options="sortOption" v-model="params.sort" @handleChange="sortHandleChange" />
        <MonitorOutlined :style="{ fontSize: '24px', display: 'flex', alignItems: 'center', marginRight: '12px' }" />
      </div>
    </div>
    <List />
    <!-- <button @click="goDetail">列表详情</button> -->
    </div>
</template>
<script setup lang="ts">
import { useRouter } from 'vue-router'
import { ERouterName } from '/@/types/enums'
import { statusOption, sortOption, projectOption } from './data'
import { PlusCircleOutlined, MonitorOutlined } from '@ant-design/icons-vue'
import Select from '/@/components/Search/Select.vue'
import List from './components/ProjectList.vue'
const router = useRouter()
const goDetail = () => {
  console.log(router, '==========')
  router.push({ name: ERouterName.WORKSPACE })
}
const params = reactive({
  status: '',
  project: '',
  sort: '',
})
const statusHandleChange = (e: any) => {
  console.log(e, params, '=============')
}
const projectHandleChange = (e: any) => {
  console.log(e, params, '=============')
}
const sortHandleChange = (e: any) => {
  console.log(e, params, '=============')
}
</script>
<style scoped> </style>
<style scoped lang="scss">
.project {
  .side-header {
    height: 60px;
    font-size: 16px;
    line-height: 60px;
    box-sizing: border-box;
    background-color: #232323;
    border-bottom: 1px solid #4f4f4f;
    .side-option {
      padding: 0 16px;
      padding-right: 12px;
      .title {
        color: $text-white-basic;
        font-size: 18px;
        margin: 0;
      }
    }
  }
  .side-filter-warp {
    background-color: #232323;
    padding: 10px 0;
    border-bottom: 1px solid #4f4f4f;
  }
  :deep(.ant-select-borderless .ant-select-selector) {
    background-color: #232323 !important;
    color: #fff !important;
    padding: 0 12px;
  }
  :deep(.ant-select-dropdown){
    background-color: #232323 !important;
  }
  :deep(.ant-select-item-option-selected){
    color: #1180ff !important;
    background-color: #333333 !important;
  }
  :deep(.ant-select-item.ant-select-item-option){
    color: #fff !important;
  }
  :deep(.ant-select-arrow) {
    color: #fff !important;
  }
}
</style>
src/styles/flex.style.scss
@@ -2,6 +2,12 @@
  display: flex;
}
// .border-bottom {
//   position: relative;
//   box-sizing: border-box;
//   border-bottom: 0.5px solid #444;
//   transform: scaleY(0.5);
// }
.flex-column {
  @extend .flex-display;
  flex-direction: column;
@@ -15,15 +21,19 @@
.flex-align-start {
  align-items: flex-start;
}
.flex-align-end {
  align-items: flex-end;
}
.flex-align-baseline {
  align-items: baseline;
}
.flex-align-stretch {
  align-items: stretch;
}
.flex-align-center {
  align-items: center;
}
@@ -31,15 +41,19 @@
.flex-justify-start {
  justify-content: flex-start;
}
.flex-justify-end {
  justify-content: flex-end;
}
.flex-justify-center {
  justify-content: center;
}
.flex-justify-between {
  justify-content: space-between;
}
.flex-justify-around {
  justify-content: space-around;
}
@@ -60,6 +74,7 @@
.width-100vw {
  width: 100vw;
}
.width-100 {
  width: 100%;
}
@@ -68,6 +83,7 @@
.height-100vh {
  height: 100vh;
}
.height-100 {
  height: 100%;
}
@@ -76,6 +92,7 @@
m-5 {
  margin: -5px !important;
}
.mt-5 {
  margin-top: -5px !important;
}
@@ -91,240 +108,322 @@
.mb-5 {
  margin-bottom: -5px !important;
}
.ml-5 {
  margin-left: -5px !important;
}
.mr-5 {
  margin-right: -5px !important;
}
.m0 {
  margin: 0px !important;
}
.mt0 {
  margin-top: 0px !important;
}
.mb0 {
  margin-bottom: 0px !important;
}
.ml0 {
  margin-left: 0px !important;
}
.mr0 {
  margin-right: 0px !important;
}
.m5 {
  margin: 5px !important;
}
.mt5 {
  margin-top: 5px !important;
}
.mb5 {
  margin-bottom: 5px !important;
}
.ml5 {
  margin-left: 5px !important;
}
.mr5 {
  margin-right: 5px !important;
}
.m10 {
  margin: 10px !important;
}
.mt10 {
  margin-top: 10px !important;
}
.mb5 {
  margin-bottom: 5px !important;
}
.mb10 {
  margin-bottom: 10px !important;
}
.ml10 {
  margin-left: 10px !important;
}
.mr10 {
  margin-right: 10px !important;
}
.m15 {
  margin: 15px !important;
}
.mt15 {
  margin-top: 15px !important;
}
.mb15 {
  margin-bottom: 15px !important;
}
.ml15 {
  margin-left: 15px !important;
}
.mr15 {
  margin-right: 15px !important;
}
.m20 {
  margin: 20px !important;
}
.mt20 {
  margin-top: 20px !important;
}
.mb20 {
  margin-bottom: 20px !important;
}
.ml20 {
  margin-left: 20px !important;
}
.mr20 {
  margin-right: 20px !important;
}
.m25 {
  margin: 25px !important;
}
.mt25 {
  margin-top: 25px !important;
}
.mb25 {
  margin-bottom: 25px !important;
}
.ml25 {
  margin-left: 25px !important;
}
.mr25 {
  margin-right: 25px !important;
}
.m30 {
  margin: 30px !important;
}
.mt30 {
  margin-top: 30px !important;
}
.mb30 {
  margin-bottom: 30px !important;
}
.ml30 {
  margin-left: 30px !important;
}
.ml40 {
  margin-left: 40px !important;
}
.mr30 {
  margin-right: 30px !important;
}
.m50 {
  margin: 50px !important;
}
.mt50 {
  margin-top: 50px !important;
}
.mb50 {
  margin-bottom: 50px !important;
}
.ml50 {
  margin-left: 50px !important;
}
.mr50 {
  margin-right: 50px !important;
}
// padding值
.p0 {
  padding: 0 !important;
}
.pt0 {
  padding-top: 0 !important;
}
.pr0 {
  padding-right: 0 !important;
}
.pb0 {
  padding-bottom: 0 !important;
}
.pl0 {
  padding-left: 0 !important;
}
.p5 {
  padding: 5px;
}
.pt5 {
  padding-top: 5px;
}
.pr5 {
  padding-right: 5px;
}
.pb5 {
  padding-bottom: 5px;
}
.pl5 {
  padding-left: 5px;
}
.p10 {
  padding: 10px;
}
.pt10 {
  padding-top: 10px;
}
.pr10 {
  padding-right: 10px;
}
.pb10 {
  padding-bottom: 10px;
}
.pl10 {
  padding-left: 10px;
}
.p15 {
  padding: 15px;
}
.pt15 {
  padding-top: 15px;
}
.pr15 {
  padding-right: 15px;
}
.pb15 {
  padding-bottom: 15px;
}
.pl15 {
  padding-left: 15px;
}
.p20 {
  padding: 20px;
  box-sizing: border-box;
}
.pt20 {
  padding-top: 20px;
}
.pr20 {
  padding-right: 20px;
}
.pb20 {
  padding-bottom: 20px;
}
.pl20 {
  padding-left: 20px;
}
.p30 {
  padding: 30px;
  box-sizing: border-box;
}
.pt30 {
  padding-top: 30px;
}
.pr30 {
  padding-right: 30px;
}
.pb30 {
  padding-bottom: 30px;
}
.pl30 {
  padding-left: 30px;
}
.pb50 {
  padding-bottom: 50px;
}
.pl50 {
  padding-left: 50px;
}
.pl120 {
  padding-left: 120px;
}
.pl150 {
  padding-left: 150px;
}
.pt50 {
  padding-top: 50px;
}
src/types/enums.ts
@@ -64,6 +64,7 @@
    UserId = 'user_id',
    Device = 'device',
    GatewayOnline = 'gateway_online',
    UserInfo = 'user_info',
}
export enum EPhotoType {
src/utils/crypto.ts
New file
@@ -0,0 +1,75 @@
/**
 * 工具类
 * AES加密
 * 特别注意:(1)AES加密中需要前后端共同协商一个密文(密钥),用来加密/解密的(2)偏移量。
 * yskj@!#$20230516 代表此次密文
 */
import CryptoJS from 'crypto-js'
// ECB模式
// 加密
export function encrypt (word: any, keyStr?: string) { // word, keyStr第一个参数是加密的字段名字  第二个是key值(16位)
  keyStr = keyStr || 'yskj@!#$20230516' // 密文(密钥)
  const key = CryptoJS.enc.Utf8.parse(keyStr)
  const srcs = CryptoJS.enc.Utf8.parse(word)
  const encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
  return encrypted.toString()
}
// 解密
export function decrypt (word: any, keyStr?: string) {
  keyStr = keyStr || 'yskj@!#$20230516'
  const key = CryptoJS.enc.Utf8.parse(keyStr)// Latin1 w8m31+Yy/Nw6thPsMpO5fg==
  const decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
  return CryptoJS.enc.Utf8.stringify(decrypt).toString()
}
// // CBC模式
//   // 特别注意:此次是将密文写死到函数内部,也可以当成函数的参数进行动态绑定密文,列如:
//   export function encrypt (word:any) {
//     const keyStr = 'yskj@!#$20230516' // 密钥
//     const ivStr = 'yskj@!#$20230516' // 偏移量
//     const key = CryptoJS.enc.Utf8.parse(keyStr)
//     const iv = CryptoJS.enc.Utf8.parse(ivStr)
//     const srcs = CryptoJS.enc.Utf8.parse(word)
//     const encrypted = CryptoJS.AES.encrypt(srcs, key, {
//       iv: iv,
//       mode: CryptoJS.mode.CBC,
//       padding: CryptoJS.pad.Pkcs7
//     })
//     return encrypted.toString()
//   },
//   // 解密
//   decrypt (word:any) {
//     const keyStr = 'yskj@!#$20230516'
//     const ivStr = 'yskj@!#$20230516'
//     const base64 = CryptoJS.enc.Utf8.parse(word)
//     const key = CryptoJS.enc.Utf8.parse(keyStr)
//     const iv = CryptoJS.enc.Utf8.parse(ivStr)
//     const src = CryptoJS.enc.Utf8.stringify(base64)
//     const decrypt = CryptoJS.AES.decrypt(src, key, {
//       iv,
//       mode: CryptoJS.mode.CBC,
//       padding: CryptoJS.pad.Pkcs7
//     })
//     return decrypt.toString(CryptoJS.enc.Utf8)
//   }
yarn.lock
Diff too large