commit 135696ef939b7998ed041caadd504e09a793569c Author: 宅房 Date: Fri Nov 28 17:40:40 2025 +0800 fix bugs diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..dd43167 --- /dev/null +++ b/.env.development @@ -0,0 +1,10 @@ + +#开发环境配置 +# VITE_APP_ENV = 'http://120.197.149.12:8480' +VITE_APP_ENV = 'https://2df1-223-74-180-188.ngrok-free.app' + +#接口地址 +VITE_APP_API=/api + +#页面基础路径 +VITE_APP_BASE=/ diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..9be1caf --- /dev/null +++ b/.env.production @@ -0,0 +1,15 @@ +#生产环境配置 +# VITE_APP_ENV = 'http://120.197.149.12:8480' +VITE_APP_ENV = 'https://2df1-223-74-180-188.ngrok-free.app ' + + +#接口地址 +#填写前缀 [/api] 需要用nginx进行反向代理 +#填写地址 [https://api.bladex.cn] 只需要保证接口支持跨域即可, 无需再做代理 +VITE_APP_API=/api + +#页面基础路径 +VITE_APP_BASE=/ + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..5194050 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,54 @@ +module.exports = { + 'env': { + 'browser': true, + 'es6': true, + 'node': true + }, + 'extends': 'eslint:recommended', + 'parserOptions': { + 'ecmaVersion': 2015, + 'sourceType': 'module' + }, + 'rules': { + // 缩进 + 'indent': [ + 'error', + 2 //我的是编辑器自动格式化,不是使用tabs,而是四个空格 + ], + 'linebreak-style': [ + 'error', + 'windows' + ], + // 引号 + 'quotes': [ + 1, + 'single' + ], + // 分号结尾 + 'semi': [ + 'error', + 'always' + ], + 'no-unused-vars': [2, { + // 允许声明未使用变量 + 'vars': 'local', + // 参数不检查 + 'args': 'none' + }], + // 最大空行100 + 'no-multiple-empty-lines': [0, { 'max': 100 }], + 'no-mixed-spaces-and-tabs': [0], + // 不能使用console + 'no-console': 'off', + // 未定义变量不能使用 + 'no-undef': 0, + // 一行结束后面不要有空格 + 'no-trailing-spaces': 1, + // 强制驼峰法命名 + 'camelcase': 2, + // 对象字面量项尾不能有逗号 + 'comma-dangle': [2, 'never'], + // this别名 + 'consistent-this': [2, 'that'] + } +}; \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..237c3fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist + +/tests/e2e/videos/ +/tests/e2e/screenshots/ + +# local env files +.env.local +.env.*.local + +# log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..077f2cc --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +@saber:registry=https://center.javablade.com/api/packages/blade/npm/ +//center.javablade.com/api/packages/blade/npm/:_authToken=1ab8e49ccef060a5cb8350068a89409e2db42468 \ No newline at end of file diff --git a/.nvmdrc b/.nvmdrc new file mode 100644 index 0000000..03224ad --- /dev/null +++ b/.nvmdrc @@ -0,0 +1 @@ +21.1.0 \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..93a9551 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,9 @@ +{ + "printWidth": 100, + "tabWidth": 2, + "semi": true, + "singleAttributePerLine": false, + "bracketSpacing": true, + "singleQuote": true, + "arrowParens": "avoid" +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..aaac4ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,35 @@ +BladeX商业授权许可协议 + +一、 知识产权: +BladeX系列产品知识产权归上海布雷德科技有限公司独立所有 + +二、 许可: +1. 在您完全接受并遵守本协议的基础上,本协议授予您使用BladeX的某些权利和非独占性许可。 +2. 本协议中,将本产品使用用途分为"专业版用途"和"企业版用途"。 +3. "专业版用途"定义:指个人在非团体机构中出于任何合法目的使用本产品(任何目的包括商业目的或非盈利目的)。 +4. "企业版用途"定义:指拥有合法执照的团体机构(例如公司企业、政府、学校、军队、医院、社会团体等各类组织)(不包含集团,若集团使用则需为各个子公司分别购买企业授权)出于任何合法目的使用本产品(任何目的包括商业目的或非盈利目的)。 +5. 若您不能以拥有合法执照的团体机构名义购买企业版,则视为个人名义购买,仅可行使专业版用途。在遵守此协议的前提下,后续有一次机会将企业版授权免费绑定至法人为购买人的新公司,并从专业版用途转为企业版用途。 + +三、 约束和限制: +1. 本产品只能由您为本协议许可的目的而使用,您不得透露给任何第三方; +2. 从本产品取得的任何信息、软件、产品或服务,您不得对其进行修改、改编或基于以上内容创建同种类别的衍生产品并售卖。 +3. 您不得对本产品以及与之关联的商业授权进行发布、出租、销售、分销、抵押、转让、许可或发放子许可证。 +4. 本产品商业授权版可能包含一些独立功能或特性,这些功能只有在您购买商业授权后才可以使用。在未取得商业授权的情况下,您不得使用、尝试使用或复制这些授权版独立功能。 +5. 若您的客户要求以源码方式交付软件,需缴纳企业版授权费用,否则本产品部分不得提供源码。 + +四、 不得用于非法或禁止的用途: +您在使用本产品或服务时,不得将本产品产品或服务用于任何非法用途或本协议条款、条件和声明禁止的用途。 + +五、 免责说明: +1. 本产品按"现状"授予许可,您须自行承担使用本产品的风险。BladeX团队不对此提供任何明示、暗示或任何其它形式的担保和表示。在任何情况下,对于因使用或无法使用本软件而导致的任何损失(包括但不仅限于商业利润损失、业务中断或业务信息丢失),BladeX团队无需向您或任何第三方负责,即使BladeX团队已被告知可能会造成此类损失。在任何情况下, BladeX团队均不就任何直接的、间接的、附带的、后果性的、特别的、惩戒性的和处罚性的损害赔偿承担任何责任,无论该主张是基于保证、合同、侵权(包括疏忽)或是基于其他原因作出。 +2. 本产品可能内置有第三方服务,您应自行评估使用这些第三方服务的风险,由使用此类第三方服务而产生的纠纷,全部责任由您自行承担。 +3. BladeX团队不对使用本产品构建的网站中任何信息内容以及导致的任何版权纠纷、法律争议和后果承担任何责任,全部责任由您自行承担。 +4. BladeX团队可能会经常提供产品更新或升级,但BladeX团队没有为根据本协议许可的产品提供维护或更新的责任。 +5. BladeX团队可能会按照官方制定的答疑规则为您进行答疑,但BladeX团队没有为根据本协议许可的产品提供技术支持的义务或责任。 + +六、 权利和所有权的保留: +BladeX团队保留所有未在本协议中明确授予您的所有权利。BladeX团队保留随时更新本协议的权利,并只需公示于对应产品项目的LICENSE文件,无需征得您的事先同意且无需另行通知,更新后的内容应于公示即时生效。您可以随时访问产品地址并查阅最新版许可条款,在更新生效后您继续使用本产品则被视作您已接受了新的条款。 + +七、 协议终止 +1. 您一旦开始复制、下载、安装或者使用本产品,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的许可权力同时,也受到相关的约束和限制,本协议许可范围以外的行为,将直接违反本协议并构成侵权。 +2. 一旦您违反本协议的条款,BladeX团队随时可能终止本协议、收回许可和授权,并要求您承担相应法律和经济责任。 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..74b413a --- /dev/null +++ b/build.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +echo "====================打包文件====================" +yarn build:prod +echo "====================传输文件====================" + +scp -P 22 -r ./dist/** root@192.168.0.188:/docker/nginx/web/html + +echo "====================部署完毕====================" diff --git a/index.html b/index.html new file mode 100644 index 0000000..289dd92 --- /dev/null +++ b/index.html @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + Saber企业级开发平台 + + + +
+
+
+ Saber + + + + + + + +
+
系统加载中
+
+
+ + + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..94cf448 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": [ + "src/*" + ] + } + }, + "exclude": [ + "node_modules", + "dist" + ] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6b30878 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2900 @@ +{ + "name": "saber", + "version": "4.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "saber", + "version": "4.0.1", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@saber/nf-design-base-elp": "^1.2.0", + "@smallwei/avue": "^3.4.8", + "animate.css": "^4.1.1", + "avue-plugin-ueditor": "^1.0.3", + "axios": "^0.21.1", + "crypto-js": "^4.1.1", + "dayjs": "^1.10.6", + "echarts": "^5.6.0", + "element-plus": "^2.7.3", + "js-base64": "^3.7.4", + "js-cookie": "^3.0.0", + "js-md5": "^0.7.3", + "nprogress": "^0.2.0", + "vue": "^3.4.27", + "vue-i18n": "^9.1.9", + "vue-router": "^4.3.2", + "vuex": "^4.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "@vue/compiler-sfc": "^3.4.27", + "prettier": "^2.8.7", + "sass": "^1.77.2", + "unplugin-auto-import": "^0.11.2", + "vite": "^5.2.12", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-vue-setup-extend": "^0.4.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.7", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz", + "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.7", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.7.tgz", + "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bpmn-io/diagram-js-ui": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/@bpmn-io/diagram-js-ui/-/diagram-js-ui-0.2.2.tgz", + "integrity": "sha512-IgOIxOwoqsFB2mMPdXtcbPVPjdYkZ3huW7ipowYLhg5jdRGHlBronQ+LER+lfWro6sPtzEsw7qX8D8Yq9M2S5g==", + "dependencies": { + "htm": "^3.1.1", + "preact": "^10.11.2" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.3.tgz", + "integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.4.tgz", + "integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==", + "dependencies": { + "@floating-ui/core": "^1.5.3", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@intlify/core-base": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz", + "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==", + "dependencies": { + "@intlify/devtools-if": "9.2.2", + "@intlify/message-compiler": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz", + "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==", + "dependencies": { + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz", + "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==", + "dependencies": { + "@intlify/shared": "9.2.2", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/shared": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz", + "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz", + "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2" + }, + "engines": { + "node": ">= 14" + } + }, + "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==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "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||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@saber/nf-design-base-elp": { + "version": "1.2.0", + "resolved": "https://center.javablade.com/api/packages/blade/npm/%40saber%2Fnf-design-base-elp/-/1.2.0/nf-design-base-elp-1.2.0.tgz", + "integrity": "sha512-ThpU7EpSIGP8eR3N3hRvI+0g4RU43suSRTHxc8YPBbxlgbN4I26p/cJprYSusuwQS+OZPLivMs+ciuoknCrwBw==", + "dependencies": { + "bpmn-js": "11.5.0", + "monaco-editor": "0.36.1", + "randomcolor": "^0.6.2" + } + }, + "node_modules/@smallwei/avue": { + "version": "3.4.8", + "resolved": "https://registry.npmmirror.com/@smallwei/avue/-/avue-3.4.8.tgz", + "integrity": "sha512-L617+RpqhLI+fz/+A8sqSCnLjLDMk9Q++8Z2mPcxE9Shj4+cYRzFcYota++ykuKafHClEUujdK55JgCFsrC6WA==", + "dependencies": { + "@element-plus/icons-vue": "^2.0.6", + "countup.js": "^1.9.3", + "dayjs": "^1.10.4" + }, + "peerDependencies": { + "element-plus": ">=2.2.0", + "vue": ">=3.2.0" + } + }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==" + }, + "node_modules/@types/lodash": { + "version": "4.14.202", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz", + "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "peer": true, + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==" + }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "peer": true, + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "peer": true, + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", + "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/shared": "3.4.27", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", + "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", + "dependencies": { + "@vue/compiler-core": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", + "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", + "dependencies": { + "@babel/parser": "^7.24.4", + "@vue/compiler-core": "3.4.27", + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.38", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", + "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/reactivity": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", + "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", + "dependencies": { + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", + "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", + "dependencies": { + "@vue/reactivity": "3.4.27", + "@vue/shared": "3.4.27" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", + "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", + "dependencies": { + "@vue/runtime-core": "3.4.27", + "@vue/shared": "3.4.27", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", + "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", + "dependencies": { + "@vue/compiler-ssr": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "vue": "3.4.27" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", + "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==" + }, + "node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "peer": true, + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "peer": true, + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "peer": true, + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/animate.css": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz", + "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==" + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/avue-plugin-ueditor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/avue-plugin-ueditor/-/avue-plugin-ueditor-1.0.3.tgz", + "integrity": "sha512-hly5hcS5g9d9uoSY5m6h7Kf/o8wHXKQO9LZICbbtmiEX6xYlWcH0mqL0j5rKdbUVNNcjzUThBGaDVWWzXqqxBQ==", + "dependencies": { + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^0.18.0", + "vue": "^3.2.47" + }, + "peerDependencies": { + "axios": ">=0.18.0", + "vue": ">=3.2.0" + } + }, + "node_modules/avue-plugin-ueditor/node_modules/axios": { + "version": "0.18.1", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "dependencies": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/axios/node_modules/follow-redirects": { + "version": "1.15.4", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bpmn-js": { + "version": "11.5.0", + "resolved": "https://registry.npmmirror.com/bpmn-js/-/bpmn-js-11.5.0.tgz", + "integrity": "sha512-Bdj53UvfiDtGE1wmiBmpgjl5RMLhCGV/C841dyC+t4kBHj7vApAeeHs2Qiycj390HO4B2U8UDROLT7yjdXEEUA==", + "dependencies": { + "bpmn-moddle": "^8.0.0", + "diagram-js": "^11.9.1", + "diagram-js-direct-editing": "^2.0.0", + "ids": "^1.0.0", + "inherits-browser": "^0.1.0", + "min-dash": "^4.0.0", + "min-dom": "^4.0.3", + "object-refs": "^0.3.0", + "tiny-svg": "^3.0.0" + } + }, + "node_modules/bpmn-moddle": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-8.1.0.tgz", + "integrity": "sha512-yI5OAFfYVJwViKTsTsonVfCBPtB3MlefADUORwNIxxBOMp21vnoxuxsdgUWlPH/dvAEZh/+mr8UtqOBNu8NC5Q==", + "dependencies": { + "min-dash": "^4.0.0", + "moddle": "^6.2.3", + "moddle-xml": "^10.1.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/component-event": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz", + "integrity": "sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw==" + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/countup.js": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz", + "integrity": "sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A==" + }, + "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==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, + "node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/diagram-js": { + "version": "11.13.1", + "resolved": "https://registry.npmmirror.com/diagram-js/-/diagram-js-11.13.1.tgz", + "integrity": "sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ==", + "peer": true, + "dependencies": { + "@bpmn-io/diagram-js-ui": "^0.2.2", + "clsx": "^1.2.1", + "didi": "^9.0.2", + "hammerjs": "^2.0.1", + "inherits-browser": "^0.1.0", + "min-dash": "^4.1.0", + "min-dom": "^4.1.0", + "object-refs": "^0.3.0", + "path-intersection": "^2.2.1", + "tiny-svg": "^3.0.1" + } + }, + "node_modules/diagram-js-direct-editing": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-2.1.1.tgz", + "integrity": "sha512-XuNWIpcuUMayp/MZhNRLyJT7zikSvGr8RZWNrHsDpwOIjoRgfYmmJp8WRFCIflMSBHjFg62sqLNM/nXRKrZ2qw==", + "dependencies": { + "min-dash": "^4.0.0", + "min-dom": "^4.0.2" + }, + "engines": { + "node": "*" + }, + "peerDependencies": { + "diagram-js": "*" + } + }, + "node_modules/didi": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/didi/-/didi-9.0.2.tgz", + "integrity": "sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg==" + }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "peer": true, + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "node_modules/domify": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/domify/-/domify-1.4.2.tgz", + "integrity": "sha512-m4yreHcUWHBncGVV7U+yQzc12vIlq0jMrtHZ5mW6dQMiL/7skSYNVX9wqKwOtyO9SGCgevrAFEgOCAHmamHTUA==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/element-plus": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.7.3.tgz", + "integrity": "sha512-OaqY1kQ2xzNyRFyge3fzM7jqMwux+464RBEqd+ybRV9xPiGxtgnj/sVK4iEbnKnzQIa9XK03DOIFzoToUhu1DA==", + "peer": true, + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.3", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmmirror.com/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dependencies": { + "debug": "=3.1.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htm": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz", + "integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==" + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/ids": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/ids/-/ids-1.0.5.tgz", + "integrity": "sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw==" + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/inherits-browser": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/inherits-browser/-/inherits-browser-0.1.0.tgz", + "integrity": "sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", + "peer": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "node_modules/js-base64": { + "version": "3.7.5", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-md5": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz", + "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==" + }, + "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.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "peer": true + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "peer": true + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "peer": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "peer": true + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "peer": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "peer": true + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==", + "peer": true + }, + "node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "dependencies": { + "wildcard": "^1.1.0" + } + }, + "node_modules/min-dash": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/min-dash/-/min-dash-4.1.1.tgz", + "integrity": "sha512-r+Z6vxXLSGr+otyCPx9NKPCSixw7LdfZREPTmqfd2a/d5D6w4NCdOxRJs+HyFO6v2pQkyHroGSiINWECK+OWPg==" + }, + "node_modules/min-dom": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/min-dom/-/min-dom-4.1.0.tgz", + "integrity": "sha512-1lj1EyoSwY/UmTeT/hhPiZTsq+vK9D+8FAJ/53iK5jT1otkG9rJTixSKdjmTieEvdfES+sKbbTptzaQJhnacjA==", + "dependencies": { + "component-event": "^0.2.1", + "domify": "^1.4.1", + "min-dash": "^4.0.0" + } + }, + "node_modules/mlly": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz", + "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" + } + }, + "node_modules/moddle": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/moddle/-/moddle-6.2.3.tgz", + "integrity": "sha512-bLVN+ZHL3aKnhxc19XtjUfvdJsS3EsiEJC7bT6YPD11qYmTzvsxrGgyYz1Ouof7TZuGw0lDJ1OLmEnxcpQWk3Q==", + "dependencies": { + "min-dash": "^4.0.0" + } + }, + "node_modules/moddle-xml": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/moddle-xml/-/moddle-xml-10.1.0.tgz", + "integrity": "sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg==", + "dependencies": { + "min-dash": "^4.0.0", + "moddle": "^6.0.0", + "saxen": "^8.1.2" + } + }, + "node_modules/monaco-editor": { + "version": "0.36.1", + "resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.36.1.tgz", + "integrity": "sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/object-refs": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz", + "integrity": "sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ==" + }, + "node_modules/path-intersection": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/path-intersection/-/path-intersection-2.2.1.tgz", + "integrity": "sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA==" + }, + "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.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "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/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.19.3", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.19.3.tgz", + "integrity": "sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randomcolor": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/randomcolor/-/randomcolor-0.6.2.tgz", + "integrity": "sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/sass": { + "version": "1.77.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", + "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", + "dev": true, + "peer": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/saxen": { + "version": "8.1.2", + "resolved": "https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz", + "integrity": "sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw==" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/scule": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.1.1.tgz", + "integrity": "sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==", + "dev": true + }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "peer": true, + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/snabbdom": { + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.1.tgz", + "integrity": "sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA==", + "peer": true, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==" + }, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tiny-svg": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/tiny-svg/-/tiny-svg-3.0.1.tgz", + "integrity": "sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/unimport": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz", + "integrity": "sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.12", + "local-pkg": "^0.4.3", + "magic-string": "^0.27.0", + "mlly": "^1.1.0", + "pathe": "^1.0.0", + "pkg-types": "^1.0.1", + "scule": "^1.0.0", + "strip-literal": "^1.0.0", + "unplugin": "^1.0.1" + } + }, + "node_modules/unimport/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.6.0.tgz", + "integrity": "sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.2", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.11.5", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.5.tgz", + "integrity": "sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.0", + "@rollup/pluginutils": "^5.0.2", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.7", + "unimport": "^1.0.1", + "unplugin": "^1.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/magic-string": { + "version": "0.26.7", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz", + "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz", + "integrity": "sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==", + "dev": true, + "peer": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "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 + } + } + }, + "node_modules/vite-plugin-compression": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz", + "integrity": "sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "debug": "^4.3.3", + "fs-extra": "^10.0.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-compression/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vite-plugin-compression/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/vite-plugin-vue-setup-extend": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz", + "integrity": "sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ==", + "dev": true, + "dependencies": { + "@vue/compiler-sfc": "^3.2.29", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-vue-setup-extend/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/vue": { + "version": "3.4.27", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", + "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.4.27", + "@vue/compiler-sfc": "3.4.27", + "@vue/runtime-dom": "3.4.27", + "@vue/server-renderer": "3.4.27", + "@vue/shared": "3.4.27" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-i18n": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz", + "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==", + "dependencies": { + "@intlify/core-base": "9.2.2", + "@intlify/shared": "9.2.2", + "@intlify/vue-devtools": "9.2.2", + "@vue/devtools-api": "^6.2.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz", + "integrity": "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==", + "dependencies": { + "@vue/devtools-api": "^6.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.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.6.1", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==" + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..fa63354 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "saber", + "version": "4.0.1", + "scripts": { + "dev": "vite --host", + "prod": "vite --mode production", + "build": "vite build", + "build:prod": "vite build --mode production", + "serve": "vite preview --host" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@saber/nf-design-base-elp": "^1.2.0", + "@smallwei/avue": "^3.4.8", + "animate.css": "^4.1.1", + "avue-plugin-ueditor": "^1.0.3", + "axios": "^0.21.1", + "crypto-js": "^4.1.1", + "dayjs": "^1.10.6", + "echarts": "^5.6.0", + "element-plus": "^2.7.3", + "js-base64": "^3.7.4", + "js-cookie": "^3.0.0", + "js-md5": "^0.7.3", + "nprogress": "^0.2.0", + "vue": "^3.4.27", + "vue-i18n": "^9.1.9", + "vue-router": "^4.3.2", + "vuex": "^4.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.4", + "@vue/compiler-sfc": "^3.4.27", + "prettier": "^2.8.7", + "sass": "^1.77.2", + "unplugin-auto-import": "^0.11.2", + "vite": "^5.2.12", + "vite-plugin-compression": "^0.5.1", + "vite-plugin-vue-setup-extend": "^0.4.0" + } +} diff --git a/public/css/loading.css b/public/css/loading.css new file mode 100644 index 0000000..a07c505 --- /dev/null +++ b/public/css/loading.css @@ -0,0 +1,116 @@ +.loading { + display: flex; + width: 100%; + height: 100%; + justify-content: center; + align-items: center; + flex-direction: column; + background-color: #f4f7f9 +} + +.loading .loading-wrap { + position: absolute; + top: 50%; + left: 50%; + display: flex; + -webkit-transform: translate3d(-50%, -50%, 0); + transform: translate3d(-50%, -50%, 0); + justify-content: center; + align-items: center; + flex-direction: column +} + +.loading .dots { + display: flex; + padding: 98px; + justify-content: center; + align-items: center +} + +.loading .loading-title { + display: flex; + font-weight: bold; + margin-top: 30px; + font-size: 18px; + color: rgba(0, 0, 0, .85); + justify-content: center; + align-items: center +} + + +.dot { + position: relative; + display: inline-block; + width: 40px; + height: 40px; + margin-top: 30px; + font-size: 28px; + transform: rotate(45deg); + box-sizing: border-box; + animation: antRotate 1.2s infinite linear +} + +.dot i { + position: absolute; + display: block; + width: 20px; + height: 20px; + background-color: #0065cc; + border-radius: 100%; + opacity: .3; + transform: scale(.75); + animation: antSpinMove 1s infinite linear alternate; + transform-origin: 50% 50% +} + +.dot i:nth-child(1) { + top: 0; + left: 0 +} + +.dot i:nth-child(2) { + top: 0; + right: 0; + -webkit-animation-delay: .4s; + animation-delay: .4s +} + +.dot i:nth-child(3) { + right: 0; + bottom: 0; + -webkit-animation-delay: .8s; + animation-delay: .8s +} + +.dot i:nth-child(4) { + bottom: 0; + left: 0; + -webkit-animation-delay: 1.2s; + animation-delay: 1.2s +} + +@keyframes antRotate { + to { + -webkit-transform: rotate(405deg); + transform: rotate(405deg) + } +} + +@-webkit-keyframes antRotate { + to { + -webkit-transform: rotate(405deg); + transform: rotate(405deg) + } +} + +@keyframes antSpinMove { + to { + opacity: 1 + } +} + +@-webkit-keyframes antSpinMove { + to { + opacity: 1 + } +} diff --git a/public/css/saber.css b/public/css/saber.css new file mode 100644 index 0000000..bc5c152 --- /dev/null +++ b/public/css/saber.css @@ -0,0 +1,88 @@ +html, +body, +#app { + height: 100%; + margin: 0; + padding: 0; +} + +#loader-wrapper { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 99999; + background-color: #151a26; +} + +#loader-wrapper .loader-box { + position: fixed; + left: calc(50% - 250px); + top: calc(50% - 100px); + margin: 0 auto; + width: 500px; + height: 200px; + text-align: center; + vertical-align: center; + font-weight: bold; + color: #87888E; + font-size: 35px; +} + +#loader-wrapper .loader-box > span { + opacity: 0.4; + display: inline-block; + animation: bouncingLoader 1s infinite alternate; +} + +#loader-wrapper .loader-box > span:nth-child(2) { + animation-delay: 0.1s; +} + +#loader-wrapper .loader-box > span:nth-child(3) { + animation-delay: 0.2s; +} + +#loader-wrapper .loader-box > span:nth-child(4) { + animation-delay: 0.3s; +} + +#loader-wrapper .loader-box > span:nth-child(5) { + animation-delay: 0.4s; +} + +#loader-wrapper .loader-box > span:nth-child(6) { + animation-delay: 0.5s; +} + +#loader-wrapper .loader-box > span:nth-child(7) { + animation-delay: 0.6s; +} + +@keyframes bouncingLoader { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(25px); + } + 100% { + transform: translateY(0); + } +} + +#loader-wrapper .loader-title { + font-weight: bold; + z-index: 1002; + position: absolute; + top: 50%; + margin-top: 15px; + color: #87888E; + font-size: 18px; + width: 100%; + height: 30px; + text-align: center; + opacity: 0.4; + line-height: 30px; +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000..ecd70ca Binary files /dev/null and b/public/favicon.png differ diff --git a/public/iconfont/avue/iconfont.css b/public/iconfont/avue/iconfont.css new file mode 100644 index 0000000..d957b8a --- /dev/null +++ b/public/iconfont/avue/iconfont.css @@ -0,0 +1,201 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1611236720878'); /* IE9 */ + src: url('iconfont.eot?t=1611236720878#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1611236720878') format('woff'), + url('iconfont.ttf?t=1611236720878') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1611236720878#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-zhongyingwen:before { + content: "\e61d"; +} + +.icon-caidan:before { + content: "\e891"; +} + +.icon-rizhi1:before { + content: "\e6af"; +} + +.icon-suoping:before { + content: "\e6e9"; +} + +.icon-zhuti:before { + content: "\e620"; +} + +.icon-bug:before { + content: "\e649"; +} + +.icon-weixin1:before { + content: "\e679"; +} + +.icon-qq1:before { + content: "\e609"; +} + +.icon-yanzhengma:before { + content: "\e616"; +} + +.icon-yonghu:before { + content: "\e6b3"; +} + +.icon-mima:before { + content: "\e652"; +} + +.icon-shouji:before { + content: "\e65d"; +} + +.icon-iconset0265:before { + content: "\e6a4"; +} + +.icon-dongtai:before { + content: "\e6a7"; +} + +.icon-canshu:before { + content: "\e655"; +} + +.icon-shujuzhanshi2:before { + content: "\e651"; +} + +.icon-tuichuquanping:before { + content: "\e755"; +} + +.icon-rizhi:before { + content: "\e61c"; +} + +.icon-cuowutishitubiao:before { + content: "\e6a0"; +} + +.icon-iconset0216:before { + content: "\e673"; +} + +.icon-debug:before { + content: "\e611"; +} + +.icon-quanxian:before { + content: "\e63f"; +} + +.icon-shuaxin:before { + content: "\e6ba"; +} + +.icon-quanping:before { + content: "\e615"; +} + +.icon-bofangqi-suoping:before { + content: "\e699"; +} + +.icon-navicon:before { + content: "\e84e"; +} + +.icon-yuan:before { + content: "\e657"; +} + +.icon-biaodan:before { + content: "\e715"; +} + +.icon-liuliangyunpingtaitubiao08:before { + content: "\e68f"; +} + +.icon-caidanguanli:before { + content: "\e7c0"; +} + +.icon-yonghuguanli:before { + content: "\e610"; +} + +.icon-jiaoseguanli:before { + content: "\e624"; +} + +.icon-cuowu:before { + content: "\e626"; +} + +.icon-wxbgongju:before { + content: "\e61b"; +} + +.icon-tuichu:before { + content: "\e642"; +} + +.icon-daohanglanmoshi02:before { + content: "\e623"; +} + +.icon-changyonglogo27:before { + content: "\e714"; +} + +.icon-huanyingye:before { + content: "\e60c"; +} + +.icon-iframe:before { + content: "\e74c"; +} + +.icon-msnui-360:before { + content: "\e78a"; +} + +.icon-souhu:before { + content: "\e62d"; +} + +.icon-tubiao:before { + content: "\e630"; +} + +.icon-baidu1:before { + content: "\e621"; +} + +.icon-biaoge:before { + content: "\e6b5"; +} + +.icon-qq:before { + content: "\e631"; +} + +.icon-weixin:before { + content: "\e632"; +} + diff --git a/public/iconfont/avue/iconfont.eot b/public/iconfont/avue/iconfont.eot new file mode 100644 index 0000000..05c8789 Binary files /dev/null and b/public/iconfont/avue/iconfont.eot differ diff --git a/public/iconfont/avue/iconfont.js b/public/iconfont/avue/iconfont.js new file mode 100644 index 0000000..1d83d3c --- /dev/null +++ b/public/iconfont/avue/iconfont.js @@ -0,0 +1 @@ +!function(c){var l,h,t,a,o,i,s='',z=(z=document.getElementsByTagName("script"))[z.length-1].getAttribute("data-injectcss");if(z&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function M(){o||(o=!0,t())}l=function(){var c,l,h,t;(t=document.createElement("div")).innerHTML=s,s=null,(h=t.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",c=h,(l=document.body).firstChild?(t=c,(h=l.firstChild).parentNode.insertBefore(t,h)):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(l,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),l()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(t=l,a=c.document,o=!1,(i=function(){try{a.documentElement.doScroll("left")}catch(c){return void setTimeout(i,50)}M()})(),a.onreadystatechange=function(){"complete"==a.readyState&&(a.onreadystatechange=null,M())})}(window); \ No newline at end of file diff --git a/public/iconfont/avue/iconfont.json b/public/iconfont/avue/iconfont.json new file mode 100644 index 0000000..15c7207 --- /dev/null +++ b/public/iconfont/avue/iconfont.json @@ -0,0 +1,331 @@ +{ + "id": "567566", + "name": "avue-cli", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "5779983", + "name": "中英文", + "font_class": "zhongyingwen", + "unicode": "e61d", + "unicode_decimal": 58909 + }, + { + "icon_id": "6270863", + "name": "菜单", + "font_class": "caidan", + "unicode": "e891", + "unicode_decimal": 59537 + }, + { + "icon_id": "696478", + "name": "日志", + "font_class": "rizhi1", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "3416675", + "name": "锁屏", + "font_class": "suoping", + "unicode": "e6e9", + "unicode_decimal": 59113 + }, + { + "icon_id": "6631809", + "name": "主题", + "font_class": "zhuti", + "unicode": "e620", + "unicode_decimal": 58912 + }, + { + "icon_id": "1261208", + "name": "bug", + "font_class": "bug", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "288984", + "name": "微信", + "font_class": "weixin1", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "1037628", + "name": "qq", + "font_class": "qq1", + "unicode": "e609", + "unicode_decimal": 58889 + }, + { + "icon_id": "1046777", + "name": "验证码", + "font_class": "yanzhengma", + "unicode": "e616", + "unicode_decimal": 58902 + }, + { + "icon_id": "2559431", + "name": "用户", + "font_class": "yonghu", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "2678617", + "name": "密码", + "font_class": "mima", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "2678634", + "name": "手机", + "font_class": "shouji", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "554313", + "name": "wifi路由", + "font_class": "iconset0265", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "1149090", + "name": "动态", + "font_class": "dongtai", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "3851337", + "name": "参数", + "font_class": "canshu", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "167168", + "name": "数据展示2", + "font_class": "shujuzhanshi2", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "1025135", + "name": "退出全屏", + "font_class": "tuichuquanping", + "unicode": "e755", + "unicode_decimal": 59221 + }, + { + "icon_id": "1166053", + "name": "日志", + "font_class": "rizhi", + "unicode": "e61c", + "unicode_decimal": 58908 + }, + { + "icon_id": "500861", + "name": "错误提示图标", + "font_class": "cuowutishitubiao", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "554205", + "name": "闪电", + "font_class": "iconset0216", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "1572731", + "name": "错误", + "font_class": "debug", + "unicode": "e611", + "unicode_decimal": 58897 + }, + { + "icon_id": "1305474", + "name": "权限", + "font_class": "quanxian", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "1684809", + "name": "刷新", + "font_class": "shuaxin", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "579385", + "name": "全屏", + "font_class": "quanping", + "unicode": "e615", + "unicode_decimal": 58901 + }, + { + "icon_id": "2154823", + "name": "播放器-(锁屏)_44", + "font_class": "bofangqi-suoping", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "1160830", + "name": "navicon", + "font_class": "navicon", + "unicode": "e84e", + "unicode_decimal": 59470 + }, + { + "icon_id": "1250665", + "name": "圆", + "font_class": "yuan", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "680969", + "name": "表单", + "font_class": "biaodan", + "unicode": "e715", + "unicode_decimal": 59157 + }, + { + "icon_id": "1164693", + "name": "系统管理", + "font_class": "liuliangyunpingtaitubiao08", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "1723000", + "name": "菜单管理", + "font_class": "caidanguanli", + "unicode": "e7c0", + "unicode_decimal": 59328 + }, + { + "icon_id": "2486611", + "name": "用户管理", + "font_class": "yonghuguanli", + "unicode": "e610", + "unicode_decimal": 58896 + }, + { + "icon_id": "2959039", + "name": "角色管理", + "font_class": "jiaoseguanli", + "unicode": "e624", + "unicode_decimal": 58916 + }, + { + "icon_id": "1164841", + "name": "错误", + "font_class": "cuowu", + "unicode": "e626", + "unicode_decimal": 58918 + }, + { + "icon_id": "591722", + "name": "wxb工具", + "font_class": "wxbgongju", + "unicode": "e61b", + "unicode_decimal": 58907 + }, + { + "icon_id": "804054", + "name": "退出", + "font_class": "tuichu", + "unicode": "e642", + "unicode_decimal": 58946 + }, + { + "icon_id": "1191509", + "name": "导航栏_模式02", + "font_class": "daohanglanmoshi02", + "unicode": "e623", + "unicode_decimal": 58915 + }, + { + "icon_id": "1005775", + "name": "阿里巴巴", + "font_class": "changyonglogo27", + "unicode": "e714", + "unicode_decimal": 59156 + }, + { + "icon_id": "128369", + "name": "欢迎页", + "font_class": "huanyingye", + "unicode": "e60c", + "unicode_decimal": 58892 + }, + { + "icon_id": "586924", + "name": "iframe", + "font_class": "iframe", + "unicode": "e74c", + "unicode_decimal": 59212 + }, + { + "icon_id": "700335", + "name": "360", + "font_class": "msnui-360", + "unicode": "e78a", + "unicode_decimal": 59274 + }, + { + "icon_id": "833695", + "name": "搜狐", + "font_class": "souhu", + "unicode": "e62d", + "unicode_decimal": 58925 + }, + { + "icon_id": "1114667", + "name": "图标", + "font_class": "tubiao", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "1346645", + "name": "百度1", + "font_class": "baidu1", + "unicode": "e621", + "unicode_decimal": 58913 + }, + { + "icon_id": "1789257", + "name": "表格", + "font_class": "biaoge", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "695468", + "name": "QQ", + "font_class": "qq", + "unicode": "e631", + "unicode_decimal": 58929 + }, + { + "icon_id": "851731", + "name": "微信", + "font_class": "weixin", + "unicode": "e632", + "unicode_decimal": 58930 + } + ] +} diff --git a/public/iconfont/avue/iconfont.svg b/public/iconfont/avue/iconfont.svg new file mode 100644 index 0000000..45815e9 --- /dev/null +++ b/public/iconfont/avue/iconfont.svg @@ -0,0 +1,164 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/iconfont/avue/iconfont.ttf b/public/iconfont/avue/iconfont.ttf new file mode 100644 index 0000000..9e40a79 Binary files /dev/null and b/public/iconfont/avue/iconfont.ttf differ diff --git a/public/iconfont/avue/iconfont.woff b/public/iconfont/avue/iconfont.woff new file mode 100644 index 0000000..8a88f4e Binary files /dev/null and b/public/iconfont/avue/iconfont.woff differ diff --git a/public/iconfont/avue/iconfont.woff2 b/public/iconfont/avue/iconfont.woff2 new file mode 100644 index 0000000..18195bd Binary files /dev/null and b/public/iconfont/avue/iconfont.woff2 differ diff --git a/public/iconfont/index.css b/public/iconfont/index.css new file mode 100644 index 0000000..c097181 --- /dev/null +++ b/public/iconfont/index.css @@ -0,0 +1,23 @@ + +[class^="icon-"]{ + font-family: "iconfont" !important; + /* 以下内容参照第三方图标库本身的规则 */ + font-size: 18px !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.el-menu-item [class^=icon-] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; +} +.el-submenu [class^=icon-] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; +} diff --git a/public/iconfont/saber/iconfont.css b/public/iconfont/saber/iconfont.css new file mode 100644 index 0000000..75a799a --- /dev/null +++ b/public/iconfont/saber/iconfont.css @@ -0,0 +1,345 @@ +@font-face {font-family: "iconfont"; + src: url('iconfont.eot?t=1611211499158'); /* IE9 */ + src: url('iconfont.eot?t=1611211499158#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1611211499158') format('woff'), + url('iconfont.ttf?t=1611211499158') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1611211499158#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icongitee2:before { + content: "\e6d6"; +} + +.icongithub:before { + content: "\e709"; +} + +.iconicon_wechat:before { + content: "\ebde"; +} + +.iconicon_exchange:before { + content: "\eba7"; +} + +.iconicon_ding:before { + content: "\eba8"; +} + +.iconicon_down:before { + content: "\eba9"; +} + +.iconicon_glass:before { + content: "\ebaa"; +} + +.iconicon_GPS:before { + content: "\ebab"; +} + +.iconicon_hardware_fill:before { + content: "\ebac"; +} + +.iconicon_im_more:before { + content: "\ebad"; +} + +.iconicon_group:before { + content: "\ebae"; +} + +.iconicon_horn:before { + content: "\ebaf"; +} + +.iconicon_im_face:before { + content: "\ebb0"; +} + +.iconicon_launch_page:before { + content: "\ebb1"; +} + +.iconicon_likegood:before { + content: "\ebb2"; +} + +.iconicon_index_line:before { + content: "\ebb3"; +} + +.iconicon_live:before { + content: "\ebb4"; +} + +.iconicon_link:before { + content: "\ebb5"; +} + +.iconicon_im_voice:before { + content: "\ebb6"; +} + +.iconicon_mobilephone:before { + content: "\ebb7"; +} + +.iconicon_dmail:before { + content: "\ebb8"; +} + +.iconicon_message:before { + content: "\ebb9"; +} + +.iconicon_more:before { + content: "\ebba"; +} + +.iconicon_left:before { + content: "\ebbb"; +} + +.iconicon_next_arrow:before { + content: "\ebbc"; +} + +.iconicon_notice:before { + content: "\ebbd"; +} + +.iconicon_namecard:before { + content: "\ebbe"; +} + +.iconicon_phone:before { + content: "\ebbf"; +} + +.iconicon_qq:before { + content: "\ebc0"; +} + +.iconicon_photo:before { + content: "\ebc1"; +} + +.iconicon_redpacket:before { + content: "\ebc2"; +} + +.iconicon_patriarch:before { + content: "\ebc3"; +} + +.iconicon_roundclose:before { + content: "\ebc4"; +} + +.iconicon_im_keyboard:before { + content: "\ebc5"; +} + +.iconicon_roundreduce:before { + content: "\ebc6"; +} + +.iconicon_QRcode:before { + content: "\ebc7"; +} + +.iconicon_savememo:before { + content: "\ebc8"; +} + +.iconicon_roundadd:before { + content: "\ebc9"; +} + +.iconicon_refresh:before { + content: "\ebca"; +} + +.iconicon_search:before { + content: "\ebcb"; +} + +.iconicon_scan:before { + content: "\ebcc"; +} + +.iconicon_send:before { + content: "\ebcd"; +} + +.iconicon_principal:before { + content: "\ebce"; +} + +.iconicon_scan_namecard:before { + content: "\ebcf"; +} + +.iconicon_secret:before { + content: "\ebd0"; +} + +.iconicon_share:before { + content: "\ebd1"; +} + +.iconicon_sms:before { + content: "\ebd2"; +} + +.iconicon_setting:before { + content: "\ebd3"; +} + +.iconicon_star:before { + content: "\ebd4"; +} + +.iconicon_subordinate:before { + content: "\ebd5"; +} + +.iconicon_task:before { + content: "\ebd6"; +} + +.iconicon_study:before { + content: "\ebd7"; +} + +.iconicon_work:before { + content: "\ebd8"; +} + +.iconicon_safety:before { + content: "\ebd9"; +} + +.iconicon_voipphone:before { + content: "\ebda"; +} + +.iconicon_shakehands:before { + content: "\ebdb"; +} + +.iconicon_task_done:before { + content: "\ebdc"; +} + +.iconicon_workfile_line:before { + content: "\ebdd"; +} + +.iconicon_add:before { + content: "\eb8f"; +} + +.iconicon_addmessage:before { + content: "\eb90"; +} + +.iconicon_addresslist:before { + content: "\eb91"; +} + +.iconicon_affiliations_li:before { + content: "\eb92"; +} + +.iconicon_addperson:before { + content: "\eb93"; +} + +.iconicon_boss:before { + content: "\eb94"; +} + +.iconicon_alipay_line:before { + content: "\eb95"; +} + +.iconicon_addressbook:before { + content: "\eb96"; +} + +.iconicon_at:before { + content: "\eb97"; +} + +.iconicon_airplay:before { + content: "\eb98"; +} + +.iconicon_calendar:before { + content: "\eb99"; +} + +.iconicon_attestation:before { + content: "\eb9a"; +} + +.iconicon_camera:before { + content: "\eb9b"; +} + +.iconicon_certificate_fil:before { + content: "\eb9c"; +} + +.iconicon_coinpurse_line:before { + content: "\eb9d"; +} + +.iconicon_compile:before { + content: "\eb9e"; +} + +.iconicon_details:before { + content: "\eb9f"; +} + +.iconicon_cloud_history:before { + content: "\eba0"; +} + +.iconicon_community_line:before { + content: "\eba1"; +} + +.iconicon_discovery:before { + content: "\eba2"; +} + +.iconicon_delete:before { + content: "\eba3"; +} + +.iconicon_dispose:before { + content: "\eba4"; +} + +.iconicon_doc:before { + content: "\eba5"; +} + +.iconicon_cspace:before { + content: "\eba6"; +} + diff --git a/public/iconfont/saber/iconfont.eot b/public/iconfont/saber/iconfont.eot new file mode 100644 index 0000000..e49550a Binary files /dev/null and b/public/iconfont/saber/iconfont.eot differ diff --git a/public/iconfont/saber/iconfont.js b/public/iconfont/saber/iconfont.js new file mode 100644 index 0000000..6ed8198 --- /dev/null +++ b/public/iconfont/saber/iconfont.js @@ -0,0 +1 @@ +!function(c){var o,h,s,l,i,a,m='',v=(v=document.getElementsByTagName("script"))[v.length-1].getAttribute("data-injectcss");if(v&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function t(){i||(i=!0,s())}o=function(){var c,o,h,s;(s=document.createElement("div")).innerHTML=m,m=null,(h=s.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",c=h,(o=document.body).firstChild?(s=c,(h=o.firstChild).parentNode.insertBefore(s,h)):o.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(h=function(){document.removeEventListener("DOMContentLoaded",h,!1),o()},document.addEventListener("DOMContentLoaded",h,!1)):document.attachEvent&&(s=o,l=c.document,i=!1,(a=function(){try{l.documentElement.doScroll("left")}catch(c){return void setTimeout(a,50)}t()})(),l.onreadystatechange=function(){"complete"==l.readyState&&(l.onreadystatechange=null,t())})}(window); \ No newline at end of file diff --git a/public/iconfont/saber/iconfont.json b/public/iconfont/saber/iconfont.json new file mode 100644 index 0000000..39f6ffd --- /dev/null +++ b/public/iconfont/saber/iconfont.json @@ -0,0 +1,583 @@ +{ + "id": "1066523", + "name": "saber", + "font_family": "iconfont", + "css_prefix_text": "icon", + "description": "saber图标库", + "glyphs": [ + { + "icon_id": "7396772", + "name": "gitee", + "font_class": "gitee2", + "unicode": "e6d6", + "unicode_decimal": 59094 + }, + { + "icon_id": "431779", + "name": "github", + "font_class": "github", + "unicode": "e709", + "unicode_decimal": 59145 + }, + { + "icon_id": "7766806", + "name": "icon_wechat", + "font_class": "icon_wechat", + "unicode": "ebde", + "unicode_decimal": 60382 + }, + { + "icon_id": "7766735", + "name": "icon_exchange", + "font_class": "icon_exchange", + "unicode": "eba7", + "unicode_decimal": 60327 + }, + { + "icon_id": "7766736", + "name": "icon_ding", + "font_class": "icon_ding", + "unicode": "eba8", + "unicode_decimal": 60328 + }, + { + "icon_id": "7766737", + "name": "icon_down", + "font_class": "icon_down", + "unicode": "eba9", + "unicode_decimal": 60329 + }, + { + "icon_id": "7766740", + "name": "icon_glass", + "font_class": "icon_glass", + "unicode": "ebaa", + "unicode_decimal": 60330 + }, + { + "icon_id": "7766742", + "name": "icon_GPS", + "font_class": "icon_GPS", + "unicode": "ebab", + "unicode_decimal": 60331 + }, + { + "icon_id": "7766743", + "name": "icon_hardware_fill", + "font_class": "icon_hardware_fill", + "unicode": "ebac", + "unicode_decimal": 60332 + }, + { + "icon_id": "7766745", + "name": "icon_im_more", + "font_class": "icon_im_more", + "unicode": "ebad", + "unicode_decimal": 60333 + }, + { + "icon_id": "7766747", + "name": "icon_group", + "font_class": "icon_group", + "unicode": "ebae", + "unicode_decimal": 60334 + }, + { + "icon_id": "7766748", + "name": "icon_horn", + "font_class": "icon_horn", + "unicode": "ebaf", + "unicode_decimal": 60335 + }, + { + "icon_id": "7766749", + "name": "icon_im_face", + "font_class": "icon_im_face", + "unicode": "ebb0", + "unicode_decimal": 60336 + }, + { + "icon_id": "7766752", + "name": "icon_launch_page", + "font_class": "icon_launch_page", + "unicode": "ebb1", + "unicode_decimal": 60337 + }, + { + "icon_id": "7766753", + "name": "icon_likegood", + "font_class": "icon_likegood", + "unicode": "ebb2", + "unicode_decimal": 60338 + }, + { + "icon_id": "7766754", + "name": "icon_index_line", + "font_class": "icon_index_line", + "unicode": "ebb3", + "unicode_decimal": 60339 + }, + { + "icon_id": "7766755", + "name": "icon_live", + "font_class": "icon_live", + "unicode": "ebb4", + "unicode_decimal": 60340 + }, + { + "icon_id": "7766756", + "name": "icon_link", + "font_class": "icon_link", + "unicode": "ebb5", + "unicode_decimal": 60341 + }, + { + "icon_id": "7766757", + "name": "icon_im_voice", + "font_class": "icon_im_voice", + "unicode": "ebb6", + "unicode_decimal": 60342 + }, + { + "icon_id": "7766758", + "name": "icon_mobilephone", + "font_class": "icon_mobilephone", + "unicode": "ebb7", + "unicode_decimal": 60343 + }, + { + "icon_id": "7766759", + "name": "icon_dmail", + "font_class": "icon_dmail", + "unicode": "ebb8", + "unicode_decimal": 60344 + }, + { + "icon_id": "7766760", + "name": "icon_message", + "font_class": "icon_message", + "unicode": "ebb9", + "unicode_decimal": 60345 + }, + { + "icon_id": "7766763", + "name": "icon_more", + "font_class": "icon_more", + "unicode": "ebba", + "unicode_decimal": 60346 + }, + { + "icon_id": "7766764", + "name": "icon_left", + "font_class": "icon_left", + "unicode": "ebbb", + "unicode_decimal": 60347 + }, + { + "icon_id": "7766765", + "name": "icon_next_arrow", + "font_class": "icon_next_arrow", + "unicode": "ebbc", + "unicode_decimal": 60348 + }, + { + "icon_id": "7766766", + "name": "icon_notice", + "font_class": "icon_notice", + "unicode": "ebbd", + "unicode_decimal": 60349 + }, + { + "icon_id": "7766769", + "name": "icon_namecard", + "font_class": "icon_namecard", + "unicode": "ebbe", + "unicode_decimal": 60350 + }, + { + "icon_id": "7766770", + "name": "icon_phone", + "font_class": "icon_phone", + "unicode": "ebbf", + "unicode_decimal": 60351 + }, + { + "icon_id": "7766771", + "name": "icon_qq", + "font_class": "icon_qq", + "unicode": "ebc0", + "unicode_decimal": 60352 + }, + { + "icon_id": "7766772", + "name": "icon_photo", + "font_class": "icon_photo", + "unicode": "ebc1", + "unicode_decimal": 60353 + }, + { + "icon_id": "7766774", + "name": "icon_redpacket", + "font_class": "icon_redpacket", + "unicode": "ebc2", + "unicode_decimal": 60354 + }, + { + "icon_id": "7766775", + "name": "icon_patriarch", + "font_class": "icon_patriarch", + "unicode": "ebc3", + "unicode_decimal": 60355 + }, + { + "icon_id": "7766776", + "name": "icon_roundclose", + "font_class": "icon_roundclose", + "unicode": "ebc4", + "unicode_decimal": 60356 + }, + { + "icon_id": "7766777", + "name": "icon_im_keyboard", + "font_class": "icon_im_keyboard", + "unicode": "ebc5", + "unicode_decimal": 60357 + }, + { + "icon_id": "7766778", + "name": "icon_roundreduce", + "font_class": "icon_roundreduce", + "unicode": "ebc6", + "unicode_decimal": 60358 + }, + { + "icon_id": "7766780", + "name": "icon_QRcode", + "font_class": "icon_QRcode", + "unicode": "ebc7", + "unicode_decimal": 60359 + }, + { + "icon_id": "7766781", + "name": "icon_savememo", + "font_class": "icon_savememo", + "unicode": "ebc8", + "unicode_decimal": 60360 + }, + { + "icon_id": "7766782", + "name": "icon_roundadd", + "font_class": "icon_roundadd", + "unicode": "ebc9", + "unicode_decimal": 60361 + }, + { + "icon_id": "7766783", + "name": "icon_refresh", + "font_class": "icon_refresh", + "unicode": "ebca", + "unicode_decimal": 60362 + }, + { + "icon_id": "7766784", + "name": "icon_search", + "font_class": "icon_search", + "unicode": "ebcb", + "unicode_decimal": 60363 + }, + { + "icon_id": "7766785", + "name": "icon_scan", + "font_class": "icon_scan", + "unicode": "ebcc", + "unicode_decimal": 60364 + }, + { + "icon_id": "7766786", + "name": "icon_send", + "font_class": "icon_send", + "unicode": "ebcd", + "unicode_decimal": 60365 + }, + { + "icon_id": "7766787", + "name": "icon_principal", + "font_class": "icon_principal", + "unicode": "ebce", + "unicode_decimal": 60366 + }, + { + "icon_id": "7766789", + "name": "icon_scan_namecard", + "font_class": "icon_scan_namecard", + "unicode": "ebcf", + "unicode_decimal": 60367 + }, + { + "icon_id": "7766790", + "name": "icon_secret", + "font_class": "icon_secret", + "unicode": "ebd0", + "unicode_decimal": 60368 + }, + { + "icon_id": "7766791", + "name": "icon_share", + "font_class": "icon_share", + "unicode": "ebd1", + "unicode_decimal": 60369 + }, + { + "icon_id": "7766793", + "name": "icon_sms", + "font_class": "icon_sms", + "unicode": "ebd2", + "unicode_decimal": 60370 + }, + { + "icon_id": "7766795", + "name": "icon_setting", + "font_class": "icon_setting", + "unicode": "ebd3", + "unicode_decimal": 60371 + }, + { + "icon_id": "7766798", + "name": "icon_star", + "font_class": "icon_star", + "unicode": "ebd4", + "unicode_decimal": 60372 + }, + { + "icon_id": "7766799", + "name": "icon_subordinate", + "font_class": "icon_subordinate", + "unicode": "ebd5", + "unicode_decimal": 60373 + }, + { + "icon_id": "7766800", + "name": "icon_task", + "font_class": "icon_task", + "unicode": "ebd6", + "unicode_decimal": 60374 + }, + { + "icon_id": "7766803", + "name": "icon_study", + "font_class": "icon_study", + "unicode": "ebd7", + "unicode_decimal": 60375 + }, + { + "icon_id": "7766808", + "name": "icon_work", + "font_class": "icon_work", + "unicode": "ebd8", + "unicode_decimal": 60376 + }, + { + "icon_id": "7766811", + "name": "icon_safety", + "font_class": "icon_safety", + "unicode": "ebd9", + "unicode_decimal": 60377 + }, + { + "icon_id": "7766813", + "name": "icon_voipphone", + "font_class": "icon_voipphone", + "unicode": "ebda", + "unicode_decimal": 60378 + }, + { + "icon_id": "7766815", + "name": "icon_shakehands", + "font_class": "icon_shakehands", + "unicode": "ebdb", + "unicode_decimal": 60379 + }, + { + "icon_id": "7766817", + "name": "icon_task_done", + "font_class": "icon_task_done", + "unicode": "ebdc", + "unicode_decimal": 60380 + }, + { + "icon_id": "7766820", + "name": "icon_workfile_line", + "font_class": "icon_workfile_line", + "unicode": "ebdd", + "unicode_decimal": 60381 + }, + { + "icon_id": "7766709", + "name": "icon_add", + "font_class": "icon_add", + "unicode": "eb8f", + "unicode_decimal": 60303 + }, + { + "icon_id": "7766710", + "name": "icon_addmessage", + "font_class": "icon_addmessage", + "unicode": "eb90", + "unicode_decimal": 60304 + }, + { + "icon_id": "7766711", + "name": "icon_addresslist", + "font_class": "icon_addresslist", + "unicode": "eb91", + "unicode_decimal": 60305 + }, + { + "icon_id": "7766712", + "name": "icon_affiliations_li", + "font_class": "icon_affiliations_li", + "unicode": "eb92", + "unicode_decimal": 60306 + }, + { + "icon_id": "7766713", + "name": "icon_addperson", + "font_class": "icon_addperson", + "unicode": "eb93", + "unicode_decimal": 60307 + }, + { + "icon_id": "7766714", + "name": "icon_boss", + "font_class": "icon_boss", + "unicode": "eb94", + "unicode_decimal": 60308 + }, + { + "icon_id": "7766715", + "name": "icon_alipay_line", + "font_class": "icon_alipay_line", + "unicode": "eb95", + "unicode_decimal": 60309 + }, + { + "icon_id": "7766716", + "name": "icon_addressbook", + "font_class": "icon_addressbook", + "unicode": "eb96", + "unicode_decimal": 60310 + }, + { + "icon_id": "7766717", + "name": "icon_at", + "font_class": "icon_at", + "unicode": "eb97", + "unicode_decimal": 60311 + }, + { + "icon_id": "7766718", + "name": "icon_airplay", + "font_class": "icon_airplay", + "unicode": "eb98", + "unicode_decimal": 60312 + }, + { + "icon_id": "7766719", + "name": "icon_calendar", + "font_class": "icon_calendar", + "unicode": "eb99", + "unicode_decimal": 60313 + }, + { + "icon_id": "7766720", + "name": "icon_attestation", + "font_class": "icon_attestation", + "unicode": "eb9a", + "unicode_decimal": 60314 + }, + { + "icon_id": "7766721", + "name": "icon_camera", + "font_class": "icon_camera", + "unicode": "eb9b", + "unicode_decimal": 60315 + }, + { + "icon_id": "7766722", + "name": "icon_certificate_fil", + "font_class": "icon_certificate_fil", + "unicode": "eb9c", + "unicode_decimal": 60316 + }, + { + "icon_id": "7766723", + "name": "icon_coinpurse_line", + "font_class": "icon_coinpurse_line", + "unicode": "eb9d", + "unicode_decimal": 60317 + }, + { + "icon_id": "7766725", + "name": "icon_compile", + "font_class": "icon_compile", + "unicode": "eb9e", + "unicode_decimal": 60318 + }, + { + "icon_id": "7766726", + "name": "icon_details", + "font_class": "icon_details", + "unicode": "eb9f", + "unicode_decimal": 60319 + }, + { + "icon_id": "7766728", + "name": "icon_cloud_history", + "font_class": "icon_cloud_history", + "unicode": "eba0", + "unicode_decimal": 60320 + }, + { + "icon_id": "7766729", + "name": "icon_community_line", + "font_class": "icon_community_line", + "unicode": "eba1", + "unicode_decimal": 60321 + }, + { + "icon_id": "7766730", + "name": "icon_discovery", + "font_class": "icon_discovery", + "unicode": "eba2", + "unicode_decimal": 60322 + }, + { + "icon_id": "7766731", + "name": "icon_delete", + "font_class": "icon_delete", + "unicode": "eba3", + "unicode_decimal": 60323 + }, + { + "icon_id": "7766732", + "name": "icon_dispose", + "font_class": "icon_dispose", + "unicode": "eba4", + "unicode_decimal": 60324 + }, + { + "icon_id": "7766733", + "name": "icon_doc", + "font_class": "icon_doc", + "unicode": "eba5", + "unicode_decimal": 60325 + }, + { + "icon_id": "7766734", + "name": "icon_cspace", + "font_class": "icon_cspace", + "unicode": "eba6", + "unicode_decimal": 60326 + } + ] +} diff --git a/public/iconfont/saber/iconfont.svg b/public/iconfont/saber/iconfont.svg new file mode 100644 index 0000000..f96dc36 --- /dev/null +++ b/public/iconfont/saber/iconfont.svg @@ -0,0 +1,272 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/iconfont/saber/iconfont.ttf b/public/iconfont/saber/iconfont.ttf new file mode 100644 index 0000000..4a0beab Binary files /dev/null and b/public/iconfont/saber/iconfont.ttf differ diff --git a/public/iconfont/saber/iconfont.woff b/public/iconfont/saber/iconfont.woff new file mode 100644 index 0000000..3119113 Binary files /dev/null and b/public/iconfont/saber/iconfont.woff differ diff --git a/public/iconfont/saber/iconfont.woff2 b/public/iconfont/saber/iconfont.woff2 new file mode 100644 index 0000000..a391ec4 Binary files /dev/null and b/public/iconfont/saber/iconfont.woff2 differ diff --git a/public/img/403.svg b/public/img/403.svg new file mode 100644 index 0000000..610f136 --- /dev/null +++ b/public/img/403.svg @@ -0,0 +1,508 @@ + + + + Group 9 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/404.svg b/public/img/404.svg new file mode 100644 index 0000000..5531d05 --- /dev/null +++ b/public/img/404.svg @@ -0,0 +1,314 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/500.svg b/public/img/500.svg new file mode 100644 index 0000000..de723b1 --- /dev/null +++ b/public/img/500.svg @@ -0,0 +1,208 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/bg.jpg b/public/img/bg.jpg new file mode 100644 index 0000000..18a3394 Binary files /dev/null and b/public/img/bg.jpg differ diff --git a/public/img/bg/403.svg b/public/img/bg/403.svg new file mode 100644 index 0000000..610f136 --- /dev/null +++ b/public/img/bg/403.svg @@ -0,0 +1,508 @@ + + + + Group 9 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/bg/404.svg b/public/img/bg/404.svg new file mode 100644 index 0000000..5531d05 --- /dev/null +++ b/public/img/bg/404.svg @@ -0,0 +1,314 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/bg/500.svg b/public/img/bg/500.svg new file mode 100644 index 0000000..de723b1 --- /dev/null +++ b/public/img/bg/500.svg @@ -0,0 +1,208 @@ + + + + Group 4 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/img/bg/bg.jpg b/public/img/bg/bg.jpg new file mode 100644 index 0000000..e591ee4 Binary files /dev/null and b/public/img/bg/bg.jpg differ diff --git a/public/img/bg/bg1.jpg b/public/img/bg/bg1.jpg new file mode 100644 index 0000000..c13e5c9 Binary files /dev/null and b/public/img/bg/bg1.jpg differ diff --git a/public/img/bg/bg2.jpg b/public/img/bg/bg2.jpg new file mode 100644 index 0000000..a16b980 Binary files /dev/null and b/public/img/bg/bg2.jpg differ diff --git a/public/img/bg/bg3.jpg b/public/img/bg/bg3.jpg new file mode 100644 index 0000000..b72458d Binary files /dev/null and b/public/img/bg/bg3.jpg differ diff --git a/public/img/bg/bg4.jpg b/public/img/bg/bg4.jpg new file mode 100644 index 0000000..5b5248a Binary files /dev/null and b/public/img/bg/bg4.jpg differ diff --git a/public/img/bg/bg5.jpg b/public/img/bg/bg5.jpg new file mode 100644 index 0000000..7f08086 Binary files /dev/null and b/public/img/bg/bg5.jpg differ diff --git a/public/img/bg/cloud.jpg b/public/img/bg/cloud.jpg new file mode 100644 index 0000000..151a000 Binary files /dev/null and b/public/img/bg/cloud.jpg differ diff --git a/public/img/bg/img-logo.png b/public/img/bg/img-logo.png new file mode 100644 index 0000000..9a6b2a4 Binary files /dev/null and b/public/img/bg/img-logo.png differ diff --git a/public/img/bg/login.png b/public/img/bg/login.png new file mode 100644 index 0000000..eb92779 Binary files /dev/null and b/public/img/bg/login.png differ diff --git a/public/img/bg/logo.png b/public/img/bg/logo.png new file mode 100644 index 0000000..b3e40cc Binary files /dev/null and b/public/img/bg/logo.png differ diff --git a/public/img/bg/star-squashed.jpg b/public/img/bg/star-squashed.jpg new file mode 100644 index 0000000..2176e39 Binary files /dev/null and b/public/img/bg/star-squashed.jpg differ diff --git a/public/img/bg/vip1.png b/public/img/bg/vip1.png new file mode 100644 index 0000000..babbf10 Binary files /dev/null and b/public/img/bg/vip1.png differ diff --git a/public/img/bg/vip2.png b/public/img/bg/vip2.png new file mode 100644 index 0000000..3071122 Binary files /dev/null and b/public/img/bg/vip2.png differ diff --git a/public/img/bg/vip3.png b/public/img/bg/vip3.png new file mode 100644 index 0000000..256f837 Binary files /dev/null and b/public/img/bg/vip3.png differ diff --git a/public/img/bg/vip4.png b/public/img/bg/vip4.png new file mode 100644 index 0000000..3ece581 Binary files /dev/null and b/public/img/bg/vip4.png differ diff --git a/public/img/bg1.jpg b/public/img/bg1.jpg new file mode 100644 index 0000000..c13e5c9 Binary files /dev/null and b/public/img/bg1.jpg differ diff --git a/public/img/bg2.jpg b/public/img/bg2.jpg new file mode 100644 index 0000000..a16b980 Binary files /dev/null and b/public/img/bg2.jpg differ diff --git a/public/img/bg3.jpg b/public/img/bg3.jpg new file mode 100644 index 0000000..b72458d Binary files /dev/null and b/public/img/bg3.jpg differ diff --git a/public/img/bg4.jpg b/public/img/bg4.jpg new file mode 100644 index 0000000..5b5248a Binary files /dev/null and b/public/img/bg4.jpg differ diff --git a/public/img/login-bg.svg b/public/img/login-bg.svg new file mode 100644 index 0000000..a637a49 --- /dev/null +++ b/public/img/login-bg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/img/logo.png b/public/img/logo.png new file mode 100644 index 0000000..b3e40cc Binary files /dev/null and b/public/img/logo.png differ diff --git a/public/img/star-squashed.jpg b/public/img/star-squashed.jpg new file mode 100644 index 0000000..2176e39 Binary files /dev/null and b/public/img/star-squashed.jpg differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..65adfd5 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/src/api/common.js b/src/api/common.js new file mode 100644 index 0000000..4851b67 --- /dev/null +++ b/src/api/common.js @@ -0,0 +1,15 @@ +import request from '@/axios'; + +/** + * 文件流返回 + * @param url 接口地址 + * @param params 接口参数 + */ +export const exportBlob = (url, params) => { + return request({ + url: url, + params: params, + method: 'get', + responseType: 'blob', + }); +}; diff --git a/src/api/desk/notice.js b/src/api/desk/notice.js new file mode 100644 index 0000000..708da65 --- /dev/null +++ b/src/api/desk/notice.js @@ -0,0 +1,59 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-desk/notice/list', + method: 'get', + params: { + ...params, + current, + size, + }, + cryptoToken: false, + cryptoData: false, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-desk/notice/remove', + method: 'post', + params: { + ids, + }, + cryptoToken: false, + cryptoData: false, + }); +}; + +export const add = row => { + return request({ + url: '/blade-desk/notice/submit', + method: 'post', + data: row, + cryptoToken: false, + cryptoData: false, + }); +}; + +export const update = row => { + return request({ + url: '/blade-desk/notice/submit', + method: 'post', + data: row, + cryptoToken: false, + cryptoData: false, + }); +}; + +export const getNotice = id => { + return request({ + url: '/blade-desk/notice/detail', + method: 'get', + params: { + id, + }, + cryptoToken: false, + cryptoData: false, + }); +}; diff --git a/src/api/export.js b/src/api/export.js new file mode 100644 index 0000000..d390263 --- /dev/null +++ b/src/api/export.js @@ -0,0 +1,12 @@ +import request from '@/api/request'; +// 上传图片 图片上传 +export const uploadImage = data => { + return request({ + url: '/blade-resource/oss/endpoint/put-file', + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); +}; diff --git a/src/api/job/jobinfo.js b/src/api/job/jobinfo.js new file mode 100644 index 0000000..bf6baf8 --- /dev/null +++ b/src/api/job/jobinfo.js @@ -0,0 +1,78 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-job/job-info/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-job/job-info/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-job/job-info/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-job/job-info/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-job/job-info/submit', + method: 'post', + data: row, + }); +}; + +export const change = row => { + return request({ + url: '/blade-job/job-info/change', + method: 'post', + params: { + id: row.id, + enable: row.enable, + }, + }); +}; + +export const run = row => { + return request({ + url: '/blade-job/job-info/run', + method: 'post', + params: { + id: row.id, + }, + }); +}; + +export const sync = row => { + return request({ + url: '/blade-job/job-info/sync', + method: 'post', + data: row, + }); +}; diff --git a/src/api/job/jobserver.js b/src/api/job/jobserver.js new file mode 100644 index 0000000..8ac8d9f --- /dev/null +++ b/src/api/job/jobserver.js @@ -0,0 +1,57 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-job/job-server/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-job/job-server/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-job/job-server/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-job/job-server/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-job/job-server/submit', + method: 'post', + data: row, + }); +}; + +export const sync = row => { + return request({ + url: '/blade-job/job-server/sync', + method: 'post', + data: row, + }); +}; diff --git a/src/api/logs.js b/src/api/logs.js new file mode 100644 index 0000000..9368365 --- /dev/null +++ b/src/api/logs.js @@ -0,0 +1,62 @@ +import request from '@/axios'; + +export const getUsualList = (current, size) => { + return request({ + url: '/blade-log/usual/list', + method: 'get', + params: { + current, + size, + }, + }); +}; + +export const getApiList = (current, size) => { + return request({ + url: '/blade-log/api/list', + method: 'get', + params: { + current, + size, + }, + }); +}; + +export const getErrorList = (current, size) => { + return request({ + url: '/blade-log/error/list', + method: 'get', + params: { + current, + size, + }, + }); +}; + +export const getUsualLogs = id => { + return request({ + url: '/blade-log/usual/detail', + method: 'get', + params: { + id, + }, + }); +}; +export const getApiLogs = id => { + return request({ + url: '/blade-log/api/detail', + method: 'get', + params: { + id, + }, + }); +}; +export const getErrorLogs = id => { + return request({ + url: '/blade-log/error/detail', + method: 'get', + params: { + id, + }, + }); +}; diff --git a/src/api/martial/competition.js b/src/api/martial/competition.js new file mode 100644 index 0000000..2c2fef2 --- /dev/null +++ b/src/api/martial/competition.js @@ -0,0 +1,257 @@ +import request from '@/router/axios'; + +// ==================== 武术赛事订单管理接口 ==================== + +/** + * 订单分页查询 + * @param {Number} current - 当前页,默认1 + * @param {Number} size - 每页条数,默认10 + * @param {Object} params - 查询参数 + */ +export const getOrderList = (current, size, params) => { + return request({ + url: '/api/blade-martial/order/list', + method: 'get', + params: { + current, + size, + ...params + } + }) +} + +/** + * 获取订单详情 + * @param {Number} id - 订单主键ID + */ +export const getOrderDetail = (id) => { + return request({ + url: '/api/blade-martial/order/detail', + method: 'get', + params: { id } + }) +} + +/** + * 新增订单 + * @param {Object} data - 订单数据 + */ +export const addOrder = (data) => { + return request({ + url: '/api/blade-martial/order/save', + method: 'post', + data + }) +} + +/** + * 修改订单 + * @param {Object} data - 订单数据 + */ +export const updateOrder = (data) => { + return request({ + url: '/api/blade-martial/order/update', + method: 'post', + data + }) +} + +/** + * 删除订单 + * @param {String} ids - 订单ID,多个用逗号分隔 + */ +export const removeOrder = (ids) => { + return request({ + url: '/api/blade-martial/order/remove', + method: 'post', + params: { ids } + }) +} + +// ==================== 赛事报名详情接口 ==================== + +/** + * 获取报名详情 + * @param {Number} id - 报名详情ID + */ +export const getRegistrationDetail = (id) => { + return request({ + url: '/api/blade-martial/registration/detail', + method: 'get', + params: { id } + }) +} + +/** + * 获取参赛人员统计 + * @param {Number} registrationId - 报名详情ID + */ +export const getParticipantList = (registrationId) => { + return request({ + url: '/api/blade-martial/participant/list', + method: 'get', + params: { registrationId } + }) +} + +/** + * 获取项目时间统计 + * @param {Number} registrationId - 报名详情ID + */ +export const getProjectTimeList = (registrationId) => { + return request({ + url: '/api/blade-martial/project-time/list', + method: 'get', + params: { registrationId } + }) +} + +/** + * 获取全额统计 + * @param {Number} registrationId - 报名详情ID + */ +export const getAmountStatsList = (registrationId) => { + return request({ + url: '/api/blade-martial/amount-stats/list', + method: 'get', + params: { registrationId } + }) +} + +// ==================== 赛事编排管理接口 ==================== + +/** + * 编排分页查询 + * @param {Number} current - 当前页 + * @param {Number} size - 每页条数 + * @param {Object} params - 查询参数 + */ +export const getScheduleList = (current, size, params) => { + return request({ + url: '/api/blade-martial/schedule/list', + method: 'get', + params: { + current, + size, + ...params + } + }) +} + +/** + * 保存编排 + * @param {Object} data - 编排数据 + */ +export const saveSchedule = (data) => { + return request({ + url: '/api/blade-martial/schedule/save', + method: 'post', + data + }) +} + +/** + * 确认完成编排 + * @param {Number} id - 编排ID + */ +export const confirmSchedule = (id) => { + return request({ + url: '/api/blade-martial/schedule/confirm', + method: 'post', + params: { id } + }) +} + +// ==================== 调度管理接口 ==================== + +/** + * 调度分页查询 + * @param {Number} current - 当前页 + * @param {Number} size - 每页条数 + * @param {Object} params - 查询参数 + */ +export const getDispatchList = (current, size, params) => { + return request({ + url: '/api/blade-martial/dispatch/list', + method: 'get', + params: { + current, + size, + ...params + } + }) +} + +/** + * 标记完赛 + * @param {Number} id - 调度ID + */ +export const markComplete = (id) => { + return request({ + url: '/api/blade-martial/dispatch/complete', + method: 'post', + params: { id } + }) +} + +/** + * 标记裁判 + * @param {Number} id - 调度ID + */ +export const markReferee = (id) => { + return request({ + url: '/api/blade-martial/dispatch/referee', + method: 'post', + params: { id } + }) +} + +// ==================== 场地管理接口 ==================== + +/** + * 场地列表查询 + * @param {Number} competitionId - 赛事ID + */ +export const getVenueList = (competitionId) => { + return request({ + url: '/api/blade-martial/venue/list', + method: 'get', + params: { competitionId } + }) +} + +/** + * 新增场地 + * @param {Object} data - 场地数据 + */ +export const addVenue = (data) => { + return request({ + url: '/api/blade-martial/venue/save', + method: 'post', + data + }) +} + +/** + * 修改场地 + * @param {Object} data - 场地数据 + */ +export const updateVenue = (data) => { + return request({ + url: '/api/blade-martial/venue/update', + method: 'post', + data + }) +} + +/** + * 删除场地 + * @param {String} ids - 场地ID,多个用逗号分隔 + */ +export const removeVenue = (ids) => { + return request({ + url: '/api/blade-martial/venue/remove', + method: 'post', + params: { ids } + }) +} diff --git a/src/api/report/report.js b/src/api/report/report.js new file mode 100644 index 0000000..3ea1ced --- /dev/null +++ b/src/api/report/report.js @@ -0,0 +1,22 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-report/report/rest/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; +export const remove = ids => { + return request({ + url: '/blade-report/report/rest/remove', + method: 'post', + params: { + ids, + }, + }); +}; diff --git a/src/api/request.js b/src/api/request.js new file mode 100644 index 0000000..b64200c --- /dev/null +++ b/src/api/request.js @@ -0,0 +1,84 @@ +import axios from 'axios'; +import { ElMessage } from 'element-plus'; +import { getToken } from 'utils/auth'; + +// 创建 axios 实例 +const service = axios.create({ + baseURL: import.meta.env.VITE_API_URL || '/api', // 从环境变量获取基础URL + timeout: 15000, // 请求超时时间 + headers: { + 'Content-Type': 'application/json;charset=utf-8', + }, +}); + +// 请求拦截器 +service.interceptors.request.use( + config => { + // 在请求发送之前做一些处理,例如添加 token + const token = getToken(); + console.log('%c [ token ]: ', 'color: #bf2c9f; background: pink; font-size: 13px;', 'token'); + if (token) { + config.headers['Authorization'] = `Bearer ${token}`; + config.headers['Blade-Auth'] = `Bearer ${token}`; + } + return config; + }, + error => { + // 处理请求错误 + console.error('请求错误:', error); + return Promise.reject(error); + } +); + +// 响应拦截器 +service.interceptors.response.use( + response => { + // 如果是导出接口,直接返回response + if (response.config.responseType === 'blob') { + return response; + } + + const res = response.data; + + // 这里可以根据后端接口规范定义响应处理逻辑 + // 例如:如果后端返回 code 不为 200,则显示错误信息 + if (res.code !== 200) { + ElMessage.error(res.message || '请求失败'); + return Promise.reject(new Error(res.message || '请求失败')); + } + + return res; + }, + error => { + console.error('响应错误:', error); + + // 处理 HTTP 错误状态 + let message = '请求失败'; + if (error.response) { + switch (error.response.status) { + case 401: + message = '未授权,请重新登录'; + // 可以在这里处理登录过期逻辑 + break; + case 403: + message = '拒绝访问'; + break; + case 404: + message = '请求错误,未找到该资源'; + break; + case 500: + message = '服务器端出错'; + break; + default: + message = `连接错误${error.response.status}`; + } + } else { + message = '网络连接异常,请稍后重试'; + } + + ElMessage.error(message); + return Promise.reject(error); + } +); + +export default service; diff --git a/src/api/resource/attach.js b/src/api/resource/attach.js new file mode 100644 index 0000000..a5954bf --- /dev/null +++ b/src/api/resource/attach.js @@ -0,0 +1,49 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-resource/attach/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-resource/attach/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-resource/attach/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-resource/attach/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-resource/attach/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/resource/oss.js b/src/api/resource/oss.js new file mode 100644 index 0000000..c126296 --- /dev/null +++ b/src/api/resource/oss.js @@ -0,0 +1,59 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-resource/oss/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-resource/oss/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-resource/oss/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-resource/oss/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-resource/oss/submit', + method: 'post', + data: row, + }); +}; + +export const enable = id => { + return request({ + url: '/blade-resource/oss/enable', + method: 'post', + params: { + id, + }, + }); +}; diff --git a/src/api/resource/sms.js b/src/api/resource/sms.js new file mode 100644 index 0000000..2433398 --- /dev/null +++ b/src/api/resource/sms.js @@ -0,0 +1,71 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-resource/sms/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-resource/sms/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-resource/sms/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-resource/sms/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-resource/sms/submit', + method: 'post', + data: row, + }); +}; + +export const enable = id => { + return request({ + url: '/blade-resource/sms/enable', + method: 'post', + params: { + id, + }, + }); +}; + +export const send = (code, phones, params) => { + return request({ + url: '/blade-resource/sms/endpoint/send-message', + method: 'post', + params: { + code, + phones, + params, + }, + }); +}; diff --git a/src/api/system/autocode/part.js b/src/api/system/autocode/part.js new file mode 100644 index 0000000..9d2dbb2 --- /dev/null +++ b/src/api/system/autocode/part.js @@ -0,0 +1,45 @@ +import request from '@/axios'; + +// 查询规则组成 +export function listPart(query) { + return request({ + url: '/system/autocode/part/list', + method: 'get', + params: query + }) +} + +// 查询规则组成详细 +export function getPart(partId) { + return request({ + url: '/system/autocode/part/' + partId, + method: 'get' + }) +} + + +// 新增规则组成 +export function addPart(data) { + return request({ + url: '/system/autocode/part', + method: 'post', + data: data + }) +} + +// 修改规则组成 +export function updatePart(data) { + return request({ + url: '/system/autocode/part', + method: 'put', + data: data + }) +} + +// 删除规则组成 +export function delPart(partIds) { + return request({ + url: '/system/autocode/part/' + partIds, + method: 'delete' + }) +} diff --git a/src/api/system/autocode/rule.js b/src/api/system/autocode/rule.js new file mode 100644 index 0000000..858c918 --- /dev/null +++ b/src/api/system/autocode/rule.js @@ -0,0 +1,98 @@ +import request from '@/axios'; + +export const getParentList = (current, size, params) => { + return request({ + url: '/system/autocode/rule/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getChildList = (current, size, ruleId, params) => { + return request({ + url: '/system/autocode/part/list', + method: 'get', + params: { + ...params, + current, + size, + ruleId: ruleId, + }, + }) +}; + +export const remove = ids => { + return request({ + url: '/system/autocode/rule/' + ids, + method: 'delete' + }) +}; + +export const add = row => { + return request({ + url: '/system/autocode/rule', + method: 'post', + data: row + }) +}; + +export const update = row => { + return request({ + url: '/system/autocode/rule', + method: 'put', + data: row + }) +}; +export function getRule(ruleId) { + return request({ + url: '/system/autocode/rule/' + ruleId, + method: 'get' + }) +}; +export const getDictTree = () => { + return request({ + url: '/blade-system/dict-biz/tree?code=DICT', + method: 'get', + }); +}; + +export const getDictionary = params => { + return request({ + url: '/blade-system/dict-biz/dictionary', + method: 'get', + params, + }); +}; + +export const removePart = ids => { + return request({ + url: '/system/autocode/part/' + ids, + method: 'delete' + }) +}; + +export const addPart = row => { + return request({ + url: '/system/autocode/part', + method: 'post', + data: row + }) +}; + +export const updatePart = row => { + return request({ + url: '/system/autocode/part', + method: 'put', + data: row + }) +}; +export function getPart(partId) { + return request({ + url: '/system/autocode/part/' + partId, + method: 'get' + }) +}; \ No newline at end of file diff --git a/src/api/system/client.js b/src/api/system/client.js new file mode 100644 index 0000000..0912288 --- /dev/null +++ b/src/api/system/client.js @@ -0,0 +1,49 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/client/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/client/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/client/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/client/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/client/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/system/dept.js b/src/api/system/dept.js new file mode 100644 index 0000000..ba96954 --- /dev/null +++ b/src/api/system/dept.js @@ -0,0 +1,80 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/dept/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getLazyList = (parentId, params) => { + return request({ + url: '/blade-system/dept/lazy-list', + method: 'get', + params: { + ...params, + parentId, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/dept/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/dept/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/dept/submit', + method: 'post', + data: row, + }); +}; + +export const getDept = id => { + return request({ + url: '/blade-system/dept/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const getDeptTree = tenantId => { + return request({ + url: '/blade-system/dept/tree', + method: 'get', + params: { + tenantId, + }, + }); +}; + +export const getDeptLazyTree = parentId => { + return request({ + url: '/blade-system/dept/lazy-tree', + method: 'get', + params: { + parentId, + }, + }); +}; diff --git a/src/api/system/dict.js b/src/api/system/dict.js new file mode 100644 index 0000000..51daacc --- /dev/null +++ b/src/api/system/dict.js @@ -0,0 +1,88 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/dict/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getParentList = (current, size, params) => { + return request({ + url: '/blade-system/dict/parent-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getChildList = (current, size, parentId, params) => { + return request({ + url: '/blade-system/dict/child-list', + method: 'get', + params: { + ...params, + current, + size, + parentId: parentId, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/dict/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/dict/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/dict/submit', + method: 'post', + data: row, + }); +}; + +export const getDict = id => { + return request({ + url: '/blade-system/dict/detail', + method: 'get', + params: { + id, + }, + }); +}; +export const getDictTree = () => { + return request({ + url: '/blade-system/dict/tree?code=DICT', + method: 'get', + }); +}; + +export const getDictionary = params => { + return request({ + url: '/blade-system/dict/dictionary', + method: 'get', + params, + }); +}; diff --git a/src/api/system/dictbiz.js b/src/api/system/dictbiz.js new file mode 100644 index 0000000..6c7ee7e --- /dev/null +++ b/src/api/system/dictbiz.js @@ -0,0 +1,88 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/dict-biz/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getParentList = (current, size, params) => { + return request({ + url: '/blade-system/dict-biz/parent-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getChildList = (current, size, parentId, params) => { + return request({ + url: '/blade-system/dict-biz/child-list', + method: 'get', + params: { + ...params, + current, + size, + parentId: parentId, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/dict-biz/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/dict-biz/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/dict-biz/submit', + method: 'post', + data: row, + }); +}; + +export const getDict = id => { + return request({ + url: '/blade-system/dict-biz/detail', + method: 'get', + params: { + id, + }, + }); +}; +export const getDictTree = () => { + return request({ + url: '/blade-system/dict-biz/tree?code=DICT', + method: 'get', + }); +}; + +export const getDictionary = params => { + return request({ + url: '/blade-system/dict-biz/dictionary', + method: 'get', + params, + }); +}; diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..7050c95 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,108 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/menu/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getLazyList = (parentId, params) => { + return request({ + url: '/blade-system/menu/lazy-list', + method: 'get', + params: { + ...params, + parentId, + }, + }); +}; + +export const getLazyMenuList = (parentId, params) => { + return request({ + url: '/blade-system/menu/lazy-menu-list', + method: 'get', + params: { + ...params, + parentId, + }, + }); +}; + +export const getMenuList = (current, size, params) => { + return request({ + url: '/blade-system/menu/menu-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getMenuTree = tenantId => { + return request({ + url: '/blade-system/menu/tree', + method: 'get', + params: { + tenantId, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/menu/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/menu/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/menu/submit', + method: 'post', + data: row, + }); +}; + +export const getMenu = id => { + return request({ + url: '/blade-system/menu/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const getTopMenu = () => + request({ + url: '/blade-system/menu/top-menu', + method: 'get', + }); + +export const getRoutes = topMenuId => + request({ + url: '/blade-system/menu/routes', + method: 'get', + params: { + topMenuId, + }, + }); diff --git a/src/api/system/param.js b/src/api/system/param.js new file mode 100644 index 0000000..be23977 --- /dev/null +++ b/src/api/system/param.js @@ -0,0 +1,49 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/param/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/param/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/param/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/param/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/param/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/system/post.js b/src/api/system/post.js new file mode 100644 index 0000000..01de371 --- /dev/null +++ b/src/api/system/post.js @@ -0,0 +1,59 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/post/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getPostList = tenantId => { + return request({ + url: '/blade-system/post/select', + method: 'get', + params: { + tenantId, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/post/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/post/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/post/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/post/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/system/role.js b/src/api/system/role.js new file mode 100644 index 0000000..ef57e36 --- /dev/null +++ b/src/api/system/role.js @@ -0,0 +1,88 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/role/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; +export const grantTree = () => { + return request({ + url: '/blade-system/menu/grant-tree', + method: 'get', + }); +}; + +export const grant = (roleIds, menuIds, dataScopeIds, apiScopeIds) => { + return request({ + url: '/blade-system/role/grant', + method: 'post', + data: { + roleIds, + menuIds, + dataScopeIds, + apiScopeIds, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/role/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/role/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/role/submit', + method: 'post', + data: row, + }); +}; + +export const getRole = roleIds => { + return request({ + url: '/blade-system/menu/role-tree-keys', + method: 'get', + params: { + roleIds, + }, + }); +}; + +export const getRoleTree = tenantId => { + return request({ + url: '/blade-system/role/tree', + method: 'get', + params: { + tenantId, + }, + }); +}; + +export const getRoleTreeById = roleId => { + return request({ + url: '/blade-system/role/tree-by-id', + method: 'get', + params: { + roleId, + }, + }); +}; diff --git a/src/api/system/scope.js b/src/api/system/scope.js new file mode 100644 index 0000000..efc098f --- /dev/null +++ b/src/api/system/scope.js @@ -0,0 +1,97 @@ +import request from '@/axios'; + +export const getListDataScope = (current, size, params) => { + return request({ + url: '/blade-system/data-scope/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const removeDataScope = ids => { + return request({ + url: '/blade-system/data-scope/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const addDataScope = row => { + return request({ + url: '/blade-system/data-scope/submit', + method: 'post', + data: row, + }); +}; + +export const updateDataScope = row => { + return request({ + url: '/blade-system/data-scope/submit', + method: 'post', + data: row, + }); +}; + +export const getMenuDataScope = id => { + return request({ + url: '/blade-system/data-scope/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const getListApiScope = (current, size, params) => { + return request({ + url: '/blade-system/api-scope/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const removeApiScope = ids => { + return request({ + url: '/blade-system/api-scope/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const addApiScope = row => { + return request({ + url: '/blade-system/api-scope/submit', + method: 'post', + data: row, + }); +}; + +export const updateApiScope = row => { + return request({ + url: '/blade-system/api-scope/submit', + method: 'post', + data: row, + }); +}; + +export const getMenuApiScope = id => { + return request({ + url: '/blade-system/api-scope/detail', + method: 'get', + params: { + id, + }, + }); +}; diff --git a/src/api/system/tenant.js b/src/api/system/tenant.js new file mode 100644 index 0000000..e02d5ec --- /dev/null +++ b/src/api/system/tenant.js @@ -0,0 +1,102 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/tenant/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/tenant/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/tenant/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/tenant/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/tenant/submit', + method: 'post', + data: row, + }); +}; + +export const setting = (ids, form) => { + return request({ + url: '/blade-system/tenant/setting', + method: 'post', + params: { + ...form, + ids, + }, + }); +}; + +export const datasource = (tenantId, datasourceId) => { + return request({ + url: '/blade-system/tenant/datasource', + method: 'post', + params: { + tenantId, + datasourceId, + }, + }); +}; + +export const info = domain => { + return request({ + url: '/blade-system/tenant/info', + method: 'get', + params: { + domain, + }, + }); +}; + +export const packageInfo = tenantId => { + return request({ + url: '/blade-system/tenant/package-detail', + method: 'get', + params: { + tenantId, + }, + }); +}; + +export const packageSetting = (tenantId, packageId) => { + return request({ + url: '/blade-system/tenant/package-setting', + method: 'post', + params: { + tenantId, + packageId, + }, + }); +}; diff --git a/src/api/system/tenantpackage.js b/src/api/system/tenantpackage.js new file mode 100644 index 0000000..cf6fb1a --- /dev/null +++ b/src/api/system/tenantpackage.js @@ -0,0 +1,49 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/tenant-package/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/tenant-package/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/tenant-package/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/tenant-package/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/tenant-package/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/system/topmenu.js b/src/api/system/topmenu.js new file mode 100644 index 0000000..961fabc --- /dev/null +++ b/src/api/system/topmenu.js @@ -0,0 +1,77 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-system/topmenu/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-system/topmenu/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/topmenu/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/topmenu/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/topmenu/submit', + method: 'post', + data: row, + }); +}; + +export const grantTree = () => { + return request({ + url: '/blade-system/menu/grant-top-tree', + method: 'get', + }); +}; + +export const getTopTree = topMenuIds => { + return request({ + url: '/blade-system/menu/top-tree-keys', + method: 'get', + params: { + topMenuIds, + }, + }); +}; + +export const grant = (topMenuIds, menuIds) => { + return request({ + url: '/blade-system/topmenu/grant', + method: 'post', + data: { + topMenuIds, + menuIds, + }, + }); +}; diff --git a/src/api/system/user.js b/src/api/system/user.js new file mode 100644 index 0000000..c83a6aa --- /dev/null +++ b/src/api/system/user.js @@ -0,0 +1,130 @@ +import request from '@/axios'; + +export const getList = (current, size, params, deptId) => { + return request({ + url: '/blade-system/user/page', + method: 'get', + params: { + ...params, + current, + size, + deptId, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-system/user/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-system/user/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-system/user/update', + method: 'post', + data: row, + }); +}; + +export const updatePlatform = (userId, userType, userExt) => { + return request({ + url: '/blade-system/user/update-platform', + method: 'post', + params: { + userId, + userType, + userExt, + }, + }); +}; + +export const getUser = id => { + return request({ + url: '/blade-system/user/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const getUserPlatform = id => { + return request({ + url: '/blade-system/user/platform-detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const getUserInfo = () => { + return request({ + url: '/blade-system/user/info', + method: 'get', + }); +}; + +export const resetPassword = userIds => { + return request({ + url: '/blade-system/user/reset-password', + method: 'post', + params: { + userIds, + }, + }); +}; + +export const updatePassword = (oldPassword, newPassword, newPassword1) => { + return request({ + url: '/blade-system/user/update-password', + method: 'post', + params: { + oldPassword, + newPassword, + newPassword1, + }, + }); +}; + +export const updateInfo = row => { + return request({ + url: '/blade-system/user/update-info', + method: 'post', + data: row, + }); +}; + +export const grant = (userIds, roleIds) => { + return request({ + url: '/blade-system/user/grant', + method: 'post', + params: { + userIds, + roleIds, + }, + }); +}; + +export const unlock = userIds => { + return request({ + url: '/blade-system/user/unlock', + method: 'post', + params: { + userIds, + }, + }); +}; diff --git a/src/api/tool/code.js b/src/api/tool/code.js new file mode 100644 index 0000000..427864b --- /dev/null +++ b/src/api/tool/code.js @@ -0,0 +1,69 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-develop/code/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const build = ids => { + return request({ + url: '/blade-develop/code/gen-code', + method: 'post', + params: { + ids, + system: 'saber', + }, + }); +}; +export const remove = ids => { + return request({ + url: '/blade-develop/code/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-develop/code/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-develop/code/submit', + method: 'post', + data: row, + }); +}; + +export const copy = id => { + return request({ + url: '/blade-develop/code/copy', + method: 'post', + params: { + id, + }, + }); +}; + +export const getCode = id => { + return request({ + url: '/blade-develop/code/detail', + method: 'get', + params: { + id, + }, + }); +}; diff --git a/src/api/tool/datasource.js b/src/api/tool/datasource.js new file mode 100644 index 0000000..b1e0ea8 --- /dev/null +++ b/src/api/tool/datasource.js @@ -0,0 +1,49 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-develop/datasource/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-develop/datasource/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-develop/datasource/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-develop/datasource/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-develop/datasource/submit', + method: 'post', + data: row, + }); +}; diff --git a/src/api/tool/model.js b/src/api/tool/model.js new file mode 100644 index 0000000..65c4284 --- /dev/null +++ b/src/api/tool/model.js @@ -0,0 +1,110 @@ +import request from '@/axios'; + +export const getList = (current, size, params) => { + return request({ + url: '/blade-develop/model/list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const getDetail = id => { + return request({ + url: '/blade-develop/model/detail', + method: 'get', + params: { + id, + }, + }); +}; + +export const remove = ids => { + return request({ + url: '/blade-develop/model/remove', + method: 'post', + params: { + ids, + }, + }); +}; + +export const add = row => { + return request({ + url: '/blade-develop/model/submit', + method: 'post', + data: row, + }); +}; + +export const update = row => { + return request({ + url: '/blade-develop/model/submit', + method: 'post', + data: row, + }); +}; + +export const getTableList = datasourceId => { + return request({ + url: '/blade-develop/model/table-list', + method: 'get', + params: { + datasourceId, + }, + }); +}; + +export const getTableInfo = (modelId, datasourceId) => { + return request({ + url: '/blade-develop/model/table-info', + method: 'get', + params: { + modelId, + datasourceId, + }, + }); +}; + +export const getTableInfoByName = (tableName, datasourceId) => { + return request({ + url: '/blade-develop/model/table-info', + method: 'get', + params: { + tableName, + datasourceId, + }, + }); +}; + +export const getModelPrototype = (modelId, datasourceId) => { + return request({ + url: '/blade-develop/model/model-prototype', + method: 'get', + params: { + modelId, + datasourceId, + }, + }); +}; + +export const submitModelPrototype = row => { + return request({ + url: '/blade-develop/model-prototype/submit-list', + method: 'post', + data: row, + }); +}; + +export const prototypeDetail = modelId => { + return request({ + url: '/blade-develop/model-prototype/select', + method: 'get', + params: { + modelId, + }, + }); +}; diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..050b4aa --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,146 @@ +import request from '@/axios'; + +import website from '@/config/website'; + +export const loginByUsername = (tenantId, deptId, roleId, username, password, type, key, code) => + request({ + url: '/blade-auth/oauth/token', + method: 'post', + headers: { + 'Tenant-Id': tenantId, + 'Dept-Id': website.switchMode ? deptId : '', + 'Role-Id': website.switchMode ? roleId : '', + 'Captcha-Key': key, + 'Captcha-Code': code, + }, + params: { + tenantId, + username, + password, + grant_type: website.captchaMode ? 'captcha' : 'password', + scope: 'all', + type, + }, + }); + +export const loginBySocial = (tenantId, source, code, state) => + request({ + url: '/blade-auth/oauth/token', + method: 'post', + headers: { + 'Tenant-Id': tenantId, + }, + params: { + tenantId, + source, + code, + state, + grant_type: 'social', + scope: 'all', + }, + }); + +export const loginBySso = (state, code) => + request({ + url: '/blade-auth/oauth/token', + method: 'post', + headers: { + 'Tenant-Id': state, + }, + params: { + tenantId: state, + code, + grant_type: 'authorization_code', + scope: 'all', + redirect_uri: website.redirectUri, + }, + }); + +export const refreshToken = (refresh_token, tenantId, deptId, roleId) => + request({ + url: '/blade-auth/oauth/token', + method: 'post', + headers: { + 'Tenant-Id': tenantId, + 'Dept-Id': website.switchMode ? deptId : '', + 'Role-Id': website.switchMode ? roleId : '', + }, + params: { + tenantId, + refresh_token, + grant_type: 'refresh_token', + scope: 'all', + }, + }); + +export const registerUser = (tenantId, name, account, password, phone, email) => + request({ + url: '/blade-auth/oauth/token', + method: 'post', + headers: { + 'Tenant-Id': tenantId, + }, + params: { + name, + username: account, + account, + password, + phone, + email, + grant_type: 'register', + scope: 'all', + }, + }); + +export const registerGuest = (form, oauthId) => + request({ + url: '/blade-system/user/register-guest', + method: 'post', + params: { + tenantId: form.tenantId, + name: form.name, + account: form.account, + password: form.password, + oauthId, + }, + }); + +export const getButtons = () => + request({ + url: '/blade-system/menu/buttons', + method: 'get', + }); + +export const getCaptcha = () => + request({ + url: '/blade-auth/oauth/captcha', + method: 'get', + authorization: false, + }); + +export const logout = () => + request({ + url: '/blade-auth/oauth/logout', + method: 'get', + authorization: false, + }); + +export const getUserInfo = () => + request({ + url: '/blade-auth/oauth/user-info', + method: 'get', + }); + +export const sendLogs = list => + request({ + url: '/blade-auth/oauth/logout', + method: 'post', + data: list, + }); + +export const clearCache = () => + request({ + url: '/blade-auth/oauth/clear-cache', + method: 'get', + authorization: false, + }); diff --git a/src/api/work/process.js b/src/api/work/process.js new file mode 100644 index 0000000..4654a64 --- /dev/null +++ b/src/api/work/process.js @@ -0,0 +1,33 @@ +import request from '@/axios'; + +// =====================参数=========================== + +export const historyFlowList = processInstanceId => { + return request({ + url: '/blade-flow/process/history-flow-list', + method: 'get', + params: { + processInstanceId, + }, + }); +}; + +// =====================请假流程=========================== + +export const leaveProcess = data => { + return request({ + url: '/blade-desk/process/leave/start-process', + method: 'post', + data, + }); +}; + +export const leaveDetail = businessId => { + return request({ + url: '/blade-desk/process/leave/detail', + method: 'get', + params: { + businessId, + }, + }); +}; diff --git a/src/api/work/work.js b/src/api/work/work.js new file mode 100644 index 0000000..360e396 --- /dev/null +++ b/src/api/work/work.js @@ -0,0 +1,79 @@ +import request from '@/axios'; + +export const startList = (current, size, params) => { + return request({ + url: '/blade-flow/work/start-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const claimList = (current, size, params) => { + return request({ + url: '/blade-flow/work/claim-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const todoList = (current, size, params) => { + return request({ + url: '/blade-flow/work/todo-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const sendList = (current, size, params) => { + return request({ + url: '/blade-flow/work/send-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const doneList = (current, size, params) => { + return request({ + url: '/blade-flow/work/done-list', + method: 'get', + params: { + ...params, + current, + size, + }, + }); +}; + +export const claimTask = taskId => { + return request({ + url: '/blade-flow/work/claim-task', + method: 'post', + params: { + taskId, + }, + }); +}; + +export const completeTask = data => { + return request({ + url: '/blade-flow/work/complete-task', + method: 'post', + data, + }); +}; diff --git a/src/axios.js b/src/axios.js new file mode 100644 index 0000000..1e1f051 --- /dev/null +++ b/src/axios.js @@ -0,0 +1,130 @@ +/** + * 全站http配置 + * + * axios参数说明 + * isSerialize是否开启form表单提交 + * isToken是否需要token + */ +import axios from 'axios'; +import store from '@/store/'; +import router from '@/router/'; +import { serialize } from 'utils/util'; +import { getToken } from 'utils/auth'; +import { isURL } from 'utils/validate'; +import { ElMessage } from 'element-plus'; +import website from '@/config/website'; +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +import { Base64 } from 'js-base64'; +import { baseUrl } from '@/config/env'; +import crypto from '@/utils/crypto'; + +axios.defaults.timeout = 10000; +//返回其他状态吗 +axios.defaults.validateStatus = function (status) { + return status >= 200 && status <= 500; // 默认的 +}; +//跨域请求,允许保存cookie +axios.defaults.withCredentials = true; +// NProgress Configuration +NProgress.configure({ + showSpinner: false, +}); +//HTTPrequest拦截 +axios.interceptors.request.use( + config => { + // start progress bar + NProgress.start(); + //地址为已经配置状态则不添加前缀 + if (!isURL(config.url) && !config.url.startsWith(baseUrl)) { + console.log( + '%c [ ]: ', + 'color: #bf2c9f; background: pink; font-size: 13px;', + 'baseUrl', + baseUrl, + 'config.url', + config.url + ); + config.url = baseUrl + config.url; + } + //安全请求header + config.headers['Blade-Requested-With'] = 'BladeHttpRequest'; + //headers判断是否需要 + const authorization = config.authorization === false; + if (!authorization) { + config.headers['Authorization'] = `Basic ${Base64.encode( + `${website.clientId}:${website.clientSecret}` + )}`; + } + //headers判断请求是否携带token + const meta = config.meta || {}; + const isToken = meta.isToken === false; + //headers传递token是否加密 + const cryptoToken = config.cryptoToken === true; + //判断传递数据是否加密 + const cryptoData = config.cryptoData === true; + const token = getToken(); + if (token && !isToken) { + config.headers[website.tokenHeader] = cryptoToken + ? 'crypto ' + crypto.encryptAES(token, crypto.cryptoKey) + : 'bearer ' + token; + } + // 开启报文加密 + if (cryptoData) { + if (config.params) { + const data = crypto.encryptAES(JSON.stringify(config.params), crypto.aesKey); + config.params = { data }; + } + if (config.data) { + config.text = true; + config.data = crypto.encryptAES(JSON.stringify(config.data), crypto.aesKey); + } + } + //headers中配置text请求 + if (config.text === true) { + config.headers['Content-Type'] = 'text/plain'; + } + //headers中配置serialize为true开启序列化 + if (config.method === 'post' && meta.isSerialize === true) { + config.data = serialize(config.data); + } + return config; + }, + error => { + return Promise.reject(error); + } +); +//HTTPresponse拦截 +axios.interceptors.response.use( + res => { + NProgress.done(); + const status = res.data.code || res.status; + const statusWhiteList = website.statusWhiteList || []; + const message = res.data.msg || res.data.error_description || '系统错误'; + const config = res.config; + const cryptoData = config.cryptoData === true; + //如果在白名单里则自行catch逻辑处理 + if (statusWhiteList.includes(status)) return Promise.reject(res); + //如果是401则跳转到登录页面 + if (status === 401) store.dispatch('FedLogOut').then(() => router.push({ path: '/login' })); + // 如果请求为非200否者默认统一处理 + if (status !== 200) { + ElMessage({ + message: message, + type: 'error', + }); + return Promise.reject(new Error(message)); + } + // 解析加密报文 + if (cryptoData) { + res.data = JSON.parse(crypto.decryptAES(res.data, crypto.aesKey)); + } + return res; + }, + error => { + NProgress.done(); + return Promise.reject(new Error(error)); + } +); + +export default axios; diff --git a/src/components/basic-block/main.vue b/src/components/basic-block/main.vue new file mode 100644 index 0000000..6f69fc1 --- /dev/null +++ b/src/components/basic-block/main.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/basic-container/main.vue b/src/components/basic-container/main.vue new file mode 100644 index 0000000..e98f520 --- /dev/null +++ b/src/components/basic-container/main.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/basic-video/main.vue b/src/components/basic-video/main.vue new file mode 100644 index 0000000..6b0089f --- /dev/null +++ b/src/components/basic-video/main.vue @@ -0,0 +1,140 @@ + + + + diff --git a/src/components/basic-video/plugin.js b/src/components/basic-video/plugin.js new file mode 100644 index 0000000..a304bee --- /dev/null +++ b/src/components/basic-video/plugin.js @@ -0,0 +1,88 @@ +export default class RecordVideo { + /** + * 构造函数 + * + * @param {Object} videoObj 视频对象 + */ + constructor(videoObj) { + this.video = videoObj; + this.mediaRecorder = null; + this.chunks = []; + } + + /** + * 初始化 + * + * @return {Object} promise + */ + init() { + // 返回Promise对象 + // resolve 正常处理 + // reject 处理异常情况 + return new Promise((resovle, reject) => { + navigator.mediaDevices + .getUserMedia({ + audio: true, + video: true, + // video: { + // width: this.videoWidth, + // height: this.videoHeight + // } + }) + // 返回一个媒体内容的流 + .then(stream => { + // 检测是否支持 srcObject,该属性在新的浏览器支持 + if ('srcObject' in this.video) { + this.video.srcObject = stream; + } else { + // 兼容旧的浏览器 + this.video.src = window.URL.createObjectURL(stream); + } + + // 当视频的元数据已经加载时触发 + this.video.addEventListener('loadmetadata', () => { + this.video.play(); + }); + this.mediaRecorder = new MediaRecorder(stream); + this.mediaRecorder.addEventListener('dataavailable', e => { + this.chunks.push(e.data); + }); + resovle(); + }) + // 异常抓取,包括用于禁用麦克风、摄像头 + .catch(error => { + reject(error); + }); + }); + } + + /** + * 视频开始录制 + */ + startRecord() { + if (this.mediaRecorder.state === 'inactive') { + this.mediaRecorder.start(); + } + } + + /** + * 视频结束录制 + */ + stopRecord() { + if (this.mediaRecorder.state === 'recording') { + this.mediaRecorder.stop(); + } + } + + /** + * 检测当前浏览器对否支持 + * + * @return {boolean} 当前浏览器是否支持 + */ + isSupport() { + const flag = navigator.mediaDevices && navigator.mediaDevices.getUserMedia; + if (flag) { + return true; + } + } +} diff --git a/src/components/error-page/403.vue b/src/components/error-page/403.vue new file mode 100644 index 0000000..8bbf235 --- /dev/null +++ b/src/components/error-page/403.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/error-page/404.vue b/src/components/error-page/404.vue new file mode 100644 index 0000000..91304f8 --- /dev/null +++ b/src/components/error-page/404.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/error-page/500.vue b/src/components/error-page/500.vue new file mode 100644 index 0000000..60d52b8 --- /dev/null +++ b/src/components/error-page/500.vue @@ -0,0 +1,23 @@ + + + + diff --git a/src/components/error-page/style.scss b/src/components/error-page/style.scss new file mode 100644 index 0000000..fc151dd --- /dev/null +++ b/src/components/error-page/style.scss @@ -0,0 +1,35 @@ +.error-page { + background: #f0f2f5; + margin-top: -30px; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + + .img { + margin-right: 80px; + height: 360px; + width: 100%; + max-width: 430px; + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; + } + + .content { + h1 { + color: #434e59; + font-size: 72px; + font-weight: 600; + line-height: 72px; + margin-bottom: 24px; + } + + .desc { + color: rgba(0, 0, 0, 0.45); + font-size: 20px; + line-height: 28px; + margin-bottom: 16px; + } + } +} diff --git a/src/components/iframe/main.vue b/src/components/iframe/main.vue new file mode 100644 index 0000000..d11b344 --- /dev/null +++ b/src/components/iframe/main.vue @@ -0,0 +1,82 @@ + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..1306c39 --- /dev/null +++ b/src/main.js @@ -0,0 +1,56 @@ +import { createApp } from 'vue'; +import website from './config/website'; +import axios from './axios'; +import router from './router/'; +import store from './store'; +import i18n from './lang/'; +import { language, messages } from './lang/'; +import * as ElementPlusIconsVue from '@element-plus/icons-vue'; +import ElementPlus from 'element-plus'; +import 'element-plus/dist/index.css'; +import Avue from '@smallwei/avue'; +import '@smallwei/avue/lib/index.css'; +import crudCommon from '@/mixins/crud.js'; +import { getScreen } from './utils/util'; +import './permission'; +import error from './error'; +import avueUeditor from 'avue-plugin-ueditor'; +import basicBlock from 'components/basic-block/main.vue'; +import basicContainer from 'components/basic-container/main.vue'; +import thirdRegister from './components/third-register/main.vue'; +import NfDesignBase from '@saber/nf-design-base-elp'; +import App from './App.vue'; +import 'animate.css'; +import dayjs from 'dayjs'; +import 'styles/common.scss'; +// 业务组件 +import tenantPackage from './views/system/tenantpackage.vue'; + +window.$crudCommon = crudCommon; +window.axios = axios; +const app = createApp(App); +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component); +} +app.component('basicContainer', basicContainer); +app.component('basicBlock', basicBlock); +app.component('thirdRegister', thirdRegister); +app.component('tenantPackage', tenantPackage); +app.config.globalProperties.$dayjs = dayjs; +app.config.globalProperties.website = website; +app.config.globalProperties.getScreen = getScreen; +app.use(error); +app.use(i18n); +app.use(store); +app.use(router); +app.use(ElementPlus, { + locale: messages[language], +}); +app.use(Avue, { + axios, + calcHeight: 10, + locale: messages[language], +}); +app.use(avueUeditor, { axios }) +app.use(NfDesignBase); +app.mount('#app'); diff --git a/src/mixins/crud.js b/src/mixins/crud.js new file mode 100644 index 0000000..f297a12 --- /dev/null +++ b/src/mixins/crud.js @@ -0,0 +1,217 @@ +import { mapGetters } from 'vuex'; + +export default (app, option = {}) => { + let optionObj = import.meta.glob(`../option/**/**`)[`../option/${option.name}.js`]; + let apiObj = import.meta.glob(`../api/**/**`)[`../api/${option.name}.js`]; + let mixins = { + data() { + return { + data: [], + form: {}, + params: {}, + option: {}, + api: {}, + loading: false, + page: {}, + }; + }, + created() { + optionObj().then(mode => (this.option = mode.default)); + apiObj().then(mode => { + this.api = mode; + this.getList(); + }); + }, + computed: { + ...mapGetters(['userInfo', 'permission', 'roles']), + ids() { + const ids = []; + this.selectionList.forEach(ele => { + ids.push(ele[this.rowKey]); + }); + return ids.join(','); + }, + bindVal() { + return { + ref: 'crud', + option: this.option, + data: this.data, + tableLoading: this.loading, + }; + }, + onEvent() { + return { + 'size-change': this.sizeChange, + 'current-change': this.currentChange, + 'row-save': this.rowSave, + 'row-update': this.rowUpdate, + 'row-del': this.rowDel, + 'refresh-change': this.refreshChange, + 'search-reset': this.searchChange, + 'search-change': this.searchChange, + }; + }, + rowKey() { + return option.rowKey || 'id'; + }, + }, + methods: { + getList() { + const callback = () => { + this.loading = true; + this.data = []; + this.api[option.list || 'getList']( + this.page.currentPage, + this.page.pageSize, + this.params + ).then(res => { + this.loading = false; + let data; + if (option.res) { + data = option.res(res.data); + } else { + data = res.data.data; + } + this.page.total = data[option.total || 'total']; + const result = data[option.data || 'records']; + this.data = result; + if (this.listAfter) { + this.listAfter(data); + } + }); + }; + if (this.listBefore) { + this.listBefore(); + } + callback(); + }, + rowSave(row, done, loading) { + const callback = () => { + delete this.form.params; + this.api[option.add || 'add'](this.form) + .then(data => { + this.getList(); + if (this.addAfter) { + this.addAfter(data); + } else { + this.$message.success('新增成功'); + } + done(); + }) + .catch(() => { + loading(); + }); + }; + if (this.addBefore) { + this.addBefore(); + } + callback(); + }, + rowUpdate(row, index, done, loading) { + const callback = () => { + delete this.form.params; + this.api[option.update || 'update'](this.form) + .then(data => { + this.getList(); + if (this.updateAfter) { + this.updateAfter(data); + } else { + this.$message.success('更新成功'); + } + done(); + }) + .catch(() => { + loading(); + }); + }; + if (this.updateBefore) { + this.updateBefore(); + } + callback(); + }, + rowDel(row, index) { + const callback = () => { + this.api[option.del || 'del'](row[this.rowKey], row).then(data => { + this.getList(); + if (this.delAfter) { + this.delAfter(data, row, index); + } else { + this.$message.success('删除成功'); + } + }); + }; + if (this.delBefore) { + this.delBefore(); + callback(); + } else { + this.$confirm('确定将选择数据删除?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + callback(); + }); + } + }, + handleDelete() { + if (this.selectionList.length === 0) { + this.$message.warning('请选择至少一条数据'); + return; + } + this.$confirm('确定将选择数据删除?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + this.api[option.del || 'remove'](this.ids).then(data => { + this.getList(); + if (this.delMultiAfter) { + this.delMultiAfter(data, this.ids); + } else { + this.$message.success('删除成功'); + } + }); + }); + }, + searchChange(params, done) { + if (done) done(); + this.params = params; + this.page.currentPage = 1; + this.getList(); + }, + dateChange(date) { + if (date) { + this.params.createTime_dategt = date[0]; + this.params.createTime_datelt = date[1]; + } else { + delete this.params.createTime_dategt; + delete this.params.createTime_datelt; + } + this.page.currentPage = 1; + this.getList(); + }, + selectionChange(list) { + this.selectionList = list; + }, + selectionClear() { + this.selectionList = []; + this.$refs.crud.toggleSelection(); + }, + refreshChange() { + this.getList(); + }, + sizeChange(val) { + this.page.currentPage = 1; + this.page.pageSize = val; + this.getList(); + }, + currentChange(val) { + this.page.currentPage = val; + this.getList(); + }, + }, + }; + app.mixins = app.mixins || []; + app.mixins.push(mixins); + return app; +}; diff --git a/src/mixins/index.js b/src/mixins/index.js new file mode 100644 index 0000000..5fb9f8c --- /dev/null +++ b/src/mixins/index.js @@ -0,0 +1,46 @@ +import { validatenull } from '@/utils/validate'; +import { getStore } from '@/utils/store.js'; +import { mapGetters } from 'vuex'; + +export default { + data() { + return { + //刷新token锁 + refreshLock: false, + //刷新token的时间 + refreshTime: '', + }; + }, + created() { + //实时检测刷新token + this.refreshToken(); + }, + methods: { + //实时检测刷新token + refreshToken() { + this.refreshTime = setInterval(() => { + const token = + getStore({ + name: 'token', + debug: true, + }) || {}; + let date1 = this.$dayjs(token.datetime); + let date2 = this.$dayjs(); + const date = date2.diff(date1, 'seconds'); + if (validatenull(date)) return; + if (date >= this.website.tokenTime && !this.refreshLock) { + this.refreshLock = true; + this.$store + .dispatch('RefreshToken') + .then(() => { + this.refreshLock = false; + }) + .catch(err => { + console.log(err); + this.refreshLock = false; + }); + } + }, 1000); + }, + }, +}; diff --git a/src/option/equip/approvalProcessNode.js b/src/option/equip/approvalProcessNode.js new file mode 100644 index 0000000..a33b417 --- /dev/null +++ b/src/option/equip/approvalProcessNode.js @@ -0,0 +1,145 @@ +export default { + height:'auto', + calcHeight: 30, + tip: false, + searchShow: true, + searchMenuSpan: 6, + border: true, + index: true, + viewBtn: true, + selection: true, + dialogClickModal: false, + column: [ + { + label: "", + prop: "id", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "项目编码", + prop: "itemCode", + type: "input", + }, + { + label: "项目名称", + prop: "itemName", + type: "input", + }, + { + label: "设备类型", + prop: "deviceType", + type: "input", + }, + { + label: "检查方法", + prop: "checkMethod", + type: "input", + }, + { + label: "检查标准", + prop: "checkStandard", + type: "input", + }, + { + label: "结果类型(数值/状态/文本)", + prop: "checkResultType", + type: "input", + }, + { + label: "检查单位", + prop: "checkUnit", + type: "input", + }, + { + label: "正常范围", + prop: "normalRange", + type: "input", + }, + { + label: "排序", + prop: "sort", + type: "input", + }, + { + label: "备注", + prop: "remark", + type: "input", + }, + { + label: "", + prop: "status", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "isDeleted", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "createDept", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "createUser", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "createTime", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "updateUser", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "updateTime", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + { + label: "", + prop: "tenantId", + type: "input", + addDisplay: false, + editDisplay: false, + viewDisplay: false, + hide: true, + }, + ] +} diff --git a/src/option/job/jobinfo.js b/src/option/job/jobinfo.js new file mode 100644 index 0000000..b4de472 --- /dev/null +++ b/src/option/job/jobinfo.js @@ -0,0 +1,515 @@ +export const timeExpressionTypeDic = [ + { + label: 'API', + value: 1, + }, + { + label: 'CRON', + value: 2, + }, + { + label: '固定频率(毫秒)', + value: 3, + }, + { + label: '固定延迟(毫秒)', + value: 4, + }, + { + label: '工作流', + value: 5, + }, +]; + +export const executeTypeDic = [ + { + label: '单机执行', + value: 1, + }, + { + label: '广播执行', + value: 2, + }, + { + label: 'MapReduce', + value: 3, + }, +]; + +export const processorTypeDic = [ + { + label: '内建处理器', + value: 1, + }, + { + label: '外部处理器(动态加载)', + value: 4, + }, +]; + +export const dispatchStrategyDic = [ + { + label: 'HEALTH_FIRST', + value: 1, + }, + { + label: 'RANDOM', + value: 2, + }, +]; + +export const enableDic = [ + { + label: '暂停', + value: 0, + }, + { + label: '启用', + value: 1, + }, +]; + +export const logTypeDic = [ + { + label: 'ONLINE', + value: 1, + }, + { + label: 'LOCAL', + value: 2, + }, + { + label: 'STDOUT', + value: 3, + }, + { + label: 'LOCAL_AND_ONLINE', + value: 4, + }, + { + label: 'NULL', + value: 999, + }, +]; + +export const logLevelDic = [ + { + label: 'DEBUG', + value: 1, + }, + { + label: 'INFO', + value: 2, + }, + { + label: 'WARN', + value: 3, + }, + { + label: 'ERROR', + value: 4, + }, + { + label: 'OFF', + value: 99, + }, +]; + +export default { + height: 'auto', + calcHeight: 30, + tip: false, + searchShow: true, + searchMenuSpan: 6, + border: true, + index: true, + viewBtn: true, + selection: true, + grid: true, + labelWidth: 180, + menuWidth: 350, + dialogWidth: 1200, + dialogClickModal: false, + tabs: true, + column: [ + { + label: '任务应用', + prop: 'jobServerId', + type: 'select', + dicUrl: '/blade-job/job-server/select', + props: { + label: 'jobAppName', + value: 'id', + }, + search: true, + display: false, + }, + { + label: '任务ID', + prop: 'jobId', + type: 'input', + search: true, + width: 80, + display: false, + }, + { + label: '任务名称', + prop: 'jobName', + type: 'input', + search: true, + width: 200, + display: false, + }, + { + label: '定时信息', + labelTip: '时间表达式类型', + prop: 'timeExpressionType', + type: 'select', + dicData: timeExpressionTypeDic, + rules: [ + { + required: true, + message: '请选择定时信息', + trigger: 'blur', + }, + ], + width: 120, + display: false, + }, + { + label: '执行类型', + labelTip: '枚举值', + prop: 'executeType', + type: 'select', + dicData: executeTypeDic, + rules: [ + { + required: true, + message: '请选择执行器类型', + trigger: 'blur', + }, + ], + width: 110, + display: false, + }, + { + label: '处理器类型', + labelTip: '枚举值', + prop: 'processorType', + type: 'select', + dicData: processorTypeDic, + rules: [ + { + required: true, + message: '请选择处理器类型', + trigger: 'blur', + }, + ], + width: 180, + display: false, + }, + { + label: '任务状态', + labelTip: '未启用的任务不会被调度', + prop: 'enable', + type: 'switch', + dicData: enableDic, + slot: true, + width: 100, + display: false, + }, + ], + group: [ + { + label: '基础配置', + prop: 'modelSetting', + icon: 'el-icon-tickets', + column: [ + { + label: '任务应用', + prop: 'jobServerId', + type: 'select', + dicUrl: '/blade-job/job-server/select', + props: { + label: 'jobAppName', + value: 'id', + }, + editDisabled: true, + rules: [ + { + required: true, + message: '请选择任务应用', + trigger: 'blur', + }, + ], + }, + { + label: '任务状态', + labelTip: '未启用的任务不会被调度', + prop: 'enable', + type: 'switch', + value: 1, + rules: [ + { + required: true, + message: '请选择是否开启', + trigger: 'blur', + }, + ], + }, + { + label: '任务名称', + prop: 'jobName', + type: 'input', + rules: [ + { + required: true, + message: '请输入任务名称', + trigger: 'blur', + }, + ], + }, + { + label: '生命周期', + labelTip: '预留,用于指定定时调度任务的生效时间范围)', + prop: 'lifecycle', + type: 'datetimerange', + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + startPlaceholder: '任务开始时间', + endPlaceholder: '任务结束时间', + }, + { + label: '定时类型', + labelTip: '时间表达式类型', + prop: 'timeExpressionType', + type: 'select', + dicData: timeExpressionTypeDic, + value: 2, + rules: [ + { + required: true, + message: '请选择定时信息', + trigger: 'blur', + }, + ], + }, + { + label: '时间表达式', + labelTip: '填写类型由 定时类型 决定,比如 CRON 需要填写 CRON 表达式', + prop: 'timeExpression', + type: 'input', + }, + { + label: '执行类型', + labelTip: '枚举值', + prop: 'executeType', + type: 'select', + dicData: executeTypeDic, + value: 1, + rules: [ + { + required: true, + message: '请选择执行器类型', + trigger: 'blur', + }, + ], + }, + { + label: '运行时配置', + labelTip: '目前支持随机(RANDOM)和健康度优先(HEALTH_FIRST)', + prop: 'dispatchStrategy', + type: 'select', + dicData: dispatchStrategyDic, + value: 1, + rules: [ + { + required: true, + message: '请选择运行时配置', + trigger: 'blur', + }, + ], + }, + { + label: '处理器类型', + labelTip: '枚举值', + prop: 'processorType', + type: 'select', + dicData: processorTypeDic, + value: 1, + rules: [ + { + required: true, + message: '请选择处理器类型', + trigger: 'blur', + }, + ], + }, + { + label: '处理器参数', + labelTip: + '如Java处理器需要填写全限定类名,如:org.springblade.demo.MapReduceProcessorDemo', + prop: 'processorInfo', + type: 'input', + rules: [ + { + required: true, + message: '请输入处理器参数', + trigger: 'blur', + }, + ], + }, + { + label: '任务参数', + labelTip: '方法入参 TaskContext 对象的 json 字段', + prop: 'jobParams', + type: 'input', + span: 24, + }, + { + label: '任务描述', + prop: 'jobDescription', + type: 'textarea', + minRows: 3, + span: 24, + }, + ], + }, + { + label: '高级配置', + prop: 'templateSetting', + icon: 'el-icon-copy-document', + column: [ + { + label: '最大实例数', + labelTip: + '该任务同时执行的数量(任务和实例就像是类和对象的关系,任务被调度执行后被称为实例)', + prop: 'maxInstanceNum', + type: 'number', + value: 0, + }, + { + label: '单机线程并发数', + labelTip: '该实例执行过程中每个 Worker 使用的线程数量', + prop: 'concurrency', + type: 'number', + value: 5, + }, + { + label: '任务实例运行时间限制', + labelTip: '0 代表无任何限制,超时会被打断并判定为执行失败', + prop: 'instanceTimeLimit', + type: 'number', + value: 0, + }, + { + label: '任务实例重试次数', + labelTip: '任务实例重试次数,整个任务失败时重试,代价大,不推荐使用', + prop: 'instanceRetryNum', + type: 'number', + value: 0, + }, + { + label: '任务作业重试次数', + labelTip: 'Task 重试次数,每个子 Task 失败后单独重试,代价小,推荐使用', + prop: 'taskRetryNum', + type: 'number', + value: 0, + }, + { + label: '最低CPU核心', + labelTip: + '最小可用 CPU 核心数,CPU 可用核心数小于该值的 Worker 将不会执行该任务,0 代表无任何限制', + prop: 'minCpuCores', + type: 'number', + value: 0, + }, + { + label: '最低内存(GB)', + labelTip: '可用内存小于该值的Worker 将不会执行该任务,0 代表无任何限制', + prop: 'minMemorySpace', + type: 'number', + value: 0, + }, + { + label: '最低磁盘空间(GB)', + labelTip: '可用磁盘空间小于该值的Worker 将不会执行该任务,0 代表无任何限制', + prop: 'minDiskSpace', + type: 'number', + value: 0, + }, + { + label: '执行机器地址', + labelTip: '设置该参数后只有列表中的机器允许执行该任务,空代表不指定机器', + prop: 'designatedWorkers', + type: 'input', + }, + { + label: '最大执行机器数量', + labelTip: '限定调动执行的机器数量,0代表无限制', + prop: 'maxWorkerCount', + type: 'number', + value: 0, + }, + ], + }, + { + label: '其他配置', + prop: 'codingSetting', + icon: 'el-icon-printer', + column: [ + { + label: '报警人员ID列表', + labelTip: '接收报警的用户ID列表', + prop: 'notifyUserIds', + type: 'input', + }, + { + label: '错误阈值', + labelTip: '错误阈值,0代表不限制', + prop: 'alertThreshold', + type: 'number', + value: 0, + }, + { + label: '统计窗口(s)', + labelTip: '统计的窗口长度(s),0代表不限制', + prop: 'statisticWindowLen', + type: 'number', + value: 0, + }, + { + label: '沉默窗口(s)', + labelTip: '沉默时间窗口(s),0代表不限制', + prop: 'silenceWindowLen', + type: 'number', + value: 0, + }, + { + label: '日志配置', + labelTip: '日志配置', + prop: 'logType', + type: 'select', + value: 1, + dicData: logTypeDic, + }, + { + label: '日志级别', + labelTip: '日志级别', + prop: 'logLevel', + type: 'select', + value: 2, + dicData: logLevelDic, + }, + { + label: '扩展字段', + labelTip: '供开发者使用,用于功能扩展,powerjob 自身不会使用该字段', + prop: 'extra', + type: 'textarea', + minRows: 3, + span: 24, + }, + ], + }, + ], +}; diff --git a/src/option/job/jobserver.js b/src/option/job/jobserver.js new file mode 100644 index 0000000..27914be --- /dev/null +++ b/src/option/job/jobserver.js @@ -0,0 +1,78 @@ +export default { + height: 'auto', + calcHeight: 30, + tip: false, + searchShow: true, + searchMenuSpan: 6, + border: true, + index: true, + viewBtn: true, + selection: true, + grid: true, + labelWidth: 100, + menuWidth: 350, + dialogClickModal: false, + column: [ + { + label: '服务名称', + prop: 'jobServerName', + type: 'input', + span: 24, + search: true, + rules: [ + { + required: true, + message: '请输入服务名称', + trigger: 'blur', + }, + ], + }, + { + label: '服务器地址', + prop: 'jobServerUrl', + type: 'input', + span: 24, + rules: [ + { + required: true, + message: '请输入服务器地址', + trigger: 'blur', + }, + ], + }, + { + label: '应用名称', + prop: 'jobAppName', + type: 'input', + span: 24, + search: true, + rules: [ + { + required: true, + message: '请输入应用名称', + trigger: 'blur', + }, + ], + }, + { + label: '应用密码', + prop: 'jobAppPassword', + type: 'input', + span: 24, + rules: [ + { + required: true, + message: '请输入应用密码', + trigger: 'blur', + }, + ], + }, + { + label: '任务备注', + prop: 'jobRemark', + type: 'textarea', + minRows: 3, + span: 24, + }, + ], +}; diff --git a/src/option/system/dict.js b/src/option/system/dict.js new file mode 100644 index 0000000..aac2d8a --- /dev/null +++ b/src/option/system/dict.js @@ -0,0 +1,210 @@ +export const optionParent = { + height: 'auto', + calcHeight: 32, + tip: false, + searchShow: true, + searchMenuSpan: 10, + border: true, + index: true, + selection: true, + viewBtn: true, + menuWidth: 250, + dialogWidth: 880, + dialogClickModal: false, + column: [ + { + label: '字典编号', + prop: 'code', + search: true, + slot: true, + span: 24, + rules: [ + { + required: true, + message: '请输入字典编号', + trigger: 'blur', + }, + ], + }, + { + label: '字典名称', + prop: 'dictValue', + search: true, + align: 'center', + rules: [ + { + required: true, + message: '请输入字典名称', + trigger: 'blur', + }, + ], + }, + { + label: '字典排序', + prop: 'sort', + type: 'number', + align: 'right', + width: 100, + rules: [ + { + required: true, + message: '请输入字典排序', + trigger: 'blur', + }, + ], + }, + { + label: '封存', + prop: 'isSealed', + type: 'switch', + align: 'center', + width: 100, + dicData: [ + { + label: '否', + value: 0, + }, + { + label: '是', + value: 1, + }, + ], + value: 0, + slot: true, + rules: [ + { + required: true, + message: '请选择封存', + trigger: 'blur', + }, + ], + }, + { + label: '字典备注', + prop: 'remark', + hide: true, + }, + ], +}; + +export const optionChild = { + height: 'auto', + calcHeight: 95, + tip: false, + searchShow: true, + searchMenuSpan: 10, + tree: true, + border: true, + index: true, + selection: true, + viewBtn: true, + menuWidth: 300, + dialogWidth: 880, + dialogClickModal: false, + column: [ + { + label: '字典编号', + prop: 'code', + addDisabled: true, + editDisabled: true, + search: true, + span: 24, + rules: [ + { + required: true, + message: '请输入字典编号', + trigger: 'blur', + }, + ], + }, + { + label: '字典名称', + prop: 'dictValue', + search: true, + align: 'center', + rules: [ + { + required: true, + message: '请输入字典名称', + trigger: 'blur', + }, + ], + }, + { + label: '上级字典', + prop: 'parentId', + type: 'tree', + dicData: [], + hide: true, + props: { + label: 'title', + }, + addDisabled: true, + editDisabled: true, + rules: [ + { + required: false, + message: '请选择上级字典', + trigger: 'click', + }, + ], + }, + { + label: '字典键值', + prop: 'dictKey', + width: 85, + rules: [ + { + required: true, + message: '请输入字典键值', + trigger: 'blur', + }, + ], + }, + { + label: '字典排序', + prop: 'sort', + type: 'number', + align: 'right', + hide: true, + rules: [ + { + required: true, + message: '请输入字典排序', + trigger: 'blur', + }, + ], + }, + { + label: '封存', + prop: 'isSealed', + type: 'switch', + align: 'center', + width: 80, + dicData: [ + { + label: '否', + value: 0, + }, + { + label: '是', + value: 1, + }, + ], + value: 0, + slot: true, + rules: [ + { + required: true, + message: '请选择封存', + trigger: 'blur', + }, + ], + }, + { + label: '字典备注', + prop: 'remark', + hide: true, + }, + ], +}; diff --git a/src/option/system/dictbiz.js b/src/option/system/dictbiz.js new file mode 100644 index 0000000..18a884b --- /dev/null +++ b/src/option/system/dictbiz.js @@ -0,0 +1,211 @@ +export const optionParent = { + height: 'auto', + calcHeight: 32, + tip: false, + searchShow: true, + searchMenuSpan: 10, + border: true, + index: true, + selection: true, + viewBtn: true, + menuWidth: 250, + dialogWidth: 880, + dialogClickModal: false, + column: [ + { + label: '字典编号', + prop: 'code', + search: true, + slot: true, + span: 24, + rules: [ + { + required: true, + message: '请输入字典编号', + trigger: 'blur', + }, + ], + }, + { + label: '字典名称', + prop: 'dictValue', + search: true, + align: 'center', + rules: [ + { + required: true, + message: '请输入字典名称', + trigger: 'blur', + }, + ], + }, + { + label: '字典排序', + prop: 'sort', + type: 'number', + align: 'right', + width: 100, + hide: true, + rules: [ + { + required: true, + message: '请输入字典排序', + trigger: 'blur', + }, + ], + }, + { + label: '封存', + prop: 'isSealed', + type: 'switch', + align: 'center', + width: 100, + dicData: [ + { + label: '否', + value: 0, + }, + { + label: '是', + value: 1, + }, + ], + value: 0, + slot: true, + rules: [ + { + required: true, + message: '请选择封存', + trigger: 'blur', + }, + ], + }, + { + label: '字典备注', + prop: 'remark', + hide: true, + }, + ], +}; + +export const optionChild = { + height: 'auto', + calcHeight: 95, + tip: false, + searchShow: true, + searchMenuSpan: 10, + tree: true, + border: true, + index: true, + selection: true, + viewBtn: true, + menuWidth: 300, + dialogWidth: 880, + dialogClickModal: false, + column: [ + { + label: '字典编号', + prop: 'code', + addDisabled: true, + editDisabled: true, + search: true, + span: 24, + rules: [ + { + required: true, + message: '请输入字典编号', + trigger: 'blur', + }, + ], + }, + { + label: '字典名称', + prop: 'dictValue', + search: true, + align: 'center', + rules: [ + { + required: true, + message: '请输入字典名称', + trigger: 'blur', + }, + ], + }, + { + label: '上级字典', + prop: 'parentId', + type: 'tree', + dicData: [], + hide: true, + props: { + label: 'title', + }, + addDisabled: true, + editDisabled: true, + rules: [ + { + required: false, + message: '请选择上级字典', + trigger: 'click', + }, + ], + }, + { + label: '字典键值', + prop: 'dictKey', + width: 85, + rules: [ + { + required: true, + message: '请输入字典键值', + trigger: 'blur', + }, + ], + }, + { + label: '字典排序', + prop: 'sort', + type: 'number', + align: 'right', + hide: true, + rules: [ + { + required: true, + message: '请输入字典排序', + trigger: 'blur', + }, + ], + }, + { + label: '封存', + prop: 'isSealed', + type: 'switch', + align: 'center', + width: 80, + dicData: [ + { + label: '否', + value: 0, + }, + { + label: '是', + value: 1, + }, + ], + value: 0, + slot: true, + rules: [ + { + required: true, + message: '请选择封存', + trigger: 'blur', + }, + ], + }, + { + label: '字典备注', + prop: 'remark', + hide: true, + }, + ], +}; diff --git a/src/option/user/info.js b/src/option/user/info.js new file mode 100644 index 0000000..f9bf5c5 --- /dev/null +++ b/src/option/user/info.js @@ -0,0 +1,77 @@ +export default { + tabs: true, + tabsActive: 1, + group: [ + { + label: '个人信息', + prop: 'info', + column: [ + { + label: '头像', + type: 'upload', + listType: 'picture-img', + propsHttp: { + res: 'data', + url: 'link', + }, + action: '/blade-resource/oss/endpoint/put-file', + tip: '只能上传jpg/png用户头像,且不超过500kb', + span: 12, + row: true, + prop: 'avatar', + }, + { + label: '姓名', + span: 12, + row: true, + prop: 'realName', + }, + { + label: '用户名', + span: 12, + row: true, + prop: 'name', + }, + { + label: '手机号', + span: 12, + row: true, + prop: 'phone', + }, + { + label: '邮箱', + prop: 'email', + span: 12, + row: true, + }, + ], + }, + { + label: '修改密码', + prop: 'password', + column: [ + { + label: '原密码', + span: 12, + row: true, + type: 'password', + prop: 'oldPassword', + }, + { + label: '新密码', + span: 12, + row: true, + type: 'password', + prop: 'newPassword', + }, + { + label: '确认密码', + span: 12, + row: true, + type: 'password', + prop: 'newPassword1', + }, + ], + }, + ], +}; diff --git a/src/page/index/index.vue b/src/page/index/index.vue new file mode 100644 index 0000000..72fef7f --- /dev/null +++ b/src/page/index/index.vue @@ -0,0 +1,105 @@ + + + diff --git a/src/page/index/layout.vue b/src/page/index/layout.vue new file mode 100644 index 0000000..0439730 --- /dev/null +++ b/src/page/index/layout.vue @@ -0,0 +1,7 @@ + diff --git a/src/page/index/logo.vue b/src/page/index/logo.vue new file mode 100644 index 0000000..f374281 --- /dev/null +++ b/src/page/index/logo.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/page/index/search.vue b/src/page/index/search.vue new file mode 100644 index 0000000..b5b5d6a --- /dev/null +++ b/src/page/index/search.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/page/index/setting.vue b/src/page/index/setting.vue new file mode 100644 index 0000000..04ae321 --- /dev/null +++ b/src/page/index/setting.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/page/index/sidebar/index.vue b/src/page/index/sidebar/index.vue new file mode 100644 index 0000000..557cb99 --- /dev/null +++ b/src/page/index/sidebar/index.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/page/index/sidebar/sidebarItem.vue b/src/page/index/sidebar/sidebarItem.vue new file mode 100644 index 0000000..1442c69 --- /dev/null +++ b/src/page/index/sidebar/sidebarItem.vue @@ -0,0 +1,92 @@ + + diff --git a/src/page/index/tags.vue b/src/page/index/tags.vue new file mode 100644 index 0000000..84361fb --- /dev/null +++ b/src/page/index/tags.vue @@ -0,0 +1,188 @@ + + diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue new file mode 100644 index 0000000..d86a1d7 --- /dev/null +++ b/src/page/index/top/index.vue @@ -0,0 +1,120 @@ + + + + diff --git a/src/page/index/top/top-full.vue b/src/page/index/top/top-full.vue new file mode 100644 index 0000000..099d698 --- /dev/null +++ b/src/page/index/top/top-full.vue @@ -0,0 +1,24 @@ + + diff --git a/src/page/index/top/top-lang.vue b/src/page/index/top/top-lang.vue new file mode 100644 index 0000000..8e45557 --- /dev/null +++ b/src/page/index/top/top-lang.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/page/index/top/top-lock.vue b/src/page/index/top/top-lock.vue new file mode 100644 index 0000000..cd70b5c --- /dev/null +++ b/src/page/index/top/top-lock.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/page/index/top/top-logs.vue b/src/page/index/top/top-logs.vue new file mode 100644 index 0000000..1c22381 --- /dev/null +++ b/src/page/index/top/top-logs.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/page/index/top/top-menu.vue b/src/page/index/top/top-menu.vue new file mode 100644 index 0000000..bd351a6 --- /dev/null +++ b/src/page/index/top/top-menu.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/page/index/top/top-search.vue b/src/page/index/top/top-search.vue new file mode 100644 index 0000000..a3da15d --- /dev/null +++ b/src/page/index/top/top-search.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/page/index/top/top-theme.vue b/src/page/index/top/top-theme.vue new file mode 100644 index 0000000..289d143 --- /dev/null +++ b/src/page/index/top/top-theme.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/page/index/wechat.vue b/src/page/index/wechat.vue new file mode 100644 index 0000000..6a1a08d --- /dev/null +++ b/src/page/index/wechat.vue @@ -0,0 +1,59 @@ + + diff --git a/src/page/lock/index.vue b/src/page/lock/index.vue new file mode 100644 index 0000000..b4e0aa0 --- /dev/null +++ b/src/page/lock/index.vue @@ -0,0 +1,104 @@ + + + + diff --git a/src/page/login/authredirect.vue b/src/page/login/authredirect.vue new file mode 100644 index 0000000..67a8588 --- /dev/null +++ b/src/page/login/authredirect.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/page/login/codelogin.vue b/src/page/login/codelogin.vue new file mode 100644 index 0000000..e59215e --- /dev/null +++ b/src/page/login/codelogin.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/page/login/facelogin.vue b/src/page/login/facelogin.vue new file mode 100644 index 0000000..e1da201 --- /dev/null +++ b/src/page/login/facelogin.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/page/login/index.vue b/src/page/login/index.vue new file mode 100644 index 0000000..e995ee2 --- /dev/null +++ b/src/page/login/index.vue @@ -0,0 +1,375 @@ + + + + diff --git a/src/page/login/thirdlogin.vue b/src/page/login/thirdlogin.vue new file mode 100644 index 0000000..fa64d7d --- /dev/null +++ b/src/page/login/thirdlogin.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/page/login/userlogin.vue b/src/page/login/userlogin.vue new file mode 100644 index 0000000..d3b6ccf --- /dev/null +++ b/src/page/login/userlogin.vue @@ -0,0 +1,415 @@ + + + + + diff --git a/src/permission.js b/src/permission.js new file mode 100644 index 0000000..cabf2b8 --- /dev/null +++ b/src/permission.js @@ -0,0 +1,58 @@ +import router from './router/'; +import store from './store'; +import { getToken } from '@/utils/auth'; +import NProgress from 'nprogress'; // progress bar +import 'nprogress/nprogress.css'; // progress bar style +NProgress.configure({ showSpinner: false }); +const lockPage = '/lock'; //锁屏页 +router.beforeEach((to, from, next) => { + const meta = to.meta || {}; + const isMenu = meta.menu === undefined ? to.query.menu : meta.menu; + store.commit('SET_IS_MENU', isMenu === undefined); + if (getToken()) { + if (store.getters.isLock && to.path !== lockPage) { + //如果系统激活锁屏,全部跳转到锁屏页 + next({ path: lockPage }); + } else if (to.path === '/login') { + //如果登录成功访问登录页跳转到主页 + next({ path: '/' }); + } else { + if (store.getters.token.length === 0) { + store.dispatch('FedLogOut').then(() => { + next({ path: '/login' }); + }); + } else { + const meta = to.meta || {}; + const query = to.query || {}; + if (meta.target) { + window.open(query.url.replace(/#/g, '&')); + return; + } else if (meta.isTab !== false) { + store.commit('ADD_TAG', { + name: query.name || to.name, + path: to.path, + fullPath: to.path, + params: to.params, + query: to.query, + meta: meta, + }); + } + next(); + } + } + } else { + //判断是否需要认证,没有登录访问去登录页 + if (meta.isAuth === false) { + next(); + } else { + next('/login'); + } + } +}); + +router.afterEach(to => { + NProgress.done(); + let title = router.$avueRouter.generateTitle(to, { label: 'name' }); + router.$avueRouter.setTitle(title); + store.commit('SET_IS_SEARCH', false); +}); diff --git a/src/router/avue-router.js b/src/router/avue-router.js new file mode 100644 index 0000000..6514b50 --- /dev/null +++ b/src/router/avue-router.js @@ -0,0 +1,162 @@ +import website from '@/config/website'; + +const modules = import.meta.glob('../**/**/*.vue'); + +function isURL(s) { + return /^http[s]?:\/\/.*/.test(s); +} + +let RouterPlugin = function () { + this.$router = null; + this.$store = null; +}; +RouterPlugin.install = function (option = {}) { + this.$router = option.router; + this.$store = option.store; + let i18n = option.i18n.global; + this.$router.$avueRouter = { + safe: this, + // 设置标题 + setTitle: title => { + const defaultTitle = i18n.t('title'); + title = title ? `${title} | ${defaultTitle}` : defaultTitle; + document.title = title; + }, + closeTag: value => { + let tag = value || this.$store.getters.tag; + if (typeof value === 'string') { + tag = this.$store.getters.tagList.find(ele => ele.fullPath === value); + } + this.$store.commit('DEL_TAG', tag); + }, + generateTitle: (item, props = {}) => { + let query = item[props.query || 'query'] || {}; + let title = query.name || item[props.label || 'label']; + let meta = item[props.meta || 'meta'] || {}; + let key = meta.i18n; + if (key) { + const hasKey = i18n.te('route.' + key); + if (hasKey) return i18n.t('route.' + key); + } + return title; + }, + //动态路由 + formatRoutes: function (aMenu = [], first) { + const aRouter = []; + const propsDefault = website.menu; + if (aMenu && aMenu.length === 0) return; + for (let i = 0; i < aMenu.length; i++) { + const oMenu = aMenu[i]; + let path = oMenu[propsDefault.path], + isComponent = true, + component = oMenu.component, + name = oMenu[propsDefault.label], + icon = oMenu[propsDefault.icon], + children = oMenu[propsDefault.children], + query = oMenu[propsDefault.query], + meta = oMenu[propsDefault.meta]; + if (option.keepAlive) { + meta.keepAlive = option.keepAlive; + } + const isChild = !!(children && children.length !== 0); + const oRouter = { + path: path, + component: (() => { + // 判断是否为首路由 + if (first) { + return modules[ + option.store.getters.isMacOs + ? '../page/index/layout.vue' + : '../page/index/index.vue' + ]; + // 判断是否为多层路由 + } else if (isChild && !first) { + return modules['../page/index/layout.vue']; + // 判断是否为最终的页面视图 + } else { + let result = modules[`../${component}.vue`]; + if (result) result().then(mod => (mod.default.name = path)); + else { + isComponent = false; + } + return result; + } + })(), + name, + icon, + meta, + query, + redirect: (() => { + if (!isChild && first) return `${path}`; + else return ''; + })(), + // 处理是否为一级路由 + children: !isChild + ? (() => { + if (first) { + oMenu[propsDefault.path] = `${path}`; + let result = modules[`../${component}.vue`]; + if (result) result().then(mod => (mod.default.name = path)); + else { + isComponent = false; + } + return [ + { + component: result, + icon: icon, + name: name, + meta: meta, + query: query, + path: '', + }, + ]; + } + return []; + })() + : (() => { + return this.formatRoutes(children, false); + })(), + }; + if (!isURL(path) && isComponent) aRouter.push(oRouter); + } + if (first) { + aRouter.forEach(ele => this.safe.$router.addRoute(ele)); + } else { + return aRouter; + } + }, + }; +}; +export const formatPath = (ele, first) => { + const propsDefault = website.menu; + const icon = ele[propsDefault.icon]; + ele[propsDefault.icon] = !icon ? propsDefault.iconDefault : icon; + ele.meta = { keepAlive: ele.isOpen === 2 }; + const iframeComponent = 'components/iframe/main'; + const iframeSrc = href => { + return href.replace(/&/g, '#'); + }; + const isChild = !!(ele[propsDefault.children] && ele[propsDefault.children].length !== 0); + if (!isChild && first) { + ele.component = 'views' + ele[propsDefault.path]; + if (isURL(ele[propsDefault.href])) { + let href = ele[propsDefault.href]; + ele.component = iframeComponent; + ele[propsDefault.query] = { url: iframeSrc(href) }; + } + } else { + ele[propsDefault.children] && + ele[propsDefault.children].forEach(child => { + child.component = 'views' + child[propsDefault.path]; + child.meta = { keepAlive: child.isOpen === 2 }; + if (isURL(child[propsDefault.href])) { + let href = child[propsDefault.href]; + child[propsDefault.path] = ele[propsDefault.path] + '/' + child.code; + child.component = iframeComponent; + child[propsDefault.query] = { url: iframeSrc(href) }; + } + formatPath(child); + }); + } +}; +export default RouterPlugin; diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..4b0572a --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,37 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import PageRouter from './page/'; +import ViewsRouter from './views/'; +import AvueRouter from './avue-router'; +import i18n from '@/lang'; +import Store from '@/store/'; +import Layout from '@/page/index/index.vue'; + +//创建路由 +const Router = createRouter({ + base: import.meta.env.VITE_APP_BASE, + history: createWebHistory(import.meta.env.VITE_APP_BASE), + routes: [ + ...PageRouter, + ...ViewsRouter, + ], +}); +AvueRouter.install({ + store: Store, + router: Router, + i18n: i18n, +}); + +Router.$avueRouter.formatRoutes(Store.getters.menuAll, true); + +export function resetRouter() { + // 重置路由 比如用于身份验证失败,需要重新登录时 先清空当前的路有权限 + const newRouter = createRouter(); + Router.matcher = newRouter.matcher; // reset router + AvueRouter.install(Vue, { + router: Router, + store: Store, + i18n: i18n, + }); +} + +export default Router; diff --git a/src/router/page/index.js b/src/router/page/index.js new file mode 100644 index 0000000..3a148f7 --- /dev/null +++ b/src/router/page/index.js @@ -0,0 +1,72 @@ +import Store from '@/store/'; + +export default [ + { + path: '/login', + name: '登录页', + component: () => + Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue'), + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/oauth/redirect/:source', + name: '第三方登录', + component: () => + Store.getters.isMacOs ? import('@/mac/login.vue') : import('@/page/login/index.vue'), + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/lock', + name: '锁屏页', + component: () => + Store.getters.isMacOs ? import('@/mac/lock.vue') : import('@/page/lock/index.vue'), + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/404', + component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/404.vue'), + name: '404', + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/403', + component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/403.vue'), + name: '403', + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/500', + component: () => import(/* webpackChunkName: "page" */ '@/components/error-page/500.vue'), + name: '500', + meta: { + keepAlive: true, + isTab: false, + isAuth: false, + }, + }, + { + path: '/', + name: '主页', + redirect: '/wel', + }, +]; diff --git a/src/router/views/index.js b/src/router/views/index.js new file mode 100644 index 0000000..56a2149 --- /dev/null +++ b/src/router/views/index.js @@ -0,0 +1,45 @@ +import Layout from '@/page/index/index.vue'; +import Store from '@/store/'; + +export default [ + { + path: '/wel', + component: () => + Store.getters.isMacOs ? import('@/mac/index.vue') : import('@/page/index/index.vue'), + redirect: '/wel/index', + children: [ + { + path: 'index', + name: '首页', + meta: { + i18n: 'dashboard', + }, + component: () => import(/* webpackChunkName: "views" */ '@/views/wel/index.vue'), + }, + { + path: 'dashboard', + name: '控制台', + meta: { + i18n: 'dashboard', + menu: false, + }, + component: () => import(/* webpackChunkName: "views" */ '@/views/wel/dashboard.vue'), + }, + ], + }, + { + path: '/info', + component: Layout, + redirect: '/info/index', + children: [ + { + path: 'index', + name: '个人信息', + meta: { + i18n: 'info', + }, + component: () => import(/* webpackChunkName: "views" */ '@/views/system/userinfo.vue'), + }, + ], + }, +]; diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..c5e23e6 --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,36 @@ +const getters = { + tag: state => state.tags.tag, + language: state => state.common.language, + setting: state => state.common.setting, + userInfo: state => state.user.userInfo, + themeName: state => state.common.themeName, + isMacOs: (state, getters) => getters.themeName === 'mac-os', + isRefresh: state => state.common.isRefresh, + isSearch: state => state.common.isSearch, + isHorizontal: state => state.common.setting.sidebar === 'horizontal', + isCollapse: state => state.common.isCollapse, + isLock: state => state.common.isLock, + isFullScren: state => state.common.isFullScren, + isMenu: state => state.common.isMenu, + lockPasswd: state => state.common.lockPasswd, + tagList: state => state.tags.tagList, + tagsKeep: (state, getters) => { + return getters.tagList + .filter(ele => { + return (ele.meta || {}).keepAlive; + }) + .map(ele => ele.fullPath); + }, + tagWel: state => state.tags.tagWel, + token: state => state.user.token, + roles: state => state.user.roles, + permission: state => state.user.permission, + menuId: state => state.user.menuId, + menu: state => state.user.menu, + menuAll: state => state.user.menuAll, + logsList: state => state.logs.logsList, + logsLen: state => state.logs.logsList.length || 0, + logsFlag: (state, getters) => getters.logsLen === 0, + flowRoutes: state => state.dict.flowRoutes, +}; +export default getters; diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..a764d4b --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,20 @@ +import { createStore } from 'vuex'; +import user from './modules/user'; +import common from './modules/common'; +import tags from './modules/tags'; +import logs from './modules/logs'; +import dict from './modules/dict'; +import getters from './getters'; + +const store = createStore({ + modules: { + user, + common, + logs, + tags, + dict, + }, + getters, +}); + +export default store; diff --git a/src/store/modules/common.js b/src/store/modules/common.js new file mode 100644 index 0000000..554ad3a --- /dev/null +++ b/src/store/modules/common.js @@ -0,0 +1,78 @@ +import { setStore, getStore, removeStore } from 'utils/store'; +import website from '@/config/website'; + +const common = { + state: { + language: getStore({ name: 'language' }) || 'zh-cn', + isCollapse: false, + isFullScren: false, + isMenu: true, + isSearch: false, + isRefresh: true, + isLock: getStore({ name: 'isLock' }), + themeName: getStore({ name: 'themeName' }) || 'theme-hey', + lockPasswd: getStore({ name: 'lockPasswd' }) || '', + website: website, + setting: website.setting, + }, + mutations: { + SET_LANGUAGE: (state, language) => { + state.language = language; + setStore({ + name: 'language', + content: state.language, + }); + }, + SET_COLLAPSE: state => { + state.isCollapse = !state.isCollapse; + }, + SET_IS_MENU: (state, menu) => { + state.isMenu = menu; + }, + SET_IS_REFRESH: (state, refresh) => { + state.isRefresh = refresh; + }, + SET_IS_SEARCH: (state, search) => { + state.isSearch = search; + }, + SET_FULLSCREN: state => { + state.isFullScren = !state.isFullScren; + }, + SET_LOCK: state => { + state.isLock = true; + setStore({ + name: 'isLock', + content: state.isLock, + type: 'session', + }); + }, + SET_THEME_NAME: (state, themeName) => { + state.themeName = themeName; + setStore({ + name: 'themeName', + content: state.themeName, + }); + }, + SET_LOCK_PASSWD: (state, lockPasswd) => { + state.lockPasswd = lockPasswd; + setStore({ + name: 'lockPasswd', + content: state.lockPasswd, + type: 'session', + }); + }, + CLEAR_LOCK: state => { + state.isLock = false; + state.lockPasswd = ''; + removeStore({ + name: 'lockPasswd', + type: 'session', + }); + removeStore({ + name: 'isLock', + type: 'session', + }); + }, + }, +}; +export default common; diff --git a/src/store/modules/dict.js b/src/store/modules/dict.js new file mode 100644 index 0000000..69894ed --- /dev/null +++ b/src/store/modules/dict.js @@ -0,0 +1,36 @@ +import { getStore, setStore } from '@/utils/store'; + +import { getDictionary } from '@/api/system/dict'; + +const dict = { + state: { + flowRoutes: getStore({ name: 'flowRoutes' }) || {}, + }, + actions: { + FlowRoutes({ commit }) { + return new Promise((resolve, reject) => { + getDictionary({ code: 'flow' }) + .then(res => { + commit('SET_FLOW_ROUTES', res.data.data); + resolve(); + }) + .catch(error => { + reject(error); + }); + }); + }, + }, + mutations: { + SET_FLOW_ROUTES: (state, data) => { + state.flowRoutes = data.map(item => { + return { + routeKey: `${item.code}_${item.dictKey}`, + routeValue: item.remark, + }; + }); + setStore({ name: 'flowRoutes', content: state.flowRoutes }); + }, + }, +}; + +export default dict; diff --git a/src/store/modules/logs.js b/src/store/modules/logs.js new file mode 100644 index 0000000..b9d7d86 --- /dev/null +++ b/src/store/modules/logs.js @@ -0,0 +1,49 @@ +import { setStore, getStore } from 'utils/store'; +import dayjs from 'dayjs'; +import { sendLogs } from '@/api/user'; + +const logs = { + state: { + logsList: getStore({ name: 'logsList' }) || [], + }, + actions: { + //发送错误日志 + SendLogs({ state, commit }) { + return new Promise((resolve, reject) => { + sendLogs(state.logsList) + .then(() => { + commit('CLEAR_LOGS'); + resolve(); + }) + .catch(error => { + reject(error); + }); + }); + }, + }, + mutations: { + ADD_LOGS: (state, { type, message, stack, info }) => { + state.logsList.push( + Object.assign( + { + url: window.location.href, + time: dayjs().format('YYYY-MM-DD HH:mm:ss'), + }, + { + type, + message, + stack, + info: info.toString(), + } + ) + ); + setStore({ name: 'logsList', content: state.logsList }); + }, + CLEAR_LOGS: state => { + state.logsList = []; + setStore({ name: 'logsList', content: state.logsList }); + }, + }, +}; + +export default logs; diff --git a/src/store/modules/tags.js b/src/store/modules/tags.js new file mode 100644 index 0000000..1ec92a0 --- /dev/null +++ b/src/store/modules/tags.js @@ -0,0 +1,38 @@ +import { setStore, getStore } from 'utils/store'; +import website from '@/config/website'; + +const tagWel = website.fistPage; +const navs = { + state: { + tagList: getStore({ name: 'tagList' }) || [], + tag: getStore({ name: 'tag' }) || {}, + tagWel: tagWel, + }, + mutations: { + ADD_TAG: (state, action) => { + if (typeof action.name == 'function') action.name = action.name(action.query); + state.tag = action; + setStore({ name: 'tag', content: state.tag }); + if (state.tagList.some(ele => ele.fullPath == action.fullPath)) return; + state.tagList.push(action); + setStore({ name: 'tagList', content: state.tagList }); + }, + DEL_TAG: (state, action) => { + state.tagList = state.tagList.filter(item => { + return item.fullPath !== action.fullPath; + }); + setStore({ name: 'tagList', content: state.tagList }); + }, + DEL_ALL_TAG: (state, tagList = []) => { + state.tagList = tagList; + setStore({ name: 'tagList', content: state.tagList }); + }, + DEL_TAG_OTHER: state => { + state.tagList = state.tagList.filter(item => { + return [state.tag.fullPath, website.fistPage.path].includes(item.fullPath); + }); + setStore({ name: 'tagList', content: state.tagList }); + }, + }, +}; +export default navs; diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..b16fc45 --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,320 @@ +import { setToken, setRefreshToken, removeToken, removeRefreshToken } from '@/utils/auth'; +import { setStore, getStore } from '@/utils/store'; +import { validatenull } from '@/utils/validate'; +import { deepClone } from '@/utils/util'; +import { + loginByUsername, + loginBySocial, + loginBySso, + getUserInfo, + logout, + refreshToken, + getButtons, + registerUser, +} from '@/api/user'; +import { getRoutes, getTopMenu } from '@/api/system/menu'; +import { formatPath } from '@/router/avue-router'; +import { ElMessage } from 'element-plus'; +import md5 from 'js-md5'; + +const user = { + state: { + tenantId: getStore({ name: 'tenantId' }) || '', + userInfo: getStore({ name: 'userInfo' }) || [], + permission: getStore({ name: 'permission' }) || {}, + roles: [], + menuId: {}, + menu: getStore({ name: 'menu' }) || [], + menuAll: getStore({ name: 'menuAll' }) || [], + token: getStore({ name: 'token' }) || '', + refreshToken: getStore({ name: 'refreshToken' }) || '', + }, + actions: { + //根据用户名登录 + LoginByUsername({ commit }, userInfo = {}) { + return new Promise((resolve, reject) => { + loginByUsername( + userInfo.tenantId, + userInfo.deptId, + userInfo.roleId, + userInfo.username, + md5(userInfo.password), + userInfo.type, + userInfo.key, + userInfo.code + ) + .then(res => { + const data = res.data; + if (data.error_description) { + ElMessage({ + message: data.error_description, + type: 'error', + }); + } else { + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_TENANT_ID', data.tenant_id); + commit('SET_USER_INFO', data); + commit('DEL_ALL_TAG'); + commit('CLEAR_LOCK'); + } + resolve(); + }) + .catch(err => { + reject(err); + }); + }); + }, + //根据第三方信息登录 + LoginBySocial({ commit }, userInfo) { + return new Promise(resolve => { + loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then( + res => { + const data = res.data; + if (data.error_description) { + ElMessage({ + message: data.error_description, + type: 'error', + }); + } else { + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_USER_INFO', data); + commit('SET_TENANT_ID', data.tenant_id); + commit('DEL_ALL_TAG'); + commit('CLEAR_LOCK'); + } + resolve(); + } + ); + }); + }, + //根据单点信息登录 + LoginBySso({ commit }, userInfo) { + return new Promise(resolve => { + loginBySso(userInfo.state, userInfo.code).then(res => { + const data = res.data; + if (data.error_description) { + ElMessage({ + message: data.error_description, + type: 'error', + }); + } else { + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_USER_INFO', data); + commit('SET_TENANT_ID', data.tenant_id); + commit('DEL_ALL_TAG'); + commit('CLEAR_LOCK'); + } + resolve(); + }); + }); + }, + RegisterUser({ commit }, userInfo = {}) { + return new Promise((resolve, reject) => { + registerUser( + userInfo.tenantId, + userInfo.name, + userInfo.account, + md5(userInfo.password), + userInfo.phone, + userInfo.email + ).then(res => { + const data = res.data; + if (data.error_description) { + ElMessage({ + message: data.error_description, + type: 'error', + }); + reject(data.error_description); + } else { + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_USER_INFO', data); + commit('SET_TENANT_ID', data.tenant_id); + commit('DEL_ALL_TAG'); + commit('CLEAR_LOCK'); + } + resolve(); + }); + }); + }, + GetUserInfo({ commit }) { + return new Promise((resolve, reject) => { + getUserInfo() + .then(res => { + const data = res.data.data; + commit('SET_ROLES', data.roles); + resolve(data); + }) + .catch(err => { + reject(err); + }); + }); + }, + //刷新token + RefreshToken({ state, commit }, userInfo) { + return new Promise((resolve, reject) => { + refreshToken( + state.refreshToken, + state.tenantId, + !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id, + !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id + ) + .then(res => { + const data = res.data; + commit('SET_TOKEN', data.access_token); + commit('SET_REFRESH_TOKEN', data.refresh_token); + commit('SET_USER_INFO', data); + resolve(); + }) + .catch(error => { + reject(error); + }); + }); + }, + // 登出 + LogOut({ commit }) { + return new Promise((resolve, reject) => { + logout() + .then(() => { + commit('SET_TOKEN', ''); + commit('SET_MENU_ALL_NULL', []); + commit('SET_MENU', []); + commit('SET_ROLES', []); + commit('DEL_ALL_TAG', []); + commit('CLEAR_LOCK'); + removeToken(); + removeRefreshToken(); + removeToken(); + resolve(); + }) + .catch(error => { + reject(error); + }); + }); + }, + //注销session + FedLogOut({ commit }) { + return new Promise(resolve => { + commit('SET_TOKEN', ''); + commit('SET_MENU_ALL_NULL', []); + commit('SET_MENU', []); + commit('SET_ROLES', []); + commit('DEL_ALL_TAG', []); + commit('CLEAR_LOCK'); + removeToken(); + removeRefreshToken(); + removeToken(); + resolve(); + }); + }, + GetTopMenu() { + return new Promise(resolve => { + getTopMenu().then(res => { + const data = res.data.data || []; + resolve(data); + }); + }); + }, + GetMenu({ commit, dispatch }, tenantId) { + return new Promise(resolve => { + getRoutes(tenantId).then(res => { + const data = res.data.data; + let menu = deepClone(data); + menu.forEach(ele => formatPath(ele, true)); + console.log(menu); + commit('SET_MENU', menu); + commit('SET_MENU_ALL', menu); + dispatch('GetButtons'); + resolve(menu); + }); + }); + }, + GetButtons({ commit }) { + return new Promise(resolve => { + getButtons().then(res => { + const data = res.data.data; + commit('SET_PERMISSION', data); + resolve(); + }); + }); + }, + }, + mutations: { + SET_TOKEN: (state, token) => { + setToken(token); + state.token = token; + setStore({ name: 'token', content: state.token }); + }, + SET_REFRESH_TOKEN: (state, refreshToken) => { + setRefreshToken(refreshToken); + state.refreshToken = refreshToken; + setStore({ name: 'refreshToken', content: state.refreshToken }); + }, + SET_MENU_ID(state, menuId) { + state.menuId = menuId; + }, + SET_TENANT_ID: (state, tenantId) => { + state.tenantId = tenantId; + setStore({ name: 'tenantId', content: state.tenantId }); + }, + SET_USER_INFO: (state, userInfo) => { + if (validatenull(userInfo.avatar)) { + userInfo.avatar = '/img/bg/img-logo.png'; + } + state.userInfo = userInfo; + setStore({ name: 'userInfo', content: state.userInfo }); + }, + SET_MENU_ALL: (state, menuAll) => { + let menu = state.menuAll; + menuAll.forEach(ele => { + let index = menu.findIndex(item => item.path === ele.path); + if (index === -1) { + menu.push(ele); + } else { + menu[index] = ele; + } + }); + state.menuAll = menu; + setStore({ name: 'menuAll', content: state.menuAll }); + }, + SET_MENU_ALL_NULL: state => { + state.menuAll = []; + setStore({ name: 'menuAll', content: state.menuAll }); + }, + SET_MENU: (state, menu) => { + state.menu = menu; + setStore({ name: 'menu', content: state.menu }); + }, + SET_ROLES: (state, roles) => { + state.roles = roles; + }, + SET_PERMISSION: (state, permission) => { + let result = []; + + function getCode(list) { + list.forEach(ele => { + if (typeof ele === 'object') { + const children = ele.children; + const code = ele.code; + if (children) { + getCode(children); + } else { + result.push(code); + } + } + }); + } + + getCode(permission); + state.permission = {}; + result.forEach(ele => { + state.permission[ele] = true; + }); + setStore({ name: 'permission', content: state.permission, type: 'session' }); + }, + }, +}; +export default user; diff --git a/src/styles/common.scss b/src/styles/common.scss new file mode 100644 index 0000000..1bd1ed5 --- /dev/null +++ b/src/styles/common.scss @@ -0,0 +1,132 @@ +// 全局变量 +@import './variables.scss'; + +a { + text-decoration: none; + color: #333; +} + +* { + outline: none; +} + +.avue-sidebar, +.avue-top, +.avue-logo, +.avue-layout +.login-logo, +.avue-main { + transition: all .3s; +} + +.avue-layout { + display: flex; + height: 100%; + overflow: hidden; + + &--horizontal { + flex-direction: column; + + .avue-sidebar { + width: 100%; + height: $top_height; + display: flex; + + .avue-menu, .el-menu-item, .el-sub-menu__title { + height: $top_height; + line-height: $top_height; + } + + .is-active:before { + display: none; + } + } + + .avue-logo { + width: $sidebar_width + } + } +} + +.avue-contail { + width: 100%; + height: 100%; + background: #f0f2f5; + background-size: 100%; + background-repeat: no-repeat; +} + +.avue--collapse { + .avue-sidebar, + .avue-logo { + width: $sidebar_collapse; + } +} + +.avue-main { + position: relative; + display: flex; + flex-direction: column; + height: 100%; + flex: 1; + box-sizing: border-box; + overflow: hidden; + background: #f0f2f5; +} + +#avue-view { + flex: 1; + overflow-y: auto; + overflow-x: hidden; + // margin-bottom: 10px; +} + +.avue-view { + width: 100%; + box-sizing: border-box; +} + +.avue-footer { + width: 100%; + position: absolute; + bottom: 0; + text-align: center; + + .copyright { + color: #666; + font-size: 12px; + } +} + +.mac_bg { + background-image: url("/img/bg.jpg"); + background-color: #000; + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; +} + +// ele样式覆盖 +@import './element-ui.scss'; +// 顶部右侧显示 +@import './top.scss'; +// 导航标签 +@import './tags.scss'; +// 工具类函数 +@import './mixin.scss'; +// 侧面导航栏 +@import './sidebar.scss'; +//主题 +@import './theme/index.scss'; +//通用配置 +@import './normalize.scss'; +//图标配置 +@import './iconfont.scss'; +//登录样式 +@import "./login.scss"; +//适配 +@import './media.scss'; +//滚动条样式 +@include scrollBar; diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss new file mode 100644 index 0000000..337cc36 --- /dev/null +++ b/src/styles/element-ui.scss @@ -0,0 +1,62 @@ +.el-card.is-always-shadow { + box-shadow: none; + border: none !important; +} + +.el-menu { + border-right: none; +} + +.el-message__icon, +.el-message__content { + display: inline-block; +} + +.el-date-editor .el-range-input, +.el-date-editor .el-range-separator { + height: auto; + overflow: hidden; +} + +.el-dialog__wrapper { + z-index: 2048; +} + + +.el-col { + margin-bottom: 8px; +} + +.el-main { + padding: 0 !important; +} + +.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover { + background-color: transparent; +} + + +.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover { + background-color: transparent !important; +} + +.el-collapse-item__header { + height: auto; + overflow: hidden; +} + +.el-button.is-text:not(.is-disabled):active { + background-color: transparent; +} + +.el-button.is-text:not(.is-disabled):focus, .el-button.is-text:not(.is-disabled):hover { + background-color: transparent; +} + +.avue-icon i, .avue-icon svg { + line-height: 20px; +} + +.avue--detail .el-form-item { + background-color: #fafafa; +} diff --git a/src/styles/iconfont.scss b/src/styles/iconfont.scss new file mode 100644 index 0000000..b05181d --- /dev/null +++ b/src/styles/iconfont.scss @@ -0,0 +1,24 @@ + +[class^="icon-"] { + font-family: "iconfont" !important; + font-size: 18px !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.el-menu-item [class^=icon-] { + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; + vertical-align: middle; +} + +.el-sub-menu [class^=icon-] { + vertical-align: middle; + margin-right: 5px; + width: 24px; + text-align: center; + font-size: 18px; +} diff --git a/src/styles/login.scss b/src/styles/login.scss new file mode 100644 index 0000000..9435da0 --- /dev/null +++ b/src/styles/login.scss @@ -0,0 +1,223 @@ +.login-container { + display: flex; + align-items: center; + position: relative; + width: 100%; + height: 100%; + margin: 0 auto; + background-image: linear-gradient(135deg, #1a237e 0%, #0d47a1 100%); + background-size: 100% 100%; +} + +.login-weaper { + margin: 0 auto; + width: 1000px; + box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2); + border-radius: 10px; + overflow: hidden; + backdrop-filter: blur(10px); + background: rgba(255, 255, 255, 0.1); + + .el-input-group__append { + border: none; + } +} + +.login-left, +.login-border { + position: relative; + min-height: 500px; + align-items: center; + display: flex; +} + +.login-left { + border-top-left-radius: 10px; + border-bottom-left-radius: 10px; + justify-content: center; + flex-direction: column; + background: linear-gradient(135deg, #1a237e 0%, #0d47a1 100%); + color: #fff; + float: left; + width: 50%; + position: relative; + padding: 40px; +} + +.login-left .img { + width: 140px; +} + +.login-time { + position: absolute; + left: 25px; + top: 25px; + width: 100%; + color: rgba(255, 255, 255, 0.9); + font-weight: 300; + font-size: 16px; + letter-spacing: 1px; +} + +.login-left .title { + text-align: center; + color: #fff; + font-weight: 600; + font-size: 32px; + letter-spacing: 2px; + margin-bottom: 20px; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.login-border { + border-left: none; + border-top-right-radius: 10px; + border-bottom-right-radius: 10px; + color: #333; + background-color: #fff; + width: 50%; + float: left; + box-sizing: border-box; + padding: 40px; +} + +.login-main { + margin: 0 auto; + width: 80%; + box-sizing: border-box; +} + +.login-main > h3 { + margin-bottom: 20px; +} + +.login-main > p { + color: #76838f; +} + +.login-title { + color: #2c3e50; + margin-bottom: 40px; + font-weight: 600; + font-size: 24px; + text-align: center; + letter-spacing: 2px; +} + +.login-menu { + margin-top: 20px; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 12px; + + a { + color: #606266; + text-decoration: none; + transition: all 0.3s; + + &:hover { + color: #409EFF; + } + } +} + +.login-submit { + width: 100%; + height: 40px; + background: #409EFF; + border: none; + border-radius: 4px; + color: #fff; + font-size: 14px; + cursor: pointer; + transition: all 0.3s; + margin-top: 20px; + + &:hover { + background: #66b1ff; + } +} + +.register-submit { + width: 36%; + height: 45px; + border: 1px solid #EF2F63FF; + background: none; + font-size: 18px; + letter-spacing: 2px; + font-weight: 300; + color: #EF2F63FF; + cursor: pointer; + margin-top: 30px; + font-family: "neo"; + transition: 0.25s; +} + +.login-form { + margin: 10px 0; + + .el-form-item { + margin-bottom: 20px; + } + + .el-input { + .el-input__wrapper { + padding: 0; + background: transparent; + border: none; + border-bottom: 1px solid #dcdfe6; + border-radius: 0; + box-shadow: none !important; + transition: all 0.3s; + + &:hover, &:focus { + border-color: #409EFF; + } + + .el-input__inner { + height: 40px; + line-height: 40px; + color: #606266; + font-size: 14px; + } + } + + .el-input__prefix { + i { + padding: 0 5px; + font-size: 16px; + color: #909399; + } + } + } +} + +.login-code { + display: flex; + align-items: center; + gap: 10px; + + .el-input { + flex: 1; + } +} + +.login-code-img { + height: 40px; + background: #f5f7fa; + border: 1px solid #dcdfe6; + border-radius: 4px; + padding: 0 15px; + font-size: 14px; + color: #606266; + cursor: pointer; + transition: all 0.3s; + display: flex; + align-items: center; + justify-content: center; + + &:hover { + border-color: #409EFF; + } +} diff --git a/src/styles/media.scss b/src/styles/media.scss new file mode 100644 index 0000000..fac489c --- /dev/null +++ b/src/styles/media.scss @@ -0,0 +1,66 @@ +@media screen and (max-width: 992px) { + .avue-sidebar { + position: fixed; + top: 0; + left: -265px; + z-index: 1024; + } + .avue--collapse { + .avue-sidebar { + left: 0; + width: $sidebar_width; + } + + .avue-logo { + width: $sidebar_width; + } + + .avue-main { + margin-left: $sidebar_width; + } + } + // ele的自适应 + .el-dialog, + .el-message-box { + width: 98%; + } + //登录页面 + .login-left { + width: 100%; + min-height: auto; + + .title { + margin-top: 20px; + font-size: 20px; + text-shadow: #000 1px 0 0, #000 0 1px 0, #000 -1px 0 0, #000 0 -1px 0; + } + + .img { + width: 50px; + } + } + .login-logo { + padding-top: 30px; + margin-left: -30px; + } + .login-border { + border-radius: 5px; + padding: 20px; + margin: 0 auto; + width: 100%; + } + .login-main { + width: 100%; + background-color: #fff; + padding: 10px 20px; + box-shadow: none + } + .login-container { + &::before { + margin-left: 0 + } + } + .top-bar__item { + display: none; + } +} diff --git a/src/styles/mixin.scss b/src/styles/mixin.scss new file mode 100644 index 0000000..4b750fd --- /dev/null +++ b/src/styles/mixin.scss @@ -0,0 +1,70 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + ::-webkit-scrollbar-track-piece { + background-color: transparent; + } + ::-webkit-scrollbar { + width: 7px; + height: 7px; + background-color: transparent; + } + ::-webkit-scrollbar-thumb { + border-radius: 5px; + background-color: hsla(220, 4%, 58%, .3); + } +} + +@mixin radius($width, $size, $color) { + width: $width; + height: $width; + line-height: $width; + border-radius: $width; + text-align: center; + border-width: $size; + border-style: solid; + border-color: $color; +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/src/styles/normalize.scss b/src/styles/normalize.scss new file mode 100644 index 0000000..50c4f3a --- /dev/null +++ b/src/styles/normalize.scss @@ -0,0 +1,501 @@ +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* +/*! 我就是自己看看,然后翻译下下,让大家看看 */ + +/* ========================================================================== + HTML5 display definitions + + HTML5 新增元素定义 + + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 8/9. + * + * 修正IE 8/9 中未定义的块级元素。 + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + * + * 修正在 IE 8/9 中未定义的 'inline-block' 元素。 + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + * + * 阻止现在浏览器显示未定义 control 播放控件的 'audio' 声音元素。 + * 删除 IOS 5 设备中显示的多余的高度。 + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + * + * 处理 IE 8/9 中不存在的样式。 + */ + +[hidden] { + display: none; +} + +/* ========================================================================== + Base + + 基本设置 + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + * + * 1. 设置默认字体类型为 sans-serif. + * 2. 当用户放大或缩小页面时不改变字体大小。 + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + * + * 删除默认边距。 + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + + 链接 + ========================================================================== */ + +/** + * Address `outline` inconsistency between Chrome and other browsers. + * + * 处理 Chrome 与其它浏览器中关于 'outline' 的不一致性。 + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + * + * 为所有浏览器改善当激活或悬停在元素上时元素内容的可读性。 + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + + 排版 + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + * + * 处理多变的 'h1' 字体大小及其在 Firefox 4+, Safari 5, 及 Chrome时浏览器中的 + * 'section' 与 'article' 元素中的边距。 + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + * + * 处理在 IE 8/9, Safari 5, 及 Chrome 没有的样式。 + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + * + * 处理 Firefox 4+, Safari 5, 及 Chrome 中默认的 'bolder' 样式为 'bold'. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + * + * 处理在 Safari 5 和 Chrome 没有的样式。 + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + * + * 处理 Firefox 与其它浏览器的差异。 + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + * + * 处理在 IE 8/9 中没有的样式。 + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + * + * 修正确 Safari 5 和 Chrome 中古怪的默认字体。 + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + * + * 为所有浏览器改善预格式化文本的可读性。 + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + * + * 设置一致的引用格式。 + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + * + * 处理所有浏览器中字体大小的不一致性[译者注:原文直译为:处理所有 + * 浏览器中的不一致和多变的字体大小]。 + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + * + * 阻止所有浏览器中 'sub' 和 'sup' 元素影响 'line-height'. + * [译者注:就是不让上标与下标影响行高。] + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + + 嵌入的内容 + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + * + * 删除 IE 8/9 中当内容位于 'a' 中出现的边框。 + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + * + * 修正 IE 9 中显示古怪的溢出内容。 + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + + Figure 图像/图表/代码等 + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + * + * 处理在 IE 8/9 和 Safari 5 没有的边距。 + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + * + * 定义一致的边框、外边距及内边距。 + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + * 1. 修正在 IE 8/9 中没有继承的 'color'. + * + * [译者注:说是修正颜色嘛,可下面没有关于颜色的呀,这也行?求大神解释!] + * 2. 去掉内边距,避免当用户清空表单组时认为出错了。 + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + * + * 1. 修正所有浏览器中未被继承的字体类型。 + * 2. 修正所有浏览器中未被继承的字体大小。 + * 3. 处理 Firefox 4+, Safari 5, 及 Chrome 中默认设置不同的外边距。 + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + * + * 处理 Firefox 4+ 中的客户端样式表里使用 '!important' 设置的 'line-height'. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + * + * 处理 'button' 和 'select' 的 'text-transform' 继承的不一致性。 + * 所有其它表单控件元素不继承 'text-transform' 的值。 + * 修正 Chrome, Safari 5+, 及 IE 8+ 中 'button' 的继承样式。 + * 修正 Firefox 4+ 和 Opera 中 'select' 的继承样式。 + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + * + * 1. 避免 Android 4.0.* 中 WebKit 的一个bug, 防止 'audio' 与 'video' 的播放控件失效。 + * 2. 修正 iOS 中不可点击的 'input' 样式。 + * 3. 改善图片类型的 'input' 等光标样式的可用性与一致性。 + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + * + * 重置不可用元素的默认光标样式。 + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + * + * 1. 处理 IE 8/9 中设置为 'content-box' 的盒子模型。 + * 2. 删除 IE 8/9 中多余的内边距。 + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + * + * 1. 处理 Safari 5 和 Chrome 中默认设置为 'appearance' 的 'searchfield'. + * 2. 处理 Safari 5 和 Chrome 中默认设置为 'box-sizing' 的 'border-box' + * (包括不会过时的 '-moz'). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + * + * 删除 Safari 5 和 OS X 上的 Chrome 中的输入框上的内边距和搜索取消按钮。 + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + * + * 删除 Firefox 4+ button 与 input 上的内边距。 + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + * + * 1. 删除 IE8/9 中默认的垂直滚动条。 + * 2. 改善所有浏览器中的可读性并使文本垂直对齐。 + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + + 表格 + ========================================================================== */ + +/** + * Remove most spacing between table cells. + * + * 删除表格里单元格间的间距。 + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss new file mode 100644 index 0000000..89e0c0b --- /dev/null +++ b/src/styles/sidebar.scss @@ -0,0 +1,75 @@ + +.avue-sidebar { + width: $sidebar_width; + height: 100%; + user-select: none; + position: relative; + height: 100%; + position: relative; + background-color: #031527; + transition: width .2s; + box-sizing: border-box; + box-shadow: 2px 0 6px rgba(0, 21, 41, .35); + + .el-scrollbar__wrap { + overflow-x: hidden; + } + + .avue-menu { + height: calc(100% - #{$top_height}); + } + + &--tip { + width: 90%; + height: 140px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 5px; + position: absolute; + top: 5px; + left: 5%; + color: #ccc; + z-index: 2; + text-align: center; + font-size: 14px; + background-color: rgba(0, 0, 0, .4); + } + + .el-menu-item, .el-sub-menu__title { + i { + margin-right: 5px; + } + + i, span { + color: hsla(0, 0%, 100%, .7); + } + + &:hover { + background: transparent; + + i, span { + color: #fff; + } + } + + &.is-active { + &:before { + content: ''; + top: 0; + left: 0; + bottom: 0; + width: 4px; + background: #409eff; + position: absolute; + } + + background-color: rgba(0, 0, 0, .8); + + i, span { + color: #fff; + } + } + } + +} diff --git a/src/styles/tags.scss b/src/styles/tags.scss new file mode 100644 index 0000000..1082bf9 --- /dev/null +++ b/src/styles/tags.scss @@ -0,0 +1,101 @@ + +.avue-tags { + user-select: none; + position: relative; + padding: 0 10px; + margin-bottom: 10px; + box-sizing: border-box; + border-top: 1px solid #f6f6f6; + background-color: #fff; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05); + + .el-tabs--card > .el-tabs__header { + margin: 0; + } + + .el-tabs--card > .el-tabs__header .el-tabs__nav, + .el-tabs--card > .el-tabs__header .el-tabs__item, + .el-tabs--card > .el-tabs__header { + border: none; + } + + .el-tabs--card > .el-tabs__header .el-tabs__item:first-child { + border-left-width: 1px + } + + .el-tabs--card > .el-tabs__header .el-tabs__item { + margin: 0 3px; + height: 40px; + line-height: 40px; + font-size: 13px; + font-weight: normal; + color: #ccc; + + &.is-active { + color: #409EFF; + border-bottom: 3px solid #409EFF; + } + } + + .el-tabs__nav-prev, + .el-tabs__nav-next { + width: 20px; + line-height: 40px; + font-size: 18px; + text-align: center; + } + + &__box { + position: relative; + box-sizing: border-box; + padding-right: 106px; + width: 100%; + + .el-tabs__item { + &:first-child { + .is-icon-close { + display: none; + } + } + } + } + + &__contentmenu { + position: fixed; + width: 120px; + background-color: #fff; + z-index: 1024; + border-radius: 5px; + box-shadow: 1px 2px 10px #ccc; + + .item { + cursor: pointer; + font-size: 14px; + padding: 8px 20px 8px 15px; + color: #606266; + + &:first-child { + border-top-left-radius: 5px; + border-top-right-radius: 5px; + } + + &:last-child { + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + } + + &:hover { + background-color: #409EFF; + color: #fff; + } + } + } + + &__menu { + position: absolute !important; + top: 3px; + right: 0; + padding: 1px 0 0 15px; + box-sizing: border-box; + } +} diff --git a/src/styles/theme/beautiful.scss b/src/styles/theme/beautiful.scss new file mode 100644 index 0000000..dae418f --- /dev/null +++ b/src/styles/theme/beautiful.scss @@ -0,0 +1,55 @@ +.theme-beautiful { + .avue-sidebar { + background: linear-gradient(90deg, #006cff, #399efd) !important; + + .el-menu-item, .el-sub-menu__title { + background: linear-gradient(90deg, #006cff, #399efd) !important; + } + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #fff + } + + .is-active { + background: #399efd !important; + } + + &:hover, &.is-active { + background: #399efd !important; + + i, span { + background: #399efd !important; + } + } + } + } + + .avue-logo { + background: linear-gradient(90deg, #006cff, #399efd) !important; + } + + .avue-tags { + .el-tabs__item { + font-size: 14px !important; + color: #303133 !important; + font-weight: 500 !important; + border: 1px solid #dcdfe6 !important; + border-radius: 3px; + height: 35px !important; + line-height: 35px !important; + margin: 5px 3px 8px 3px !important; + + &:hover { + color: #409EFF !important; + border-color: #409EFF !important; + } + } + + .is-active { + color: #409EFF !important; + border-color: #409EFF !important; + } + } + +} diff --git a/src/styles/theme/bule.scss b/src/styles/theme/bule.scss new file mode 100644 index 0000000..0c59765 --- /dev/null +++ b/src/styles/theme/bule.scss @@ -0,0 +1,53 @@ +.theme-bule { + + .avue-top, .avue-logo { + background: #004ca7; + } + + .avue-sidebar { + background: #004ca7; + + .el-menu-item.is-active, .el-sub-menu__title.is-active { + background-color: rgba(0, 0, 0, 0.2); + } + } + + .el-dropdown { + color: #fff; + } + + .avue-logo { + .avue-logo_title { + color: #fff; + } + } + + .avue-breadcrumb { + i { + color: #fff; + } + } + + .top-bar__item { + i { + color: #fff; + } + } + + .avue-top { + + .el-menu-item { + i, + span { + color: #fff; + } + + &:hover { + i, + span { + color: #fff; + } + } + } + } +} diff --git a/src/styles/theme/cool.scss b/src/styles/theme/cool.scss new file mode 100644 index 0000000..0d4969f --- /dev/null +++ b/src/styles/theme/cool.scss @@ -0,0 +1,175 @@ +.theme-cool { + .el-menu--popup { + .el-menu-item { + background-color: #fff; + + i, span { + color: #666; + } + + &:hover { + i, span { + color: #333; + } + } + + &.is-active { + background-color: #409EFF; + + &:before { + content: ''; + top: 0; + left: 0; + bottom: 0; + width: 4px; + background: #409eff; + position: absolute; + } + + i, span { + color: #fff; + } + } + } + } + + .avue-top { + background: linear-gradient(120deg, #25aff3, #008ad3); + } + + .avue-tags { + padding: 0 3px; + margin: 8px 0; + box-shadow: none; + background-color: transparent; + + .el-tabs__header .el-tabs__item { + padding: 0 10px !important; + background-color: #fff; + margin-right: 5px; + color: #909399; + border-radius: 3px; + height: 30px; + font-size: 12px; + line-height: 30px; + + &.is-active { + border: none; + color: #008ad3; + } + } + } + + .avue-logo { + background: #fff; + box-shadow: none; + } + + .avue-sidebar--tip { + background-color: transparent; + color: #333; + } + + .el-dropdown { + color: #fff; + } + + .avue-logo_title { + font-weight: 400; + color: #008ad3; + } + + .logo_title, + .avue-breadcrumb { + color: #fff; + + i { + color: #fff; + } + } + + .avue-top { + .el-menu-item { + i, + span { + color: #fff; + } + + &:hover { + i, + span { + color: #fff; + } + } + } + } + + .avue-sidebar { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.15); + background-color: #fff; + + .el-menu-item, .el-sub-menu__title { + font-size: 13px; + + i, span { + color: #000; + } + + &:hover { + background: transparent; + + i, span { + color: #000; + } + } + + &.is-active { + background-color: #e5f1fb; + + &::before { + width: 0; + } + + i, span { + color: #25aff3; + } + } + } + } + + .top-search { + .el-input__inner { + color: #333; + } + + input::-webkit-input-placeholder, + textarea::-webkit-input-placeholder { + /* WebKit browsers */ + color: #fff; + } + + input:-moz-placeholder, + textarea:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #fff; + } + + input::-moz-placeholder, + textarea::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #fff; + } + + input:-ms-input-placeholder, + textarea:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #fff; + } + } + + .top-bar__item { + i { + color: #fff; + } + } +} diff --git a/src/styles/theme/d2.scss b/src/styles/theme/d2.scss new file mode 100644 index 0000000..a944497 --- /dev/null +++ b/src/styles/theme/d2.scss @@ -0,0 +1,68 @@ +.theme-d2 { + .avue-logo { + color: #409EFF; + background-color: #ebf1f6; + box-shadow: none; + + .avue-logo_title { + font-size: 20px; + font-weight: 400; + } + } + + .avue-top { + background-color: #ebf1f6; + box-shadow: none; + } + + .avue-main { + padding: 0 5px; + } + + .avue-tags { + margin-left: 6px; + padding: 0; + border: 1px solid #e4e7ed; + border-radius: 3px; + background-color: #ebf1f6; + box-shadow: none; + + .el-tabs__item { + border-left: 1px solid #cfd7e5 !important; + margin: 0 !important; + background-color: rgba(0, 0, 0, .03) !important; + color: #606266 !important; + font-size: 14px !important; + font-weight: 500 !important; + + &:first-child { + border-left: none !important; + } + } + + .is-active { + border-bottom: 1px solid #fff !important; + background-color: #fff !important; + color: #409EFF !important; + } + } + + .avue-sidebar { + background-color: #ebf1f6; + box-shadow: none; + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #606266 + } + + &:hover, &.is-active { + background: hsla(0, 0%, 100%, .5); + + i, span { + color: #409EFF; + } + } + } + } +} diff --git a/src/styles/theme/dark.scss b/src/styles/theme/dark.scss new file mode 100644 index 0000000..53d64f9 --- /dev/null +++ b/src/styles/theme/dark.scss @@ -0,0 +1,70 @@ +.theme-dark { + .avue-logo { + color: #fff; + background-color: #2c3643; + box-shadow: none; + + .avue-logo_title { + font-size: 20px; + font-weight: 400; + } + } + + .avue-top { + background-color: #2c3643; + box-shadow: none; + color: #ccc; + + i, span { + color: #ccc; + } + } + + .avue-main { + padding: 0 5px; + } + + .avue-tags { + padding-left: 0; + background-color: #2c3643; + border-color: transparent; + + .el-tabs__item { + margin: 0 !important; + background-color: #262d37; + + &.is-active { + color: #262d37 !important; + background-color: #fff !important; + border-color: #262d37 !important; + } + } + } + + .avue-main { + background-color: #2c3643; + } + + .avue-sidebar { + background-color: #2c3643; + box-shadow: none; + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #ccc; + } + + &:hover, &.is-active { + background: #262d37; + + i, span { + color: #fff; + } + + &:before { + background-color: #000; + } + } + } + } +} diff --git a/src/styles/theme/hey.scss b/src/styles/theme/hey.scss new file mode 100644 index 0000000..6c379a0 --- /dev/null +++ b/src/styles/theme/hey.scss @@ -0,0 +1,56 @@ +.theme-hey { + .avue-sidebar { + background-color: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, .08); + + .el-menu-item, .el-sub-menu__title { + i, span { + color: rgba(49, 58, 70, .8); + } + + &:hover { + background: transparent; + + i, span { + color: #409eff; + } + } + + &.is-active { + &:before { + left: auto; + right: 0; + } + + background-color: #f0f6ff; + + i, span { + color: #409eff; + } + } + } + } + + .avue-logo { + background-color: #fff; + box-shadow: none; + + .avue-logo_title { + color: #409eff; + font-size: 20px; + } + } + + .avue-tags { + background: #f3f6f8; + + .el-tabs__item { + color: rgba(0, 0, 0, .65) !important; + } + + .is-active { + background-color: #fff; + border-bottom: none !important; + } + } +} diff --git a/src/styles/theme/index.scss b/src/styles/theme/index.scss new file mode 100644 index 0000000..99cb53a --- /dev/null +++ b/src/styles/theme/index.scss @@ -0,0 +1,32 @@ +// white +@import './white.scss'; + +// star +@import './star.scss'; + +// vip +@import './vip.scss'; + +// d2 +@import './d2.scss'; + +// bule +@import './bule.scss'; + +//iview +@import './iview.scss'; + +//heyui +@import './hey.scss'; + +//dark +@import './dark.scss'; + +//lte +@import 'lte'; + +//cool +@import './cool.scss'; + +//beautiful +@import './beautiful.scss'; diff --git a/src/styles/theme/iview.scss b/src/styles/theme/iview.scss new file mode 100644 index 0000000..cab3498 --- /dev/null +++ b/src/styles/theme/iview.scss @@ -0,0 +1,87 @@ +.theme-iview { + .avue-logo { + background: #001529; + box-shadow: none; + text-align: center; + + .avue-logo_title { + padding: 5px 8px 8px 8px; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + font-size: 20px; + color: #fff; + font-weight: 500; + display: inline; + background-color: #409EFF; + } + } + + .avue-tags { + padding: 3px 5px 5px 0; + background: #f0f0f0; + box-shadow: inset 0 0 3px 2px hsla(0, 0%, 39.2%, .1); + + .is-active { + &:before { + background: #409EFF !important; + } + } + + .el-tabs__item { + padding: 0 15px !important; + position: relative; + height: 32px !important; + line-height: 32px !important; + border: 1px solid #e8eaec !important; + color: #515a6e !important; + background: #fff !important; + border-radius: 3px; + + &:before { + content: ''; + display: inline-block; + width: 12px; + height: 12px; + margin-right: 10px; + border-radius: 50%; + background: #e8eaec; + } + } + } + + .avue-sidebar { + background: #001529; + + .el-menu-item { + &.is-active { + background-color: #000c17; + + &:before { + display: none; + } + + i, span { + color: #409EFF; + } + } + } + + .el-sub-menu { + .el-menu-item { + &.is-active { + background-color: #409EFF; + + &:before { + display: none; + } + + i, span { + color: #fff; + } + } + } + } + } +} diff --git a/src/styles/theme/lte.scss b/src/styles/theme/lte.scss new file mode 100644 index 0000000..f42e9ea --- /dev/null +++ b/src/styles/theme/lte.scss @@ -0,0 +1,44 @@ +.theme-lte { + .avue-logo { + background-color: #409EFF; + + .avue-logo_title { + font-weight: 500; + font-size: 20px; + color: #fff; + } + } + + .avue-tags { + .el-tabs__item { + font-size: 12px !important; + font-weight: 500 !important; + } + } + + .avue-sidebar { + background-color: #263238; + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #8a979e; + } + + &:hover { + background-color: #2b373d; + } + + &.is-active { + &:before { + display: none; + } + + background-color: #2b373d; + + i, span { + color: #fff; + } + } + } + } +} diff --git a/src/styles/theme/star.scss b/src/styles/theme/star.scss new file mode 100644 index 0000000..36d0817 --- /dev/null +++ b/src/styles/theme/star.scss @@ -0,0 +1,116 @@ +.theme-star { + .avue-main { + background: transparent; + } + + .avue-contail { + background-image: url("/img/star-squashed.jpg"); + background-size: 100% 100%; + } + + .avue-logo { + color: #fff; + } + + .avue-top, + .avue-logo, + .tags-container { + background-color: transparent; + } + + .el-card, .error-page { + opacity: .9; + } + + .avue-tabs { + padding: 0 20px; + } + + .avue-tags { + background-color: transparent; + border-top: none; + } + + .avue-top { + .avue-breadcrumb { + color: #fff; + } + + .el-menu-item { + i, span { + color: #fff; + } + + &.is-active { + background-color: rgba(0, 0, 0, .4) + } + } + + .el-dropdown { + color: #fff; + } + } + + .avue-sidebar { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.15); + background-color: transparent; + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #fff + } + + &:hover { + background: transparent; + + i, span { + color: #409EFF; + } + } + + &.is-active { + background-color: rgba(0, 0, 0, .4); + + i, span { + color: #fff; + } + } + } + } + + .top-search { + .el-input__inner { + color: #333; + } + + input::-webkit-input-placeholder, + textarea::-webkit-input-placeholder { + /* WebKit browsers */ + color: #fff; + } + + input:-moz-placeholder, + textarea:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #fff; + } + + input::-moz-placeholder, + textarea::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #fff; + } + + input:-ms-input-placeholder, + textarea:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #fff; + } + } + + .top-bar__item { + i { + color: #fff; + } + } +} diff --git a/src/styles/theme/vip.scss b/src/styles/theme/vip.scss new file mode 100644 index 0000000..a395ef5 --- /dev/null +++ b/src/styles/theme/vip.scss @@ -0,0 +1,109 @@ +.theme-vip { + $color: rgba(246, 202, 157, .7); + $is_active_color: #f6ca9d; + + .avue-top { + background-color: #20222a; + } + + .el-dropdown { + color: $color; + } + + .avue-logo { + .avue-logo_title { + background-image: -webkit-gradient(linear, left top, left bottom, from($color), to($is_active_color)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + font-weight: 400; + } + } + + .avue-breadcrumb { + i { + color: $color; + } + } + + .avue-sidebar { + .el-menu-item { + &.is-active { + &:before { + background: $color; + } + + i, span { + color: $is_active_color; + } + } + } + } + + .avue-tags { + .el-tabs__item { + color: rgba(0, 0, 0, 0.4) !important; + + &.is-active { + color: $is_active_color !important; + border-color: $is_active_color !important; + } + + &:before { + background: $is_active_color; + } + } + } + + .top-search { + .el-input__inner { + color: $color; + } + + input::-webkit-input-placeholder, + textarea::-webkit-input-placeholder { + /* WebKit browsers */ + color: $color; + } + + input:-moz-placeholder, + textarea:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: $color; + } + + input::-moz-placeholder, + textarea::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: $color; + } + + input:-ms-input-placeholder, + textarea:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: $color; + } + } + + .top-bar__item { + i { + color: $color; + } + } + + .avue-top { + + .el-menu-item { + i, + span { + color: $color; + } + + &:hover { + i, + span { + color: $is_active_color; + } + } + } + } +} diff --git a/src/styles/theme/white.scss b/src/styles/theme/white.scss new file mode 100644 index 0000000..1b16bd3 --- /dev/null +++ b/src/styles/theme/white.scss @@ -0,0 +1,143 @@ +.theme-white { + .el-menu--popup { + .el-menu-item { + background-color: #fff; + + i, span { + color: #666; + } + + &:hover { + i, span { + color: #333; + } + } + + &.is-active { + background-color: #409EFF; + + &:before { + content: ''; + top: 0; + left: 0; + bottom: 0; + width: 4px; + background: #409eff; + position: absolute; + } + + i, span { + color: #fff; + } + } + } + } + + .avue-top, + .avue-logo, + .tags-container { + background-color: #409EFF; + } + + .avue-sidebar--tip { + background-color: transparent; + color: #333; + } + + .el-dropdown { + color: #fff; + } + + .avue-logo_title { + font-weight: 400; + color: #fff; + } + + .logo_title, + .avue-breadcrumb { + color: #fff; + + i { + color: #fff; + } + } + + .avue-top { + .el-menu-item { + i, + span { + color: #fff; + } + + &:hover { + i, + span { + color: #fff; + } + } + } + } + + .avue-sidebar { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.15); + background-color: #fff; + + .el-menu-item, .el-sub-menu__title { + i, span { + color: #666 + } + + &:hover { + background: transparent; + + i, span { + color: #333; + } + } + + &.is-active { + background-color: #409EFF; + + i, span { + color: #fff; + } + } + } + } + + .top-search { + .el-input__inner { + color: #333; + } + + input::-webkit-input-placeholder, + textarea::-webkit-input-placeholder { + /* WebKit browsers */ + color: #fff; + } + + input:-moz-placeholder, + textarea:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #fff; + } + + input::-moz-placeholder, + textarea::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #fff; + } + + input:-ms-input-placeholder, + textarea:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #fff; + } + } + + .top-bar__item { + i { + color: #fff; + } + } +} diff --git a/src/styles/top.scss b/src/styles/top.scss new file mode 100644 index 0000000..5481f33 --- /dev/null +++ b/src/styles/top.scss @@ -0,0 +1,140 @@ +.avue-top { + position: relative; + background-color: #fff; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); + color: rgba(0, 0, 0, .65); + font-size: 28px; + height: $top_height; + line-height: $top_height; + box-sizing: border-box; + white-space: nowrap; + + .el-menu-item { + i, span { + font-size: 13px; + } + } +} + +.avue-breadcrumb { + height: 100%; + + i { + font-size: 30px !important; + } + + &--active { + transform: rotate(90deg); + } +} + +.top-user { + margin-left: 20px; + display: flex; + align-items: center; +} + +.top-menu { + .el-menu-item { + padding: 0 10px; + border: none; + } +} + +.top-search { + line-height: $top_height; + position: absolute !important; + right: 200px; + top: 0; + width: 300px; + + .el-input__wrapper { + font-size: 13px; + border: none; + box-shadow: none; + background-color: transparent; + } +} + +.top-bar__img { + margin: 0 5px; + padding: 2px; + width: 30px; + height: 30px; + border-radius: 100%; + box-sizing: border-box; + border: 1px solid #eee; + vertical-align: middle; +} + +.top-bar__left, +.top-bar__right { + height: $top_height; + position: absolute; + margin-top: 2px; + top: 0; + + i { + line-height: $top_height; + } +} + +.top-bar__left { + left: 10px; +} + +.top-bar__right { + right: 10px; + display: flex; + align-items: center; +} + +.top-bar__item { + position: relative; + display: inline-block; + height: $top_height; + margin: 0 7px; + font-size: 16px; + + .el-badge__content.is-fixed { + top: 12px; + right: 5px; + } +} + +.top-bar__title { + height: 100%; + padding-left: 50px; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: inherit; + font-weight: 400; +} + +.avue-logo { + height: $top_height; + line-height: $top_height; + background-color: #031527; + font-size: 20px; + overflow: hidden; + box-sizing: border-box; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.15); + color: #fff; + + &_title { + display: block; + text-align: center; + font-weight: bold; + font-size: 20px; + } + + &_subtitle { + display: block; + text-align: center; + font-size: 18px; + font-weight: bold; + color: #fff; + } +} diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..ef29df7 --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,3 @@ +$sidebar_width: 230px; +$sidebar_collapse: 60px; +$top_height: 50px; diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..123d7e5 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,32 @@ +import Cookies from 'js-cookie'; + +const TokenKey = 'saber3-access-token'; +const RefreshTokenKey = 'saber3-refresh-token'; +const SessionId = 'JSESSIONID'; +const UserId = 'b-user-id'; + +export function getToken() { + return Cookies.get(TokenKey); +} + +export function setToken(token) { + return Cookies.set(TokenKey, token); +} + +export function getRefreshToken() { + return Cookies.get(RefreshTokenKey); +} + +export function setRefreshToken(token) { + return Cookies.set(RefreshTokenKey, token); +} + +export function removeToken() { + Cookies.remove(SessionId); + Cookies.remove(UserId); + return Cookies.remove(TokenKey); +} + +export function removeRefreshToken() { + return Cookies.remove(RefreshTokenKey); +} diff --git a/src/utils/calendar.js b/src/utils/calendar.js new file mode 100644 index 0000000..00af448 --- /dev/null +++ b/src/utils/calendar.js @@ -0,0 +1,668 @@ +/** + * @1900-2100区间内的公历、农历互转 + * @charset UTF-8 + * @Author Jea杨(JJonline@JJonline.Cn) + * @Time 2014-7-21 + * @Time 2016-8-13 Fixed 2033hex、Attribution Annals + * @Time 2016-9-25 Fixed lunar LeapMonth Param Bug + * @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year + * @Version 1.0.3 + * @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] + * @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] + */ +const calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,//1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,//1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,//1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x16a95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,//1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,//1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0,//1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,//1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6,//1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,//1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0,//1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,//2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,//2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,//2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,//2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0,//2040-2049 + /**Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0,//2050-2059 + 0x092e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4,//2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0,//2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160,//2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252,//2090-2099 + 0x0d520],//2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ["\u7532", "\u4e59", "\u4e19", "\u4e01", "\u620a", "\u5df1", "\u5e9a", "\u8f9b", "\u58ec", "\u7678"], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ["\u5b50", "\u4e11", "\u5bc5", "\u536f", "\u8fb0", "\u5df3", "\u5348", "\u672a", "\u7533", "\u9149", "\u620c", "\u4ea5"], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ["\u9f20", "\u725b", "\u864e", "\u5154", "\u9f99", "\u86c7", "\u9a6c", "\u7f8a", "\u7334", "\u9e21", "\u72d7", "\u732a"], + + /** + * 阳历节日 + */ + festival: { + '1-1': {title: '元旦节'}, + '2-14': {title: '情人节'}, + '5-1': {title: '劳动节'}, + '5-4': {title: '青年节'}, + '6-1': {title: '儿童节'}, + '9-10': {title: '教师节'}, + '10-1': {title: '国庆节'}, + '12-25': {title: '圣诞节'}, + + '3-8': {title: '妇女节'}, + '3-12': {title: '植树节'}, + '4-1': {title: '愚人节'}, + '5-12': {title: '护士节'}, + '7-1': {title: '建党节'}, + '8-1': {title: '建军节'}, + '12-24': {title: '平安夜'}, + }, + + /** + * 农历节日 + */ + lFestival: { + '12-30': {title: '除夕'}, + '1-1': {title: '春节'}, + '1-15': {title: '元宵节'}, + '2-2': {title: '龙抬头'}, + '5-5': {title: '端午节'}, + '7-7': {title: '七夕节'}, + '7-15': {title: '中元节'}, + '8-15': {title: '中秋节'}, + '9-9': {title: '重阳节'}, + '10-1': {title: '寒衣节'}, + '10-15': {title: '下元节'}, + '12-8': {title: '腊八节'}, + '12-23': {title: '北方小年'}, + '12-24': {title: '南方小年'}, + }, + + /** + * 返回默认定义的阳历节日 + */ + getFestival() { + return this.festival + }, + + /** + * 返回默认定义的内容里节日 + */ + getLunarFestival() { + return this.lFestival + }, + + /** + * + * @param param {Object} 按照festival的格式输入数据,设置阳历节日 + */ + setFestival(param = {}) { + this.festival = param + }, + + /** + * + * @param param {Object} 按照lFestival的格式输入数据,设置农历节日 + */ + setLunarFestival(param = {}) { + this.lFestival = param + }, + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ["\u5c0f\u5bd2", "\u5927\u5bd2", "\u7acb\u6625", "\u96e8\u6c34", "\u60ca\u86f0", "\u6625\u5206", "\u6e05\u660e", "\u8c37\u96e8", "\u7acb\u590f", "\u5c0f\u6ee1", "\u8292\u79cd", "\u590f\u81f3", "\u5c0f\u6691", "\u5927\u6691", "\u7acb\u79cb", "\u5904\u6691", "\u767d\u9732", "\u79cb\u5206", "\u5bd2\u9732", "\u971c\u964d", "\u7acb\u51ac", "\u5c0f\u96ea", "\u5927\u96ea", "\u51ac\u81f3"], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ["\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341"], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ["\u521d", "\u5341", "\u5eff", "\u5345"], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ["\u6b63", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u51ac", "\u814a"], + + /** + * 返回农历y年一整年的总天数 + * @param y lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + let i, sum = 348; + for (i = 0x8000; i > 0x8; i >>= 1) { + sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0; + } + return (sum + this.leapDays(y)); + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param y lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { //闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf); + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param y lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29); + } + return (0); + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param y lunar Year + * @param m lunar Month + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { + return -1 + }//月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29); + }, + + /** + * 返回公历(!)y年m月的天数 + * @param y solar Year + * @param m solar Month + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { + return -1 + } //若参数错误 返回-1 + const ms = m - 1; + if (ms === 1) { //2月份的闰平规律测算后确认返回28或29 + return (((y % 4 === 0) && (y % 100 !== 0) || (y % 400 === 0)) ? 29 : 28); + } else { + return (this.solarMonth[ms]); + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10; + var zhiKey = (lYear - 3) % 12; + if (ganKey === 0) ganKey = 10;//如果余数为0则为最后一个天干 + if (zhiKey === 0) zhiKey = 12;//如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1]; + + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + const s = "\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf"; + const arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]; + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + "\u5ea7";//座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12]; + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y y公历年(1900-2100) + * @param n n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if( y < 1900 || y > 2100 || n < 1 || n > 24) { + return -1; + } + const _table = this.sTermInfo[y - 1900]; + const _calcDay = [] + for (let index = 0; index < _table.length; index += 5) { + const chunk = parseInt('0x' + _table.substr(index, 5)).toString() + _calcDay.push( + chunk[0], + chunk.substr(1, 2), + chunk[3], + chunk.substr(4, 2) + ) + } + return parseInt(_calcDay[n - 1]); + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param m lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { + return -1 + } //若参数错误 返回-1 + let s = this.nStr3[m - 1]; + s += "\u6708";//加上月字 + return s; + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param d lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { //日 => \u65e5 + let s; + switch (d) { + case 10: + s = '\u521d\u5341'; + break; + case 20: + s = '\u4e8c\u5341'; + break; + case 30: + s = '\u4e09\u5341'; + break; + default : + s = this.nStr2[Math.floor(d / 10)]; + s += this.nStr1[d % 10]; + } + return (s); + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * !important! 公历参数区间1900.1.31~2100.12.31 + * @param yPara solar year + * @param mPara solar month + * @param dPara solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (yPara, mPara, dPara) { + let y = parseInt(yPara); + let m = parseInt(mPara); + let d = parseInt(dPara); + //年份限定、上限 + if (y < 1900 || y > 2100) { + return -1;// undefined转换为数字变为NaN + } + //公历传参最下限 + if (y === 1900 && m === 1 && d < 31) { + return -1; + } + + //未传参 获得当天 + let objDate; + if (!y) { + objDate = new Date(); + } else { + objDate = new Date(y, parseInt(m) - 1, d); + } + let i, leap = 0, temp = 0; + //修正ymd参数 + y = objDate.getFullYear(); + m = objDate.getMonth() + 1; + d = objDate.getDate(); + let offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000; + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i); + offset -= temp; + } + if (offset < 0) { + offset += temp; + i--; + } + + //是否今天 + let isTodayObj = new Date(), + isToday = false; + if (isTodayObj.getFullYear() === y && isTodayObj.getMonth() + 1 === m && isTodayObj.getDate() === d) { + isToday = true; + } + //星期几 + let nWeek = objDate.getDay(), + cWeek = this.nStr1[nWeek]; + //数字表示周几顺应天朝周一开始的惯例 + if (nWeek === 0) { + nWeek = 7; + } + //农历年 + const year = i; + leap = this.leapMonth(i); //闰哪个月 + let isLeap = false; + + //效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + //闰月 + if (leap > 0 && i === (leap + 1) && isLeap === false) { + --i; + isLeap = true; + temp = this.leapDays(year); //计算农历闰月天数 + } else { + temp = this.monthDays(year, i);//计算农历普通月天数 + } + //解除闰月 + if (isLeap === true && i === (leap + 1)) { + isLeap = false; + } + offset -= temp; + } + // 闰月导致数组下标重叠取反 + if (offset === 0 && leap > 0 && i === leap + 1) { + if (isLeap) { + isLeap = false; + } else { + isLeap = true; + --i; + } + } + if (offset < 0) { + offset += temp; + --i; + } + //农历月 + const month = i; + //农历日 + const day = offset + 1; + //天干地支处理 + const sm = m - 1; + const gzY = this.toGanZhiYear(year); + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + const firstNode = this.getTerm(y, (m * 2 - 1));//返回当月「节」为几日开始 + const secondNode = this.getTerm(y, (m * 2));//返回当月「节」为几日开始 + + // 依据12节气修正干支月 + let gzM = this.toGanZhi((y - 1900) * 12 + m + 11); + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12); + } + + //传入的日期的节气与否 + let isTerm = false; + let Term = null; + if (firstNode === d) { + isTerm = true; + Term = this.solarTerm[m * 2 - 2]; + } + if (secondNode === d) { + isTerm = true; + Term = this.solarTerm[m * 2 - 1]; + } + //日柱 当月一日与 1900/1/1 相差天数 + const dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10; + const gzD = this.toGanZhi(dayCyclical + d - 1); + //该日期所属的星座 + const astro = this.toAstro(m, d); + + const solarDate = y + '-' + m + '-' + d; + const lunarDate = year + '-' + month + '-' + day; + + const festival = this.festival; + const lFestival = this.lFestival; + + const festivalDate = m + '-' + d; + let lunarFestivalDate = month + '-' + day; + + // bugfix https://github.com/jjonline/calendar.js/issues/29 + // 农历节日修正:农历12月小月则29号除夕,大月则30号除夕 + // 此处取巧修正:当前为农历12月29号时增加一次判断并且把lunarFestivalDate设置为12-30以正确取得除夕 + // 天朝农历节日遇闰月过前不过后的原则,此处取农历12月天数不考虑闰月 + // 农历润12月在本工具支持的200年区间内仅1574年出现 + if (month === 12 && day === 29 && this.monthDays(year, month) === 29) { + lunarFestivalDate = '12-30'; + } + return { + date: solarDate, + lunarDate: lunarDate, + festival: festival[festivalDate] ? festival[festivalDate].title : null, + lunarFestival: lFestival[lunarFestivalDate] ? lFestival[lunarFestivalDate].title : null, + 'lYear': year, + 'lMonth': month, + 'lDay': day, + 'Animal': this.getAnimal(year), + 'IMonthCn': (isLeap ? "\u95f0" : '') + this.toChinaMonth(month), + 'IDayCn': this.toChinaDay(day), + 'cYear': y, + 'cMonth': m, + 'cDay': d, + 'gzYear': gzY, + 'gzMonth': gzM, + 'gzDay': gzD, + 'isToday': isToday, + 'isLeap': isLeap, + 'nWeek': nWeek, + 'ncWeek': "\u661f\u671f" + cWeek, + 'isTerm': isTerm, + 'Term': Term, + 'astro': astro + }; + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * !important! 参数区间1900.1.31~2100.12.1 + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { + y = parseInt(y) + m = parseInt(m) + d = parseInt(d) + isLeapMonth = !!isLeapMonth; + const leapOffset = 0; + const leapMonth = this.leapMonth(y); + const leapDay = this.leapDays(y); + if (isLeapMonth && (leapMonth !== m)) { + return -1; + }//传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y === 2100 && m === 12 && d > 1 || y === 1900 && m === 1 && d < 31) { + return -1; + }//超出了最大极限值 + const day = this.monthDays(y, m); + let _day = day; + //bugFix 2016-9-25 + //if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m); + } + if (y < 1900 || y > 2100 || d > _day) { + return -1; + }//参数合法性效验 + + //计算农历的时间差 + let offset = 0; + let i; + for (i = 1900; i < y; i++) { + offset += this.lYearDays(i); + } + let leap = 0, isAdd = false; + for (i = 1; i < m; i++) { + leap = this.leapMonth(y); + if (!isAdd) {//处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); + isAdd = true; + } + } + offset += this.monthDays(y, i); + } + //转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { + offset += day; + } + //1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + const strap = Date.UTC(1900, 1, 30, 0, 0, 0); + const calObj = new Date((offset + d - 31) * 86400000 + strap); + const cY = calObj.getUTCFullYear(); + const cM = calObj.getUTCMonth() + 1; + const cD = calObj.getUTCDate(); + + return this.solar2lunar(cY, cM, cD); + } +}; + +export default calendar; \ No newline at end of file diff --git a/src/utils/crypto.js b/src/utils/crypto.js new file mode 100644 index 0000000..4bbd03a --- /dev/null +++ b/src/utils/crypto.js @@ -0,0 +1,94 @@ +import CryptoJS from 'crypto-js'; + +export default class crypto { + /** + * token加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + static cryptoKey = '请配置cryptoKey'; + /** + * 报文加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + static aesKey = '请配置aesKey'; + /** + * 报文加密key 使用@org.springblade.test.CryptoKeyGenerator获取,需和后端配置保持一致 + * @type {string} + */ + static desKey = '请配置desKey'; + + /** + * aes 加密方法 + * @param data + * @returns {*} + */ + static encrypt(data) { + return this.encryptAES(data, this.aesKey); + } + + /** + * aes 解密方法 + * @param data + * @returns {*} + */ + static decrypt(data) { + return this.decryptAES(data, this.aesKey); + } + + /** + * aes 加密方法,同java:AesUtil.encryptToBase64(text, aesKey); + */ + static encryptAES(data, key) { + const dataBytes = CryptoJS.enc.Utf8.parse(data); + const keyBytes = CryptoJS.enc.Utf8.parse(key); + const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, { + iv: keyBytes, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); + } + + /** + * aes 解密方法,同java:AesUtil.decryptFormBase64ToString(encrypt, aesKey); + */ + static decryptAES(data, key) { + const keyBytes = CryptoJS.enc.Utf8.parse(key); + const decrypted = CryptoJS.AES.decrypt(data, keyBytes, { + iv: keyBytes, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7, + }); + return CryptoJS.enc.Utf8.stringify(decrypted); + } + + /** + * des 加密方法,同java:DesUtil.encryptToBase64(text, desKey) + */ + static encryptDES(data, key) { + const keyHex = CryptoJS.enc.Utf8.parse(key); + const encrypted = CryptoJS.DES.encrypt(data, keyHex, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + }); + return encrypted.toString(); + } + + /** + * des 解密方法,同java:DesUtil.decryptFormBase64(encryptBase64, desKey); + */ + static decryptDES(data, key) { + const keyHex = CryptoJS.enc.Utf8.parse(key); + const decrypted = CryptoJS.DES.decrypt( + { + ciphertext: CryptoJS.enc.Base64.parse(data), + }, + keyHex, + { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + } + ); + return decrypted.toString(CryptoJS.enc.Utf8); + } +} diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 0000000..35d9eb7 --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,58 @@ +export const calcDate = (date1, date2) => { + let date3 = date2 - date1; + + let days = Math.floor(date3 / (24 * 3600 * 1000)); + + let leave1 = date3 % (24 * 3600 * 1000); //计算天数后剩余的毫秒数 + let hours = Math.floor(leave1 / (3600 * 1000)); + + let leave2 = leave1 % (3600 * 1000); //计算小时数后剩余的毫秒数 + let minutes = Math.floor(leave2 / (60 * 1000)); + + let leave3 = leave2 % (60 * 1000); //计算分钟数后剩余的毫秒数 + let seconds = Math.round(date3 / 1000); + return { + leave1, + leave2, + leave3, + days: days, + hours: hours, + minutes: minutes, + seconds: seconds, + }; +}; + +/** + * 日期格式化 + */ +export function dateFormat(date, format) { + format = format || 'yyyy-MM-dd hh:mm:ss'; + if (date !== 'Invalid Date') { + let o = { + 'M+': date.getMonth() + 1, //month + 'd+': date.getDate(), //day + 'h+': date.getHours(), //hour + 'm+': date.getMinutes(), //minute + 's+': date.getSeconds(), //second + 'q+': Math.floor((date.getMonth() + 3) / 3), //quarter + S: date.getMilliseconds(), //millisecond + }; + if (/(y+)/.test(format)) + format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); + for (let k in o) + if (new RegExp('(' + k + ')').test(format)) + format = format.replace( + RegExp.$1, + RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length) + ); + return format; + } + return ''; +} + +/** + * 当前时间戳 + */ +export function dateNow() { + return dateFormat(new Date(), 'yyyyMMddhhmmss'); +} diff --git a/src/utils/flow.js b/src/utils/flow.js new file mode 100644 index 0000000..7c9e918 --- /dev/null +++ b/src/utils/flow.js @@ -0,0 +1,20 @@ +/** + * 工作流统一分类格式 + * @param category 分类字典号 + * @returns {string} + */ +export function flowCategory(category) { + return `flow_${category}`; +} + +/** + * 根据key获取流程路由 + * @param routes + * @param key + */ +export function flowRoute(routes, key) { + const data = routes.filter(d => { + return d.routeKey === key; + }); + return data.length === 0 ? [] : data[0].routeValue; +} diff --git a/src/utils/formatter.js b/src/utils/formatter.js new file mode 100644 index 0000000..003fae2 --- /dev/null +++ b/src/utils/formatter.js @@ -0,0 +1,39 @@ +import {validatenull} from "@/utils/validate"; + +/** + * 格式化工具类 + */ +export default class formatter { + static prettyCode(str) { + try { + // 为空则返回空 + if (validatenull(str)) { + return ''; + } + // 解析并格式化JSON字符串 + str = JSON.stringify(JSON.parse(str), null, 2); + + // 使用HTML实体进行替换(不改变&符号) + str = str.replace(//g, '>'); + + // 返回格式化的字符串,并添加样式类 + return str.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) { + let cls = 'number'; + if (/^"/.test(match)) { + if (/:$/.test(match)) { + cls = 'key'; + } else { + cls = 'string'; + } + } else if (/true|false/.test(match)) { + cls = 'boolean'; + } else if (/null/.test(match)) { + cls = 'null'; + } + return match; + }); + } catch (e) { + return str; + } + } +} diff --git a/src/utils/func.js b/src/utils/func.js new file mode 100644 index 0000000..647ef80 --- /dev/null +++ b/src/utils/func.js @@ -0,0 +1,233 @@ +/** + * 通用工具类 + */ +export default class func { + /** + * 不为空 + * @param val + * @returns {boolean} + */ + static notEmpty(val) { + return !this.isEmpty(val); + } + + /** + * 是否为定义 + * @param val + * @returns {boolean} + */ + static isUndefined(val) { + return val === null || typeof val === 'undefined'; + } + + /** + * 为空 + * @param val + * @returns {boolean} + */ + static isEmpty(val) { + if ( + val === null || + typeof val === 'undefined' || + (typeof val === 'string' && val === '' && val !== 'undefined') + ) { + return true; + } + return false; + } + + /** + * 强转int型 + * @param val + * @param defaultValue + * @returns {number} + */ + static toInt(val, defaultValue) { + if (this.isEmpty(val)) { + return defaultValue === undefined ? -1 : defaultValue; + } + const num = parseInt(val, 0); + return Number.isNaN(num) ? (defaultValue === undefined ? -1 : defaultValue) : num; + } + + /** + * Json强转为Form类型 + * @param obj + * @returns {FormData} + */ + static toFormData(obj) { + const data = new FormData(); + Object.keys(obj).forEach(key => { + data.append(key, Array.isArray(obj[key]) ? obj[key].join(',') : obj[key]); + }); + return data; + } + + /** + * date类转为字符串格式 + * @param date + * @param format + * @returns {null} + */ + static format(date, format = 'YYYY-MM-DD HH:mm:ss') { + return date ? date.format(format) : null; + } + + /** + * data类格式化 + * @param timestamp + * @returns {string} + */ + static formatDateTime(timestamp) { + return this.formatDate(new Date(timestamp)); + } + + /** + * data类格式化 + * @param date + * @returns {string} + */ + static formatDate(date) { + const pad = (num) => (num < 10 ? '0' + num : num); + + const year = date.getFullYear(); + const month = pad(date.getMonth() + 1); // 月份从0开始,所以+1 + const day = pad(date.getDate()); + const hour = pad(date.getHours()); + const minute = pad(date.getMinutes()); + const second = pad(date.getSeconds()); + + return `${year}-${month}-${day} ${hour}:${minute}:${second}`; + } + + /** + * 格式化时区解决时间差问题 + * @param datetime + * @returns {string} + */ + static toLocalISOString(datetime) { + let timezoneOffset = datetime.getTimezoneOffset() * 60000; // 获取当前时区与UTC的时间差(以毫秒为单位) + let localDatetime = new Date(datetime - timezoneOffset); // 调整时间,得到当前时区时间 + return localDatetime.toISOString(); + } + + /** + * 根据逗号联合 + * @param arr + * @returns {string} + */ + static join(arr) { + return Array.isArray(arr) ? arr.join(',') : arr; + } + + /** + * 根据逗号分隔 + * @param str + * @returns {string} + */ + static split(str) { + return str ? String(str).split(',') : ''; + } + + /** + * 转换空字符串 + * @param str + * @returns {string|*} + */ + static toStr(str) { + if (typeof str === 'undefined' || str === null) { + return ''; + } + return str; + } + + /** + * 判断是否为数组 + * @param param + * @returns {boolean} + */ + static isArrayAndNotEmpty(param) { + return Array.isArray(param) && param.length > 0; + } + + /** + * 格式化URL + * @param url + * @returns {*|string} + */ + static formatUrl(url) { + if (!url) return url; + if (url.startsWith('http://') || url.startsWith('https://')) { + return url; + } else { + return `http://${url}`; + } + } + + /** + * bytes转换为kb单位 + * @param bytes + * @returns {string} + */ + static bytesToKB(bytes) { + const kb = bytes / 1024; + return kb.toFixed(2); + } + + /** + * json数组转换成key value字符串 + * @param jsonArray "[{enumKey: 'key', enumValue: 'value'}]" + * @returns {*} + */ + static jsonArrayToKeyValue(jsonArray) { + if (this.isEmpty(jsonArray)) { + return ''; + } + return jsonArray.map(item => `${item.enumKey}:${item.enumValue}`).join(';'); + } + + /** + * key value字符串转换成json数组 + * @param keyValue key:value;key:value + * @returns {*[]} + */ + static keyValueToJsonArray(keyValue) { + if (this.isEmpty(keyValue)) { + return []; + } + return keyValue.split(';').map((kv, index) => { + const [key, value] = kv.split(':'); + return { + id: index, + enumKey: key, + enumValue: value + }; + }); + } + + /** + * 生成随机字符串 + * @param length 长度 + * @returns {string} + */ + static strGenerate(length) { + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const maxLength = 256; + if (length > maxLength) { + throw new Error(`长度最大值不能超过 ${maxLength}`); + } + + return Array.from({length}, () => characters.charAt(Math.floor(Math.random() * characters.length))).join(''); + } + + /** + * 生成UUID + * @returns {string} + */ + static generateUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } +} diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js new file mode 100644 index 0000000..7e6eccd --- /dev/null +++ b/src/utils/ruoyi.js @@ -0,0 +1,236 @@ + + +/** + * 通用js方法封装处理 + * Copyright (c) 2019 ruoyi + */ + +// 日期格式化 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} + +// 表单重置 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields(); + } +} + +// 添加日期范围 +export function addDateRange(params, dateRange, propName) { + let search = params; + search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; + dateRange = Array.isArray(dateRange) ? dateRange : []; + if (typeof (propName) === 'undefined') { + search.params['beginTime'] = dateRange[0]; + search.params['endTime'] = dateRange[1]; + } else { + search.params['begin' + propName] = dateRange[0]; + search.params['end' + propName] = dateRange[1]; + } + return search; +} + +// 回显数据字典 +export function selectDictLabel(datas, value) { + if (value === undefined) { + return ""; + } + var actions = []; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + value)) { + actions.push(datas[key].label); + return true; + } + }) + if (actions.length === 0) { + actions.push(value); + } + return actions.join(''); +} + +// 回显数据字典(字符串数组) +export function selectDictLabels(datas, value, separator) { + if (value === undefined) { + return ""; + } + var actions = []; + var currentSeparator = undefined === separator ? "," : separator; + var temp = value.split(currentSeparator); + Object.keys(value.split(currentSeparator)).some((val) => { + var match = false; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + temp[val])) { + actions.push(datas[key].label + currentSeparator); + match = true; + } + }) + if (!match) { + actions.push(temp[val] + currentSeparator); + } + }) + return actions.join('').substring(0, actions.join('').length - 1); +} + +// 字符串格式化(%s ) +export function sprintf(str) { + var args = arguments, flag = true, i = 1; + str = str.replace(/%s/g, function () { + var arg = args[i++]; + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; +} + +// 转换字符串,undefined,null等转化为"" +export function parseStrEmpty(str) { + if (!str || str == "undefined" || str == "null") { + return ""; + } + return str; +} + +// 数据合并 +export function mergeRecursive(source, target) { + for (var p in target) { + try { + if (target[p].constructor == Object) { + source[p] = mergeRecursive(source[p], target[p]); + } else { + source[p] = target[p]; + } + } catch (e) { + source[p] = target[p]; + } + } + return source; +}; + +/** + * 构造树型结构数据 + * @param {*} data 数据源 + * @param {*} id id字段 默认 'id' + * @param {*} parentId 父节点字段 默认 'parentId' + * @param {*} children 孩子节点字段 默认 'children' + */ +export function handleTree(data, id, parentId, children) { + let config = { + id: id || 'id', + parentId: parentId || 'parentId', + childrenList: children || 'children' + }; + + var childrenListMap = {}; + var nodeIds = {}; + var tree = []; + + for (let d of data) { + let parentId = d[config.parentId]; + if (childrenListMap[parentId] == null) { + childrenListMap[parentId] = []; + } + nodeIds[d[config.id]] = d; + childrenListMap[parentId].push(d); + } + + for (let d of data) { + let parentId = d[config.parentId]; + if (nodeIds[parentId] == null) { + tree.push(d); + } + } + + for (let t of tree) { + adaptToChildrenList(t); + } + + function adaptToChildrenList(o) { + if (childrenListMap[o[config.id]] !== null) { + o[config.childrenList] = childrenListMap[o[config.id]]; + } + if (o[config.childrenList]) { + for (let c of o[config.childrenList]) { + adaptToChildrenList(c); + } + } + } + return tree; +} + +/** +* 参数处理 +* @param {*} params 参数 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName]; + var part = encodeURIComponent(propName) + "="; + if (value !== null && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + var subPart = encodeURIComponent(params) + "="; + result += subPart + encodeURIComponent(value[key]) + "&"; + } + } + } else { + result += part + encodeURIComponent(value) + "&"; + } + } + } + return result +} + +// 验证是否为blob格式 +export async function blobValidate(data) { + try { + const text = await data.text(); + JSON.parse(text); + return false; + } catch (error) { + return true; + } +} \ No newline at end of file diff --git a/src/utils/store.js b/src/utils/store.js new file mode 100644 index 0000000..d007dc9 --- /dev/null +++ b/src/utils/store.js @@ -0,0 +1,103 @@ +import { validatenull } from 'utils/validate'; +import website from '@/config/website'; + +const keyName = website.key + '-'; +/** + * 存储localStorage + */ +export const setStore = (params = {}) => { + let { name, content, type } = params; + name = keyName + name; + let obj = { + dataType: typeof content, + content: content, + type: type, + datetime: new Date().getTime(), + }; + if (type) window.sessionStorage.setItem(name, JSON.stringify(obj)); + else window.localStorage.setItem(name, JSON.stringify(obj)); +}; +/** + * 获取localStorage + */ + +export const getStore = (params = {}) => { + let { name, debug } = params; + name = keyName + name; + let obj = {}, + content; + obj = window.sessionStorage.getItem(name); + if (validatenull(obj)) obj = window.localStorage.getItem(name); + if (validatenull(obj)) return; + try { + obj = JSON.parse(obj); + } catch { + return obj; + } + if (debug) { + return obj; + } + if (obj.dataType == 'string') { + content = obj.content; + } else if (obj.dataType == 'number') { + content = Number(obj.content); + } else if (obj.dataType == 'boolean') { + content = eval(obj.content); + } else if (obj.dataType == 'object') { + content = obj.content; + } + return content; +}; +/** + * 删除localStorage + */ +export const removeStore = (params = {}) => { + let { name, type } = params; + name = keyName + name; + if (type) { + window.sessionStorage.removeItem(name); + } else { + window.localStorage.removeItem(name); + } +}; + +/** + * 获取全部localStorage + */ +export const getAllStore = (params = {}) => { + let list = []; + let { type } = params; + if (type) { + for (let i = 0; i <= window.sessionStorage.length; i++) { + list.push({ + name: window.sessionStorage.key(i), + content: getStore({ + name: window.sessionStorage.key(i), + type: 'session', + }), + }); + } + } else { + for (let i = 0; i <= window.localStorage.length; i++) { + list.push({ + name: window.localStorage.key(i), + content: getStore({ + name: window.localStorage.key(i), + }), + }); + } + } + return list; +}; + +/** + * 清空全部localStorage + */ +export const clearStore = (params = {}) => { + let { type } = params; + if (type) { + window.sessionStorage.clear(); + } else { + window.localStorage.clear(); + } +}; diff --git a/src/utils/util.js b/src/utils/util.js new file mode 100644 index 0000000..0cdfc47 --- /dev/null +++ b/src/utils/util.js @@ -0,0 +1,413 @@ +import { validatenull } from './validate'; +import sha256 from 'crypto-js/sha256'; +import Base64 from 'crypto-js/enc-base64'; +//表单序列化 +export const serialize = data => { + let list = []; + Object.keys(data).forEach(ele => { + list.push(`${ele}=${data[ele]}`); + }); + return list.join('&'); +}; +export const getObjType = obj => { + var toString = Object.prototype.toString; + var map = { + '[object Boolean]': 'boolean', + '[object Number]': 'number', + '[object String]': 'string', + '[object Function]': 'function', + '[object Array]': 'array', + '[object Date]': 'date', + '[object RegExp]': 'regExp', + '[object Undefined]': 'undefined', + '[object Null]': 'null', + '[object Object]': 'object', + }; + if (obj instanceof Element) { + return 'element'; + } + return map[toString.call(obj)]; +}; +/** + * 对象深拷贝 + */ +export const deepClone = data => { + var type = getObjType(data); + var obj; + if (type === 'array') { + obj = []; + } else if (type === 'object') { + obj = {}; + } else { + //不再具有下一层次 + return data; + } + if (type === 'array') { + for (var i = 0, len = data.length; i < len; i++) { + obj.push(deepClone(data[i])); + } + } else if (type === 'object') { + for (var key in data) { + obj[key] = deepClone(data[key]); + } + } + return obj; +}; +/** + * 设置灰度模式 + */ +export const toggleGrayMode = status => { + if (status) { + document.body.className = document.body.className + ' grayMode'; + } else { + document.body.className = document.body.className.replace(' grayMode', ''); + } +}; +/** + * 设置主题 + */ +export const setTheme = name => { + document.body.className = name; +}; + +/** + * 加密处理 + */ +export const encryption = params => { + let { data = {}, type, param, key } = params; + let result = JSON.parse(JSON.stringify(data)); + if (type == 'Base64') { + param.forEach(ele => { + result[ele] = Base64.stringify(result[ele]); + }); + } else if (type == 'Aes') { + param.forEach(ele => { + result[ele] = sha256(result[ele], key); + }); + } + return result; +}; + +/** + * 浏览器判断是否全屏 + */ +export const fullscreenToggel = () => { + if (fullscreenEnable()) { + exitFullScreen(); + } else { + reqFullScreen(); + } +}; +/** + * esc监听全屏 + */ +export const listenfullscreen = callback => { + function listen() { + callback(); + } + + document.addEventListener('fullscreenchange', function () { + listen(); + }); + document.addEventListener('mozfullscreenchange', function () { + listen(); + }); + document.addEventListener('webkitfullscreenchange', function () { + listen(); + }); + document.addEventListener('msfullscreenchange', function () { + listen(); + }); +}; +/** + * 浏览器判断是否全屏 + */ +export const fullscreenEnable = () => { + var isFullscreen = + document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen; + return isFullscreen; +}; + +/** + * 浏览器全屏 + */ +export const reqFullScreen = () => { + if (document.documentElement.requestFullScreen) { + document.documentElement.requestFullScreen(); + } else if (document.documentElement.webkitRequestFullScreen) { + document.documentElement.webkitRequestFullScreen(); + } else if (document.documentElement.mozRequestFullScreen) { + document.documentElement.mozRequestFullScreen(); + } +}; +/** + * 浏览器退出全屏 + */ +export const exitFullScreen = () => { + if (document.documentElement.requestFullScreen) { + document.exitFullScreen(); + } else if (document.documentElement.webkitRequestFullScreen) { + document.webkitCancelFullScreen(); + } else if (document.documentElement.mozRequestFullScreen) { + document.mozCancelFullScreen(); + } +}; +/** + * 递归寻找子类的父类 + */ + +export const findParent = (menu, id) => { + for (let i = 0; i < menu.length; i++) { + if (menu[i].children.length != 0) { + for (let j = 0; j < menu[i].children.length; j++) { + if (menu[i].children[j].id == id) { + return menu[i]; + } else { + if (menu[i].children[j].children.length != 0) { + return findParent(menu[i].children[j].children, id); + } + } + } + } + } +}; +/** + * 判断2个对象属性和值是否相等 + */ + +/** + * 动态插入css + */ + +export const loadStyle = url => { + const link = document.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + const head = document.getElementsByTagName('head')[0]; + head.appendChild(link); +}; +/** + * 判断路由是否相等 + */ +export const diff = (obj1, obj2) => { + delete obj1.close; + var o1 = obj1 instanceof Object; + var o2 = obj2 instanceof Object; + if (!o1 || !o2) { + /* 判断不是对象 */ + return obj1 === obj2; + } + + if (Object.keys(obj1).length !== Object.keys(obj2).length) { + return false; + //Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2; + } + + for (var attr in obj1) { + var t1 = obj1[attr] instanceof Object; + var t2 = obj2[attr] instanceof Object; + if (t1 && t2) { + return diff(obj1[attr], obj2[attr]); + } else if (obj1[attr] !== obj2[attr]) { + return false; + } + } + return true; +}; +/** + * 根据字典的value显示label + */ +export const findByvalue = (dic, value) => { + let result = ''; + if (validatenull(dic)) return value; + if (typeof value == 'string' || typeof value == 'number' || typeof value == 'boolean') { + let index = 0; + index = findArray(dic, value); + if (index != -1) { + result = dic[index].label; + } else { + result = value; + } + } else if (value instanceof Array) { + result = []; + let index = 0; + value.forEach(ele => { + index = findArray(dic, ele); + if (index != -1) { + result.push(dic[index].label); + } else { + result.push(value); + } + }); + result = result.toString(); + } + return result; +}; +/** + * 根据字典的value查找对应的index + */ +export const findArray = (dic, value) => { + for (let i = 0; i < dic.length; i++) { + if (dic[i].value == value) { + return i; + } + } + return -1; +}; +/** + * 生成随机len位数字 + */ +export const randomLenNum = (len, date) => { + let random = ''; + random = Math.ceil(Math.random() * 100000000000000) + .toString() + .substr(0, len ? len : 4); + if (date) random = random + Date.now(); + return random; +}; +/** + * 打开小窗口 + */ +export const openWindow = (url, title, w, h) => { + // Fixes dual-screen position Most browsers Firefox + const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left; + const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top; + + const width = window.innerWidth + ? window.innerWidth + : document.documentElement.clientWidth + ? document.documentElement.clientWidth + : screen.width; + const height = window.innerHeight + ? window.innerHeight + : document.documentElement.clientHeight + ? document.documentElement.clientHeight + : screen.height; + + const left = width / 2 - w / 2 + dualScreenLeft; + const top = height / 2 - h / 2 + dualScreenTop; + const newWindow = window.open( + url, + title, + 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + + w + + ', height=' + + h + + ', top=' + + top + + ', left=' + + left + ); + + // Puts focus on the newWindow + if (window.focus) { + newWindow.focus(); + } +}; + +export const getScreen = isCollapse => { + if (document.body.clientWidth <= 768) { + return !isCollapse; + } else { + return isCollapse; + } +}; + +/** + * 获取顶部地址栏地址 + */ +export const getTopUrl = () => { + return window.location.href.split('/#/')[0]; +}; + +/** + * 获取url参数 + * @param name 参数名 + */ +export const getQueryString = name => { + let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); + let r = window.location.search.substr(1).match(reg); + if (r != null) return unescape(decodeURI(r[2])); + return null; +}; + +/** + * 下载文件 + * @param {String} path - 文件地址 + * @param {String} name - 文件名,eg: test.png + */ +export const downloadFileBlob = (path, name) => { + const xhr = new XMLHttpRequest(); + xhr.open('get', path); + xhr.responseType = 'blob'; + xhr.send(); + xhr.onload = function () { + if (this.status === 200 || this.status === 304) { + // 如果是IE10及以上,不支持download属性,采用msSaveOrOpenBlob方法,但是IE10以下也不支持msSaveOrOpenBlob + if ('msSaveOrOpenBlob' in navigator) { + navigator.msSaveOrOpenBlob(this.response, name); + return; + } + const url = URL.createObjectURL(this.response); + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = url; + a.download = name; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + } + }; +}; + +/** + * 下载文件 + * @param {String} path - 文件地址 + * @param {String} name - 文件名,eg: test.png + */ +export const downloadFileBase64 = (path, name) => { + const xhr = new XMLHttpRequest(); + xhr.open('get', path); + xhr.responseType = 'blob'; + xhr.send(); + xhr.onload = function () { + if (this.status === 200 || this.status === 304) { + const fileReader = new FileReader(); + fileReader.readAsDataURL(this.response); + fileReader.onload = function () { + const a = document.createElement('a'); + a.style.display = 'none'; + a.href = this.result; + a.download = name; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + }; + } + }; +}; +/** + * 下载excel + * @param {blob} fileArrayBuffer 文件流 + * @param {String} filename 文件名称 + */ +export const downloadXls = (fileArrayBuffer, filename) => { + let data = new Blob([fileArrayBuffer], { type: 'application/vnd.ms-excel,charset=utf-8' }); + if (typeof window.chrome !== 'undefined') { + // Chrome + var link = document.createElement('a'); + link.href = window.URL.createObjectURL(data); + link.download = filename; + link.click(); + } else if (typeof window.navigator.msSaveBlob !== 'undefined') { + // IE + var blob = new Blob([data], { type: 'application/force-download' }); + window.navigator.msSaveBlob(blob, filename); + } else { + // Firefox + var file = new File([data], filename, { type: 'application/force-download' }); + window.open(URL.createObjectURL(file)); + } +}; diff --git a/src/utils/validate.js b/src/utils/validate.js new file mode 100644 index 0000000..c3834b2 --- /dev/null +++ b/src/utils/validate.js @@ -0,0 +1,274 @@ +/** + * Created by jiachenpan on 16/11/18. + */ + +export function isvalidUsername(str) { + const valid_map = ['admin', 'editor']; + return valid_map.indexOf(str.trim()) >= 0; +} + +/* 合法uri*/ +export function validateURL(textval) { + const urlregex = + /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; + return urlregex.test(textval); +} + +/** + * 邮箱 + * @param {*} s + */ +export function isEmail(s) { + return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s); +} + +/** + * 手机号码 + * @param {*} s + */ +export function isMobile(s) { + return /^1[0-9]{10}$/.test(s); +} + +/** + * 电话号码 + * @param {*} s + */ +export function isPhone(s) { + return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s); +} + +/** + * URL地址 + * @param {*} s + */ +export function isURL(s) { + return /^http[s]?:\/\/.*/.test(s); +} + +/* 小写字母*/ +export function validateLowerCase(str) { + const reg = /^[a-z]+$/; + return reg.test(str); +} + +/* 大写字母*/ +export function validateUpperCase(str) { + const reg = /^[A-Z]+$/; + return reg.test(str); +} + +/* 大小写字母*/ +export function validatAlphabets(str) { + const reg = /^[A-Za-z]+$/; + return reg.test(str); +} + +/*验证pad还是pc*/ +export const vaildatePc = function () { + const userAgentInfo = navigator.userAgent; + const Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']; + let flag = true; + for (var v = 0; v < Agents.length; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +}; + +/** + * validate email + * @param email + * @returns {boolean} + */ +export function validateEmail(email) { + const re = + /^(([^<>()\\[\]\\.,;:\s@"]+(\.[^<>()\\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(email); +} + +/** + * 判断身份证号码 + */ +export function cardid(code) { + let list = []; + let result = true; + let msg = ''; + var city = { + 11: '北京', + 12: '天津', + 13: '河北', + 14: '山西', + 15: '内蒙古', + 21: '辽宁', + 22: '吉林', + 23: '黑龙江 ', + 31: '上海', + 32: '江苏', + 33: '浙江', + 34: '安徽', + 35: '福建', + 36: '江西', + 37: '山东', + 41: '河南', + 42: '湖北 ', + 43: '湖南', + 44: '广东', + 45: '广西', + 46: '海南', + 50: '重庆', + 51: '四川', + 52: '贵州', + 53: '云南', + 54: '西藏 ', + 61: '陕西', + 62: '甘肃', + 63: '青海', + 64: '宁夏', + 65: '新疆', + 71: '台湾', + 81: '香港', + 82: '澳门', + 91: '国外 ', + }; + if (!validatenull(code)) { + if (code.length === 18) { + if (!code || !/(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(code)) { + msg = '证件号码格式错误'; + } else if (!city[code.substr(0, 2)]) { + msg = '地址编码错误'; + } else { + //18位身份证需要验证最后一位校验位 + code = code.split(''); + //∑(ai×Wi)(mod 11) + //加权因子 + var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; + //校验位 + var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, 'x']; + var sum = 0; + var ai = 0; + var wi = 0; + for (var i = 0; i < 17; i++) { + ai = code[i]; + wi = factor[i]; + sum += ai * wi; + } + if (parity[sum % 11] !== code[17]) { + msg = '证件号码校验位错误'; + } else { + result = false; + } + } + } else { + msg = '证件号码长度不为18位'; + } + } else { + msg = '证件号码不能为空'; + } + list.push(result); + list.push(msg); + return list; +} + +/** + * 判断手机号码是否正确 + */ +export function isvalidatemobile(phone) { + let list = []; + let result = true; + let msg = ''; + var isPhone = /^0\d{2,3}-?\d{7,8}$/; + //增加134 减少|1349[0-9]{7},增加181,增加145,增加17[678] + if (!validatenull(phone)) { + if (phone.length === 11) { + if (isPhone.test(phone)) { + msg = '手机号码格式不正确'; + } else { + result = false; + } + } else { + msg = '手机号码长度不为11位'; + } + } else { + msg = '手机号码不能为空'; + } + list.push(result); + list.push(msg); + return list; +} + +/** + * 判断姓名是否正确 + */ +export function validatename(name) { + var regName = /^[\u4e00-\u9fa5]{2,4}$/; + if (!regName.test(name)) return false; + return true; +} + +/** + * 判断是否为整数 + */ +export function validatenum(num, type) { + let regName = /[^\d.]/g; + if (type === 1) { + if (!regName.test(num)) return false; + } else if (type === 2) { + regName = /[^\d]/g; + if (!regName.test(num)) return false; + } + return true; +} + +/** + * 判断是否为小数 + */ +export function validatenumord(num, type) { + let regName = /[^\d.]/g; + if (type === 1) { + if (!regName.test(num)) return false; + } else if (type === 2) { + regName = /[^\d.]/g; + if (!regName.test(num)) return false; + } + return true; +} + +/** + * 判断是否为空 + */ +export function validatenull(val) { + if (typeof val == 'boolean') { + return false; + } + if (typeof val == 'number') { + return false; + } + if (val instanceof Array) { + if (val.length === 0) return true; + } else if (val instanceof Object) { + if (JSON.stringify(val) === '{}') return true; + } else { + if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') + return true; + return false; + } + return false; +} + +/** + * 判断是否为json + */ +export function validatejson(val) { + if (typeof val === 'string') { + try { + const obj = JSON.parse(val); + return obj !== null && typeof obj === 'object'; + } catch (e) { + return false; + } + } + return false; +} diff --git a/src/views/authority/apiscope.vue b/src/views/authority/apiscope.vue new file mode 100644 index 0000000..bbf5fd8 --- /dev/null +++ b/src/views/authority/apiscope.vue @@ -0,0 +1,629 @@ + + + \ No newline at end of file diff --git a/src/views/authority/datascope.vue b/src/views/authority/datascope.vue new file mode 100644 index 0000000..14d0b9a --- /dev/null +++ b/src/views/authority/datascope.vue @@ -0,0 +1,764 @@ + + + diff --git a/src/views/authority/role.vue b/src/views/authority/role.vue new file mode 100644 index 0000000..d55d34a --- /dev/null +++ b/src/views/authority/role.vue @@ -0,0 +1,401 @@ + + + diff --git a/src/views/desk/notice.vue b/src/views/desk/notice.vue new file mode 100644 index 0000000..8944237 --- /dev/null +++ b/src/views/desk/notice.vue @@ -0,0 +1,287 @@ + + + + + \ No newline at end of file diff --git a/src/views/job/jobinfo.vue b/src/views/job/jobinfo.vue new file mode 100644 index 0000000..e63fd61 --- /dev/null +++ b/src/views/job/jobinfo.vue @@ -0,0 +1,294 @@ + + + + + diff --git a/src/views/job/jobserver.vue b/src/views/job/jobserver.vue new file mode 100644 index 0000000..f156c46 --- /dev/null +++ b/src/views/job/jobserver.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/src/views/martial/dispatch/list.vue b/src/views/martial/dispatch/list.vue new file mode 100644 index 0000000..32c6534 --- /dev/null +++ b/src/views/martial/dispatch/list.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/views/martial/order/list.vue b/src/views/martial/order/list.vue new file mode 100644 index 0000000..2fb66d0 --- /dev/null +++ b/src/views/martial/order/list.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/src/views/martial/registration/detail.vue b/src/views/martial/registration/detail.vue new file mode 100644 index 0000000..e861387 --- /dev/null +++ b/src/views/martial/registration/detail.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/src/views/martial/schedule/list.vue b/src/views/martial/schedule/list.vue new file mode 100644 index 0000000..f715453 --- /dev/null +++ b/src/views/martial/schedule/list.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/monitor/log/api.vue b/src/views/monitor/log/api.vue new file mode 100644 index 0000000..be4fbb8 --- /dev/null +++ b/src/views/monitor/log/api.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/views/monitor/log/error.vue b/src/views/monitor/log/error.vue new file mode 100644 index 0000000..a94c6ca --- /dev/null +++ b/src/views/monitor/log/error.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/views/monitor/log/usual.vue b/src/views/monitor/log/usual.vue new file mode 100644 index 0000000..2b6d1fa --- /dev/null +++ b/src/views/monitor/log/usual.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/views/resource/attach.vue b/src/views/resource/attach.vue new file mode 100644 index 0000000..fc2bf4d --- /dev/null +++ b/src/views/resource/attach.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/src/views/resource/oss.vue b/src/views/resource/oss.vue new file mode 100644 index 0000000..c7de273 --- /dev/null +++ b/src/views/resource/oss.vue @@ -0,0 +1,444 @@ + + + diff --git a/src/views/resource/sms.vue b/src/views/resource/sms.vue new file mode 100644 index 0000000..b68bafc --- /dev/null +++ b/src/views/resource/sms.vue @@ -0,0 +1,461 @@ + + + diff --git a/src/views/system/autocode/index.vue b/src/views/system/autocode/index.vue new file mode 100644 index 0000000..92d55c7 --- /dev/null +++ b/src/views/system/autocode/index.vue @@ -0,0 +1,766 @@ + + + \ No newline at end of file diff --git a/src/views/system/autocode/part.vue b/src/views/system/autocode/part.vue new file mode 100644 index 0000000..5aa7e62 --- /dev/null +++ b/src/views/system/autocode/part.vue @@ -0,0 +1,318 @@ + + + \ No newline at end of file diff --git a/src/views/system/client.vue b/src/views/system/client.vue new file mode 100644 index 0000000..b505b54 --- /dev/null +++ b/src/views/system/client.vue @@ -0,0 +1,368 @@ + + + + + diff --git a/src/views/system/dept.vue b/src/views/system/dept.vue new file mode 100644 index 0000000..131597a --- /dev/null +++ b/src/views/system/dept.vue @@ -0,0 +1,379 @@ + + + + + diff --git a/src/views/system/dict.vue b/src/views/system/dict.vue new file mode 100644 index 0000000..7ed5d8c --- /dev/null +++ b/src/views/system/dict.vue @@ -0,0 +1,397 @@ + + + \ No newline at end of file diff --git a/src/views/system/dictbiz.vue b/src/views/system/dictbiz.vue new file mode 100644 index 0000000..0e3f5e0 --- /dev/null +++ b/src/views/system/dictbiz.vue @@ -0,0 +1,450 @@ + + + diff --git a/src/views/system/menu.vue b/src/views/system/menu.vue new file mode 100644 index 0000000..0b45850 --- /dev/null +++ b/src/views/system/menu.vue @@ -0,0 +1,435 @@ + + + + + diff --git a/src/views/system/param.vue b/src/views/system/param.vue new file mode 100644 index 0000000..cfd47a8 --- /dev/null +++ b/src/views/system/param.vue @@ -0,0 +1,371 @@ + + + diff --git a/src/views/system/post.vue b/src/views/system/post.vue new file mode 100644 index 0000000..4ab72a5 --- /dev/null +++ b/src/views/system/post.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/src/views/system/tenant.vue b/src/views/system/tenant.vue new file mode 100644 index 0000000..b2aa82c --- /dev/null +++ b/src/views/system/tenant.vue @@ -0,0 +1,603 @@ + + + + + diff --git a/src/views/system/tenantpackage.vue b/src/views/system/tenantpackage.vue new file mode 100644 index 0000000..9a90bc6 --- /dev/null +++ b/src/views/system/tenantpackage.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/src/views/system/topmenu.vue b/src/views/system/topmenu.vue new file mode 100644 index 0000000..490f7e0 --- /dev/null +++ b/src/views/system/topmenu.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/src/views/system/user.vue b/src/views/system/user.vue new file mode 100644 index 0000000..0b60fa0 --- /dev/null +++ b/src/views/system/user.vue @@ -0,0 +1,1006 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/userinfo.vue b/src/views/system/userinfo.vue new file mode 100644 index 0000000..205e289 --- /dev/null +++ b/src/views/system/userinfo.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/views/tool/code.vue b/src/views/tool/code.vue new file mode 100644 index 0000000..cc422f8 --- /dev/null +++ b/src/views/tool/code.vue @@ -0,0 +1,660 @@ + + + diff --git a/src/views/tool/datasource.vue b/src/views/tool/datasource.vue new file mode 100644 index 0000000..2b6036e --- /dev/null +++ b/src/views/tool/datasource.vue @@ -0,0 +1,377 @@ + + + + + diff --git a/src/views/tool/model.vue b/src/views/tool/model.vue new file mode 100644 index 0000000..5b6e8a3 --- /dev/null +++ b/src/views/tool/model.vue @@ -0,0 +1,393 @@ + + + + diff --git a/src/views/wel/dashboard.vue b/src/views/wel/dashboard.vue new file mode 100644 index 0000000..62f5612 --- /dev/null +++ b/src/views/wel/dashboard.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue new file mode 100644 index 0000000..dae11d4 --- /dev/null +++ b/src/views/wel/index.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..87e82db --- /dev/null +++ b/vite.config.js @@ -0,0 +1,48 @@ +import { defineConfig, loadEnv } from 'vite'; + +const { resolve } = require('path'); +import createVitePlugins from './vite/plugins'; +// https://vitejs.dev/config/ +export default ({ mode, command }) => { + const env = loadEnv(mode, process.cwd()); + const { VITE_APP_BASE } = env; + return defineConfig({ + base: VITE_APP_BASE, + define: { + __VUE_I18N_FULL_INSTALL__: true, + __VUE_I18N_LEGACY_API__: true, + __INTLIFY_PROD_DEVTOOLS__: false, + }, + server: { + port: 2888, + proxy: { + '/api': { + target: 'http://localhost:82', + // target: 'http://120.197.149.12:8480', + // target: 'https://2df1-223-74-180-188.ngrok-free.app ', + //target: 'https://saber3.bladex.cn/api', + changeOrigin: true, + rewrite: path => path.replace(/^\/api/, ''), + }, + }, + }, + resolve: { + alias: { + '~': resolve(__dirname, './'), + '@': resolve(__dirname, './src'), + components: resolve(__dirname, './src/components'), + styles: resolve(__dirname, './src/styles'), + utils: resolve(__dirname, './src/utils'), + }, + }, + plugins: createVitePlugins(env, command === 'build'), + build: { + target: 'esnext', + }, + optimizeDeps: { + esbuildOptions: { + target: 'esnext', + }, + }, + }); +}; diff --git a/vite/plugins/auto-import.js b/vite/plugins/auto-import.js new file mode 100644 index 0000000..bf701bb --- /dev/null +++ b/vite/plugins/auto-import.js @@ -0,0 +1,8 @@ +import autoImport from 'unplugin-auto-import/vite'; + +export default function createAutoImport() { + return autoImport({ + imports: ['vue', 'vue-router', 'vuex'], + dts: false, + }); +} diff --git a/vite/plugins/compression.js b/vite/plugins/compression.js new file mode 100644 index 0000000..21383c5 --- /dev/null +++ b/vite/plugins/compression.js @@ -0,0 +1,27 @@ +import compression from 'vite-plugin-compression'; + +export default function createCompression(env) { + const { VITE_BUILD_COMPRESS } = env; + const plugin = []; + if (VITE_BUILD_COMPRESS) { + const compressList = VITE_BUILD_COMPRESS.split(','); + if (compressList.includes('gzip')) { + plugin.push( + compression({ + ext: '.gz', + deleteOriginFile: false, + }) + ); + } + if (compressList.includes('brotli')) { + plugin.push( + compression({ + ext: '.br', + algorithm: 'brotliCompress', + deleteOriginFile: false, + }) + ); + } + } + return plugin; +} diff --git a/vite/plugins/index.js b/vite/plugins/index.js new file mode 100644 index 0000000..d3a6369 --- /dev/null +++ b/vite/plugins/index.js @@ -0,0 +1,13 @@ +import vue from '@vitejs/plugin-vue'; + +import createAutoImport from './auto-import'; +import createCompression from './compression'; +import createSetupExtend from './setup-extend'; + +export default function createVitePlugins(viteEnv, isBuild = false) { + const vitePlugins = [vue()]; + vitePlugins.push(createAutoImport()); + vitePlugins.push(createSetupExtend()); + isBuild && vitePlugins.push(...createCompression(viteEnv)); + return vitePlugins; +} \ No newline at end of file diff --git a/vite/plugins/setup-extend.js b/vite/plugins/setup-extend.js new file mode 100644 index 0000000..1622ea6 --- /dev/null +++ b/vite/plugins/setup-extend.js @@ -0,0 +1,5 @@ +import setupExtend from 'vite-plugin-vue-setup-extend'; + +export default function createSetupExtend() { + return setupExtend(); +} diff --git a/vite/plugins/setup-mock.js b/vite/plugins/setup-mock.js new file mode 100644 index 0000000..67ae030 --- /dev/null +++ b/vite/plugins/setup-mock.js @@ -0,0 +1,11 @@ +import { viteMockServe } from 'vite-plugin-mock'; + +export default function createSetupMock() { + return viteMockServe({ + // 更多配置见最下方 + mockPath: './mock/', //mock文件地址 + injectCode: ` import { setupProdMockServer } from './mockProdServer'; setupProdMockServer(); `, + logger: false, //是否在控制台显示请求日志 + supportTs: false, //打开后,可以读取 ts 文件模块。 请注意,打开后将无法监视.js 文件 + }); +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..f3dabe0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1701 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@antfu/utils@^0.7.0": + version "0.7.7" + resolved "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.7.tgz" + integrity sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg== + +"@babel/parser@^7.24.4": + version "7.24.6" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== + +"@babel/runtime@^7.12.0": + version "7.23.7" + resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.23.7.tgz" + integrity sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA== + dependencies: + regenerator-runtime "^0.14.0" + +"@bpmn-io/diagram-js-ui@^0.2.2": + version "0.2.2" + resolved "https://registry.npmmirror.com/@bpmn-io/diagram-js-ui/-/diagram-js-ui-0.2.2.tgz" + integrity sha512-IgOIxOwoqsFB2mMPdXtcbPVPjdYkZ3huW7ipowYLhg5jdRGHlBronQ+LER+lfWro6sPtzEsw7qX8D8Yq9M2S5g== + dependencies: + htm "^3.1.1" + preact "^10.11.2" + +"@ctrl/tinycolor@^3.4.1": + version "3.6.1" + resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz" + integrity sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA== + +"@element-plus/icons-vue@^2.0.6", "@element-plus/icons-vue@^2.3.1": + version "2.3.1" + resolved "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz" + integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== + +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + +"@floating-ui/core@^1.5.3": + version "1.5.3" + resolved "https://registry.npmmirror.com/@floating-ui/core/-/core-1.5.3.tgz" + integrity sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q== + dependencies: + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/dom@^1.0.1": + version "1.5.4" + resolved "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.5.4.tgz" + integrity sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ== + dependencies: + "@floating-ui/core" "^1.5.3" + "@floating-ui/utils" "^0.2.0" + +"@floating-ui/utils@^0.2.0": + version "0.2.1" + resolved "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.1.tgz" + integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== + +"@intlify/core-base@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz" + integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA== + dependencies: + "@intlify/devtools-if" "9.2.2" + "@intlify/message-compiler" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + +"@intlify/devtools-if@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz" + integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg== + dependencies: + "@intlify/shared" "9.2.2" + +"@intlify/message-compiler@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz" + integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA== + dependencies: + "@intlify/shared" "9.2.2" + source-map "0.6.1" + +"@intlify/shared@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz" + integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q== + +"@intlify/vue-devtools@9.2.2": + version "9.2.2" + resolved "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz" + integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg== + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + +"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15": + version "1.4.15" + resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@popperjs/core@npm:@sxzz/popperjs-es@^2.11.7": + version "2.11.7" + resolved "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz" + integrity sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ== + +"@rollup/pluginutils@^5.0.2": + version "5.1.0" + resolved "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== + +"@saber/nf-design-base-elp@^1.2.0": + version "1.2.0" + resolved "https://center.javablade.com/api/packages/blade/npm/%40saber%2Fnf-design-base-elp/-/1.2.0/nf-design-base-elp-1.2.0.tgz" + integrity sha512-ThpU7EpSIGP8eR3N3hRvI+0g4RU43suSRTHxc8YPBbxlgbN4I26p/cJprYSusuwQS+OZPLivMs+ciuoknCrwBw== + dependencies: + bpmn-js "11.5.0" + monaco-editor "0.36.1" + randomcolor "^0.6.2" + +"@smallwei/avue@^3.4.8": + version "3.4.8" + resolved "https://registry.npmmirror.com/@smallwei/avue/-/avue-3.4.8.tgz" + integrity sha512-L617+RpqhLI+fz/+A8sqSCnLjLDMk9Q++8Z2mPcxE9Shj4+cYRzFcYota++ykuKafHClEUujdK55JgCFsrC6WA== + dependencies: + "@element-plus/icons-vue" "^2.0.6" + countup.js "^1.9.3" + dayjs "^1.10.4" + +"@transloadit/prettier-bytes@0.0.7": + version "0.0.7" + resolved "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz" + integrity sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA== + +"@types/estree@^1.0.0", "@types/estree@1.0.5": + version "1.0.5" + resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/event-emitter@^0.3.3": + version "0.3.5" + resolved "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz" + integrity sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ== + +"@types/lodash-es@*", "@types/lodash-es@^4.17.6": + version "4.17.12" + resolved "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*", "@types/lodash@^4.14.182": + version "4.14.202" + resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.202.tgz" + integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ== + +"@types/web-bluetooth@^0.0.16": + version "0.0.16" + resolved "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz" + integrity sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ== + +"@uppy/companion-client@^2.2.2": + version "2.2.2" + resolved "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz" + integrity sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og== + dependencies: + "@uppy/utils" "^4.1.2" + namespace-emitter "^2.0.1" + +"@uppy/core@^2.0.3", "@uppy/core@^2.1.1", "@uppy/core@^2.1.4", "@uppy/core@^2.3.3": + version "2.3.4" + resolved "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz" + integrity sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ== + dependencies: + "@transloadit/prettier-bytes" "0.0.7" + "@uppy/store-default" "^2.1.1" + "@uppy/utils" "^4.1.3" + lodash.throttle "^4.1.1" + mime-match "^1.0.2" + namespace-emitter "^2.0.1" + nanoid "^3.1.25" + preact "^10.5.13" + +"@uppy/store-default@^2.1.1": + version "2.1.1" + resolved "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz" + integrity sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ== + +"@uppy/utils@^4.1.2", "@uppy/utils@^4.1.3": + version "4.1.3" + resolved "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz" + integrity sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw== + dependencies: + lodash.throttle "^4.1.1" + +"@uppy/xhr-upload@^2.0.3", "@uppy/xhr-upload@^2.0.7": + version "2.1.3" + resolved "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz" + integrity sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ== + dependencies: + "@uppy/companion-client" "^2.2.2" + "@uppy/utils" "^4.1.2" + nanoid "^3.1.25" + +"@vitejs/plugin-vue@^5.0.4": + version "5.0.4" + resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz" + integrity sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ== + +"@vue/compiler-core@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz" + integrity sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/shared" "3.4.27" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.0" + +"@vue/compiler-dom@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz" + integrity sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw== + dependencies: + "@vue/compiler-core" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/compiler-sfc@^3.2.29", "@vue/compiler-sfc@^3.4.27", "@vue/compiler-sfc@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz" + integrity sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA== + dependencies: + "@babel/parser" "^7.24.4" + "@vue/compiler-core" "3.4.27" + "@vue/compiler-dom" "3.4.27" + "@vue/compiler-ssr" "3.4.27" + "@vue/shared" "3.4.27" + estree-walker "^2.0.2" + magic-string "^0.30.10" + postcss "^8.4.38" + source-map-js "^1.2.0" + +"@vue/compiler-ssr@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz" + integrity sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw== + dependencies: + "@vue/compiler-dom" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/devtools-api@^6.0.0-beta.11", "@vue/devtools-api@^6.2.1", "@vue/devtools-api@^6.5.1": + version "6.5.1" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.1.tgz" + integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA== + +"@vue/reactivity@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz" + integrity sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA== + dependencies: + "@vue/shared" "3.4.27" + +"@vue/runtime-core@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz" + integrity sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA== + dependencies: + "@vue/reactivity" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/runtime-dom@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz" + integrity sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q== + dependencies: + "@vue/runtime-core" "3.4.27" + "@vue/shared" "3.4.27" + csstype "^3.1.3" + +"@vue/server-renderer@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz" + integrity sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA== + dependencies: + "@vue/compiler-ssr" "3.4.27" + "@vue/shared" "3.4.27" + +"@vue/shared@3.4.27": + version "3.4.27" + resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz" + integrity sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA== + +"@vueuse/core@*", "@vueuse/core@^9.1.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz" + integrity sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw== + dependencies: + "@types/web-bluetooth" "^0.0.16" + "@vueuse/metadata" "9.13.0" + "@vueuse/shared" "9.13.0" + vue-demi "*" + +"@vueuse/metadata@9.13.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz" + integrity sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ== + +"@vueuse/shared@9.13.0": + version "9.13.0" + resolved "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz" + integrity sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw== + dependencies: + vue-demi "*" + +"@wangeditor/basic-modules@^1.1.7", "@wangeditor/basic-modules@1.x": + version "1.1.7" + resolved "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz" + integrity sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg== + dependencies: + is-url "^1.2.4" + +"@wangeditor/code-highlight@^1.0.3": + version "1.0.3" + resolved "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz" + integrity sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw== + dependencies: + prismjs "^1.23.0" + +"@wangeditor/core@^1.1.19", "@wangeditor/core@1.x": + version "1.1.19" + resolved "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz" + integrity sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q== + dependencies: + "@types/event-emitter" "^0.3.3" + event-emitter "^0.3.5" + html-void-elements "^2.0.0" + i18next "^20.4.0" + scroll-into-view-if-needed "^2.2.28" + slate-history "^0.66.0" + +"@wangeditor/editor-for-vue@^5.1.12": + version "5.1.12" + resolved "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz" + integrity sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ== + +"@wangeditor/editor@^5.1.23", "@wangeditor/editor@>=5.1.0": + version "5.1.23" + resolved "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz" + integrity sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ== + dependencies: + "@uppy/core" "^2.1.1" + "@uppy/xhr-upload" "^2.0.3" + "@wangeditor/basic-modules" "^1.1.7" + "@wangeditor/code-highlight" "^1.0.3" + "@wangeditor/core" "^1.1.19" + "@wangeditor/list-module" "^1.0.5" + "@wangeditor/table-module" "^1.1.4" + "@wangeditor/upload-image-module" "^1.0.2" + "@wangeditor/video-module" "^1.1.4" + dom7 "^3.0.0" + is-hotkey "^0.2.0" + lodash.camelcase "^4.3.0" + lodash.clonedeep "^4.5.0" + lodash.debounce "^4.0.8" + lodash.foreach "^4.5.0" + lodash.isequal "^4.5.0" + lodash.throttle "^4.1.1" + lodash.toarray "^4.4.0" + nanoid "^3.2.0" + slate "^0.72.0" + snabbdom "^3.1.0" + +"@wangeditor/list-module@^1.0.5": + version "1.0.5" + resolved "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz" + integrity sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ== + +"@wangeditor/table-module@^1.1.4": + version "1.1.4" + resolved "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz" + integrity sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w== + +"@wangeditor/upload-image-module@^1.0.2": + version "1.0.2" + resolved "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz" + integrity sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA== + +"@wangeditor/video-module@^1.1.4": + version "1.1.4" + resolved "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz" + integrity sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg== + +acorn@^8.10.0, acorn@^8.11.2: + version "8.11.3" + resolved "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +animate.css@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/animate.css/-/animate.css-4.1.1.tgz" + integrity sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +async-validator@^4.2.5: + version "4.2.5" + resolved "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz" + integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== + +avue-plugin-ueditor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/avue-plugin-ueditor/-/avue-plugin-ueditor-1.0.3.tgz" + integrity sha512-hly5hcS5g9d9uoSY5m6h7Kf/o8wHXKQO9LZICbbtmiEX6xYlWcH0mqL0j5rKdbUVNNcjzUThBGaDVWWzXqqxBQ== + dependencies: + "@wangeditor/editor" "^5.1.23" + "@wangeditor/editor-for-vue" "^5.1.12" + axios "^0.18.0" + vue "^3.2.47" + +axios@^0.18.0: + version "0.18.1" + resolved "https://registry.npmmirror.com/axios/-/axios-0.18.1.tgz" + integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== + dependencies: + follow-redirects "1.5.10" + is-buffer "^2.0.2" + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bpmn-js@11.5.0: + version "11.5.0" + resolved "https://registry.npmmirror.com/bpmn-js/-/bpmn-js-11.5.0.tgz" + integrity sha512-Bdj53UvfiDtGE1wmiBmpgjl5RMLhCGV/C841dyC+t4kBHj7vApAeeHs2Qiycj390HO4B2U8UDROLT7yjdXEEUA== + dependencies: + bpmn-moddle "^8.0.0" + diagram-js "^11.9.1" + diagram-js-direct-editing "^2.0.0" + ids "^1.0.0" + inherits-browser "^0.1.0" + min-dash "^4.0.0" + min-dom "^4.0.3" + object-refs "^0.3.0" + tiny-svg "^3.0.0" + +bpmn-moddle@^8.0.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/bpmn-moddle/-/bpmn-moddle-8.1.0.tgz" + integrity sha512-yI5OAFfYVJwViKTsTsonVfCBPtB3MlefADUORwNIxxBOMp21vnoxuxsdgUWlPH/dvAEZh/+mr8UtqOBNu8NC5Q== + dependencies: + min-dash "^4.0.0" + moddle "^6.2.3" + moddle-xml "^10.1.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0": + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/clsx/-/clsx-1.2.1.tgz" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +component-event@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/component-event/-/component-event-0.2.1.tgz" + integrity sha512-wGA++isMqiDq1jPYeyv2as/Bt/u+3iLW0rEa+8NQ82jAv3TgqMiCM+B2SaBdn2DfLilLjjq736YcezihRYhfxw== + +compute-scroll-into-view@^1.0.20: + version "1.0.20" + resolved "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz" + integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== + +countup.js@^1.9.3: + version "1.9.3" + resolved "https://registry.npmmirror.com/countup.js/-/countup.js-1.9.3.tgz" + integrity sha512-UHf2P/mFKaESqdPq+UdBJm/1y8lYdlcDd0nTZHNC8cxWoJwZr1Eldm1PpWui446vDl5Pd8PtRYkr3q6K4+Qa5A== + +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +csstype@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +d@^1.0.1, d@1: + version "1.0.1" + resolved "https://registry.npmmirror.com/d/-/d-1.0.1.tgz" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dayjs@^1.10.4, dayjs@^1.10.6, dayjs@^1.11.3: + version "1.11.7" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.7.tgz" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + +debug@^4.3.3: + version "4.3.4" + resolved "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +diagram-js-direct-editing@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/diagram-js-direct-editing/-/diagram-js-direct-editing-2.1.1.tgz" + integrity sha512-XuNWIpcuUMayp/MZhNRLyJT7zikSvGr8RZWNrHsDpwOIjoRgfYmmJp8WRFCIflMSBHjFg62sqLNM/nXRKrZ2qw== + dependencies: + min-dash "^4.0.0" + min-dom "^4.0.2" + +diagram-js@*, diagram-js@^11.9.1: + version "11.13.1" + resolved "https://registry.npmmirror.com/diagram-js/-/diagram-js-11.13.1.tgz" + integrity sha512-6kO0rBN6aBIQiMELfv1oX2Ohes/brlIPuOVZUYAioeWM0EyuazhAXgHeq8iKFt29daU9NGRr4n78esGx8QjtjQ== + dependencies: + "@bpmn-io/diagram-js-ui" "^0.2.2" + clsx "^1.2.1" + didi "^9.0.2" + hammerjs "^2.0.1" + inherits-browser "^0.1.0" + min-dash "^4.1.0" + min-dom "^4.1.0" + object-refs "^0.3.0" + path-intersection "^2.2.1" + tiny-svg "^3.0.1" + +didi@^9.0.2: + version "9.0.2" + resolved "https://registry.npmmirror.com/didi/-/didi-9.0.2.tgz" + integrity sha512-q2+aj+lnJcUweV7A9pdUrwFr4LHVmRPwTmQLtHPFz4aT7IBoryN6Iy+jmFku+oIzr5ebBkvtBCOb87+dJhb7bg== + +dom7@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz" + integrity sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g== + dependencies: + ssr-window "^3.0.0-alpha.1" + +domify@^1.4.1: + version "1.4.2" + resolved "https://registry.npmmirror.com/domify/-/domify-1.4.2.tgz" + integrity sha512-m4yreHcUWHBncGVV7U+yQzc12vIlq0jMrtHZ5mW6dQMiL/7skSYNVX9wqKwOtyO9SGCgevrAFEgOCAHmamHTUA== + +echarts@^5.6.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz" + integrity sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA== + dependencies: + tslib "2.3.0" + zrender "5.6.1" + +element-plus@^2.7.3, element-plus@>=2.2.0: + version "2.7.3" + resolved "https://registry.npmjs.org/element-plus/-/element-plus-2.7.3.tgz" + integrity sha512-OaqY1kQ2xzNyRFyge3fzM7jqMwux+464RBEqd+ybRV9xPiGxtgnj/sVK4iEbnKnzQIa9XK03DOIFzoToUhu1DA== + dependencies: + "@ctrl/tinycolor" "^3.4.1" + "@element-plus/icons-vue" "^2.3.1" + "@floating-ui/dom" "^1.0.1" + "@popperjs/core" "npm:@sxzz/popperjs-es@^2.11.7" + "@types/lodash" "^4.14.182" + "@types/lodash-es" "^4.17.6" + "@vueuse/core" "^9.1.0" + async-validator "^4.2.5" + dayjs "^1.11.3" + escape-html "^1.0.3" + lodash "^4.17.21" + lodash-es "^4.17.21" + lodash-unified "^1.0.2" + memoize-one "^6.0.0" + normalize-wheel-es "^1.2.0" + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.14: + version "0.10.62" + resolved "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.62.tgz" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +esbuild@^0.20.1: + version "0.20.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== + optionalDependencies: + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^5.0.0: + 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== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +fast-glob@^3.2.12: + version "3.2.12" + resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.npmmirror.com/fastq/-/fastq-1.16.0.tgz" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.14.0: + version "1.15.4" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.4.tgz" + integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +hammerjs@^2.0.1: + version "2.0.8" + resolved "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz" + integrity sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +htm@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/htm/-/htm-3.1.1.tgz" + integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== + +html-void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz" + integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== + +i18next@^20.4.0: + version "20.6.1" + resolved "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz" + integrity sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A== + dependencies: + "@babel/runtime" "^7.12.0" + +ids@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/ids/-/ids-1.0.5.tgz" + integrity sha512-XQ0yom/4KWTL29sLG+tyuycy7UmeaM/79GRtSJq6IG9cJGIPeBz5kwDCguie3TwxaMNIc3WtPi0cTa1XYHicpw== + +immer@^9.0.6: + version "9.0.21" + resolved "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +immutable@^4.0.0: + version "4.3.4" + resolved "https://registry.npmmirror.com/immutable/-/immutable-4.3.4.tgz" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== + +inherits-browser@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/inherits-browser/-/inherits-browser-0.1.0.tgz" + integrity sha512-CJHHvW3jQ6q7lzsXPpapLdMx5hDpSF3FSh45pwsj6bKxJJ8Nl8v43i5yXnr3BdfOimGHKyniewQtnAIp3vyJJw== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.2: + version "2.0.5" + resolved "https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hotkey@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz" + integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +js-base64@^3.7.4: + version "3.7.5" + resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz" + integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== + +js-cookie@^3.0.0: + version "3.0.5" + resolved "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + +js-md5@^0.7.3: + version "0.7.3" + resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz" + integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ== + +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +local-pkg@^0.4.2, local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + +lodash-es@*, lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash-unified@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz" + integrity sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz" + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz" + integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz" + integrity sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw== + +lodash@*, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.26.7: + version "0.26.7" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.26.7.tgz" + integrity sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow== + dependencies: + sourcemap-codec "^1.4.8" + +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.27.0.tgz" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +magic-string@^0.30.10: + version "0.30.10" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz" + integrity sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz" + integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-match@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz" + integrity sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg== + dependencies: + wildcard "^1.1.0" + +min-dash@^4.0.0, min-dash@^4.1.0: + version "4.1.1" + resolved "https://registry.npmmirror.com/min-dash/-/min-dash-4.1.1.tgz" + integrity sha512-r+Z6vxXLSGr+otyCPx9NKPCSixw7LdfZREPTmqfd2a/d5D6w4NCdOxRJs+HyFO6v2pQkyHroGSiINWECK+OWPg== + +min-dom@^4.0.2, min-dom@^4.0.3, min-dom@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/min-dom/-/min-dom-4.1.0.tgz" + integrity sha512-1lj1EyoSwY/UmTeT/hhPiZTsq+vK9D+8FAJ/53iK5jT1otkG9rJTixSKdjmTieEvdfES+sKbbTptzaQJhnacjA== + dependencies: + component-event "^0.2.1" + domify "^1.4.1" + min-dash "^4.0.0" + +mlly@^1.1.0, mlly@^1.2.0: + version "1.4.2" + resolved "https://registry.npmmirror.com/mlly/-/mlly-1.4.2.tgz" + integrity sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== + dependencies: + acorn "^8.10.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.3.0" + +moddle-xml@^10.1.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/moddle-xml/-/moddle-xml-10.1.0.tgz" + integrity sha512-erWckwLt+dYskewKXJso9u+aAZ5172lOiYxSOqKCPTy7L/xmqH1PoeoA7eVC7oJTt3PqF5TkZzUmbjGH6soQBg== + dependencies: + min-dash "^4.0.0" + moddle "^6.0.0" + saxen "^8.1.2" + +moddle@^6.0.0, moddle@^6.2.3: + version "6.2.3" + resolved "https://registry.npmmirror.com/moddle/-/moddle-6.2.3.tgz" + integrity sha512-bLVN+ZHL3aKnhxc19XtjUfvdJsS3EsiEJC7bT6YPD11qYmTzvsxrGgyYz1Ouof7TZuGw0lDJ1OLmEnxcpQWk3Q== + dependencies: + min-dash "^4.0.0" + +monaco-editor@0.36.1: + version "0.36.1" + resolved "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.36.1.tgz" + integrity sha512-/CaclMHKQ3A6rnzBzOADfwdSJ25BFoFT0Emxsc4zYVyav5SkK9iA6lEtIeuN/oRYbwPgviJT+t3l+sjFa28jYg== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +namespace-emitter@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz" + integrity sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g== + +nanoid@^3.1.25, nanoid@^3.2.0, nanoid@^3.3.7: + version "3.3.7" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-wheel-es@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz" + integrity sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw== + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +object-refs@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/object-refs/-/object-refs-0.3.0.tgz" + integrity sha512-eP0ywuoWOaDoiake/6kTJlPJhs+k0qNm4nYRzXLNHj6vh+5M3i9R1epJTdxIPGlhWc4fNRQ7a6XJNCX+/L4FOQ== + +path-intersection@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/path-intersection/-/path-intersection-2.2.1.tgz" + integrity sha512-9u8xvMcSfuOiStv9bPdnRJQhGQXLKurew94n4GPQCdH1nj9QKC9ObbNoIpiRq8skiOBxKkt277PgOoFgAt3/rA== + +pathe@^1.0.0, pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/pathe/-/pathe-1.1.1.tgz" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +picocolors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-types@^1.0.1, pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.0.3.tgz" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + +postcss@^8.4.38: + version "8.4.38" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + +preact@^10.11.2, preact@^10.5.13: + version "10.19.3" + resolved "https://registry.npmmirror.com/preact/-/preact-10.19.3.tgz" + integrity sha512-nHHTeFVBTHRGxJXKkKu5hT8C/YWBkPso4/Gad6xuj5dbptt9iF9NZr9pHbPhBrnT2klheu7mHTxTZ/LjwJiEiQ== + +prettier@^2.8.7: + version "2.8.8" + resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +prismjs@^1.23.0: + version "1.29.0" + resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randomcolor@^0.6.2: + version "0.6.2" + resolved "https://registry.npmmirror.com/randomcolor/-/randomcolor-0.6.2.tgz" + integrity sha512-Mn6TbyYpFgwFuQ8KJKqf3bqqY9O1y37/0jgSK/61PUxV4QfIMv0+K2ioq8DfOjkBslcjwSzRfIDEXfzA9aCx7A== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rollup@^1.20.0||^2.0.0||^3.0.0||^4.0.0, rollup@^4.13.0: + version "4.18.0" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== + dependencies: + "@types/estree" "1.0.5" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +sass@*, sass@^1.77.2: + version "1.77.2" + resolved "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz" + integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + immutable "^4.0.0" + source-map-js ">=0.6.2 <2.0.0" + +saxen@^8.1.2: + version "8.1.2" + resolved "https://registry.npmmirror.com/saxen/-/saxen-8.1.2.tgz" + integrity sha512-xUOiiFbc3Ow7p8KMxwsGICPx46ZQvy3+qfNVhrkwfz3Vvq45eGt98Ft5IQaA1R/7Tb5B5MKh9fUR9x3c3nDTxw== + +scroll-into-view-if-needed@^2.2.28: + version "2.2.31" + resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz" + integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== + dependencies: + compute-scroll-into-view "^1.0.20" + +scule@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/scule/-/scule-1.1.1.tgz" + integrity sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ== + +slate-history@^0.66.0: + version "0.66.0" + resolved "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz" + integrity sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng== + dependencies: + is-plain-object "^5.0.0" + +slate@^0.72.0, slate@>=0.65.3: + version "0.72.8" + resolved "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz" + integrity sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw== + dependencies: + immer "^9.0.6" + is-plain-object "^5.0.0" + tiny-warning "^1.0.3" + +snabbdom@^3.1.0: + version "3.5.1" + resolved "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.5.1.tgz" + integrity sha512-wHMNIOjkm/YNE5EM3RCbr/+DVgPg6AqQAX1eOxO46zYNvCXjKP5Y865tqQj3EXnaMBjkxmQA5jFuDpDK/dbfiA== + +source-map-js@^1.2.0, "source-map-js@>=0.6.2 <2.0.0": + version "1.2.0" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" + integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== + +source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +ssr-window@^3.0.0-alpha.1: + version "3.0.0" + resolved "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz" + integrity sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA== + +strip-literal@^1.0.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/strip-literal/-/strip-literal-1.3.0.tgz" + integrity sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== + dependencies: + acorn "^8.10.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +tiny-svg@^3.0.0, tiny-svg@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/tiny-svg/-/tiny-svg-3.0.1.tgz" + integrity sha512-P8T4iwiW1t95vpHVHqrD36Brn7TqFYCPSHIWk9WLJtYK1X4aDd+5cgqcAADIWSjf1/i5idKnpCh9mim8hEdRBg== + +tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +tslib@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmmirror.com/type/-/type-1.2.0.tgz" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.npmmirror.com/type/-/type-2.7.2.tgz" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +ufo@^1.3.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/ufo/-/ufo-1.3.2.tgz" + integrity sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== + +unimport@^1.0.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz" + integrity sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw== + dependencies: + "@rollup/pluginutils" "^5.0.2" + escape-string-regexp "^5.0.0" + fast-glob "^3.2.12" + local-pkg "^0.4.3" + magic-string "^0.27.0" + mlly "^1.1.0" + pathe "^1.0.0" + pkg-types "^1.0.1" + scule "^1.0.0" + strip-literal "^1.0.0" + unplugin "^1.0.1" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unplugin-auto-import@^0.11.2: + version "0.11.5" + resolved "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.11.5.tgz" + integrity sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw== + dependencies: + "@antfu/utils" "^0.7.0" + "@rollup/pluginutils" "^5.0.2" + local-pkg "^0.4.2" + magic-string "^0.26.7" + unimport "^1.0.1" + unplugin "^1.0.0" + +unplugin@^1.0.0, unplugin@^1.0.1: + version "1.6.0" + resolved "https://registry.npmmirror.com/unplugin/-/unplugin-1.6.0.tgz" + integrity sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ== + dependencies: + acorn "^8.11.2" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.6.1" + +vite-plugin-compression@^0.5.1: + version "0.5.1" + resolved "https://registry.npmmirror.com/vite-plugin-compression/-/vite-plugin-compression-0.5.1.tgz" + integrity sha512-5QJKBDc+gNYVqL/skgFAP81Yuzo9R+EAf19d+EtsMF/i8kFUpNi3J/H01QD3Oo8zBQn+NzoCIFkpPLynoOzaJg== + dependencies: + chalk "^4.1.2" + debug "^4.3.3" + fs-extra "^10.0.0" + +vite-plugin-vue-setup-extend@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/vite-plugin-vue-setup-extend/-/vite-plugin-vue-setup-extend-0.4.0.tgz" + integrity sha512-WMbjPCui75fboFoUTHhdbXzu4Y/bJMv5N9QT9a7do3wNMNHHqrk+Tn2jrSJU0LS5fGl/EG+FEDBYVUeWIkDqXQ== + dependencies: + "@vue/compiler-sfc" "^3.2.29" + magic-string "^0.25.7" + +vite@^5.0.0, vite@^5.2.12, vite@>=2.0.0: + version "5.2.12" + resolved "https://registry.npmjs.org/vite/-/vite-5.2.12.tgz" + integrity sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA== + dependencies: + esbuild "^0.20.1" + postcss "^8.4.38" + rollup "^4.13.0" + optionalDependencies: + fsevents "~2.3.3" + +vue-demi@*: + version "0.14.6" + resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz" + integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w== + +vue-i18n@^9.1.9: + version "9.2.2" + resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz" + integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ== + dependencies: + "@intlify/core-base" "9.2.2" + "@intlify/shared" "9.2.2" + "@intlify/vue-devtools" "9.2.2" + "@vue/devtools-api" "^6.2.1" + +vue-router@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz" + integrity sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q== + dependencies: + "@vue/devtools-api" "^6.5.1" + +vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.0.5, vue@^3.2.0, vue@^3.2.25, vue@^3.2.47, vue@^3.4.27, vue@>=3.2.0, vue@3.4.27: + version "3.4.27" + resolved "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz" + integrity sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA== + dependencies: + "@vue/compiler-dom" "3.4.27" + "@vue/compiler-sfc" "3.4.27" + "@vue/runtime-dom" "3.4.27" + "@vue/server-renderer" "3.4.27" + "@vue/shared" "3.4.27" + +vuex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/vuex/-/vuex-4.1.0.tgz" + integrity sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ== + dependencies: + "@vue/devtools-api" "^6.0.0-beta.11" + +webpack-sources@^3.2.3: + 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== + +webpack-virtual-modules@^0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz" + integrity sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg== + +wildcard@^1.1.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz" + integrity sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng== + +zrender@5.6.1: + version "5.6.1" + resolved "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz" + integrity sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag== + dependencies: + tslib "2.3.0"