diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..6c2df94 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +# 忽略打包输出目录 +dist + +# 忽略依赖目录 +node_modules diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..79ff08a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,25 @@ +{ + "arrowParens": "always", + "bracketSameLine": false, + "objectWrap": "preserve", + "bracketSpacing": true, + "semi": false, + "experimentalOperatorPosition": "end", + "experimentalTernaries": false, + "singleQuote": true, + "jsxSingleQuote": false, + "quoteProps": "preserve", + "trailingComma": "all", + "singleAttributePerLine": false, + "htmlWhitespaceSensitivity": "ignore", + "vueIndentScriptAndStyle": false, + "proseWrap": "preserve", + "endOfLine": "lf", + "insertPragma": false, + "printWidth": 80, + "requirePragma": false, + "tabWidth": 2, + "useTabs": true, + "embeddedLanguageFormatting": "auto", + "cursorOffset": -1 +} \ No newline at end of file diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 0000000..1e662ee --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1,3 @@ +module.exports = { + extends: ['@commitlint/config-conventional'], +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..ab0cadc --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,53 @@ +/** + * ESLint Flat 配置(ESLint 9) + * 适用于:Vue 3 + TypeScript + Prettier + */ +import pluginVue from 'eslint-plugin-vue' // Vue 官方 ESLint 插件 +import { + defineConfigWithVueTs, // 用于组合 Vue + TS 的 Flat 配置 + vueTsConfigs, // 官方提供的 TypeScript 推荐规则集合 +} from '@vue/eslint-config-typescript' +import prettierPlugin from 'eslint-plugin-prettier' // 将 Prettier 作为 ESLint 规则使用 +import prettierConfig from 'eslint-config-prettier' // 关闭与 Prettier 冲突的 ESLint 规则 + +export default defineConfigWithVueTs( + // 1. 全局忽略配置(必须放在最前面) + { + // 不对构建产物和依赖目录进行 ESLint 校验 + ignores: ['dist/**', 'node_modules/**'], + }, + + // 2. Vue 相关基础规则(包含模板语法支持) + pluginVue.configs['flat/essential'], + + // 3. TypeScript 推荐规则(脚本逻辑部分) + vueTsConfigs.recommended, + + // 4. Prettier 相关配置:只负责格式化,不干扰语义规则 + { + // 注册需要用到的插件 + plugins: { + prettier: prettierPlugin, // Prettier 插件 + }, + + // 自定义规则 + rules: { + // 关闭与 Prettier 冲突的 ESLint 规则 + ...prettierConfig.rules, + + // 将 Prettier 的格式化结果作为 ESLint 的告警输出 + 'prettier/prettier': 'warn', + }, + }, + + // 5. 自定义规则 + { + rules: { + // Vue 规则 + 'vue/multi-word-component-names': 'off', + + // TypeScript 规则 + '@typescript-eslint/no-explicit-any': 'off', + }, + }, +) diff --git a/global.d.ts b/global.d.ts index 36160f9..d42aa71 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,4 +1,4 @@ // declare module '@/*'; -declare module '@/components/*'; -declare module '@/views/*'; -declare module '@/api/*'; \ No newline at end of file +declare module '@/components/*' +declare module '@/views/*' +declare module '@/api/*' diff --git a/lint-staged.config.cjs b/lint-staged.config.cjs new file mode 100644 index 0000000..0a1324e --- /dev/null +++ b/lint-staged.config.cjs @@ -0,0 +1,10 @@ +module.exports = { + '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'], + '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': [ + 'prettier --write--parser json', + ], + 'package.json': ['prettier --write'], + '*.vue': ['eslint --fix', 'prettier --write', 'stylelint --fix'], + '*.{scss,less,style,html}': ['stylelint --fix', 'prettier --write'], + '*.md': ['prettier --write'], +} diff --git a/package-lock.json b/package-lock.json index 1143186..91d9464 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,10 +23,19 @@ "@types/event-source-polyfill": "^1.0.5", "@types/js-cookie": "^3.0.6", "@types/node": "^24.0.3", + "@typescript-eslint/eslint-plugin": "^8.53.0", + "@typescript-eslint/parser": "^8.53.0", "@vitejs/plugin-vue": "^5.2.3", + "@vue/eslint-config-typescript": "^14.6.0", "@vue/tsconfig": "^0.7.0", + "eslint": "^9.39.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-vue": "^10.6.2", "event-source-polyfill": "^1.0.31", "js-cookie": "^3.0.5", + "lint-staged": "^16.2.7", + "prettier": "^3.7.4", "sass-embedded": "^1.89.2", "typescript": "~5.8.3", "unplugin-icons": "^22.2.0", @@ -96,9 +105,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -594,6 +603,260 @@ "node": ">=18" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmmirror.com/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@iconify-json/lucide": { "version": "1.2.66", "resolved": "https://registry.npmmirror.com/@iconify-json/lucide/-/lucide-1.2.66.tgz", @@ -634,6 +897,57 @@ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmmirror.com/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.43.0", "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz", @@ -945,6 +1259,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz", @@ -961,6 +1282,239 @@ "undici-types": "~7.8.0" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz", + "integrity": "sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/type-utils": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.53.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.53.0.tgz", + "integrity": "sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.53.0.tgz", + "integrity": "sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.53.0", + "@typescript-eslint/types": "^8.53.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz", + "integrity": "sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz", + "integrity": "sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz", + "integrity": "sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.53.0.tgz", + "integrity": "sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz", + "integrity": "sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.53.0", + "@typescript-eslint/tsconfig-utils": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/visitor-keys": "8.53.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.53.0.tgz", + "integrity": "sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.53.0", + "@typescript-eslint/types": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz", + "integrity": "sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.53.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.4", "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", @@ -1095,6 +1649,32 @@ "rfdc": "^1.4.1" } }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.6.0", + "resolved": "https://registry.npmmirror.com/@vue/eslint-config-typescript/-/eslint-config-typescript-14.6.0.tgz", + "integrity": "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.35.1", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.35.1", + "vue-eslint-parser": "^10.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@vue/language-core": { "version": "2.2.10", "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-2.2.10.tgz", @@ -1201,6 +1781,33 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/alien-signals": { "version": "1.0.13", "resolved": "https://registry.npmmirror.com/alien-signals/-/alien-signals-1.0.13.tgz", @@ -1208,6 +1815,51 @@ "dev": true, "license": "MIT" }, + "node_modules/ansi-escapes": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-7.2.0.tgz", + "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/ant-design-vue": { "version": "4.2.6", "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.2.6.tgz", @@ -1273,6 +1925,13 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/array-tree-filter": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", @@ -1329,6 +1988,13 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -1371,6 +2037,46 @@ "node": ">= 0.4" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "license": "MIT", + "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/chalk/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", @@ -1395,6 +2101,66 @@ "fsevents": "~2.3.2" } }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-5.1.1.tgz", + "integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^7.1.0", + "string-width": "^8.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, "node_modules/colorjs.io": { "version": "0.5.2", "resolved": "https://registry.npmmirror.com/colorjs.io/-/colorjs.io-0.5.2.tgz", @@ -1414,12 +2180,29 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "14.0.2", + "resolved": "https://registry.npmmirror.com/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, "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==", "license": "MIT" }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, "node_modules/confbox": { "version": "0.2.2", "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz", @@ -1451,6 +2234,34 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", @@ -1471,9 +2282,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1487,6 +2298,13 @@ } } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1522,6 +2340,13 @@ "node": ">= 0.4" } }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", @@ -1534,6 +2359,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", @@ -1620,12 +2458,331 @@ "@esbuild/win32-x64": "0.25.5" } }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmmirror.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.4", + "resolved": "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.4.tgz", + "integrity": "sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.6.2", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-10.6.2.tgz", + "integrity": "sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.0", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "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==", "license": "MIT" }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/event-source-polyfill": { "version": "1.0.31", "resolved": "https://registry.npmmirror.com/event-source-polyfill/-/event-source-polyfill-1.0.31.tgz", @@ -1633,17 +2790,82 @@ "dev": true, "license": "MIT" }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, "node_modules/exsolve": { "version": "1.0.7", "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.7.tgz", "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", "license": "MIT" }, - "node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "license": "MIT", + "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.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -1653,6 +2875,19 @@ } } }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", @@ -1665,6 +2900,44 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -1724,6 +2997,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-east-asian-width": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -1862,6 +3148,16 @@ "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/immutable": { "version": "5.1.3", "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.3.tgz", @@ -1869,6 +3165,33 @@ "dev": true, "license": "MIT" }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1890,6 +3213,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", @@ -1931,6 +3270,25 @@ "url": "https://github.com/sponsors/mesqueeb" } }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", @@ -1947,12 +3305,56 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsencrypt": { "version": "3.5.4", "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.5.4.tgz", "integrity": "sha512-kNjfYEMNASxrDGsmcSQh/rUTmcoRfSUkxnAz+MMywM8jtGu+fFEZ3nJjHM58zscVnwR0fYmG9sGkTDjqUdpiwA==", "license": "MIT" }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kolorist": { "version": "1.8.0", "resolved": "https://registry.npmmirror.com/kolorist/-/kolorist-1.8.0.tgz", @@ -1960,6 +3362,63 @@ "dev": true, "license": "MIT" }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lint-staged": { + "version": "16.2.7", + "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-16.2.7.tgz", + "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.2", + "listr2": "^9.0.5", + "micromatch": "^4.0.8", + "nano-spawn": "^2.0.0", + "pidtree": "^0.6.0", + "string-argv": "^0.3.2", + "yaml": "^2.8.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/local-pkg": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.1.tgz", @@ -1977,6 +3436,22 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", @@ -1989,6 +3464,33 @@ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", @@ -2019,6 +3521,43 @@ "node": ">= 0.4" } }, + "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, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", @@ -2040,6 +3579,19 @@ "node": ">= 0.6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", @@ -2103,6 +3655,19 @@ "dev": true, "license": "MIT" }, + "node_modules/nano-spawn": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/nano-spawn/-/nano-spawn-2.0.0.tgz", + "integrity": "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/nano-spawn?sponsor=1" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", @@ -2127,6 +3692,13 @@ "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==", "license": "MIT" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2136,6 +3708,85 @@ "node": ">=0.10.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/package-manager-detector": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-1.3.0.tgz", @@ -2143,6 +3794,19 @@ "dev": true, "license": "MIT" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", @@ -2150,6 +3814,26 @@ "dev": true, "license": "MIT" }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", @@ -2168,9 +3852,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "engines": { "node": ">=12" @@ -2179,6 +3863,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pinia": { "version": "3.0.3", "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.3.tgz", @@ -2238,12 +3935,75 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.7.4", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/quansync": { "version": "0.2.10", "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.10.tgz", @@ -2260,6 +4020,27 @@ ], "license": "MIT" }, + "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" + } + ], + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", @@ -2290,6 +4071,44 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", "license": "MIT" }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", @@ -2335,6 +4154,30 @@ "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" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.2.tgz", @@ -2667,12 +4510,91 @@ "compute-scroll-into-view": "^1.0.20" } }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shallow-equal": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==", "license": "MIT" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2690,6 +4612,62 @@ "node": ">=0.10.0" } }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "8.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-8.1.0.tgz", + "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/stylis": { "version": "4.3.6", "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz", @@ -2746,6 +4724,22 @@ "node": ">=16.0.0" } }, + "node_modules/synckit": { + "version": "0.11.11", + "resolved": "https://registry.npmmirror.com/synckit/-/synckit-0.11.11.tgz", + "integrity": "sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, "node_modules/throttle-debounce": { "version": "5.0.2", "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz", @@ -2763,13 +4757,13 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -2790,6 +4784,19 @@ "node": ">=8.0" } }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", @@ -2797,6 +4804,19 @@ "dev": true, "license": "0BSD" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.8.3.tgz", @@ -2811,6 +4831,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.53.0", + "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.53.0.tgz", + "integrity": "sha512-xHURCQNxZ1dsWn0sdOaOfCSQG0HKeqSj9OexIxrz6ypU6wHYOdX2I3D2b8s8wFSsSOYJb+6q283cLiLlkEsBYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.53.0", + "@typescript-eslint/parser": "8.53.0", + "@typescript-eslint/typescript-estree": "8.53.0", + "@typescript-eslint/utils": "8.53.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/ufo": { "version": "1.6.1", "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz", @@ -2934,6 +4978,23 @@ } } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/varint": { "version": "6.0.0", "resolved": "https://registry.npmmirror.com/varint/-/varint-6.0.0.tgz", @@ -3044,6 +5105,43 @@ } } }, + "node_modules/vue-eslint-parser": { + "version": "10.2.0", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/vue-router": { "version": "4.5.1", "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.1.tgz", @@ -3110,6 +5208,120 @@ "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 9472bd1..22d27c2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,10 @@ "scripts": { "dev": "vite --host --open", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "lint": "eslint \"src/**/*.{ts,vue}\"", + "lint:fix": "eslint \"src/**/*.{ts,vue}\" --fix", + "format": "prettier --write \"src/**/*.{ts,vue,js,json,css,md}\"" }, "dependencies": { "@types/lodash": "^4.17.21", @@ -24,14 +27,29 @@ "@types/event-source-polyfill": "^1.0.5", "@types/js-cookie": "^3.0.6", "@types/node": "^24.0.3", + "@typescript-eslint/eslint-plugin": "^8.53.0", + "@typescript-eslint/parser": "^8.53.0", "@vitejs/plugin-vue": "^5.2.3", + "@vue/eslint-config-typescript": "^14.6.0", "@vue/tsconfig": "^0.7.0", + "eslint": "^9.39.2", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-vue": "^10.6.2", "event-source-polyfill": "^1.0.31", "js-cookie": "^3.0.5", + "lint-staged": "^16.2.7", + "prettier": "^3.7.4", "sass-embedded": "^1.89.2", "typescript": "~5.8.3", "unplugin-icons": "^22.2.0", "vite": "^6.3.5", "vue-tsc": "^2.2.8" + }, + "lint-staged": { + "*.{ts,js,vue}": [ + "eslint --fix", + "prettier --write" + ] } } diff --git a/src/App.vue b/src/App.vue index f6c5ecd..a9ea3e2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,10 +1,10 @@ - \ No newline at end of file + diff --git a/src/api/common.d.ts b/src/api/common.d.ts index 458347a..e142245 100644 --- a/src/api/common.d.ts +++ b/src/api/common.d.ts @@ -1,11 +1,11 @@ -export type ID = number | string; -export type IDS = (number | string)[]; +export type ID = number | string +export type IDS = (number | string)[] export interface BaseEntity { - createBy?: string; - createTime?: string; - updateBy?: string; - updateTime?: string; + createBy?: string + createTime?: string + updateBy?: string + updateTime?: string } /** @@ -16,24 +16,24 @@ export interface BaseEntity { * @param isAsc 是否升序 */ export interface PageQuery { - isAsc?: string; - orderByColumn?: string; - pageNum?: number; - pageSize?: number; - [key: string]: any; + isAsc?: string + orderByColumn?: string + pageNum?: number + pageSize?: number + [key: string]: any } export interface ApiResponse { - code?: number; - msg?: string; + code?: number + msg?: string - data?: T; - rows: T[]; - total?: number; + data?: T + rows: T[] + total?: number - token?: string; + token?: string - img?: string; - uuid?: string; - captchaOnOff?: boolean; + img?: string + uuid?: string + captchaOnOff?: boolean } diff --git a/src/api/request.ts b/src/api/request.ts index 8e998b8..de7dd5f 100644 --- a/src/api/request.ts +++ b/src/api/request.ts @@ -1,93 +1,93 @@ -import axios from "axios"; -import router from "@/router"; -import { getToken, removeToken } from "@/utils/auth"; -import { Modal, notification } from "ant-design-vue"; -import type { AxiosInstance, AxiosRequestConfig } from "axios"; -import type { ApiResponse } from "@/api/common"; +import axios from 'axios' +import router from '@/router' +import { getToken, removeToken } from '@/utils/auth' +import { Modal, notification } from 'ant-design-vue' +import type { AxiosInstance, AxiosRequestConfig } from 'axios' +import type { ApiResponse } from '@/api/common' const errCodeMap: { [key: string]: string } = { - "403": "当前操作没有权限", - "404": "访问资源不存在", - default: "系统未知错误,请反馈给管理员", -}; + '403': '当前操作没有权限', + '404': '访问资源不存在', + default: '系统未知错误,请反馈给管理员', +} // 创建axios实例 const service: AxiosInstance = axios.create({ - baseURL: import.meta.env.VITE_APP_BASE_API, - timeout: 10000, -}); + baseURL: import.meta.env.VITE_APP_BASE_API, + timeout: 10000, +}) // 请求拦截器 service.interceptors.request.use( - (config) => { - config.headers = config.headers || {}; - config.headers["Accept-Language"] = "zh-CN"; + (config) => { + config.headers = config.headers || {} + config.headers['Accept-Language'] = 'zh-CN' - const token = getToken(); - if (token) { - config.headers["Authorization"] = `Bearer ${token}`; - } - return config; - }, - (error) => { - return Promise.reject(error); - } -); + const token = getToken() + if (token) { + config.headers['Authorization'] = `Bearer ${token}` + } + return config + }, + (error) => { + return Promise.reject(error) + }, +) // 响应拦截器 service.interceptors.response.use( - (response) => { - if (response.config.responseType === "blob") { - return response.data; - } + (response) => { + if (response.config.responseType === 'blob') { + return response.data + } - const code = response.data.code || 200; - const data = response.data; + const code = response.data.code || 200 + const data = response.data - switch (code) { - case 200: - return data; - case 401: - Modal.error({ - title: "系统提示", - content: "登录状态已过期,请重新登录", - onOk: () => { - removeToken(); - router.replace({ name: 'Login' }); - }, - }); - return Promise.reject(data); - case 500: - return Promise.reject(new Error(data.msg)); - default: - notification.error({ - message: "请求错误", - description: errCodeMap[code] || data?.msg || errCodeMap.default, - }); - return Promise.reject(data); - } - }, - (error) => { - if (!error.__handled) { - const message = - error.code === "ECONNABORTED" - ? "请求超时,请稍后重试" - : error.message || "网络异常"; + switch (code) { + case 200: + return data + case 401: + Modal.error({ + title: '系统提示', + content: '登录状态已过期,请重新登录', + onOk: () => { + removeToken() + router.replace({ name: 'Login' }) + }, + }) + return Promise.reject(data) + case 500: + return Promise.reject(new Error(data.msg)) + default: + notification.error({ + message: '请求错误', + description: errCodeMap[code] || data?.msg || errCodeMap.default, + }) + return Promise.reject(data) + } + }, + (error) => { + if (!error.__handled) { + const message = + error.code === 'ECONNABORTED' + ? '请求超时,请稍后重试' + : error.message || '网络异常' - notification.error({ - message: "网络错误", - description: message, - }); + notification.error({ + message: '网络错误', + description: message, + }) - error.__handled = true; - } + error.__handled = true + } - return Promise.reject(error); - } -); + return Promise.reject(error) + }, +) function request(config: AxiosRequestConfig): Promise> { - return service(config) as Promise>; + return service(config) as Promise> } -export default request; +export default request diff --git a/src/api/system/dict/data.ts b/src/api/system/dict/data.ts index 6c83cca..88c7942 100644 --- a/src/api/system/dict/data.ts +++ b/src/api/system/dict/data.ts @@ -2,51 +2,51 @@ import request from '@/api/request' // 查询字典数据列表 export function listData(params: any) { - return request({ - url: '/system/dict/data/list', - method: 'get', - params - }) + return request({ + url: '/system/dict/data/list', + method: 'get', + params, + }) } // 查询字典数据详细 export function getData(dictCode: string) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'get' - }) + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get', + }) } // 根据字典类型查询字典数据信息 export function getDicts(dictType: string) { - return request({ - url: '/system/dict/data/type/' + dictType, - method: 'get' - }) + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get', + }) } // 新增字典数据 export function addData(data: any) { - return request({ - url: '/system/dict/data', - method: 'post', - data - }) + return request({ + url: '/system/dict/data', + method: 'post', + data, + }) } // 修改字典数据 export function updateData(data: any) { - return request({ - url: '/system/dict/data', - method: 'put', - data - }) + return request({ + url: '/system/dict/data', + method: 'put', + data, + }) } // 删除字典数据 export function delData(dictCode: string) { - return request({ - url: '/system/dict/data/' + dictCode, - method: 'delete' - }) + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete', + }) } diff --git a/src/api/system/dict/index.ts b/src/api/system/dict/index.ts index a2253fc..2bf3656 100644 --- a/src/api/system/dict/index.ts +++ b/src/api/system/dict/index.ts @@ -1,2 +1,2 @@ export * from './data' -export * from './type' \ No newline at end of file +export * from './type' diff --git a/src/api/system/dict/type.ts b/src/api/system/dict/type.ts index a54ed5b..6eeaf9a 100644 --- a/src/api/system/dict/type.ts +++ b/src/api/system/dict/type.ts @@ -3,59 +3,59 @@ import type { ID } from '@/api/common' // 查询字典类型列表 export function listType(params: any) { - return request({ - url: "/system/dict/type/list", - method: "get", - params, - }); + return request({ + url: '/system/dict/type/list', + method: 'get', + params, + }) } // 查询字典类型详细 export function getType(dictId: ID) { - return request({ - url: "/system/dict/type/" + dictId, - method: "get", - }); + return request({ + url: '/system/dict/type/' + dictId, + method: 'get', + }) } // 新增字典类型 export function addType(data: any) { - return request({ - url: "/system/dict/type", - method: "post", - data, - }); + return request({ + url: '/system/dict/type', + method: 'post', + data, + }) } // 修改字典类型 export function updateType(data: any) { - return request({ - url: "/system/dict/type", - method: "put", - data, - }); + return request({ + url: '/system/dict/type', + method: 'put', + data, + }) } // 删除字典类型 export function delType(dictId: ID) { - return request({ - url: "/system/dict/type/" + dictId, - method: "delete", - }); + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete', + }) } // 刷新字典缓存 export function refreshCache() { - return request({ - url: "/system/dict/type/refreshCache", - method: "delete", - }); + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete', + }) } // 获取字典选择框列表 export function getOptions() { - return request({ - url: "/system/dict/type/optionselect", - method: "get", - }); + return request({ + url: '/system/dict/type/optionselect', + method: 'get', + }) } diff --git a/src/api/system/index.ts b/src/api/system/index.ts index 69af935..00820d6 100644 --- a/src/api/system/index.ts +++ b/src/api/system/index.ts @@ -1,27 +1,27 @@ import request from '@/api/request' -import type { LoginInfo } from './model'; +import type { LoginInfo } from './model' // 用户登录 export function login(data: LoginInfo) { - return request({ - url: '/login', - method: 'post', - data - }) + return request({ + url: '/login', + method: 'post', + data, + }) } // 获取验证码 export function getCaptcha() { - return request({ - url: '/captchaImage', - method: 'get' - }) + return request({ + url: '/captchaImage', + method: 'get', + }) } // 退出登录 export function logout() { - return request({ - url: '/logout', - method: 'post' - }) + return request({ + url: '/logout', + method: 'post', + }) } diff --git a/src/api/system/model.d.ts b/src/api/system/model.d.ts index 06ded72..bb57b83 100644 --- a/src/api/system/model.d.ts +++ b/src/api/system/model.d.ts @@ -1,6 +1,6 @@ export interface LoginInfo { - username: string - password: string - uuid: string - code: string -} \ No newline at end of file + username: string + password: string + uuid: string + code: string +} diff --git a/src/api/traceOrderManage/equipment/index.ts b/src/api/traceOrderManage/equipment/index.ts index e44b437..3a2fdb4 100644 --- a/src/api/traceOrderManage/equipment/index.ts +++ b/src/api/traceOrderManage/equipment/index.ts @@ -1,36 +1,36 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { ID } from '@/api/common' // 查询设备管理详细 export function getEquipmentByCode(code: string) { - return request({ - url: '/basic/equipment/code/' + code, - method: 'get' - }) + return request({ + url: '/basic/equipment/code/' + code, + method: 'get', + }) } // 查询设备进站记录列表 export function listEquipmentEntry(params: any) { - return request({ - url: "/mes/equipment-entry-log/list", - method: "get", - params, - }); + return request({ + url: '/mes/equipment-entry-log/list', + method: 'get', + params, + }) } // 新增设备进站记录 export function addEquipmentEntry(data: any) { - return request({ - url: "/mes/equipment-entry-log", - method: "post", - data, - }); + return request({ + url: '/mes/equipment-entry-log', + method: 'post', + data, + }) } // 删除设备进站记录 export function delEquipmentEntry(id: ID) { - return request({ - url: "/mes/equipment-entry-log/" + id, - method: "delete", - }); + return request({ + url: '/mes/equipment-entry-log/' + id, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/index.ts b/src/api/traceOrderManage/index.ts index e761d83..b072ee4 100644 --- a/src/api/traceOrderManage/index.ts +++ b/src/api/traceOrderManage/index.ts @@ -1,72 +1,72 @@ -import request from "@/api/request"; -import type { LotTraceOrderData, LotTraceOrderQuery } from "./model"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { LotTraceOrderData, LotTraceOrderQuery } from './model' +import type { ID } from '@/api/common' // 查询随工单列表 export function listLotTraceOrder(params: LotTraceOrderQuery) { - return request({ - url: "/mes/lot-trace-order/list", - method: "get", - params, - }); + return request({ + url: '/mes/lot-trace-order/list', + method: 'get', + params, + }) } // 高级查询随工单列表 export function advListLotTraceOrder(params: LotTraceOrderQuery) { - return request({ - url: "/mes/lot-trace-order/advList", - method: "get", - params, - }); + return request({ + url: '/mes/lot-trace-order/advList', + method: 'get', + params, + }) } // 查询随工单详细 export function getLotTraceOrder(id: ID) { - return request({ - url: "/mes/lot-trace-order/" + id, - method: "get", - }); + return request({ + url: '/mes/lot-trace-order/' + id, + method: 'get', + }) } // 新增随工单 export function addLotTraceOrder(data: LotTraceOrderData) { - return request({ - url: "/mes/lot-trace-order", - method: "post", - data, - }); + return request({ + url: '/mes/lot-trace-order', + method: 'post', + data, + }) } // 修改随工单 export function updateLotTraceOrder(data: LotTraceOrderData) { - return request({ - url: "/mes/lot-trace-order", - method: "put", - data, - }); + return request({ + url: '/mes/lot-trace-order', + method: 'put', + data, + }) } // 删除随工单 export function delLotTraceOrder(id: ID) { - return request({ - url: "/mes/lot-trace-order/" + id, - method: "delete", - }); + return request({ + url: '/mes/lot-trace-order/' + id, + method: 'delete', + }) } // 关闭随工单 export function closeLotTraceOrder(id: ID) { - return request({ - url: "/mes/lot-trace-order/close/" + id, - method: "put", - }); + return request({ + url: '/mes/lot-trace-order/close/' + id, + method: 'put', + }) } // 新增质量异常联络单 export function addQualityAbnormalContact(data: any) { - return request({ - url: "/mes/qualityAbnormalContact", - method: "post", - data, - }); + return request({ + url: '/mes/qualityAbnormalContact', + method: 'post', + data, + }) } diff --git a/src/api/traceOrderManage/location/index.ts b/src/api/traceOrderManage/location/index.ts index 9b06a79..73fd816 100644 --- a/src/api/traceOrderManage/location/index.ts +++ b/src/api/traceOrderManage/location/index.ts @@ -1,54 +1,54 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { ID } from '@/api/common' // 查询库位列表 export function listStorageLocation(params: any) { - return request({ - url: "/wip/storageLocation/list", - method: "get", - params, - }); + return request({ + url: '/wip/storageLocation/list', + method: 'get', + params, + }) } // 高级查询库位列表 export function advListStorageLocation(params: any) { - return request({ - url: "/wip/storageLocation/advList", - method: "get", - params, - }); + return request({ + url: '/wip/storageLocation/advList', + method: 'get', + params, + }) } // 查询库位详细 export function getStorageLocation(id: ID) { - return request({ - url: "/wip/storageLocation/" + id, - method: "get", - }); + return request({ + url: '/wip/storageLocation/' + id, + method: 'get', + }) } // 新增库位 export function addStorageLocation(data: any) { - return request({ - url: "/wip/storageLocation", - method: "post", - data, - }); + return request({ + url: '/wip/storageLocation', + method: 'post', + data, + }) } // 修改库位 export function updateStorageLocation(data: any) { - return request({ - url: "/wip/storageLocation", - method: "put", - data, - }); + return request({ + url: '/wip/storageLocation', + method: 'put', + data, + }) } // 删除库位 export function delStorageLocation(id: ID) { - return request({ - url: "/wip/storageLocation/" + id, - method: "delete", - }); + return request({ + url: '/wip/storageLocation/' + id, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/mask/index.ts b/src/api/traceOrderManage/mask/index.ts index 0d17860..1c236ec 100644 --- a/src/api/traceOrderManage/mask/index.ts +++ b/src/api/traceOrderManage/mask/index.ts @@ -1,37 +1,37 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { ID } from '@/api/common' // 查询站点绑定治具列表 export function listStationBindMask(params: any) { - return request({ - url: "/mes/station/mask/list", - method: "get", - params, - }); + return request({ + url: '/mes/station/mask/list', + method: 'get', + params, + }) } // 为站点绑定治具 export function batchBindMasksToStation(stationId: ID, maskIds: ID[]) { - return request({ - url: "/mes/station/" + stationId + "/bind/mask", - method: "put", - data: maskIds, - }); + return request({ + url: '/mes/station/' + stationId + '/bind/mask', + method: 'put', + data: maskIds, + }) } // 为站点绑定治具组 export function bindMaskCombinationToStations(data: any) { - return request({ - url: "/mes/station/bind/mask-combination", - method: "put", - data, - }); + return request({ + url: '/mes/station/bind/mask-combination', + method: 'put', + data, + }) } // 站点解绑治具 export function unbindStationMask(stationMaskId: ID) { - return request({ - url: "/mes/station/bind-mask/" + stationMaskId, - method: "delete", - }); + return request({ + url: '/mes/station/bind-mask/' + stationMaskId, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/maskCombination/index.ts b/src/api/traceOrderManage/maskCombination/index.ts index 0942eee..668bb5d 100644 --- a/src/api/traceOrderManage/maskCombination/index.ts +++ b/src/api/traceOrderManage/maskCombination/index.ts @@ -1,81 +1,84 @@ -import request from "@/api/request"; -import type { MaskCombinationData, MaskCombinationQuery } from "./model"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { MaskCombinationData, MaskCombinationQuery } from './model' +import type { ID } from '@/api/common' // 查询治具组合列表 export function listMaskCombination(params: MaskCombinationQuery) { - return request({ - url: "/tpm/mask/combination/list", - method: "get", - params, - }); + return request({ + url: '/tpm/mask/combination/list', + method: 'get', + params, + }) } // 查询治具组合包含的治具列表 -export function listCombinationAssignMask(id: ID, params: MaskCombinationQuery) { - return request({ - url: "/tpm/mask/combination/" + id + "/masks", - method: "get", - params, - }); +export function listCombinationAssignMask( + id: ID, + params: MaskCombinationQuery, +) { + return request({ + url: '/tpm/mask/combination/' + id + '/masks', + method: 'get', + params, + }) } // 高级查询治具组合列表 export function advListMaskCombination(params: MaskCombinationQuery) { - return request({ - url: "/tpm/mask/combination/advList", - method: "get", - params, - }); + return request({ + url: '/tpm/mask/combination/advList', + method: 'get', + params, + }) } // 查询治具组合详细 export function getMaskCombination(id: ID) { - return request({ - url: "/tpm/mask/combination/" + id, - method: "get", - }); + return request({ + url: '/tpm/mask/combination/' + id, + method: 'get', + }) } // 新增治具组合 export function addMaskCombination(data: MaskCombinationData) { - return request({ - url: "/tpm/mask/combination", - method: "post", - data, - }); + return request({ + url: '/tpm/mask/combination', + method: 'post', + data, + }) } // 修改治具组合 export function updateMaskCombination(data: MaskCombinationData) { - return request({ - url: "/tpm/mask/combination", - method: "put", - data, - }); + return request({ + url: '/tpm/mask/combination', + method: 'put', + data, + }) } // 删除治具组合 export function delMaskCombination(id: ID) { - return request({ - url: "/tpm/mask/combination/" + id, - method: "delete", - }); + return request({ + url: '/tpm/mask/combination/' + id, + method: 'delete', + }) } // 新增治具组合与治具关联关系 export function addMaskCombinationAssignment(data: MaskCombinationData) { - return request({ - url: "/tpm/mask/combination/assignment", - method: "post", - data, - }); + return request({ + url: '/tpm/mask/combination/assignment', + method: 'post', + data, + }) } // 删除治具组合与治具关联关系 export function delMaskCombinationAssignment(id: ID) { - return request({ - url: "/tpm/mask/combination/assignment/" + id, - method: "delete", - }); + return request({ + url: '/tpm/mask/combination/assignment/' + id, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/maskCombination/model.d.ts b/src/api/traceOrderManage/maskCombination/model.d.ts index cb62239..cbfd17c 100644 --- a/src/api/traceOrderManage/maskCombination/model.d.ts +++ b/src/api/traceOrderManage/maskCombination/model.d.ts @@ -1,26 +1,26 @@ -import { BaseEntity, PageQuery, type ID } from "@/api/common"; +import { BaseEntity, PageQuery, type ID } from '@/api/common' /** * 治具组合查询参数 */ export interface MaskCombinationQuery extends PageQuery { - combinationName?: string; - combinationCode?: string; - combinationStatus?: string; - remark?: string; - searchValue?: string; - tempId?: string; - timeRange?: [string, string]; + combinationName?: string + combinationCode?: string + combinationStatus?: string + remark?: string + searchValue?: string + tempId?: ID + timeRange?: [string, string] } /** * 治具组合数据 */ export interface MaskCombinationData extends BaseEntity { - combinationName?: string; - combinationCode?: string; - combinationStatus?: string; - remark?: string; - searchValue?: string; - tempId?: string; - timeRange?: [string, string]; + combinationName?: string + combinationCode?: string + combinationStatus?: string + remark?: string + searchValue?: string + tempId?: ID + timeRange?: [string, string] } diff --git a/src/api/traceOrderManage/model.d.ts b/src/api/traceOrderManage/model.d.ts index 5c18632..accc220 100644 --- a/src/api/traceOrderManage/model.d.ts +++ b/src/api/traceOrderManage/model.d.ts @@ -1,188 +1,188 @@ -import { BaseEntity, PageQuery, type ID } from "@/api/common"; +import { BaseEntity, PageQuery, type ID } from '@/api/common' /** * 随工单查询参数 */ export interface LotTraceOrderQuery extends PageQuery { - /** 编码 */ - code?: string; - /** 状态 */ - status?: string; - /** 主生产计划的ID */ - mpsId?: number; - /** 主生产计划编码 */ - mpsCode?: string; - /** 订单类型 */ - orderType?: string; - /** 主生产计划明细ID */ - mpsDetailId?: number; - /** 批号 */ - batchNo?: string; - /** 主生产计划明细序号 */ - mpsDetailSeq?: number; - /** 目标产品ID */ - tarMaterialId?: number; - /** 主物料ID */ - masterMaterialId?: number; - /** 生产版本ID */ - prodVersionId?: number; - /** 计划数量 */ - planQty?: number; - /** OK数量 */ - okQty?: number; - /** NG数量 */ - ngQty?: number; - /** 未完成数量 */ - unfinishedQty?: number; - /** 单位ID */ - unitId?: number; - /** 计划开始时间范围 */ - planStartTimeRange?: [string, string]; - /** 计划结束时间范围 */ - planEndTimeRange?: [string, string]; - /** 扩展字段1 */ - extStr1?: string; - /** 扩展字段2 */ - extStr2?: string; - /** 扩展字段3 */ - extStr3?: string; - /** 扩展字段4 */ - extStr4?: string; - /** 扩展字段5 */ - extStr5?: string; - /** 扩展字段6 */ - extStr6?: string; - /** 扩展字段7 */ - extStr7?: string; - /** 扩展字段8 */ - extStr8?: string; - /** 扩展字段9 */ - extStr9?: string; - /** 扩展字段10 */ - extStr10?: string; - /** 扩展字段11 */ - extStr11?: string; - /** 扩展字段12 */ - extStr12?: string; - /** 扩展字段13 */ - extStr13?: string; - /** 扩展字段14 */ - extStr14?: string; - /** 扩展字段15 */ - extStr15?: string; - /** 扩展字段16 */ - extStr16?: string; - /** 扩展整型1 */ - extInt1?: number; - /** 扩展整型2 */ - extInt2?: number; - /** 扩展小数1 */ - extDec1?: number; - /** 扩展小数2 */ - extDec2?: number; - /** 扩展日期1范围 */ - extDate1Range?: [string, string]; - /** 扩展日期2范围 */ - extDate2Range?: [string, string]; - /** 删除标志 */ - delStatus?: string; - /** 创建时间范围 */ - createTimeRange?: [string, string]; - /** 更新时间范围 */ - updateTimeRange?: [string, string]; + /** 编码 */ + code?: string + /** 状态 */ + status?: string + /** 主生产计划的ID */ + mpsId?: number + /** 主生产计划编码 */ + mpsCode?: string + /** 订单类型 */ + orderType?: string + /** 主生产计划明细ID */ + mpsDetailId?: number + /** 批号 */ + batchNo?: string + /** 主生产计划明细序号 */ + mpsDetailSeq?: number + /** 目标产品ID */ + tarMaterialId?: number + /** 主物料ID */ + masterMaterialId?: number + /** 生产版本ID */ + prodVersionId?: number + /** 计划数量 */ + planQty?: number + /** OK数量 */ + okQty?: number + /** NG数量 */ + ngQty?: number + /** 未完成数量 */ + unfinishedQty?: number + /** 单位ID */ + unitId?: number + /** 计划开始时间范围 */ + planStartTimeRange?: [string, string] + /** 计划结束时间范围 */ + planEndTimeRange?: [string, string] + /** 扩展字段1 */ + extStr1?: string + /** 扩展字段2 */ + extStr2?: string + /** 扩展字段3 */ + extStr3?: string + /** 扩展字段4 */ + extStr4?: string + /** 扩展字段5 */ + extStr5?: string + /** 扩展字段6 */ + extStr6?: string + /** 扩展字段7 */ + extStr7?: string + /** 扩展字段8 */ + extStr8?: string + /** 扩展字段9 */ + extStr9?: string + /** 扩展字段10 */ + extStr10?: string + /** 扩展字段11 */ + extStr11?: string + /** 扩展字段12 */ + extStr12?: string + /** 扩展字段13 */ + extStr13?: string + /** 扩展字段14 */ + extStr14?: string + /** 扩展字段15 */ + extStr15?: string + /** 扩展字段16 */ + extStr16?: string + /** 扩展整型1 */ + extInt1?: number + /** 扩展整型2 */ + extInt2?: number + /** 扩展小数1 */ + extDec1?: number + /** 扩展小数2 */ + extDec2?: number + /** 扩展日期1范围 */ + extDate1Range?: [string, string] + /** 扩展日期2范围 */ + extDate2Range?: [string, string] + /** 删除标志 */ + delStatus?: string + /** 创建时间范围 */ + createTimeRange?: [string, string] + /** 更新时间范围 */ + updateTimeRange?: [string, string] } /** * 随工单数据 */ export interface LotTraceOrderData extends BaseEntity { - /** 主键ID */ - id?: ID; - /** 编码 */ - code?: string; - /** 状态 */ - status?: string; - /** 主生产计划的ID */ - mpsId?: number; - /** 主生产计划编码 */ - mpsCode?: string; - /** 订单类型 */ - orderType?: string; - /** 主生产计划明细ID */ - mpsDetailId?: number; - /** 批号 */ - batchNo?: string; - /** 主生产计划明细序号 */ - mpsDetailSeq?: number; - /** 目标产品ID */ - tarMaterialId?: number; - /** 目标产品名称 */ - tarMaterialName?: string; - /** 目标产品编码 */ - tarMaterialCode?: string; - /** 主物料ID */ - masterMaterialId?: number; - /** 生产版本ID */ - prodVersionId?: number; - /** 计划数量 */ - planQty?: number; - /** OK数量 */ - okQty?: number; - /** NG数量 */ - ngQty?: number; - /** 未完成数量 */ - unfinishedQty?: number; - /** 单位ID */ - unitId?: number; - /** 计划开始时间 */ - planStartTime?: string; - /** 计划结束时间 */ - planEndTime?: string; - /** 扩展字段1 */ - extStr1?: string; - /** 扩展字段2 */ - extStr2?: string; - /** 扩展字段3 */ - extStr3?: string; - /** 扩展字段4 */ - extStr4?: string; - /** 扩展字段5 */ - extStr5?: string; - /** 扩展字段6 */ - extStr6?: string; - /** 扩展字段7 */ - extStr7?: string; - /** 扩展字段8 */ - extStr8?: string; - /** 扩展字段9 */ - extStr9?: string; - /** 扩展字段10 */ - extStr10?: string; - /** 扩展字段11 */ - extStr11?: string; - /** 扩展字段12 */ - extStr12?: string; - /** 扩展字段13 */ - extStr13?: string; - /** 扩展字段14 */ - extStr14?: string; - /** 扩展字段15 */ - extStr15?: string; - /** 扩展字段16 */ - extStr16?: string; - /** 扩展整型1 */ - extInt1?: number; - /** 扩展整型2 */ - extInt2?: number; - /** 扩展小数1 */ - extDec1?: number; - /** 扩展小数2 */ - extDec2?: number; - /** 扩展日期1 */ - extDate1?: string; - /** 扩展日期2 */ - extDate2?: string; - /** 备注 */ - remark?: string; - /** 删除标志 */ - delStatus?: string; + /** 主键ID */ + id?: ID + /** 编码 */ + code?: string + /** 状态 */ + status?: string + /** 主生产计划的ID */ + mpsId?: number + /** 主生产计划编码 */ + mpsCode?: string + /** 订单类型 */ + orderType?: string + /** 主生产计划明细ID */ + mpsDetailId?: number + /** 批号 */ + batchNo?: string + /** 主生产计划明细序号 */ + mpsDetailSeq?: number + /** 目标产品ID */ + tarMaterialId?: number + /** 目标产品名称 */ + tarMaterialName?: string + /** 目标产品编码 */ + tarMaterialCode?: string + /** 主物料ID */ + masterMaterialId?: number + /** 生产版本ID */ + prodVersionId?: number + /** 计划数量 */ + planQty?: number + /** OK数量 */ + okQty?: number + /** NG数量 */ + ngQty?: number + /** 未完成数量 */ + unfinishedQty?: number + /** 单位ID */ + unitId?: number + /** 计划开始时间 */ + planStartTime?: string + /** 计划结束时间 */ + planEndTime?: string + /** 扩展字段1 */ + extStr1?: string + /** 扩展字段2 */ + extStr2?: string + /** 扩展字段3 */ + extStr3?: string + /** 扩展字段4 */ + extStr4?: string + /** 扩展字段5 */ + extStr5?: string + /** 扩展字段6 */ + extStr6?: string + /** 扩展字段7 */ + extStr7?: string + /** 扩展字段8 */ + extStr8?: string + /** 扩展字段9 */ + extStr9?: string + /** 扩展字段10 */ + extStr10?: string + /** 扩展字段11 */ + extStr11?: string + /** 扩展字段12 */ + extStr12?: string + /** 扩展字段13 */ + extStr13?: string + /** 扩展字段14 */ + extStr14?: string + /** 扩展字段15 */ + extStr15?: string + /** 扩展字段16 */ + extStr16?: string + /** 扩展整型1 */ + extInt1?: number + /** 扩展整型2 */ + extInt2?: number + /** 扩展小数1 */ + extDec1?: number + /** 扩展小数2 */ + extDec2?: number + /** 扩展日期1 */ + extDate1?: string + /** 扩展日期2 */ + extDate2?: string + /** 备注 */ + remark?: string + /** 删除标志 */ + delStatus?: string } diff --git a/src/api/traceOrderManage/primaryMaterial/index.ts b/src/api/traceOrderManage/primaryMaterial/index.ts index 6ba1823..5e880d6 100644 --- a/src/api/traceOrderManage/primaryMaterial/index.ts +++ b/src/api/traceOrderManage/primaryMaterial/index.ts @@ -1,2 +1,2 @@ export * from './infeed' -export * from './outfeed' \ No newline at end of file +export * from './outfeed' diff --git a/src/api/traceOrderManage/primaryMaterial/infeed.ts b/src/api/traceOrderManage/primaryMaterial/infeed.ts index 0cc56c2..d421c85 100644 --- a/src/api/traceOrderManage/primaryMaterial/infeed.ts +++ b/src/api/traceOrderManage/primaryMaterial/infeed.ts @@ -1,61 +1,61 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { ID } from '@/api/common' // 查询主材进站列表 export function listMainMaterialEntryLog(params: any) { - return request({ - url: "/mes/station/entry-log/main-material/list", - method: "get", - params, - }); + return request({ + url: '/mes/station/entry-log/main-material/list', + method: 'get', + params, + }) } // 查询主材进站详细 export function getMainMaterialEntryLog(id: ID) { - return request({ - url: "/mes/station/entry-log/main-material/" + id, - method: "get", - }); + return request({ + url: '/mes/station/entry-log/main-material/' + id, + method: 'get', + }) } // 新增主材Wafer进站 export function addWaferEntryLog(data: any) { - return request({ - url: "/mes/station/entry-log/main-material/wafer", - method: "post", - data, - }); + return request({ + url: '/mes/station/entry-log/main-material/wafer', + method: 'post', + data, + }) } // 通过载具新增主材Wafer进站 export function addWaferEntryLogByCarrier(data: any) { - return request({ - url: "/mes/station/entry-log/main-material/wafer/by-carrier", - method: "post", - data, - }); + return request({ + url: '/mes/station/entry-log/main-material/wafer/by-carrier', + method: 'post', + data, + }) } // 新增主材Die进站 export function addDieEntryLog(data: any) { - return request({ - url: "/mes/station/entry-log/main-material/die", - method: "post", - data, - }); + return request({ + url: '/mes/station/entry-log/main-material/die', + method: 'post', + data, + }) } // 通过载具新增主材Die进站 export function addDieEntryLogByCarrier(data: any) { - return request({ - url: "/mes/station/entry-log/main-material/die/by-carrier", - method: "post", - data, - }); + return request({ + url: '/mes/station/entry-log/main-material/die/by-carrier', + method: 'post', + data, + }) } // 删除主材进站 export function delMainMaterialEntryLog(id: ID) { - return request({ - url: "/mes/station/entry-log/main-material/" + id, - method: "delete", - }); + return request({ + url: '/mes/station/entry-log/main-material/' + id, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/primaryMaterial/outfeed.ts b/src/api/traceOrderManage/primaryMaterial/outfeed.ts index f88df62..3a5484e 100644 --- a/src/api/traceOrderManage/primaryMaterial/outfeed.ts +++ b/src/api/traceOrderManage/primaryMaterial/outfeed.ts @@ -1,54 +1,54 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; +import request from '@/api/request' +import type { ID } from '@/api/common' // 查询主材出站列表 export function listMainMaterialOutboundLog(params: any) { - return request({ - url: "/mes/station/out-log/main-material/list", - method: "get", - params, - }); + return request({ + url: '/mes/station/out-log/main-material/list', + method: 'get', + params, + }) } // 查询主材出站详细 export function getMainMaterialOutboundLog(id: ID) { - return request({ - url: "/mes/station/out-log/main-material/" + id, - method: "get", - }); + return request({ + url: '/mes/station/out-log/main-material/' + id, + method: 'get', + }) } // 新增主材出站 export function batchAddMainMaterialOutboundLog(data: any) { - return request({ - url: "/mes/station/out-log/main-material/batch", - method: "post", - data, - }); + return request({ + url: '/mes/station/out-log/main-material/batch', + method: 'post', + data, + }) } // 新增主材出站 export function addWaferDieOutboundLogBySpecifiedNg(data: any) { - return request({ - url: "/mes/station/out-log/main-material/wafer-die/by-specified-ng", - method: "post", - data, - }); + return request({ + url: '/mes/station/out-log/main-material/wafer-die/by-specified-ng', + method: 'post', + data, + }) } // 修改主材出站 export function updateMainMaterialOutboundLog(data: any) { - return request({ - url: '/mes/station/out-log/main-material', - method: 'put', - data - }) + return request({ + url: '/mes/station/out-log/main-material', + method: 'put', + data, + }) } // 删除主材出站 export function delMainMaterialOutboundLog(id: ID) { - return request({ - url: "/mes/station/out-log/main-material/" + id, - method: "delete", - }); + return request({ + url: '/mes/station/out-log/main-material/' + id, + method: 'delete', + }) } diff --git a/src/api/traceOrderManage/station/index.ts b/src/api/traceOrderManage/station/index.ts index 81bb83a..0c59d45 100644 --- a/src/api/traceOrderManage/station/index.ts +++ b/src/api/traceOrderManage/station/index.ts @@ -1,80 +1,80 @@ -import request from "@/api/request"; -import type { ID } from "@/api/common"; -import type { MesStationQuery, MesStationData } from "./model"; +import request from '@/api/request' +import type { ID } from '@/api/common' +import type { MesStationQuery, MesStationData } from './model' // 查询站点列表 export function listStation(params: MesStationQuery) { - return request({ - url: "/mes/station/list", - method: "get", - params, - }); + return request({ + url: '/mes/station/list', + method: 'get', + params, + }) } // 高级查询站点列表 export function advListStation(params: MesStationQuery) { - return request({ - url: "/mes/station/advList", - method: "get", - params, - }); + return request({ + url: '/mes/station/advList', + method: 'get', + params, + }) } // 查询站点详细 export function getStation(id: ID) { - return request({ - url: "/mes/station/" + id, - method: "get", - }); + return request({ + url: '/mes/station/' + id, + method: 'get', + }) } // 判断站点是否为最后一个站点 export function isLastStation(id: ID) { - return request({ - url: '/mes/station/' + id + '/isLast', - method: 'get' - }) + return request({ + url: '/mes/station/' + id + '/isLast', + method: 'get', + }) } // 新增站点 export function addStation(data: MesStationData) { - return request({ - url: "/mes/station", - method: "post", - data, - }); + return request({ + url: '/mes/station', + method: 'post', + data, + }) } // 修改站点 export function updateStation(data: MesStationData) { - return request({ - url: "/mes/station", - method: "put", - data, - }); + return request({ + url: '/mes/station', + method: 'put', + data, + }) } // 删除站点 export function delStation(id: ID) { - return request({ - url: "/mes/station/" + id, - method: "delete", - }); + return request({ + url: '/mes/station/' + id, + method: 'delete', + }) } // 站点开工 export function startStation(id: ID) { - return request({ - url: "/mes/station/" + id + "/start", - method: "put", - }); + return request({ + url: '/mes/station/' + id + '/start', + method: 'put', + }) } // 站点完工 export function completeStation(id: ID, location: any) { - return request({ - url: '/mes/station/' + id + '/complete', - method: 'put', - data: location - }) + return request({ + url: '/mes/station/' + id + '/complete', + method: 'put', + data: location, + }) } diff --git a/src/api/traceOrderManage/station/model.d.ts b/src/api/traceOrderManage/station/model.d.ts index c1261a5..1531179 100644 --- a/src/api/traceOrderManage/station/model.d.ts +++ b/src/api/traceOrderManage/station/model.d.ts @@ -1,71 +1,71 @@ -import { BaseEntity, PageQuery, type ID } from "@/api/common"; +import { BaseEntity, PageQuery, type ID } from '@/api/common' /** * 站点查询参数 */ export interface MesStationQuery extends PageQuery { - /** 随工单ID */ - traceOrderId?: number; - /** 随工单编码 */ - traceOrderCode?: string; - /** 站点序号 */ - seqNo?: number; - /** 站点名称 */ - name?: string; - /** 站点编码 */ - code?: string; - /** 状态 */ - status?: string; - /** 计划数量最小值 */ - planQtyMin?: number; - /** 计划数量最大值 */ - planQtyMax?: number; - /** 合格数量最小值 */ - okQtyMin?: number; - /** 合格数量最大值 */ - okQtyMax?: number; - /** 不合格数量最小值 */ - ngQtyMin?: number; - /** 不合格数量最大值 */ - ngQtyMax?: number; - /** 进站时间范围开始 */ - arrivalTimeStart?: string; - /** 进站时间范围结束 */ - arrivalTimeEnd?: string; - /** 出战时间范围开始 */ - departureTimeStart?: string; - /** 出战时间范围结束 */ - departureTimeEnd?: string; - /** 删除标志 */ - delStatus?: string; + /** 随工单ID */ + traceOrderId?: ID + /** 随工单编码 */ + traceOrderCode?: string + /** 站点序号 */ + seqNo?: number + /** 站点名称 */ + name?: string + /** 站点编码 */ + code?: string + /** 状态 */ + status?: string + /** 计划数量最小值 */ + planQtyMin?: number + /** 计划数量最大值 */ + planQtyMax?: number + /** 合格数量最小值 */ + okQtyMin?: number + /** 合格数量最大值 */ + okQtyMax?: number + /** 不合格数量最小值 */ + ngQtyMin?: number + /** 不合格数量最大值 */ + ngQtyMax?: number + /** 进站时间范围开始 */ + arrivalTimeStart?: string + /** 进站时间范围结束 */ + arrivalTimeEnd?: string + /** 出战时间范围开始 */ + departureTimeStart?: string + /** 出战时间范围结束 */ + departureTimeEnd?: string + /** 删除标志 */ + delStatus?: string } /** * 站点数据 */ export interface MesStationData extends BaseEntity { - /** 主键ID */ - id?: number; - /** 随工单ID */ - traceOrderId?: number; - /** 站点序号 */ - seqNo?: number; - /** 站点名称 */ - name?: string; - /** 站点编码 */ - code?: string; - /** 状态 */ - status?: string; - /** 计划数量 */ - planQty?: number; - /** 合格数量 */ - okQty?: number; - /** 不合格数量 */ - ngQty?: number; - /** 进站时间 */ - arrivalTime?: string; - /** 出战时间 */ - departureTime?: string; - /** 删除标志 */ - delStatus?: string; + /** 主键ID */ + id?: ID + /** 随工单ID */ + traceOrderId?: ID + /** 站点序号 */ + seqNo?: number + /** 站点名称 */ + name?: string + /** 站点编码 */ + code?: string + /** 状态 */ + status?: string + /** 计划数量 */ + planQty?: number + /** 合格数量 */ + okQty?: number + /** 不合格数量 */ + ngQty?: number + /** 进站时间 */ + arrivalTime?: string + /** 出战时间 */ + departureTime?: string + /** 删除标志 */ + delStatus?: string } diff --git a/src/components/common/DictTag/index.vue b/src/components/common/DictTag/index.vue index ab20b2b..a15c976 100644 --- a/src/components/common/DictTag/index.vue +++ b/src/components/common/DictTag/index.vue @@ -1,123 +1,155 @@ diff --git a/src/components/common/Header/index.vue b/src/components/common/Header/index.vue index 4dc4fce..0127d0b 100644 --- a/src/components/common/Header/index.vue +++ b/src/components/common/Header/index.vue @@ -1,143 +1,160 @@ diff --git a/src/components/common/Title/index.vue b/src/components/common/Title/index.vue index b3f95f9..ca6a1e5 100644 --- a/src/components/common/Title/index.vue +++ b/src/components/common/Title/index.vue @@ -1,45 +1,46 @@ diff --git a/src/components/traceOrderManage/holdTraceOrder.vue b/src/components/traceOrderManage/holdTraceOrder.vue index 30e1944..ccd9c11 100644 --- a/src/components/traceOrderManage/holdTraceOrder.vue +++ b/src/components/traceOrderManage/holdTraceOrder.vue @@ -1,82 +1,101 @@ diff --git a/src/main.ts b/src/main.ts index 280a972..cdbff3e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,21 +1,21 @@ -import { createApp } from "vue"; -import App from "./App.vue"; +import { createApp } from 'vue' +import App from './App.vue' // Pinia 状态管理 -import { createPinia } from "pinia"; -const pinia = createPinia(); +import { createPinia } from 'pinia' +const pinia = createPinia() // Vue Router -import router from "./router"; +import router from './router' // 样式文件 -import "ant-design-vue/dist/reset.css"; -import "@/assets/styles/index.scss"; +import 'ant-design-vue/dist/reset.css' +import '@/assets/styles/index.scss' -const app = createApp(App); +const app = createApp(App) // 字典方法 -import { useDict } from "@/utils/dict"; -app.config.globalProperties.useDict = useDict; +import { useDict } from '@/utils/dict' +app.config.globalProperties.useDict = useDict -app.use(pinia).use(router).mount("#app"); +app.use(pinia).use(router).mount('#app') diff --git a/src/router/index.ts b/src/router/index.ts index 01bba67..cb8b1e9 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,120 +1,119 @@ -import { createRouter, createWebHistory } from 'vue-router'; -import { getToken } from "@/utils/auth"; +import { createRouter, createWebHistory } from 'vue-router' +import { getToken } from '@/utils/auth' -const whiteList = ["/login"]; +const whiteList = ['/login'] const routes = [ - { - path: "/", - name: "Index", - component: () => import("@/views/index.vue"), - }, - { - path: "/login", - name: "Login", - component: () => import("@/views/login.vue"), - }, - { - path: "/traceOrderManage", - name: "TraceOrderManage", - component: () => import("@/views/traceOrderManage/layout.vue"), - redirect: { name: "TraceOrderManageIndex" }, - children: [ - { - path: "", - name: "TraceOrderManageIndex", - component: () => import("@/views/traceOrderManage/index.vue"), - }, - { - path: "infeed", - name: "Infeed", - component: () => import("@/views/traceOrderManage/infeed/layout.vue"), - redirect: { name: "PrimaryMaterial" }, - children: [ - { - path: "primaryMaterial", - name: "PrimaryMaterial", - component: () => - import("@/views/traceOrderManage/infeed/primaryMaterial/index.vue"), - }, - { - path: "rawMaterial", - name: "RawMaterial", - component: () => - import("@/views/traceOrderManage/infeed/rawMaterial/index.vue"), - }, - { - path: "mask", - name: "Mask", - component: () => import("@/views/traceOrderManage/infeed/mask/index.vue"), - }, - { - path: "equipment", - name: "Equipment", - component: () => - import("@/views/traceOrderManage/infeed/equipment/index.vue"), - }, - ], - }, - { - path: "outfeed", - name: "Outfeed", - component: () => import("@/views/traceOrderManage/outfeed/layout.vue"), - redirect: { name: "JobReport" }, - children: [ - { - path: "jobReport", - name: "JobReport", - component: () => - import("@/views/traceOrderManage/outfeed/jobReport/index.vue"), - }, - { - path: "parameterConfiguration", - name: "ParameterConfiguration", - component: () => - import( - "@/views/traceOrderManage/outfeed/parameterConfiguration/index.vue" - ), - }, - { - path: "processGuidance", - name: "ProcessGuidance", - component: () => - import("@/views/traceOrderManage/outfeed/processGuidance/index.vue"), - }, - ], - }, - ], - }, -]; + { + path: '/', + name: 'Index', + component: () => import('@/views/index.vue'), + }, + { + path: '/login', + name: 'Login', + component: () => import('@/views/login.vue'), + }, + { + path: '/traceOrderManage', + name: 'TraceOrderManage', + component: () => import('@/views/traceOrderManage/layout.vue'), + redirect: { name: 'TraceOrderManageIndex' }, + children: [ + { + path: '', + name: 'TraceOrderManageIndex', + component: () => import('@/views/traceOrderManage/index.vue'), + }, + { + path: 'infeed', + name: 'Infeed', + component: () => import('@/views/traceOrderManage/infeed/layout.vue'), + redirect: { name: 'PrimaryMaterial' }, + children: [ + { + path: 'primaryMaterial', + name: 'PrimaryMaterial', + component: () => + import('@/views/traceOrderManage/infeed/primaryMaterial/index.vue'), + }, + { + path: 'rawMaterial', + name: 'RawMaterial', + component: () => + import('@/views/traceOrderManage/infeed/rawMaterial/index.vue'), + }, + { + path: 'mask', + name: 'Mask', + component: () => + import('@/views/traceOrderManage/infeed/mask/index.vue'), + }, + { + path: 'equipment', + name: 'Equipment', + component: () => + import('@/views/traceOrderManage/infeed/equipment/index.vue'), + }, + ], + }, + { + path: 'outfeed', + name: 'Outfeed', + component: () => import('@/views/traceOrderManage/outfeed/layout.vue'), + redirect: { name: 'JobReport' }, + children: [ + { + path: 'jobReport', + name: 'JobReport', + component: () => + import('@/views/traceOrderManage/outfeed/jobReport/index.vue'), + }, + { + path: 'parameterConfiguration', + name: 'ParameterConfiguration', + component: () => + import('@/views/traceOrderManage/outfeed/parameterConfiguration/index.vue'), + }, + { + path: 'processGuidance', + name: 'ProcessGuidance', + component: () => + import('@/views/traceOrderManage/outfeed/processGuidance/index.vue'), + }, + ], + }, + ], + }, +] const router = createRouter({ history: createWebHistory(), - routes -}); + routes, +}) router.beforeEach(async (to, from, next) => { - const token = getToken(); + const token = getToken() // 已登录,访问 login → 跳首页 - if (token && to.path === "/login") { - return next("/"); + if (token && to.path === '/login') { + return next('/') } - // 白名单放行 - if (whiteList.includes(to.path)) { - return next(); - } + // 白名单放行 + if (whiteList.includes(to.path)) { + return next() + } - // 未登录,访问受保护路由 - if (!token) { - return next({ - path: "/login", - query: { redirect: to.fullPath }, - }); - } + // 未登录,访问受保护路由 + if (!token) { + return next({ + path: '/login', + query: { redirect: to.fullPath }, + }) + } - // 已登录,正常访问 - next(); -}); + // 已登录,正常访问 + next() +}) -export default router; +export default router diff --git a/src/shim-vue.d.ts b/src/shim-vue.d.ts index d77b62b..3fe378d 100644 --- a/src/shim-vue.d.ts +++ b/src/shim-vue.d.ts @@ -1,5 +1,7 @@ -declare module "*.vue" { - import type { DefineComponent } from "vue"; - const component: DefineComponent<{}, {}, any>; - export default component; +declare module '*.vue' { + import type { DefineComponent } from 'vue' + + // eslint-disable-next-line @typescript-eslint/no-empty-object-type + const component: DefineComponent<{}, {}, any> + export default component } diff --git a/src/store/index.ts b/src/store/index.ts index f98d49c..6cdffbc 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,7 +1,7 @@ // 系统管理 -export * from './system/auth'; -export * from './system/dict'; -export * from './system/user'; +export * from './system/auth' +export * from './system/dict' +export * from './system/user' // 工单管理 -export * from './traceOrderManage/traceOrder'; +export * from './traceOrderManage/traceOrder' diff --git a/src/store/system/auth.ts b/src/store/system/auth.ts index 8040844..631ae98 100644 --- a/src/store/system/auth.ts +++ b/src/store/system/auth.ts @@ -1,68 +1,74 @@ -import { defineStore } from "pinia"; -import { ref } from "vue"; -import { useRoute, useRouter } from "vue-router"; -import { message, notification } from "ant-design-vue"; +import { defineStore } from 'pinia' +import { ref } from 'vue' +import { useRoute, useRouter } from 'vue-router' +import { message, notification } from 'ant-design-vue' -import { useUserStore } from "./user"; -import { login, logout as logoutApi } from "@/api/system"; -import { setToken, getToken, removeToken, removeAccount, getRememberMe } from "@/utils/auth"; -import type { LoginInfo } from "@/api/system/model"; +import { useUserStore } from './user' +import { login, logout as logoutApi } from '@/api/system' +import { + setToken, + getToken, + removeToken, + removeAccount, + getRememberMe, +} from '@/utils/auth' +import type { LoginInfo } from '@/api/system/model' -export const useAuthStore = defineStore("auth", () => { - const route = useRoute(); - const router = useRouter(); - const userStore = useUserStore(); +export const useAuthStore = defineStore('auth', () => { + const route = useRoute() + const router = useRouter() + const userStore = useUserStore() - const loginLoading = ref(false); - const token = ref(getToken() || null); + const loginLoading = ref(false) + const token = ref(getToken() || null) - async function authLogin(params: LoginInfo, rememberMe: boolean) { - try { - loginLoading.value = true; - const res = await login(params); - if (res.code === 200) { - setToken(res.token as string); - await userStore.fetchUserInfo(); - notification.success({ - message: "登录成功", - description: `欢迎回来,${params.username}`, - duration: 3, - }); + async function authLogin(params: LoginInfo, rememberMe: boolean) { + try { + loginLoading.value = true + const res = await login(params) + if (res.code === 200) { + setToken(res.token as string) + await userStore.fetchUserInfo() + notification.success({ + message: '登录成功', + description: `欢迎回来,${params.username}`, + duration: 3, + }) - if (rememberMe) { - userStore.setUserInfo({ ...params, rememberMe }); - } else { - userStore.clearUserInfo(); - userStore.setUsername(params.username); - } + if (rememberMe) { + userStore.setUserInfo({ ...params, rememberMe }) + } else { + userStore.clearUserInfo() + userStore.setUsername(params.username) + } - const redirect = route.query.redirect || "/"; - router.replace(redirect as string); - return res; - } else { - // 抛出错误,让调用方处理 - throw new Error(res.msg || "登录失败"); - } - } catch (error) { - throw error; - } finally { - loginLoading.value = false; - } - } + const redirect = route.query.redirect || '/' + router.replace(redirect as string) + return res + } else { + // 抛出错误,让调用方处理 + throw new Error(res.msg || '登录失败') + } + } catch (error) { + throw error + } finally { + loginLoading.value = false + } + } - async function logout() { - // 在实际应用中,这里可以调用后端的退出登录接口 - await logoutApi(); - removeToken(); - !getRememberMe() && removeAccount(); - await router.push("/login"); - message.success("已成功退出"); - } + async function logout() { + // 在实际应用中,这里可以调用后端的退出登录接口 + await logoutApi() + removeToken() + if (!getRememberMe()) removeAccount() + await router.push('/login') + message.success('已成功退出') + } - return { - token, - loginLoading, - authLogin, - logout, - }; -}); + return { + token, + loginLoading, + authLogin, + logout, + } +}) diff --git a/src/store/system/dict.ts b/src/store/system/dict.ts index 4b8b599..c6efc83 100644 --- a/src/store/system/dict.ts +++ b/src/store/system/dict.ts @@ -1,63 +1,65 @@ -import { defineStore } from "pinia"; -import { ref } from "vue"; +import { defineStore } from 'pinia' +import { ref } from 'vue' -export const useDictStore = defineStore("dict", () => { - const dict = ref([]); +export const useDictStore = defineStore('dict', () => { + const dict = ref([]) - // 获取字典 - function getDict(_key: string) { - if (_key == null && _key == "") { - return null; - } - try { - dict.value.forEach(item => { - if (item.key == _key) { - return item.value; - } - }); - } catch (e) { - return null; - } - } + // 获取字典 + function getDict(_key: string) { + if (_key == null && _key == '') { + return null + } + try { + dict.value.forEach((item) => { + if (item.key == _key) { + return item.value + } + }) + } catch (e) { + console.error(e) + return null + } + } - // 设置字典 - function setDict(_key: string, value: string | number) { - if (!_key) return; - dict.value.push({ - key: _key, - value: value - }); - } + // 设置字典 + function setDict(_key: string, value: string | number) { + if (!_key) return + dict.value.push({ + key: _key, + value: value, + }) + } - // 删除字典 - function removeDict(_key: string) { - var bln = false; - try { - dict.value.forEach((item, index) => { - if (item.key == _key) { - dict.value.splice(index, 1); - bln = true; - } - }); - } catch (e) { - bln = false; - } - return bln; - } + // 删除字典 + function removeDict(_key: string) { + let bln = false + try { + dict.value.forEach((item, index) => { + if (item.key == _key) { + dict.value.splice(index, 1) + bln = true + } + }) + } catch (e) { + console.error(e) + bln = false + } + return bln + } - // 清空字典 - function cleanDict() { - dict.value = new Array(); - } - // 初始字典 - function initDict() { } - - return { - dict, - getDict, - setDict, - removeDict, - cleanDict, - initDict, - }; -}); + // 清空字典 + function cleanDict() { + dict.value = [] + } + // 初始字典 + function initDict() {} + + return { + dict, + getDict, + setDict, + removeDict, + cleanDict, + initDict, + } +}) diff --git a/src/store/system/user.ts b/src/store/system/user.ts index 87d455a..7e89fc8 100644 --- a/src/store/system/user.ts +++ b/src/store/system/user.ts @@ -1,39 +1,41 @@ -import { defineStore } from 'pinia'; -import Cookies from 'js-cookie'; -import { setAccount, removeAccount } from "@/utils/auth"; -import { ref } from 'vue'; +import { defineStore } from 'pinia' +import Cookies from 'js-cookie' +import { setAccount, removeAccount } from '@/utils/auth' +import { ref } from 'vue' -export const useUserStore = defineStore("user", () => { - const username = ref(Cookies.get('username') || ''); - - async function fetchUserInfo() { - // Simulate API call - } +export const useUserStore = defineStore('user', () => { + const username = ref(Cookies.get('username') || '') - function setUsername(name: string) { - username.value = name; - } + async function fetchUserInfo() { + // Simulate API call + } - function setUserInfo(params: any) { - username.value = params.username || ''; + function setUsername(name: string) { + username.value = name + } - params.rememberMe && setAccount({ - username: params.username, - password: params.password, - rememberMe: params.rememberMe, - }); - } + function setUserInfo(params: any) { + username.value = params.username || '' - function clearUserInfo() { - username.value = ''; - removeAccount(); - } + if (params.rememberMe) { + setAccount({ + username: params.username, + password: params.password, + rememberMe: params.rememberMe, + }) + } + } - return { - username, - fetchUserInfo, - setUsername, - setUserInfo, - clearUserInfo, - } -}); + function clearUserInfo() { + username.value = '' + removeAccount() + } + + return { + username, + fetchUserInfo, + setUsername, + setUserInfo, + clearUserInfo, + } +}) diff --git a/src/store/traceOrderManage/traceOrder.ts b/src/store/traceOrderManage/traceOrder.ts index 7e7e578..3334bd4 100644 --- a/src/store/traceOrderManage/traceOrder.ts +++ b/src/store/traceOrderManage/traceOrder.ts @@ -1,148 +1,148 @@ -import { defineStore } from "pinia"; -import { ref } from "vue"; -import { message } from "ant-design-vue"; -import { debounce } from 'lodash'; +import { defineStore } from 'pinia' +import { ref } from 'vue' +import { message } from 'ant-design-vue' +import { debounce } from 'lodash' -import { listStation, getStation } from "@/api/traceOrderManage/station"; -import { - listLotTraceOrder, - getLotTraceOrder, -} from "@/api/traceOrderManage"; +import { listStation, getStation } from '@/api/traceOrderManage/station' +import { listLotTraceOrder, getLotTraceOrder } from '@/api/traceOrderManage' -export const useTraceOrderStore = defineStore("traceOrder", () => { - /* ========= 核心业务状态 ========= */ - const currentTraceOrderId = ref(''); - const currentTraceOrderCode = ref(''); - const currentStationId = ref(''); - const currentStationCode = ref(''); +export const useTraceOrderStore = defineStore('traceOrder', () => { + /* ========= 核心业务状态 ========= */ + const currentTraceOrderId = ref('') + const currentTraceOrderCode = ref('') + const currentStationId = ref('') + const currentStationCode = ref('') - const traceOrderOptions = ref([]); - const traceOrderInfo = ref({}); - const stationInfo = ref({}); - const stationList = ref([]); + const traceOrderOptions = ref([]) + const traceOrderInfo = ref({}) + const stationInfo = ref({}) + const stationList = ref([]) - /* ========= actions ========= */ + /* ========= actions ========= */ - // 加载工单列表 - const fetchTraceOrderOption = debounce(async (code: string) => { - if (!code) return; - try { - const { rows } = await listLotTraceOrder({ - code, - pageSize: 10, - pageNum: 1, - }); - traceOrderOptions.value = rows.map((item) => { - return { - id: item.id, - label: item.code, - value: item.code, - }; - }); - } catch (error: any) { - message.error(error.message || "获取工单列表失败"); - } - }, 500); + // 加载工单列表 + const fetchTraceOrderOption = debounce(async (code: string) => { + if (!code) return + try { + const { rows } = await listLotTraceOrder({ + code, + pageSize: 10, + pageNum: 1, + }) + traceOrderOptions.value = rows.map((item) => { + return { + id: item.id, + label: item.code, + value: item.code, + } + }) + } catch (error: any) { + message.error(error.message || '获取工单列表失败') + } + }, 500) - // 选择工单 - async function selectTraceOrder(value: string, option: any) { - currentTraceOrderId.value = option.id; - currentTraceOrderCode.value = value; + // 选择工单 + async function selectTraceOrder(value: string, option: any) { + currentTraceOrderId.value = option.id + currentTraceOrderCode.value = value - try { - loadingTraceOrderInfo.value = true; - if (!option.id) throw new Error(); - const { data } = await getLotTraceOrder(option.id); - traceOrderInfo.value = data; - await fetchStationList(); - } catch (error: any) { - message.error(error.message || "获取工单信息失败"); - } finally { - loadingTraceOrderInfo.value = false; - } - } + try { + loadingTraceOrderInfo.value = true + if (!option.id) throw new Error() + const { data } = await getLotTraceOrder(option.id) + traceOrderInfo.value = data + await fetchStationList() + } catch (error: any) { + message.error(error.message || '获取工单信息失败') + } finally { + loadingTraceOrderInfo.value = false + } + } - // 获取工单信息 - const loadingTraceOrderInfo = ref(false); - async function fetchTraceOrderInfo() { - if (!currentTraceOrderId.value) return; - try { - loadingTraceOrderInfo.value = true; - const { data } = await getLotTraceOrder(currentTraceOrderId.value); - traceOrderInfo.value = data; - fetchStationList(); - } catch (error: any) { - message.error(error.message || '刷新工单信息失败'); - } finally { - loadingTraceOrderInfo.value = false; - } - } - - // 获取站点列表 - const loadingStations = ref(false); - async function fetchStationList() { - if (!currentTraceOrderCode.value) return; - try { - loadingStations.value = true; - const res = await listStation({ traceOrderCode: currentTraceOrderCode.value }); - stationList.value = (res.rows || []).map((item: any, idx: number) => { - return { - key: String(item.id ?? idx), - index: item.seqNo ?? idx + 1, - ...item, - }; - }); - } catch (error: any) { - message.error(error?.msg || error?.message || "查询站点失败"); - } finally { - loadingStations.value = false; - } - }; + // 获取工单信息 + const loadingTraceOrderInfo = ref(false) + async function fetchTraceOrderInfo() { + if (!currentTraceOrderId.value) return + try { + loadingTraceOrderInfo.value = true + const { data } = await getLotTraceOrder(currentTraceOrderId.value) + traceOrderInfo.value = data + fetchStationList() + } catch (error: any) { + message.error(error.message || '刷新工单信息失败') + } finally { + loadingTraceOrderInfo.value = false + } + } - // 获取站点信息 - const loadingStationInfo = ref(false); - async function fetchStationInfo() { - if (!currentTraceOrderId.value) return; - try { - loadingStationInfo.value = true; - const { data } = await getStation(currentStationId.value); - stationInfo.value = data; - } catch (error: any) { - console.log(error.message || '获取站点信息失败'); - } finally { - loadingStationInfo.value = false; - } - } + // 获取站点列表 + const loadingStations = ref(false) + async function fetchStationList() { + if (!currentTraceOrderCode.value) return + try { + loadingStations.value = true + const res = await listStation({ + traceOrderCode: currentTraceOrderCode.value, + }) + stationList.value = (res.rows || []).map((item: any, idx: number) => { + return { + key: String(item.id ?? idx), + index: item.seqNo ?? idx + 1, + ...item, + } + }) + } catch (error: any) { + message.error(error?.msg || error?.message || '查询站点失败') + } finally { + loadingStations.value = false + } + } - // 选择站点 - async function selectStation(stationId: string) { - currentStationId.value = stationId; - stationInfo.value = stationList.value.find((s: any) => s.id === stationId) ?? {}; - currentStationCode.value = stationInfo.value.code; - } + // 获取站点信息 + const loadingStationInfo = ref(false) + async function fetchStationInfo() { + if (!currentTraceOrderId.value) return + try { + loadingStationInfo.value = true + const { data } = await getStation(currentStationId.value) + stationInfo.value = data + } catch (error: any) { + console.log(error.message || '获取站点信息失败') + } finally { + loadingStationInfo.value = false + } + } - async function refreshAll() { - await Promise.all([fetchTraceOrderInfo(), fetchStationList()]); - } + // 选择站点 + async function selectStation(stationId: string) { + currentStationId.value = stationId + stationInfo.value = + stationList.value.find((s: any) => s.id === stationId) ?? {} + currentStationCode.value = stationInfo.value.code + } - return { - currentTraceOrderId, - currentTraceOrderCode, - currentStationId, - currentStationCode, - traceOrderOptions, - traceOrderInfo, - stationInfo, - stationList, - loadingTraceOrderInfo, - loadingStations, - loadingStationInfo, - selectTraceOrder, - selectStation, - refreshAll, - fetchTraceOrderOption, - fetchTraceOrderInfo, - fetchStationList, - fetchStationInfo, - }; -}); + async function refreshAll() { + await Promise.all([fetchTraceOrderInfo(), fetchStationList()]) + } + + return { + currentTraceOrderId, + currentTraceOrderCode, + currentStationId, + currentStationCode, + traceOrderOptions, + traceOrderInfo, + stationInfo, + stationList, + loadingTraceOrderInfo, + loadingStations, + loadingStationInfo, + selectTraceOrder, + selectStation, + refreshAll, + fetchTraceOrderOption, + fetchTraceOrderInfo, + fetchStationList, + fetchStationInfo, + } +}) diff --git a/src/utils/auth.ts b/src/utils/auth.ts index 380d33c..9d954b0 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,48 +1,53 @@ -import Cookies from 'js-cookie'; -import { encrypt } from '@/utils/jsencrypt'; +import Cookies from 'js-cookie' +import { encrypt } from '@/utils/jsencrypt' // 30 天 -export const expiresTime = 30; +export const expiresTime = 30 export const TokenKey = 'Admin-Token' export function getToken() { - return Cookies.get(TokenKey) + return Cookies.get(TokenKey) } export function setToken(token: string) { - return Cookies.set(TokenKey, token) + return Cookies.set(TokenKey, token) } export function removeToken() { - return Cookies.remove(TokenKey) + return Cookies.remove(TokenKey) } export interface AccountInfo { - username?: string; - password?: string; - rememberMe?: 'true' | 'false'; + username?: string + password?: string + rememberMe?: 'true' | 'false' } export function getRememberMe() { - return Cookies.get("rememberMe"); + return Cookies.get('rememberMe') } export function getAccount() { - return { - username: Cookies.get("username"), - password: Cookies.get("password"), - }; + return { + username: Cookies.get('username'), + password: Cookies.get('password'), + } } export function setAccount(account: AccountInfo) { - account.username && Cookies.set("username", account.username, { expires: expiresTime}); - account.password && Cookies.set("password", encrypt(account.password) as string, { expires: expiresTime}); - account.rememberMe != null && Cookies.set("rememberMe", account.rememberMe, { expires: expiresTime}); + if (account.username) + Cookies.set('username', account.username, { expires: expiresTime }) + if (account.password) + Cookies.set('password', encrypt(account.password) as string, { + expires: expiresTime, + }) + if (account.rememberMe) + Cookies.set('rememberMe', account.rememberMe, { expires: expiresTime }) } export function removeAccount() { - Cookies.remove("username"); - Cookies.remove("password"); - Cookies.remove("rememberMe"); + Cookies.remove('username') + Cookies.remove('password') + Cookies.remove('rememberMe') } diff --git a/src/utils/copyToClipboard.ts b/src/utils/copyToClipboard.ts index d264d2e..9bd74a6 100644 --- a/src/utils/copyToClipboard.ts +++ b/src/utils/copyToClipboard.ts @@ -1,8 +1,8 @@ -import { message } from "ant-design-vue"; +import { message } from 'ant-design-vue' // 复制到剪贴板 export const handleCopy = async (text: string | number | undefined) => { - if (!text) return; - await navigator.clipboard.writeText(String(text)); - message.success(`已复制: ${text}`); -}; + if (!text) return + await navigator.clipboard.writeText(String(text)) + message.success(`已复制: ${text}`) +} diff --git a/src/utils/dateUtils.ts b/src/utils/dateUtils.ts index 2e6552e..22f82ab 100644 --- a/src/utils/dateUtils.ts +++ b/src/utils/dateUtils.ts @@ -1,4 +1,4 @@ -import { ref, onMounted, onBeforeUnmount } from 'vue'; +import { ref, onMounted, onBeforeUnmount } from 'vue' /** * 格式化日期时间 @@ -6,27 +6,30 @@ import { ref, onMounted, onBeforeUnmount } from 'vue'; * @param format 格式字符串,默认 'YYYY-MM-DD HH:mm:ss' * @returns 格式化后的时间字符串 */ -export function formatDateTime(date: Date | number | string, format = 'YYYY-MM-DD HH:mm:ss'): string { - const d = new Date(date); - - if (isNaN(d.getTime())) { - return ''; - } +export function formatDateTime( + date: Date | number | string, + format = 'YYYY-MM-DD HH:mm:ss', +): string { + const d = new Date(date) - const year = d.getFullYear(); - const month = String(d.getMonth() + 1).padStart(2, '0'); - const day = String(d.getDate()).padStart(2, '0'); - const hours = String(d.getHours()).padStart(2, '0'); - const minutes = String(d.getMinutes()).padStart(2, '0'); - const seconds = String(d.getSeconds()).padStart(2, '0'); + if (isNaN(d.getTime())) { + return '' + } - return format - .replace('YYYY', String(year)) - .replace('MM', month) - .replace('DD', day) - .replace('HH', hours) - .replace('mm', minutes) - .replace('ss', seconds); + const year = d.getFullYear() + const month = String(d.getMonth() + 1).padStart(2, '0') + const day = String(d.getDate()).padStart(2, '0') + const hours = String(d.getHours()).padStart(2, '0') + const minutes = String(d.getMinutes()).padStart(2, '0') + const seconds = String(d.getSeconds()).padStart(2, '0') + + return format + .replace('YYYY', String(year)) + .replace('MM', month) + .replace('DD', day) + .replace('HH', hours) + .replace('mm', minutes) + .replace('ss', seconds) } /** @@ -35,7 +38,7 @@ export function formatDateTime(date: Date | number | string, format = 'YYYY-MM-D * @returns 当前时间字符串 */ export function getCurrentTime(format = 'YYYY-MM-DD HH:mm:ss'): string { - return formatDateTime(new Date(), format); + return formatDateTime(new Date(), format) } /** @@ -44,28 +47,28 @@ export function getCurrentTime(format = 'YYYY-MM-DD HH:mm:ss'): string { * @returns 响应式时间字符串 */ export function useRealTime(format = 'YYYY-MM-DD HH:mm:ss') { - const currentTime = ref(getCurrentTime(format)); - let timer: NodeJS.Timeout | null = null; + const currentTime = ref(getCurrentTime(format)) + let timer: NodeJS.Timeout | null = null - const startTimer = () => { - timer = setInterval(() => { - currentTime.value = getCurrentTime(format); - }, 1000); - }; + const startTimer = () => { + timer = setInterval(() => { + currentTime.value = getCurrentTime(format) + }, 1000) + } - const stopTimer = () => { - if (timer) { - clearInterval(timer); - timer = null; - } - }; + const stopTimer = () => { + if (timer) { + clearInterval(timer) + timer = null + } + } - onMounted(startTimer); - onBeforeUnmount(stopTimer); + onMounted(startTimer) + onBeforeUnmount(stopTimer) - return { - currentTime, - startTimer, - stopTimer - }; -} \ No newline at end of file + return { + currentTime, + startTimer, + stopTimer, + } +} diff --git a/src/utils/dict.ts b/src/utils/dict.ts index af954b2..62482c7 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -1,4 +1,4 @@ -import { useDictStore } from "@/store"; +import { useDictStore } from '@/store' import { getDicts } from '@/api/system/dict' import { ref, toRefs } from 'vue' @@ -6,21 +6,26 @@ import { ref, toRefs } from 'vue' * 获取字典数据 */ export function useDict(...args: string[]) { - const res = ref({}) + const res = ref({}) - return (() => { - args.forEach((dictType, index) => { - res.value[dictType] = [] - const dicts = useDictStore().getDict(dictType) - if (dicts) { - res.value[dictType] = dicts - } else { - getDicts(dictType).then((resp: any) => { - res.value[dictType] = resp.data.map((p: any) => ({ label: p.dictLabel, value: p.dictValue, elTagType: p.listClass, elTagClass: p.cssClass })) - useDictStore().setDict(dictType, res.value[dictType]) - }) - } - }) - return toRefs(res.value) - })() + return (() => { + args.forEach((dictType) => { + res.value[dictType] = [] + const dicts = useDictStore().getDict(dictType) + if (dicts) { + res.value[dictType] = dicts + } else { + getDicts(dictType).then((resp: any) => { + res.value[dictType] = resp.data.map((p: any) => ({ + label: p.dictLabel, + value: p.dictValue, + elTagType: p.listClass, + elTagClass: p.cssClass, + })) + useDictStore().setDict(dictType, res.value[dictType]) + }) + } + }) + return toRefs(res.value) + })() } diff --git a/src/utils/jsencrypt.ts b/src/utils/jsencrypt.ts index 265415d..cb242b0 100644 --- a/src/utils/jsencrypt.ts +++ b/src/utils/jsencrypt.ts @@ -1,31 +1,31 @@ -import JSEncrypt from "jsencrypt"; +import JSEncrypt from 'jsencrypt' // 密钥对生成 http://web.chacuo.net/netrsakeypair const publicKey = - "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n" + - "nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=="; + 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' const privateKey = - "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n" + - "7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n" + - "PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n" + - "kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n" + - "cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n" + - "DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n" + - "YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n" + - "UP8iWi1Qw0Y="; + 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=' // 加密 export function encrypt(txt: string) { - const encryptor = new JSEncrypt(); - encryptor.setPublicKey(publicKey); // 设置公钥 - return encryptor.encrypt(txt); // 对数据进行加密 + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 设置公钥 + return encryptor.encrypt(txt) // 对数据进行加密 } // 解密 export function decrypt(txt: string) { - const encryptor = new JSEncrypt(); - encryptor.setPrivateKey(privateKey); // 设置私钥 - return encryptor.decrypt(txt); // 对数据进行解密 + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 设置私钥 + return encryptor.decrypt(txt) // 对数据进行解密 } diff --git a/src/utils/mock.ts b/src/utils/mock.ts index 34cae4c..bb0f939 100644 --- a/src/utils/mock.ts +++ b/src/utils/mock.ts @@ -1,7 +1,7 @@ export const delay = (time: number, data?: any) => { - return new Promise((resolve) => { - setTimeout(() => { - resolve(data); - }, time); - }) as any; -}; + return new Promise((resolve) => { + setTimeout(() => { + resolve(data) + }, time) + }) as any +} diff --git a/src/utils/useDialog.ts b/src/utils/useDialog.ts index 3d3c3c4..7fe8360 100644 --- a/src/utils/useDialog.ts +++ b/src/utils/useDialog.ts @@ -1,33 +1,33 @@ -import { ref } from 'vue'; +import { ref } from 'vue' /** * Dialog控制Hook * @returns visible(显隐状态)、show(显示)、hide(隐藏)、toggle(切换) */ -export function useDialog(initialVisible:boolean = false): { - visible: import('vue').Ref, - show: () => void, - hide: () => void, - toggle: () => void +export function useDialog(initialVisible: boolean = false): { + visible: import('vue').Ref + show: () => void + hide: () => void + toggle: () => void } { - const visible = ref(initialVisible); + const visible = ref(initialVisible) - const show = () => { - visible.value = true; - }; + const show = () => { + visible.value = true + } - const hide = () => { - visible.value = false; - }; + const hide = () => { + visible.value = false + } - const toggle = () => { - visible.value = !visible.value; - }; + const toggle = () => { + visible.value = !visible.value + } - return { - visible, - show, - hide, - toggle - }; -} \ No newline at end of file + return { + visible, + show, + hide, + toggle, + } +} diff --git a/src/utils/useLoading.ts b/src/utils/useLoading.ts index 6e760e4..72a21cb 100644 --- a/src/utils/useLoading.ts +++ b/src/utils/useLoading.ts @@ -1,41 +1,43 @@ -import { ref } from 'vue'; +import { ref } from 'vue' /** * Loading控制Hook * @returns loading(加载状态)、startLoading(开始加载)、stopLoading(停止加载)、withLoading(包装异步函数) */ export function useLoading(initialLoading = false) { - const loading = ref(initialLoading); + const loading = ref(initialLoading) - const startLoading = () => { - loading.value = true; - }; + const startLoading = () => { + loading.value = true + } - const stopLoading = () => { - loading.value = false; - }; + const stopLoading = () => { + loading.value = false + } - /** - * 包装异步函数,自动控制loading状态 - * @param fn 异步函数 - * @returns 包装后的函数 - */ - const withLoading = Promise>(fn: T): T => { - return (async (...args: any[]) => { - startLoading(); - try { - const result = await fn(...args); - return result; - } finally { - stopLoading(); - } - }) as T; - }; + /** + * 包装异步函数,自动控制loading状态 + * @param fn 异步函数 + * @returns 包装后的函数 + */ + const withLoading = Promise>( + fn: T, + ): T => { + return (async (...args: any[]) => { + startLoading() + try { + const result = await fn(...args) + return result + } finally { + stopLoading() + } + }) as T + } - return { - loading, - startLoading, - stopLoading, - withLoading - }; -} \ No newline at end of file + return { + loading, + startLoading, + stopLoading, + withLoading, + } +} diff --git a/src/utils/uuidUtils.ts b/src/utils/uuidUtils.ts index 9fc79de..0d77206 100644 --- a/src/utils/uuidUtils.ts +++ b/src/utils/uuidUtils.ts @@ -3,9 +3,9 @@ * @returns 生成的UUID字符串 */ export function generateUUID(): string { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - const r = Math.random() * 16 | 0; - const v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); -} \ No newline at end of file + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = (Math.random() * 16) | 0 + const v = c === 'x' ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) +} diff --git a/src/views/index.vue b/src/views/index.vue index 63c1b30..ebc01f6 100644 --- a/src/views/index.vue +++ b/src/views/index.vue @@ -1,18 +1,22 @@ - diff --git a/src/views/login.vue b/src/views/login.vue index 27e4023..c25924f 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -3,21 +3,21 @@ import { ref, reactive } from 'vue' import { message } from 'ant-design-vue' import { getCaptcha } from '@/api/system' import type { LoginInfo } from '@/api/system/model' -import type { Rule } from 'ant-design-vue/es/form'; -import { useAuthStore } from '@/store'; -import { storeToRefs } from 'pinia'; -import { getAccount, getRememberMe } from '@/utils/auth'; -import { decrypt } from '@/utils/jsencrypt'; +import type { Rule } from 'ant-design-vue/es/form' +import { useAuthStore } from '@/store' +import { storeToRefs } from 'pinia' +import { getAccount, getRememberMe } from '@/utils/auth' +import { decrypt } from '@/utils/jsencrypt' -const authStore = useAuthStore(); -const { loginLoading } = storeToRefs(authStore); +const authStore = useAuthStore() +const { loginLoading } = storeToRefs(authStore) // 表单数据 const formData = reactive({ - username: '', - password: '', - uuid: '', - code: '', + username: '', + password: '', + uuid: '', + code: '', }) // 验证码图片 @@ -28,61 +28,55 @@ const rememberMe = ref(false) // 表单验证规则 const rules: Record = { - username: [ - { required: true, message: '请输入用户名', trigger: 'change' } - ], - password: [ - { required: true, message: '请输入密码', trigger: 'change' } - ], - code: [ - { required: true, message: '请输入验证码', trigger: 'change' } - ] + username: [{ required: true, message: '请输入用户名', trigger: 'change' }], + password: [{ required: true, message: '请输入密码', trigger: 'change' }], + code: [{ required: true, message: '请输入验证码', trigger: 'change' }], } // 获取验证码 const refreshCaptcha = async () => { - try { - captchaImg.value = '' - captchaLoading.value = true - await getCaptcha().then((res: any) => { - loadCaptchaFail.value = false; - if (res.captchaOnOff) { - captchaImg.value = "data:image/gif;base64," + res.img - rules.code[0].required = true; - } else { - rules.code[0].required = false; - } - formData.uuid = res.uuid - formData.code = '' // 清空验证码输入 - }) - } catch (error) { - loadCaptchaFail.value = true; - message.error('获取验证码失败') - console.error('获取验证码失败:', error) - } finally { - captchaLoading.value = false - } + try { + captchaImg.value = '' + captchaLoading.value = true + await getCaptcha().then((res: any) => { + loadCaptchaFail.value = false + if (res.captchaOnOff) { + captchaImg.value = 'data:image/gif;base64,' + res.img + rules.code[0].required = true + } else { + rules.code[0].required = false + } + formData.uuid = res.uuid + formData.code = '' // 清空验证码输入 + }) + } catch (error) { + loadCaptchaFail.value = true + message.error('获取验证码失败') + console.error('获取验证码失败:', error) + } finally { + captchaLoading.value = false + } } // 初始化 const initLoginForm = () => { - const { username, password } = getAccount(); - const isRememberMe = getRememberMe(); - if (isRememberMe && isRememberMe === 'true') { - rememberMe.value = true; - formData.username = username || ''; - formData.password = decrypt(password || '') || ''; - } + const { username, password } = getAccount() + const isRememberMe = getRememberMe() + if (isRememberMe && isRememberMe === 'true') { + rememberMe.value = true + formData.username = username || '' + formData.password = decrypt(password || '') || '' + } } // 登录处理 const handleLogin = async () => { - try { - await authStore.authLogin(formData, rememberMe.value); - } catch (error: any) { - message.error(error.message || error.msg || '登录失败'); - await refreshCaptcha(); - } + try { + await authStore.authLogin(formData, rememberMe.value) + } catch (error: any) { + message.error(error.message || error.msg || '登录失败') + await refreshCaptcha() + } } initLoginForm() @@ -91,113 +85,122 @@ refreshCaptcha() \ No newline at end of file + diff --git a/src/views/traceOrderManage/index.vue b/src/views/traceOrderManage/index.vue index cf69acb..c077cf1 100644 --- a/src/views/traceOrderManage/index.vue +++ b/src/views/traceOrderManage/index.vue @@ -1,86 +1,108 @@ diff --git a/src/views/traceOrderManage/infeed/equipment/index.vue b/src/views/traceOrderManage/infeed/equipment/index.vue index f854a82..4ac4534 100644 --- a/src/views/traceOrderManage/infeed/equipment/index.vue +++ b/src/views/traceOrderManage/infeed/equipment/index.vue @@ -1,182 +1,214 @@