From 749b24a17f8e784647a86732801f5dfe28b62e4a Mon Sep 17 00:00:00 2001 From: "Mr.j" <2221464500@qq.com> Date: Tue, 5 Aug 2025 16:22:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=AE=BE=E5=A4=87=E9=87=87?= =?UTF-8?q?=E8=B4=AD=E6=A8=A1=E5=9D=97=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8C=E9=A1=B5=E9=9D=A2=E6=90=AD=E5=BB=BA?= =?UTF-8?q?=E5=92=8C=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eslint.config.js | 57 +- package-lock.json | 570 +++++- package.json | 8 +- src/apis/equipment/procurement.ts | 125 ++ src/apis/equipment/type.ts | 64 + src/router/route.ts | 2 +- src/stores/modules/route.ts | 6 +- src/utils/date.ts | 44 + .../components/DeviceModal.vue | 117 +- .../device-management/index.vue | 16 +- .../components/ProcurementSearch.vue | 661 +++++++ .../device-management/procurement/index.vue | 1555 +++++++++++++++++ ....timestamp-1754370424130-d8a86764e855f.mjs | 198 +++ ....timestamp-1754378438776-a4f54b29012ba.mjs | 198 +++ 14 files changed, 3478 insertions(+), 143 deletions(-) create mode 100644 src/apis/equipment/procurement.ts create mode 100644 src/utils/date.ts create mode 100644 src/views/system-resource/device-management/procurement/components/ProcurementSearch.vue create mode 100644 src/views/system-resource/device-management/procurement/index.vue create mode 100644 vite.config.ts.timestamp-1754370424130-d8a86764e855f.mjs create mode 100644 vite.config.ts.timestamp-1754378438776-a4f54b29012ba.mjs diff --git a/eslint.config.js b/eslint.config.js index c56d1ce..673b075 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,48 +1,11 @@ -import antfu from '@antfu/eslint-config' +import js from "@eslint/js"; +import globals from "globals"; +import tseslint from "typescript-eslint"; +import pluginReact from "eslint-plugin-react"; +import { defineConfig } from "eslint/config"; -// https://github.com/antfu/eslint-config -export default antfu( - { - vue: { - overrides: { - 'vue/block-order': ['error', { - order: [['script', 'template'], 'style'], - }], // 强制组件顶级元素的顺序 - 'vue/define-macros-order': ['error', { - order: ['defineOptions', 'defineModel', 'defineProps', 'defineEmits', 'defineSlots'], - defineExposeLast: true, - }], // 强制执行定义限制和定义弹出编译器宏的顺序 - 'vue/singleline-html-element-content-newline': 'off', // 要求在单行元素的内容前后换行 - 'vue/html-self-closing': ['off', { - html: { - void: 'never', - normal: 'always', - component: 'never', - }, - }], // 强制自结束样式 - 'vue/custom-event-name-casing': ['error', 'kebab-case'], // 对自定义事件名称强制使用特定大小写 - }, - }, - typescript: true, - ignores: [ - '**/*.md', - '.github', - '.image', - 'src/types/shims-vue.d.ts', - ], - }, - { - rules: { - 'curly': ['off', 'all'], // 对所有控制语句强制使用一致的大括号样式 - 'no-new': 'off', // 不允许在赋值或比较之外使用 new 运算符 - 'no-console': 'off', // 允许使用 console - 'style/arrow-parens': ['error', 'always'], // 箭头函数参数需要括号 - 'style/brace-style': ['error', '1tbs', { allowSingleLine: true }], // 对块执行一致的大括号样式 - 'regexp/no-unused-capturing-group': 'off', - 'regexp/no-super-linear-backtracking': 'off', - 'node/prefer-global/process': 'off', - 'antfu/top-level-function': 'off', - 'antfu/if-newline': 'off', - }, - }, -) +export default defineConfig([ + { files: ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: globals.browser } }, + tseslint.configs.recommended, + pluginReact.configs.flat.recommended, +]); diff --git a/package-lock.json b/package-lock.json index b92e647..b4db47c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,21 +58,27 @@ "devDependencies": { "@antfu/eslint-config": "^2.16.3", "@arco-design/web-vue": "^2.57.0", + "@eslint/js": "^9.32.0", "@types/crypto-js": "^4.2.2", "@types/lodash-es": "^4.17.12", "@types/node": "^20.2.5", "@types/query-string": "^6.3.0", + "@typescript-eslint/eslint-plugin": "^8.39.0", + "@typescript-eslint/parser": "^8.39.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue/tsconfig": "^0.1.3", "boxen": "^7.1.1", - "eslint": "^9.0.0", + "eslint": "^9.32.0", + "eslint-plugin-react": "^7.37.5", + "globals": "^16.3.0", "less": "^4.1.3", "less-loader": "^11.0.0", "picocolors": "^1.0.0", "sass": "^1.62.1", "sass-loader": "^13.2.2", "typescript": "~5.0.4", + "typescript-eslint": "^8.39.0", "unplugin-auto-import": "^0.16.4", "unplugin-vue-components": "^0.25.1", "vite": "^5.1.5", @@ -205,6 +211,18 @@ } } }, + "node_modules/@antfu/eslint-config/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@antfu/install-pkg": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", @@ -719,7 +737,6 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", - "dev": true, "inBundle": true, "license": "MIT", "engines": { @@ -3074,16 +3091,16 @@ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", + "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/type-utils": "8.39.0", + "@typescript-eslint/utils": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -3097,9 +3114,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", + "@typescript-eslint/parser": "^8.39.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -3112,15 +3129,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.39.0.tgz", + "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "debug": "^4.3.4" }, "engines": { @@ -3132,17 +3149,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", + "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", "dev": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/tsconfig-utils": "^8.39.0", + "@typescript-eslint/types": "^8.39.0", "debug": "^4.3.4" }, "engines": { @@ -3153,17 +3170,17 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", + "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3174,9 +3191,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", + "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3186,18 +3203,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", + "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/utils": "8.39.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -3210,13 +3227,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.39.0.tgz", + "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3227,15 +3244,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", + "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", "dev": true, "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/project-service": "8.39.0", + "@typescript-eslint/tsconfig-utils": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/visitor-keys": "8.39.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3251,19 +3268,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.39.0.tgz", + "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@typescript-eslint/scope-manager": "8.39.0", + "@typescript-eslint/types": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3274,16 +3291,16 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", + "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/types": "8.39.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4465,6 +4482,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", @@ -4474,6 +4513,78 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", @@ -5901,6 +6012,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -6192,6 +6315,33 @@ "node": ">= 0.4" } }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz", @@ -6223,6 +6373,18 @@ "node": ">= 0.4" } }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz", @@ -7025,6 +7187,18 @@ "eslint": ">=8.23.0" } }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-no-only-tests": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", @@ -7070,6 +7244,86 @@ } } }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/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, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/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, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-plugin-regexp": { "version": "2.9.0", "resolved": "https://registry.npmmirror.com/eslint-plugin-regexp/-/eslint-plugin-regexp-2.9.0.tgz", @@ -7160,6 +7414,18 @@ "eslint": ">=8.56.0" } }, + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-plugin-unused-imports": { "version": "4.1.4", "resolved": "https://registry.npmmirror.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", @@ -8127,9 +8393,9 @@ "peer": true }, "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmmirror.com/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "version": "16.3.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", "dev": true, "engines": { "node": ">=18" @@ -9180,6 +9446,23 @@ "node": ">=0.10.0" } }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", @@ -9341,6 +9624,21 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmmirror.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", @@ -9697,6 +9995,18 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", @@ -10460,6 +10770,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", @@ -10481,6 +10824,24 @@ "node": ">=0.10.0" } }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz", @@ -11040,6 +11401,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/prosemirror-changeset": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz", @@ -11316,6 +11688,12 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", @@ -12706,6 +13084,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.10", "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", @@ -13610,6 +14025,29 @@ "node": ">=12.20" } }, + "node_modules/typescript-eslint": { + "version": "8.39.0", + "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.39.0.tgz", + "integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.39.0", + "@typescript-eslint/parser": "8.39.0", + "@typescript-eslint/typescript-estree": "8.39.0", + "@typescript-eslint/utils": "8.39.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/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", diff --git a/package.json b/package.json index 8c1b06b..4f851af 100644 --- a/package.json +++ b/package.json @@ -64,21 +64,27 @@ "devDependencies": { "@antfu/eslint-config": "^2.16.3", "@arco-design/web-vue": "^2.57.0", + "@eslint/js": "^9.32.0", "@types/crypto-js": "^4.2.2", "@types/lodash-es": "^4.17.12", "@types/node": "^20.2.5", "@types/query-string": "^6.3.0", + "@typescript-eslint/eslint-plugin": "^8.39.0", + "@typescript-eslint/parser": "^8.39.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue/tsconfig": "^0.1.3", "boxen": "^7.1.1", - "eslint": "^9.0.0", + "eslint": "^9.32.0", + "eslint-plugin-react": "^7.37.5", + "globals": "^16.3.0", "less": "^4.1.3", "less-loader": "^11.0.0", "picocolors": "^1.0.0", "sass": "^1.62.1", "sass-loader": "^13.2.2", "typescript": "~5.0.4", + "typescript-eslint": "^8.39.0", "unplugin-auto-import": "^0.16.4", "unplugin-vue-components": "^0.25.1", "vite": "^5.1.5", diff --git a/src/apis/equipment/procurement.ts b/src/apis/equipment/procurement.ts new file mode 100644 index 0000000..cae4d71 --- /dev/null +++ b/src/apis/equipment/procurement.ts @@ -0,0 +1,125 @@ +import http from '@/utils/http' +import type { EquipmentListReq, EquipmentReq, EquipmentResp } from './type' + +/** + * 设备采购管理API + */ +export const equipmentProcurementApi = { + /** + * 分页查询设备采购记录 + */ + page: (params: EquipmentListReq) => { + console.log('🔍 API - equipmentProcurementApi.page 被调用') + console.log('🔍 API - 接收到的参数:', params) + console.log('🔍 API - 参数类型:', typeof params) + console.log('🔍 API - 参数的键值对:') + Object.entries(params).forEach(([key, value]) => { + console.log(` ${key}: ${value} (${typeof value})`) + }) + + // 确保参数格式正确 + const requestParams = { + ...params, + // 确保分页参数存在 + page: params.page || 1, + pageSize: params.pageSize || 10, + } + + console.log('🔍 API - 最终请求参数:', requestParams) + console.log('🔍 API - 准备发送GET请求到 /equipment/procurement/page') + console.log('🔍 API - 请求参数序列化前:', requestParams) + + // 手动序列化参数进行调试(使用URLSearchParams) + const searchParams = new URLSearchParams() + Object.entries(requestParams).forEach(([key, value]) => { + if (value !== undefined && value !== null && value !== '') { + searchParams.append(key, String(value)) + } + }) + console.log('🔍 API - 手动序列化后的参数:', searchParams.toString()) + + // 参考设备模块的调用方式,直接将参数作为第二个参数传递 + return http.get>>('/equipment/procurement/page', requestParams) + }, + + /** + * 测试参数传递 - 使用API文档中的参数格式 + */ + testPage: () => { + console.log('🧪 API - 测试参数传递') + + // 使用API文档中的参数格式进行测试 + const testParams = { + page: 1, + pageSize: 10, + equipmentName: '测试设备', + supplierName: '测试供应商', + quantity: 10, + unitPrice: 100.50, + totalPrice: 1005.00, + accountNumber: 'TEST001', + brand: '测试品牌', + locationStatus: 'spare', + physicalLocation: '测试位置', + purchaseOrder: 'PO001', + inventoryBasis: '测试依据', + dynamicRecord: '测试记录' + } + + console.log('🧪 API - 测试参数:', testParams) + + return http.get>>('/equipment/procurement/page', testParams) + }, + + /** + * 新增设备采购记录 + */ + add: (data: EquipmentReq) => { + return http.post>('/equipment/procurement', data) + }, + + /** + * 修改设备采购记录 + */ + update: (equipmentId: string, data: EquipmentReq) => { + return http.put>(`/equipment/procurement/${equipmentId}`, data) + }, + + /** + * 删除设备采购记录 + */ + delete: (equipmentId: string) => { + return http.del>(`/equipment/procurement/${equipmentId}`) + }, + + /** + * 获取设备采购记录详情 + */ + detail: (equipmentId: string) => { + return http.get>(`/equipment/procurement/detail/${equipmentId}`) + }, + + /** + * 获取采购统计信息 + */ + getStats: () => { + return http.get>('/equipment/procurement/stats') + }, + + /** + * 批量删除设备采购记录 + */ + batchDelete: (equipmentIds: string[]) => { + return http.del>('/equipment/procurement/batch', { data: equipmentIds }) + }, + + /** + * 导出设备采购记录 + */ + export: (params: EquipmentListReq) => { + return http.get('/equipment/procurement/export', { + params, + responseType: 'blob' + }) + } +} \ No newline at end of file diff --git a/src/apis/equipment/type.ts b/src/apis/equipment/type.ts index 5f8a9fd..6dbd51c 100644 --- a/src/apis/equipment/type.ts +++ b/src/apis/equipment/type.ts @@ -26,6 +26,44 @@ export interface EquipmentListReq { projectId?: string /** 使用人ID */ userId?: string + /** 设备型号 */ + equipmentModel?: string + /** 配置规格/参数 */ + specification?: string + /** 设备当前物理位置 */ + physicalLocation?: string + /** 供应商名称 */ + supplierName?: string + /** 采购订单号 */ + purchaseOrder?: string + /** 维护人员 */ + maintenancePerson?: string + /** 次户号 */ + accountNumber?: string + /** 数量 */ + quantity?: number + /** 单价 */ + unitPrice?: number + /** 总价 */ + totalPrice?: number + /** 盘点依据 */ + inventoryBasis?: string + /** 动态记录 */ + dynamicRecord?: string + /** 资产备注 */ + assetRemark?: string + /** 采购时间开始 */ + purchaseTimeStart?: string + /** 采购时间结束 */ + purchaseTimeEnd?: string + /** 入库时间开始 */ + inStockTimeStart?: string + /** 入库时间结束 */ + inStockTimeEnd?: string + /** 启用时间开始 */ + activationTimeStart?: string + /** 启用时间结束 */ + activationTimeEnd?: string /** 当前页码 */ pageNum?: number /** 每页大小 */ @@ -34,6 +72,8 @@ export interface EquipmentListReq { orderBy?: string /** 排序方向 */ orderDirection?: string + /** 页码 */ + page?: number } /** @@ -136,6 +176,18 @@ export interface EquipmentResp { createTime?: string /** 更新时间 */ updateTime?: string + /** 次户号 */ + accountNumber?: string + /** 数量 */ + quantity?: number + /** 单价 */ + unitPrice?: number + /** 总价 */ + totalPrice?: number + /** 盘点依据 */ + inventoryBasis?: string + /** 动态记录 */ + dynamicRecord?: string } /** @@ -204,4 +256,16 @@ export interface EquipmentReq { inventoryBarcode?: string /** 资产备注 */ assetRemark?: string + /** 次户号 */ + accountNumber?: string + /** 数量 */ + quantity?: number + /** 单价 */ + unitPrice?: number + /** 总价 */ + totalPrice?: number + /** 盘点依据 */ + inventoryBasis?: string + /** 动态记录 */ + dynamicRecord?: string } diff --git a/src/router/route.ts b/src/router/route.ts index 69a6ef2..254eaf8 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -270,7 +270,7 @@ export const systemRoutes: RouteRecordRaw[] = [ { path: '/asset-management/device-management/procurement', name: 'DeviceProcurement', - component: () => import('@/views/system-resource/device-management/index.vue'), + component: () => import('@/views/system-resource/device-management/procurement/index.vue'), meta: { title: '设备采购', icon: 'shopping-cart', diff --git a/src/stores/modules/route.ts b/src/stores/modules/route.ts index 59b0bab..673763e 100644 --- a/src/stores/modules/route.ts +++ b/src/stores/modules/route.ts @@ -181,8 +181,10 @@ const storeSetup = () => { }] // 使用已转换的数据生成路由 const asyncRoutes = formatAsyncRoutes(data as unknown as RouteItem[]) - const flatRoutes = flatMultiLevelRoutes(cloneDeep(asyncRoutes)) - setRoutes(asyncRoutes) + // 合并systemRoutes中的路由 + const allRoutes = [...asyncRoutes, ...systemRoutes] + const flatRoutes = flatMultiLevelRoutes(cloneDeep(allRoutes)) + setRoutes(allRoutes) return flatRoutes } diff --git a/src/utils/date.ts b/src/utils/date.ts new file mode 100644 index 0000000..f1b6817 --- /dev/null +++ b/src/utils/date.ts @@ -0,0 +1,44 @@ +import dayjs from 'dayjs' + +/** + * 格式化日期时间 + * @param date 日期 + * @param format 格式,默认为 'YYYY-MM-DD HH:mm:ss' + * @returns 格式化后的日期字符串 + */ +export function formatDateTime(date: string | Date | null | undefined, format = 'YYYY-MM-DD HH:mm:ss'): string { + if (!date) return '-' + return dayjs(date).format(format) +} + +/** + * 格式化日期 + * @param date 日期 + * @param format 格式,默认为 'YYYY-MM-DD' + * @returns 格式化后的日期字符串 + */ +export function formatDate(date: string | Date | null | undefined, format = 'YYYY-MM-DD'): string { + if (!date) return '-' + return dayjs(date).format(format) +} + +/** + * 格式化时间 + * @param date 日期 + * @param format 格式,默认为 'HH:mm:ss' + * @returns 格式化后的时间字符串 + */ +export function formatTime(date: string | Date | null | undefined, format = 'HH:mm:ss'): string { + if (!date) return '-' + return dayjs(date).format(format) +} + +/** + * 获取相对时间 + * @param date 日期 + * @returns 相对时间字符串 + */ +export function getRelativeTime(date: string | Date | null | undefined): string { + if (!date) return '-' + return dayjs(date).fromNow() +} \ No newline at end of file diff --git a/src/views/system-resource/device-management/components/DeviceModal.vue b/src/views/system-resource/device-management/components/DeviceModal.vue index db10a43..0bb44c3 100644 --- a/src/views/system-resource/device-management/components/DeviceModal.vue +++ b/src/views/system-resource/device-management/components/DeviceModal.vue @@ -293,22 +293,32 @@ - - + - - + + + + + + + - + - + + + + + + + + + + + + + + @@ -803,6 +840,14 @@ const formData = ref({ purchaseOrder: '', supplierName: '', + // 新增采购相关字段 + accountNumber: '', + quantity: 1, + unitPrice: undefined, + totalPrice: undefined, + inventoryBasis: '', + dynamicRecord: '', + // 备注信息字段 assetRemark: '', @@ -880,6 +925,26 @@ const rules = { { maxLength: 200, message: '供应商名称长度不能超过200个字' }, ], + // 新增采购相关字段验证 + accountNumber: [ + { maxLength: 50, message: '次户号长度不能超过50个字' }, + ], + quantity: [ + { type: 'number', min: 1, message: '数量必须大于等于1' }, + ], + unitPrice: [ + { type: 'number', min: 0, message: '单价必须大于等于0' }, + ], + totalPrice: [ + { type: 'number', min: 0, message: '总价必须大于等于0' }, + ], + inventoryBasis: [ + { maxLength: 500, message: '盘点依据长度不能超过500个字' }, + ], + dynamicRecord: [ + { maxLength: 1000, message: '动态记录长度不能超过1000个字' }, + ], + // 财务价值字段验证 purchasePrice: [ { type: 'number', min: 0, message: '采购价格必须大于等于0' }, @@ -1049,6 +1114,14 @@ const resetFormData = () => { purchaseOrder: '', supplierName: '', + // 新增采购相关字段 + accountNumber: '', + quantity: 1, + unitPrice: undefined, + totalPrice: undefined, + inventoryBasis: '', + dynamicRecord: '', + // 备注信息字段 assetRemark: '', @@ -1239,6 +1312,14 @@ const fillTestData = () => { purchaseOrder: 'PO20250101001', supplierName: '测试供应商有限公司', + // 新增采购相关字段 + accountNumber: '001', + quantity: 10, + unitPrice: 1000.00, + totalPrice: 10000.00, + inventoryBasis: '盘点', + dynamicRecord: '设备正常使用,无异常', + // 备注信息字段 assetRemark: '这是一台测试设备,用于系统功能验证和演示。设备性能良好,维护记录完整。', diff --git a/src/views/system-resource/device-management/index.vue b/src/views/system-resource/device-management/index.vue index 31669c2..9b20b30 100644 --- a/src/views/system-resource/device-management/index.vue +++ b/src/views/system-resource/device-management/index.vue @@ -220,15 +220,15 @@ + + diff --git a/src/views/system-resource/device-management/procurement/index.vue b/src/views/system-resource/device-management/procurement/index.vue new file mode 100644 index 0000000..1bb8cc5 --- /dev/null +++ b/src/views/system-resource/device-management/procurement/index.vue @@ -0,0 +1,1555 @@ + + + + + \ No newline at end of file diff --git a/vite.config.ts.timestamp-1754370424130-d8a86764e855f.mjs b/vite.config.ts.timestamp-1754370424130-d8a86764e855f.mjs new file mode 100644 index 0000000..9af6555 --- /dev/null +++ b/vite.config.ts.timestamp-1754370424130-d8a86764e855f.mjs @@ -0,0 +1,198 @@ +// vite.config.ts +import { URL, fileURLToPath } from "node:url"; +import { defineConfig, loadEnv } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite/dist/node/index.js"; + +// config/plugins/index.ts +import vue from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; + +// config/plugins/app-info.ts +import boxen from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/boxen/index.js"; +import picocolors from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/picocolors/picocolors.js"; +function appInfo() { + return { + name: "appInfo", + apply: "serve", + async buildStart() { + const { bold, green, cyan, bgGreen, underline } = picocolors; + console.log( + boxen( + `${bold(green(`${bgGreen("ContiNew Admin v4.0.0-SNAPSHOT")}`))} +${cyan("\u5728\u7EBF\u6587\u6863\uFF1A")}${underline("https://continew.top")} +${cyan("\u5E38\u89C1\u95EE\u9898\uFF1A")}${underline("https://continew.top/admin/faq.html")} +${cyan("\u6301\u7EED\u8FED\u4EE3\u4F18\u5316\u7684\u524D\u540E\u7AEF\u5206\u79BB\u4E2D\u540E\u53F0\u7BA1\u7406\u7CFB\u7EDF\u6846\u67B6\u3002")}`, + { + padding: 1, + margin: 1, + borderStyle: "double", + textAlignment: "center" + } + ) + ); + } + }; +} + +// config/plugins/devtools.ts +import VueDevTools from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-vue-devtools/dist/vite.mjs"; +function createDevtools(env) { + const { VITE_OPEN_DEVTOOLS } = env; + return VITE_OPEN_DEVTOOLS === "true" && VueDevTools(); +} + +// config/plugins/auto-import.ts +import autoImport from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/unplugin-auto-import/dist/vite.js"; +function createAutoImport() { + return autoImport({ + // 自动导入 vue 相关函数 + imports: ["vue", "vue-router", { + // vue 3.5.x + vue: ["useTemplateRef", "onWatcherCleanup", "useId"] + }], + dts: "./src/types/auto-imports.d.ts" + }); +} + +// config/plugins/components.ts +import components from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/unplugin-vue-components/dist/vite.mjs"; +function createComponents() { + return components({ + // 指定组件位置,默认是 src/components 自动导入自定义组件 + dirs: ["src/components"], + extensions: ["vue", "tsx"], + // 配置文件生成位置 + dts: "./src/types/components.d.ts" + }); +} + +// config/plugins/svg-icon.ts +import path from "node:path"; +import process2 from "node:process"; +import { createSvgIconsPlugin } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +function createSvgIcon(isBuild) { + return createSvgIconsPlugin({ + // 指定需要缓存的图标文件夹 + iconDirs: [path.resolve(process2.cwd(), "src/assets/icons")], + // 指定 symbolId 格式 + symbolId: "icon-[dir]-[name]", + svgoOptions: isBuild + }); +} + +// config/plugins/mock.ts +import { viteMockServe } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-mock/dist/index.js"; +function createMock(env, isBuild) { + const { VITE_BUILD_MOCK } = env; + return viteMockServe({ + mockPath: "src/mock", + // 目录位置 + logger: !isBuild, + // 是否在控制台显示请求日志 + supportTs: true, + // 是否读取 ts 文件模块 + localEnabled: true, + // 设置是否启用本地mock文件 + prodEnabled: isBuild && VITE_BUILD_MOCK === "true", + // 设置打包是否启用mock功能 + // 这样可以控制关闭mock的时候不让mock打包到最终代码内 + injectCode: ` + import { setupProdMockServer } from '../src/mock/index'; + setupProdMockServer(); + ` + }); +} + +// config/plugins/index.ts +function createVitePlugins(viteEnv, isBuild = false) { + const vitePlugins = [appInfo(), vue(), vueJsx()]; + vitePlugins.push(createDevtools(viteEnv)); + vitePlugins.push(createAutoImport()); + vitePlugins.push(createComponents()); + vitePlugins.push(createSvgIcon(isBuild)); + vitePlugins.push(createMock(viteEnv, isBuild)); + return vitePlugins; +} + +// vite.config.ts +var __vite_injected_original_import_meta_url = "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/vite.config.ts"; +var vite_config_default = defineConfig(({ command, mode }) => { + const env = loadEnv(mode, process.cwd()); + return { + // 开发或生产环境服务的公共基础路径 + base: env.VITE_BASE, + // 路径别名 + resolve: { + alias: { + "~": fileURLToPath(new URL("./", __vite_injected_original_import_meta_url)), + "@": fileURLToPath(new URL("./src", __vite_injected_original_import_meta_url)) + } + }, + // 引入sass全局样式变量 + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;`, + api: "modern-compiler" + } + } + }, + // 添加需要vite优化的依赖 + optimizeDeps: { + include: ["vue-draggable-plus"] + }, + server: { + // 服务启动时是否自动打开浏览器 + open: true, + // 本地跨域代理 -> 代理到服务器的接口地址 + proxy: { + [env.VITE_API_PREFIX]: { + target: env.VITE_API_BASE_URL, + // 后台服务器地址 + changeOrigin: true, + // 是否允许不同源 + secure: false, + // 支持https + rewrite: (path2) => path2.replace(new RegExp(`^${env.VITE_API_PREFIX}`), "") + } + } + }, + plugins: createVitePlugins(env, command === "build"), + // 构建 + build: { + chunkSizeWarningLimit: 2e3, + // 消除打包大小超过500kb警告 + outDir: "dist", + // 指定打包路径,默认为项目根目录下的dist目录 + minify: "terser", + // Vite 2.6.x 以上需要配置 minify:"terser",terserOptions才能生效 + terserOptions: { + compress: { + keep_infinity: true, + // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题 + drop_console: command === "build", + // 只在生产环境构建时去除 console + drop_debugger: true + // 生产环境去除 debugger + }, + format: { + comments: false + // 删除注释 + } + }, + // 静态资源打包到dist下的不同目录 + rollupOptions: { + output: { + chunkFileNames: "static/js/[name]-[hash].js", + entryFileNames: "static/js/[name]-[hash].js", + assetFileNames: "static/[ext]/[name]-[hash].[ext]" + } + } + }, + // 以 envPrefix 开头的环境变量会通过 import.meta.env 暴露在你的客户端源码中。 + envPrefix: ["VITE", "FILE"] + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiY29uZmlnL3BsdWdpbnMvaW5kZXgudHMiLCAiY29uZmlnL3BsdWdpbnMvYXBwLWluZm8udHMiLCAiY29uZmlnL3BsdWdpbnMvZGV2dG9vbHMudHMiLCAiY29uZmlnL3BsdWdpbnMvYXV0by1pbXBvcnQudHMiLCAiY29uZmlnL3BsdWdpbnMvY29tcG9uZW50cy50cyIsICJjb25maWcvcGx1Z2lucy9zdmctaWNvbi50cyIsICJjb25maWcvcGx1Z2lucy9tb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMjIyMTQvRGVza3RvcC8lRTYlOTklQkElRTglODMlQkQlRTUlQjklQjMlRTUlOEYlQjAvSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IFVSTCwgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xyXG5pbXBvcnQgeyBkZWZpbmVDb25maWcsIGxvYWRFbnYgfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgY3JlYXRlVml0ZVBsdWdpbnMgZnJvbSAnLi9jb25maWcvcGx1Z2lucydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBjb21tYW5kLCBtb2RlIH0pID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpIGFzIEltcG9ydE1ldGFFbnZcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC8vIFx1NUYwMFx1NTNEMVx1NjIxNlx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NjcwRFx1NTJBMVx1NzY4NFx1NTE2Q1x1NTE3MVx1NTdGQVx1Nzg0MFx1OERFRlx1NUY4NFxyXG4gICAgYmFzZTogZW52LlZJVEVfQkFTRSxcclxuICAgIC8vIFx1OERFRlx1NUY4NFx1NTIyQlx1NTQwRFxyXG4gICAgcmVzb2x2ZToge1xyXG4gICAgICBhbGlhczoge1xyXG4gICAgICAgICd+JzogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLycsIGltcG9ydC5tZXRhLnVybCkpLFxyXG4gICAgICAgICdAJzogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL3NyYycsIGltcG9ydC5tZXRhLnVybCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIC8vIFx1NUYxNVx1NTE2NXNhc3NcdTUxNjhcdTVDNDBcdTY4MzdcdTVGMEZcdTUzRDhcdTkxQ0ZcclxuICAgIGNzczoge1xyXG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2AsXHJcbiAgICAgICAgICBhcGk6ICdtb2Rlcm4tY29tcGlsZXInLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgLy8gXHU2REZCXHU1MkEwXHU5NzAwXHU4OTgxdml0ZVx1NEYxOFx1NTMxNlx1NzY4NFx1NEY5RFx1OEQ1NlxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGluY2x1ZGU6IFsndnVlLWRyYWdnYWJsZS1wbHVzJ10sXHJcbiAgICB9LFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIC8vIFx1NjcwRFx1NTJBMVx1NTQyRlx1NTJBOFx1NjVGNlx1NjYyRlx1NTQyNlx1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFx1NkQ0Rlx1ODlDOFx1NTY2OFxyXG4gICAgICBvcGVuOiB0cnVlLFxyXG4gICAgICAvLyBcdTY3MkNcdTU3MzBcdThERThcdTU3REZcdTRFRTNcdTc0MDYgLT4gXHU0RUUzXHU3NDA2XHU1MjMwXHU2NzBEXHU1MkExXHU1NjY4XHU3Njg0XHU2M0E1XHU1M0UzXHU1NzMwXHU1NzQwXHJcbiAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgW2Vudi5WSVRFX0FQSV9QUkVGSVhdOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQSV9CQVNFX1VSTCwgLy8gXHU1NDBFXHU1M0YwXHU2NzBEXHU1MkExXHU1NjY4XHU1NzMwXHU1NzQwXHJcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsIC8vIFx1NjYyRlx1NTQyNlx1NTE0MVx1OEJCOFx1NEUwRFx1NTQwQ1x1NkU5MFxyXG4gICAgICAgICAgc2VjdXJlOiBmYWxzZSwgLy8gXHU2NTJGXHU2MzAxaHR0cHNcclxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7ZW52LlZJVEVfQVBJX1BSRUZJWH1gKSwgJycpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcGx1Z2luczogY3JlYXRlVml0ZVBsdWdpbnMoZW52LCBjb21tYW5kID09PSAnYnVpbGQnKSxcclxuICAgIC8vIFx1Njc4NFx1NUVGQVxyXG4gICAgYnVpbGQ6IHtcclxuICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLCAvLyBcdTZEODhcdTk2NjRcdTYyNTNcdTUzMDVcdTU5MjdcdTVDMEZcdThEODVcdThGQzc1MDBrYlx1OEI2Nlx1NTQ0QVxyXG4gICAgICBvdXREaXI6ICdkaXN0JywgLy8gXHU2MzA3XHU1QjlBXHU2MjUzXHU1MzA1XHU4REVGXHU1Rjg0XHVGRjBDXHU5RUQ4XHU4QkE0XHU0RTNBXHU5ODc5XHU3NkVFXHU2ODM5XHU3NkVFXHU1RjU1XHU0RTBCXHU3Njg0ZGlzdFx1NzZFRVx1NUY1NVxyXG4gICAgICBtaW5pZnk6ICd0ZXJzZXInLCAvLyBWaXRlIDIuNi54IFx1NEVFNVx1NEUwQVx1OTcwMFx1ODk4MVx1OTE0RFx1N0Y2RSBtaW5pZnlcdUZGMUFcInRlcnNlclwiXHVGRjBDdGVyc2VyT3B0aW9uc1x1NjI0RFx1ODBGRFx1NzUxRlx1NjU0OFxyXG4gICAgICB0ZXJzZXJPcHRpb25zOiB7XHJcbiAgICAgICAgY29tcHJlc3M6IHtcclxuICAgICAgICAgIGtlZXBfaW5maW5pdHk6IHRydWUsIC8vIFx1OTYzMlx1NkI2MiBJbmZpbml0eSBcdTg4QUJcdTUzOEJcdTdGMjlcdTYyMTAgMS8wXHVGRjBDXHU4RkQ5XHU1M0VGXHU4MEZEXHU0RjFBXHU1QkZDXHU4MUY0IENocm9tZSBcdTRFMEFcdTc2ODRcdTYwMjdcdTgwRkRcdTk1RUVcdTk4OThcclxuICAgICAgICAgIGRyb3BfY29uc29sZTogY29tbWFuZCA9PT0gJ2J1aWxkJywgLy8gXHU1M0VBXHU1NzI4XHU3NTFGXHU0RUE3XHU3M0FGXHU1ODgzXHU2Nzg0XHU1RUZBXHU2NUY2XHU1M0JCXHU5NjY0IGNvbnNvbGVcclxuICAgICAgICAgIGRyb3BfZGVidWdnZXI6IHRydWUsIC8vIFx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NTNCQlx1OTY2NCBkZWJ1Z2dlclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZm9ybWF0OiB7XHJcbiAgICAgICAgICBjb21tZW50czogZmFsc2UsIC8vIFx1NTIyMFx1OTY2NFx1NkNFOFx1OTFDQVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIFx1OTc1OVx1NjAwMVx1OEQ0NFx1NkU5MFx1NjI1M1x1NTMwNVx1NTIzMGRpc3RcdTRFMEJcdTc2ODRcdTRFMERcdTU0MENcdTc2RUVcdTVGNTVcclxuICAgICAgcm9sbHVwT3B0aW9uczoge1xyXG4gICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6ICdzdGF0aWMvanMvW25hbWVdLVtoYXNoXS5qcycsXHJcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogJ3N0YXRpYy9qcy9bbmFtZV0tW2hhc2hdLmpzJyxcclxuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAnc3RhdGljL1tleHRdL1tuYW1lXS1baGFzaF0uW2V4dF0nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgLy8gXHU0RUU1IGVudlByZWZpeCBcdTVGMDBcdTU5MzRcdTc2ODRcdTczQUZcdTU4ODNcdTUzRDhcdTkxQ0ZcdTRGMUFcdTkwMUFcdThGQzcgaW1wb3J0Lm1ldGEuZW52IFx1NjZCNFx1OTczMlx1NTcyOFx1NEY2MFx1NzY4NFx1NUJBMlx1NjIzN1x1N0FFRlx1NkU5MFx1NzgwMVx1NEUyRFx1MzAwMlxyXG4gICAgZW52UHJlZml4OiBbJ1ZJVEUnLCAnRklMRSddLFxyXG4gIH1cclxufSlcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGluZGV4LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2luZGV4LnRzXCI7aW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSdcclxuaW1wb3J0IHZ1ZUpzeCBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUtanN4J1xyXG5cclxuaW1wb3J0IGFwcEluZm8gZnJvbSAnLi9hcHAtaW5mbydcclxuaW1wb3J0IGNyZWF0ZURldnRvb2xzIGZyb20gJy4vZGV2dG9vbHMnXHJcbmltcG9ydCBjcmVhdGVBdXRvSW1wb3J0IGZyb20gJy4vYXV0by1pbXBvcnQnXHJcbmltcG9ydCBjcmVhdGVDb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cydcclxuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi9zdmctaWNvbidcclxuaW1wb3J0IGNyZWF0ZU1vY2sgZnJvbSAnLi9tb2NrJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudiwgaXNCdWlsZCA9IGZhbHNlKSB7XHJcbiAgY29uc3Qgdml0ZVBsdWdpbnM6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9IFthcHBJbmZvKCksIHZ1ZSgpLCB2dWVKc3goKV1cclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZURldnRvb2xzKHZpdGVFbnYpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQXV0b0ltcG9ydCgpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQ29tcG9uZW50cygpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZU1vY2sodml0ZUVudiwgaXNCdWlsZCkpXHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGFwcC1pbmZvLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2FwcC1pbmZvLnRzXCI7aW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJ1xyXG5pbXBvcnQgcGljb2NvbG9ycyBmcm9tICdwaWNvY29sb3JzJ1xyXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBJbmZvKCk6IFBsdWdpbiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6ICdhcHBJbmZvJyxcclxuICAgIGFwcGx5OiAnc2VydmUnLFxyXG4gICAgYXN5bmMgYnVpbGRTdGFydCgpIHtcclxuICAgICAgY29uc3QgeyBib2xkLCBncmVlbiwgY3lhbiwgYmdHcmVlbiwgdW5kZXJsaW5lIH0gPSBwaWNvY29sb3JzXHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBib3hlbihcclxuICAgICAgICAgIGAke2JvbGQoZ3JlZW4oYCR7YmdHcmVlbignQ29udGlOZXcgQWRtaW4gdjQuMC4wLVNOQVBTSE9UJyl9YCkpfVxcbiR7Y3lhbignXHU1NzI4XHU3RUJGXHU2NTg3XHU2ODYzXHVGRjFBJyl9JHt1bmRlcmxpbmUoJ2h0dHBzOi8vY29udGluZXcudG9wJyl9XFxuJHtjeWFuKCdcdTVFMzhcdTg5QzFcdTk1RUVcdTk4OThcdUZGMUEnKX0ke3VuZGVybGluZSgnaHR0cHM6Ly9jb250aW5ldy50b3AvYWRtaW4vZmFxLmh0bWwnKX1cXG4ke2N5YW4oJ1x1NjMwMVx1N0VFRFx1OEZFRFx1NEVFM1x1NEYxOFx1NTMxNlx1NzY4NFx1NTI0RFx1NTQwRVx1N0FFRlx1NTIwNlx1NzlCQlx1NEUyRFx1NTQwRVx1NTNGMFx1N0JBMVx1NzQwNlx1N0NGQlx1N0VERlx1Njg0Nlx1NjdCNlx1MzAwMicpfWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEsXHJcbiAgICAgICAgICAgIG1hcmdpbjogMSxcclxuICAgICAgICAgICAgYm9yZGVyU3R5bGU6ICdkb3VibGUnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ25tZW50OiAnY2VudGVyJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgfSxcclxuICB9XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGRldnRvb2xzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2RldnRvb2xzLnRzXCI7aW1wb3J0IFZ1ZURldlRvb2xzIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1kZXZ0b29scydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZURldnRvb2xzKGVudikge1xyXG4gIGNvbnN0IHsgVklURV9PUEVOX0RFVlRPT0xTIH0gPSBlbnZcclxuICByZXR1cm4gVklURV9PUEVOX0RFVlRPT0xTID09PSAndHJ1ZScgJiYgVnVlRGV2VG9vbHMoKVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFxjb25maWdcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFxjb25maWdcXFxccGx1Z2luc1xcXFxhdXRvLWltcG9ydC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMjIyMTQvRGVza3RvcC8lRTYlOTklQkElRTglODMlQkQlRTUlQjklQjMlRTUlOEYlQjAvSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYi9jb25maWcvcGx1Z2lucy9hdXRvLWltcG9ydC50c1wiO2ltcG9ydCBhdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVBdXRvSW1wb3J0KCkge1xyXG4gIHJldHVybiBhdXRvSW1wb3J0KHtcclxuICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSB2dWUgXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwXHJcbiAgICBpbXBvcnRzOiBbJ3Z1ZScsICd2dWUtcm91dGVyJywge1xyXG4gICAgICAvLyB2dWUgMy41LnhcclxuICAgICAgdnVlOiBbJ3VzZVRlbXBsYXRlUmVmJywgJ29uV2F0Y2hlckNsZWFudXAnLCAndXNlSWQnXSxcclxuICAgIH1dLFxyXG4gICAgZHRzOiAnLi9zcmMvdHlwZXMvYXV0by1pbXBvcnRzLmQudHMnLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGNvbXBvbmVudHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzLzIyMjE0L0Rlc2t0b3AvJUU2JTk5JUJBJUU4JTgzJUJEJUU1JUI5JUIzJUU1JThGJUIwL0luZHVzdHJpYWwtaW1hZ2UtbWFuYWdlbWVudC1zeXN0ZW0tLS13ZWIvY29uZmlnL3BsdWdpbnMvY29tcG9uZW50cy50c1wiO2ltcG9ydCBjb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnRzKCkge1xyXG4gIHJldHVybiBjb21wb25lbnRzKHtcclxuICAgIC8vIFx1NjMwN1x1NUI5QVx1N0VDNFx1NEVGNlx1NEY0RFx1N0Y2RVx1RkYwQ1x1OUVEOFx1OEJBNFx1NjYyRiBzcmMvY29tcG9uZW50cyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjVcdTgxRUFcdTVCOUFcdTRFNDlcdTdFQzRcdTRFRjZcclxuICAgIGRpcnM6IFsnc3JjL2NvbXBvbmVudHMnXSxcclxuICAgIGV4dGVuc2lvbnM6IFsndnVlJywgJ3RzeCddLFxyXG4gICAgLy8gXHU5MTREXHU3RjZFXHU2NTg3XHU0RUY2XHU3NTFGXHU2MjEwXHU0RjREXHU3RjZFXHJcbiAgICBkdHM6ICcuL3NyYy90eXBlcy9jb21wb25lbnRzLmQudHMnLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXHN2Zy1pY29uLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL3N2Zy1pY29uLnRzXCI7aW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJ1xyXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnXHJcbmltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuICAgIC8vIFx1NjMwN1x1NUI5QVx1OTcwMFx1ODk4MVx1N0YxM1x1NUI1OFx1NzY4NFx1NTZGRVx1NjgwN1x1NjU4N1x1NEVGNlx1NTkzOVxyXG4gICAgaWNvbkRpcnM6IFtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3NyYy9hc3NldHMvaWNvbnMnKV0sXHJcbiAgICAvLyBcdTYzMDdcdTVCOUEgc3ltYm9sSWQgXHU2ODNDXHU1RjBGXHJcbiAgICBzeW1ib2xJZDogJ2ljb24tW2Rpcl0tW25hbWVdJyxcclxuICAgIHN2Z29PcHRpb25zOiBpc0J1aWxkLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXG1vY2sudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzLzIyMjE0L0Rlc2t0b3AvJUU2JTk5JUJBJUU4JTgzJUJEJUU1JUI5JUIzJUU1JThGJUIwL0luZHVzdHJpYWwtaW1hZ2UtbWFuYWdlbWVudC1zeXN0ZW0tLS13ZWIvY29uZmlnL3BsdWdpbnMvbW9jay50c1wiO2ltcG9ydCB7IHZpdGVNb2NrU2VydmUgfSBmcm9tICd2aXRlLXBsdWdpbi1tb2NrJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTW9jayhlbnYsIGlzQnVpbGQpIHtcclxuICBjb25zdCB7IFZJVEVfQlVJTERfTU9DSyB9ID0gZW52XHJcbiAgcmV0dXJuIHZpdGVNb2NrU2VydmUoe1xyXG4gICAgbW9ja1BhdGg6ICdzcmMvbW9jaycsIC8vIFx1NzZFRVx1NUY1NVx1NEY0RFx1N0Y2RVxyXG4gICAgbG9nZ2VyOiAhaXNCdWlsZCwgLy8gIFx1NjYyRlx1NTQyNlx1NTcyOFx1NjNBN1x1NTIzNlx1NTNGMFx1NjYzRVx1NzkzQVx1OEJGN1x1NkM0Mlx1NjVFNVx1NUZEN1xyXG4gICAgc3VwcG9ydFRzOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdThCRkJcdTUzRDYgdHMgXHU2NTg3XHU0RUY2XHU2QTIxXHU1NzU3XHJcbiAgICBsb2NhbEVuYWJsZWQ6IHRydWUsIC8vIFx1OEJCRVx1N0Y2RVx1NjYyRlx1NTQyNlx1NTQyRlx1NzUyOFx1NjcyQ1x1NTczMG1vY2tcdTY1ODdcdTRFRjZcclxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkICYmIFZJVEVfQlVJTERfTU9DSyA9PT0gJ3RydWUnLCAvLyBcdThCQkVcdTdGNkVcdTYyNTNcdTUzMDVcdTY2MkZcdTU0MjZcdTU0MkZcdTc1Mjhtb2NrXHU1MjlGXHU4MEZEXHJcbiAgICAvLyBcdThGRDlcdTY4MzdcdTUzRUZcdTRFRTVcdTYzQTdcdTUyMzZcdTUxNzNcdTk1RURtb2NrXHU3Njg0XHU2NUY2XHU1MDE5XHU0RTBEXHU4QkE5bW9ja1x1NjI1M1x1NTMwNVx1NTIzMFx1NjcwMFx1N0VDOFx1NEVFM1x1NzgwMVx1NTE4NVxyXG4gICAgaW5qZWN0Q29kZTogYFxyXG4gICAgICAgICAgaW1wb3J0IHsgc2V0dXBQcm9kTW9ja1NlcnZlciB9IGZyb20gJy4uL3NyYy9tb2NrL2luZGV4JztcclxuICAgICAgICAgIHNldHVwUHJvZE1vY2tTZXJ2ZXIoKTtcclxuICAgICAgICBgLFxyXG4gIH0pXHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUEwYSxTQUFTLEtBQUsscUJBQXFCO0FBQzdjLFNBQVMsY0FBYyxlQUFlOzs7QUNBdEMsT0FBTyxTQUFTO0FBQ2hCLE9BQU8sWUFBWTs7O0FDRmtjLE9BQU8sV0FBVztBQUN2ZSxPQUFPLGdCQUFnQjtBQUdSLFNBQVIsVUFBbUM7QUFDeEMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsTUFBTSxhQUFhO0FBQ2pCLFlBQU0sRUFBRSxNQUFNLE9BQU8sTUFBTSxTQUFTLFVBQVUsSUFBSTtBQUVsRCxjQUFRO0FBQUEsUUFDTjtBQUFBLFVBQ0UsR0FBRyxLQUFLLE1BQU0sR0FBRyxRQUFRLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBSyxLQUFLLGdDQUFPLENBQUMsR0FB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 diff --git a/vite.config.ts.timestamp-1754378438776-a4f54b29012ba.mjs b/vite.config.ts.timestamp-1754378438776-a4f54b29012ba.mjs new file mode 100644 index 0000000..9af6555 --- /dev/null +++ b/vite.config.ts.timestamp-1754378438776-a4f54b29012ba.mjs @@ -0,0 +1,198 @@ +// vite.config.ts +import { URL, fileURLToPath } from "node:url"; +import { defineConfig, loadEnv } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite/dist/node/index.js"; + +// config/plugins/index.ts +import vue from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/@vitejs/plugin-vue/dist/index.mjs"; +import vueJsx from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs"; + +// config/plugins/app-info.ts +import boxen from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/boxen/index.js"; +import picocolors from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/picocolors/picocolors.js"; +function appInfo() { + return { + name: "appInfo", + apply: "serve", + async buildStart() { + const { bold, green, cyan, bgGreen, underline } = picocolors; + console.log( + boxen( + `${bold(green(`${bgGreen("ContiNew Admin v4.0.0-SNAPSHOT")}`))} +${cyan("\u5728\u7EBF\u6587\u6863\uFF1A")}${underline("https://continew.top")} +${cyan("\u5E38\u89C1\u95EE\u9898\uFF1A")}${underline("https://continew.top/admin/faq.html")} +${cyan("\u6301\u7EED\u8FED\u4EE3\u4F18\u5316\u7684\u524D\u540E\u7AEF\u5206\u79BB\u4E2D\u540E\u53F0\u7BA1\u7406\u7CFB\u7EDF\u6846\u67B6\u3002")}`, + { + padding: 1, + margin: 1, + borderStyle: "double", + textAlignment: "center" + } + ) + ); + } + }; +} + +// config/plugins/devtools.ts +import VueDevTools from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-vue-devtools/dist/vite.mjs"; +function createDevtools(env) { + const { VITE_OPEN_DEVTOOLS } = env; + return VITE_OPEN_DEVTOOLS === "true" && VueDevTools(); +} + +// config/plugins/auto-import.ts +import autoImport from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/unplugin-auto-import/dist/vite.js"; +function createAutoImport() { + return autoImport({ + // 自动导入 vue 相关函数 + imports: ["vue", "vue-router", { + // vue 3.5.x + vue: ["useTemplateRef", "onWatcherCleanup", "useId"] + }], + dts: "./src/types/auto-imports.d.ts" + }); +} + +// config/plugins/components.ts +import components from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/unplugin-vue-components/dist/vite.mjs"; +function createComponents() { + return components({ + // 指定组件位置,默认是 src/components 自动导入自定义组件 + dirs: ["src/components"], + extensions: ["vue", "tsx"], + // 配置文件生成位置 + dts: "./src/types/components.d.ts" + }); +} + +// config/plugins/svg-icon.ts +import path from "node:path"; +import process2 from "node:process"; +import { createSvgIconsPlugin } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-svg-icons/dist/index.mjs"; +function createSvgIcon(isBuild) { + return createSvgIconsPlugin({ + // 指定需要缓存的图标文件夹 + iconDirs: [path.resolve(process2.cwd(), "src/assets/icons")], + // 指定 symbolId 格式 + symbolId: "icon-[dir]-[name]", + svgoOptions: isBuild + }); +} + +// config/plugins/mock.ts +import { viteMockServe } from "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/node_modules/vite-plugin-mock/dist/index.js"; +function createMock(env, isBuild) { + const { VITE_BUILD_MOCK } = env; + return viteMockServe({ + mockPath: "src/mock", + // 目录位置 + logger: !isBuild, + // 是否在控制台显示请求日志 + supportTs: true, + // 是否读取 ts 文件模块 + localEnabled: true, + // 设置是否启用本地mock文件 + prodEnabled: isBuild && VITE_BUILD_MOCK === "true", + // 设置打包是否启用mock功能 + // 这样可以控制关闭mock的时候不让mock打包到最终代码内 + injectCode: ` + import { setupProdMockServer } from '../src/mock/index'; + setupProdMockServer(); + ` + }); +} + +// config/plugins/index.ts +function createVitePlugins(viteEnv, isBuild = false) { + const vitePlugins = [appInfo(), vue(), vueJsx()]; + vitePlugins.push(createDevtools(viteEnv)); + vitePlugins.push(createAutoImport()); + vitePlugins.push(createComponents()); + vitePlugins.push(createSvgIcon(isBuild)); + vitePlugins.push(createMock(viteEnv, isBuild)); + return vitePlugins; +} + +// vite.config.ts +var __vite_injected_original_import_meta_url = "file:///C:/Users/22214/Desktop/%E6%99%BA%E8%83%BD%E5%B9%B3%E5%8F%B0/Industrial-image-management-system---web/vite.config.ts"; +var vite_config_default = defineConfig(({ command, mode }) => { + const env = loadEnv(mode, process.cwd()); + return { + // 开发或生产环境服务的公共基础路径 + base: env.VITE_BASE, + // 路径别名 + resolve: { + alias: { + "~": fileURLToPath(new URL("./", __vite_injected_original_import_meta_url)), + "@": fileURLToPath(new URL("./src", __vite_injected_original_import_meta_url)) + } + }, + // 引入sass全局样式变量 + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/styles/var.scss" as *;`, + api: "modern-compiler" + } + } + }, + // 添加需要vite优化的依赖 + optimizeDeps: { + include: ["vue-draggable-plus"] + }, + server: { + // 服务启动时是否自动打开浏览器 + open: true, + // 本地跨域代理 -> 代理到服务器的接口地址 + proxy: { + [env.VITE_API_PREFIX]: { + target: env.VITE_API_BASE_URL, + // 后台服务器地址 + changeOrigin: true, + // 是否允许不同源 + secure: false, + // 支持https + rewrite: (path2) => path2.replace(new RegExp(`^${env.VITE_API_PREFIX}`), "") + } + } + }, + plugins: createVitePlugins(env, command === "build"), + // 构建 + build: { + chunkSizeWarningLimit: 2e3, + // 消除打包大小超过500kb警告 + outDir: "dist", + // 指定打包路径,默认为项目根目录下的dist目录 + minify: "terser", + // Vite 2.6.x 以上需要配置 minify:"terser",terserOptions才能生效 + terserOptions: { + compress: { + keep_infinity: true, + // 防止 Infinity 被压缩成 1/0,这可能会导致 Chrome 上的性能问题 + drop_console: command === "build", + // 只在生产环境构建时去除 console + drop_debugger: true + // 生产环境去除 debugger + }, + format: { + comments: false + // 删除注释 + } + }, + // 静态资源打包到dist下的不同目录 + rollupOptions: { + output: { + chunkFileNames: "static/js/[name]-[hash].js", + entryFileNames: "static/js/[name]-[hash].js", + assetFileNames: "static/[ext]/[name]-[hash].[ext]" + } + } + }, + // 以 envPrefix 开头的环境变量会通过 import.meta.env 暴露在你的客户端源码中。 + envPrefix: ["VITE", "FILE"] + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiLCAiY29uZmlnL3BsdWdpbnMvaW5kZXgudHMiLCAiY29uZmlnL3BsdWdpbnMvYXBwLWluZm8udHMiLCAiY29uZmlnL3BsdWdpbnMvZGV2dG9vbHMudHMiLCAiY29uZmlnL3BsdWdpbnMvYXV0by1pbXBvcnQudHMiLCAiY29uZmlnL3BsdWdpbnMvY29tcG9uZW50cy50cyIsICJjb25maWcvcGx1Z2lucy9zdmctaWNvbi50cyIsICJjb25maWcvcGx1Z2lucy9tb2NrLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFx2aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMjIyMTQvRGVza3RvcC8lRTYlOTklQkElRTglODMlQkQlRTUlQjklQjMlRTUlOEYlQjAvSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYi92aXRlLmNvbmZpZy50c1wiO2ltcG9ydCB7IFVSTCwgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJ1xyXG5pbXBvcnQgeyBkZWZpbmVDb25maWcsIGxvYWRFbnYgfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgY3JlYXRlVml0ZVBsdWdpbnMgZnJvbSAnLi9jb25maWcvcGx1Z2lucydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBjb21tYW5kLCBtb2RlIH0pID0+IHtcclxuICBjb25zdCBlbnYgPSBsb2FkRW52KG1vZGUsIHByb2Nlc3MuY3dkKCkpIGFzIEltcG9ydE1ldGFFbnZcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIC8vIFx1NUYwMFx1NTNEMVx1NjIxNlx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NjcwRFx1NTJBMVx1NzY4NFx1NTE2Q1x1NTE3MVx1NTdGQVx1Nzg0MFx1OERFRlx1NUY4NFxyXG4gICAgYmFzZTogZW52LlZJVEVfQkFTRSxcclxuICAgIC8vIFx1OERFRlx1NUY4NFx1NTIyQlx1NTQwRFxyXG4gICAgcmVzb2x2ZToge1xyXG4gICAgICBhbGlhczoge1xyXG4gICAgICAgICd+JzogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLycsIGltcG9ydC5tZXRhLnVybCkpLFxyXG4gICAgICAgICdAJzogZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuL3NyYycsIGltcG9ydC5tZXRhLnVybCkpLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICAgIC8vIFx1NUYxNVx1NTE2NXNhc3NcdTUxNjhcdTVDNDBcdTY4MzdcdTVGMEZcdTUzRDhcdTkxQ0ZcclxuICAgIGNzczoge1xyXG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XHJcbiAgICAgICAgc2Nzczoge1xyXG4gICAgICAgICAgYWRkaXRpb25hbERhdGE6IGBAdXNlIFwiQC9zdHlsZXMvdmFyLnNjc3NcIiBhcyAqO2AsXHJcbiAgICAgICAgICBhcGk6ICdtb2Rlcm4tY29tcGlsZXInLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgLy8gXHU2REZCXHU1MkEwXHU5NzAwXHU4OTgxdml0ZVx1NEYxOFx1NTMxNlx1NzY4NFx1NEY5RFx1OEQ1NlxyXG4gICAgb3B0aW1pemVEZXBzOiB7XHJcbiAgICAgIGluY2x1ZGU6IFsndnVlLWRyYWdnYWJsZS1wbHVzJ10sXHJcbiAgICB9LFxyXG4gICAgc2VydmVyOiB7XHJcbiAgICAgIC8vIFx1NjcwRFx1NTJBMVx1NTQyRlx1NTJBOFx1NjVGNlx1NjYyRlx1NTQyNlx1ODFFQVx1NTJBOFx1NjI1M1x1NUYwMFx1NkQ0Rlx1ODlDOFx1NTY2OFxyXG4gICAgICBvcGVuOiB0cnVlLFxyXG4gICAgICAvLyBcdTY3MkNcdTU3MzBcdThERThcdTU3REZcdTRFRTNcdTc0MDYgLT4gXHU0RUUzXHU3NDA2XHU1MjMwXHU2NzBEXHU1MkExXHU1NjY4XHU3Njg0XHU2M0E1XHU1M0UzXHU1NzMwXHU1NzQwXHJcbiAgICAgIHByb3h5OiB7XHJcbiAgICAgICAgW2Vudi5WSVRFX0FQSV9QUkVGSVhdOiB7XHJcbiAgICAgICAgICB0YXJnZXQ6IGVudi5WSVRFX0FQSV9CQVNFX1VSTCwgLy8gXHU1NDBFXHU1M0YwXHU2NzBEXHU1MkExXHU1NjY4XHU1NzMwXHU1NzQwXHJcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsIC8vIFx1NjYyRlx1NTQyNlx1NTE0MVx1OEJCOFx1NEUwRFx1NTQwQ1x1NkU5MFxyXG4gICAgICAgICAgc2VjdXJlOiBmYWxzZSwgLy8gXHU2NTJGXHU2MzAxaHR0cHNcclxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXiR7ZW52LlZJVEVfQVBJX1BSRUZJWH1gKSwgJycpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgcGx1Z2luczogY3JlYXRlVml0ZVBsdWdpbnMoZW52LCBjb21tYW5kID09PSAnYnVpbGQnKSxcclxuICAgIC8vIFx1Njc4NFx1NUVGQVxyXG4gICAgYnVpbGQ6IHtcclxuICAgICAgY2h1bmtTaXplV2FybmluZ0xpbWl0OiAyMDAwLCAvLyBcdTZEODhcdTk2NjRcdTYyNTNcdTUzMDVcdTU5MjdcdTVDMEZcdThEODVcdThGQzc1MDBrYlx1OEI2Nlx1NTQ0QVxyXG4gICAgICBvdXREaXI6ICdkaXN0JywgLy8gXHU2MzA3XHU1QjlBXHU2MjUzXHU1MzA1XHU4REVGXHU1Rjg0XHVGRjBDXHU5RUQ4XHU4QkE0XHU0RTNBXHU5ODc5XHU3NkVFXHU2ODM5XHU3NkVFXHU1RjU1XHU0RTBCXHU3Njg0ZGlzdFx1NzZFRVx1NUY1NVxyXG4gICAgICBtaW5pZnk6ICd0ZXJzZXInLCAvLyBWaXRlIDIuNi54IFx1NEVFNVx1NEUwQVx1OTcwMFx1ODk4MVx1OTE0RFx1N0Y2RSBtaW5pZnlcdUZGMUFcInRlcnNlclwiXHVGRjBDdGVyc2VyT3B0aW9uc1x1NjI0RFx1ODBGRFx1NzUxRlx1NjU0OFxyXG4gICAgICB0ZXJzZXJPcHRpb25zOiB7XHJcbiAgICAgICAgY29tcHJlc3M6IHtcclxuICAgICAgICAgIGtlZXBfaW5maW5pdHk6IHRydWUsIC8vIFx1OTYzMlx1NkI2MiBJbmZpbml0eSBcdTg4QUJcdTUzOEJcdTdGMjlcdTYyMTAgMS8wXHVGRjBDXHU4RkQ5XHU1M0VGXHU4MEZEXHU0RjFBXHU1QkZDXHU4MUY0IENocm9tZSBcdTRFMEFcdTc2ODRcdTYwMjdcdTgwRkRcdTk1RUVcdTk4OThcclxuICAgICAgICAgIGRyb3BfY29uc29sZTogY29tbWFuZCA9PT0gJ2J1aWxkJywgLy8gXHU1M0VBXHU1NzI4XHU3NTFGXHU0RUE3XHU3M0FGXHU1ODgzXHU2Nzg0XHU1RUZBXHU2NUY2XHU1M0JCXHU5NjY0IGNvbnNvbGVcclxuICAgICAgICAgIGRyb3BfZGVidWdnZXI6IHRydWUsIC8vIFx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NTNCQlx1OTY2NCBkZWJ1Z2dlclxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZm9ybWF0OiB7XHJcbiAgICAgICAgICBjb21tZW50czogZmFsc2UsIC8vIFx1NTIyMFx1OTY2NFx1NkNFOFx1OTFDQVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIFx1OTc1OVx1NjAwMVx1OEQ0NFx1NkU5MFx1NjI1M1x1NTMwNVx1NTIzMGRpc3RcdTRFMEJcdTc2ODRcdTRFMERcdTU0MENcdTc2RUVcdTVGNTVcclxuICAgICAgcm9sbHVwT3B0aW9uczoge1xyXG4gICAgICAgIG91dHB1dDoge1xyXG4gICAgICAgICAgY2h1bmtGaWxlTmFtZXM6ICdzdGF0aWMvanMvW25hbWVdLVtoYXNoXS5qcycsXHJcbiAgICAgICAgICBlbnRyeUZpbGVOYW1lczogJ3N0YXRpYy9qcy9bbmFtZV0tW2hhc2hdLmpzJyxcclxuICAgICAgICAgIGFzc2V0RmlsZU5hbWVzOiAnc3RhdGljL1tleHRdL1tuYW1lXS1baGFzaF0uW2V4dF0nLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgLy8gXHU0RUU1IGVudlByZWZpeCBcdTVGMDBcdTU5MzRcdTc2ODRcdTczQUZcdTU4ODNcdTUzRDhcdTkxQ0ZcdTRGMUFcdTkwMUFcdThGQzcgaW1wb3J0Lm1ldGEuZW52IFx1NjZCNFx1OTczMlx1NTcyOFx1NEY2MFx1NzY4NFx1NUJBMlx1NjIzN1x1N0FFRlx1NkU5MFx1NzgwMVx1NEUyRFx1MzAwMlxyXG4gICAgZW52UHJlZml4OiBbJ1ZJVEUnLCAnRklMRSddLFxyXG4gIH1cclxufSlcclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGluZGV4LnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2luZGV4LnRzXCI7aW1wb3J0IHR5cGUgeyBQbHVnaW5PcHRpb24gfSBmcm9tICd2aXRlJ1xyXG5pbXBvcnQgdnVlIGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZSdcclxuaW1wb3J0IHZ1ZUpzeCBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUtanN4J1xyXG5cclxuaW1wb3J0IGFwcEluZm8gZnJvbSAnLi9hcHAtaW5mbydcclxuaW1wb3J0IGNyZWF0ZURldnRvb2xzIGZyb20gJy4vZGV2dG9vbHMnXHJcbmltcG9ydCBjcmVhdGVBdXRvSW1wb3J0IGZyb20gJy4vYXV0by1pbXBvcnQnXHJcbmltcG9ydCBjcmVhdGVDb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cydcclxuaW1wb3J0IGNyZWF0ZVN2Z0ljb24gZnJvbSAnLi9zdmctaWNvbidcclxuaW1wb3J0IGNyZWF0ZU1vY2sgZnJvbSAnLi9tb2NrJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlVml0ZVBsdWdpbnModml0ZUVudiwgaXNCdWlsZCA9IGZhbHNlKSB7XHJcbiAgY29uc3Qgdml0ZVBsdWdpbnM6IChQbHVnaW5PcHRpb24gfCBQbHVnaW5PcHRpb25bXSlbXSA9IFthcHBJbmZvKCksIHZ1ZSgpLCB2dWVKc3goKV1cclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZURldnRvb2xzKHZpdGVFbnYpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQXV0b0ltcG9ydCgpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlQ29tcG9uZW50cygpKVxyXG4gIHZpdGVQbHVnaW5zLnB1c2goY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSlcclxuICB2aXRlUGx1Z2lucy5wdXNoKGNyZWF0ZU1vY2sodml0ZUVudiwgaXNCdWlsZCkpXHJcbiAgcmV0dXJuIHZpdGVQbHVnaW5zXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGFwcC1pbmZvLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2FwcC1pbmZvLnRzXCI7aW1wb3J0IGJveGVuIGZyb20gJ2JveGVuJ1xyXG5pbXBvcnQgcGljb2NvbG9ycyBmcm9tICdwaWNvY29sb3JzJ1xyXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBJbmZvKCk6IFBsdWdpbiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6ICdhcHBJbmZvJyxcclxuICAgIGFwcGx5OiAnc2VydmUnLFxyXG4gICAgYXN5bmMgYnVpbGRTdGFydCgpIHtcclxuICAgICAgY29uc3QgeyBib2xkLCBncmVlbiwgY3lhbiwgYmdHcmVlbiwgdW5kZXJsaW5lIH0gPSBwaWNvY29sb3JzXHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBib3hlbihcclxuICAgICAgICAgIGAke2JvbGQoZ3JlZW4oYCR7YmdHcmVlbignQ29udGlOZXcgQWRtaW4gdjQuMC4wLVNOQVBTSE9UJyl9YCkpfVxcbiR7Y3lhbignXHU1NzI4XHU3RUJGXHU2NTg3XHU2ODYzXHVGRjFBJyl9JHt1bmRlcmxpbmUoJ2h0dHBzOi8vY29udGluZXcudG9wJyl9XFxuJHtjeWFuKCdcdTVFMzhcdTg5QzFcdTk1RUVcdTk4OThcdUZGMUEnKX0ke3VuZGVybGluZSgnaHR0cHM6Ly9jb250aW5ldy50b3AvYWRtaW4vZmFxLmh0bWwnKX1cXG4ke2N5YW4oJ1x1NjMwMVx1N0VFRFx1OEZFRFx1NEVFM1x1NEYxOFx1NTMxNlx1NzY4NFx1NTI0RFx1NTQwRVx1N0FFRlx1NTIwNlx1NzlCQlx1NEUyRFx1NTQwRVx1NTNGMFx1N0JBMVx1NzQwNlx1N0NGQlx1N0VERlx1Njg0Nlx1NjdCNlx1MzAwMicpfWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhZGRpbmc6IDEsXHJcbiAgICAgICAgICAgIG1hcmdpbjogMSxcclxuICAgICAgICAgICAgYm9yZGVyU3R5bGU6ICdkb3VibGUnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ25tZW50OiAnY2VudGVyJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKSxcclxuICAgICAgKVxyXG4gICAgfSxcclxuICB9XHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGRldnRvb2xzLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL2RldnRvb2xzLnRzXCI7aW1wb3J0IFZ1ZURldlRvb2xzIGZyb20gJ3ZpdGUtcGx1Z2luLXZ1ZS1kZXZ0b29scydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZURldnRvb2xzKGVudikge1xyXG4gIGNvbnN0IHsgVklURV9PUEVOX0RFVlRPT0xTIH0gPSBlbnZcclxuICByZXR1cm4gVklURV9PUEVOX0RFVlRPT0xTID09PSAndHJ1ZScgJiYgVnVlRGV2VG9vbHMoKVxyXG59XHJcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFxjb25maWdcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcMjIyMTRcXFxcRGVza3RvcFxcXFxcdTY2N0FcdTgwRkRcdTVFNzNcdTUzRjBcXFxcSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYlxcXFxjb25maWdcXFxccGx1Z2luc1xcXFxhdXRvLWltcG9ydC50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vQzovVXNlcnMvMjIyMTQvRGVza3RvcC8lRTYlOTklQkElRTglODMlQkQlRTUlQjklQjMlRTUlOEYlQjAvSW5kdXN0cmlhbC1pbWFnZS1tYW5hZ2VtZW50LXN5c3RlbS0tLXdlYi9jb25maWcvcGx1Z2lucy9hdXRvLWltcG9ydC50c1wiO2ltcG9ydCBhdXRvSW1wb3J0IGZyb20gJ3VucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVBdXRvSW1wb3J0KCkge1xyXG4gIHJldHVybiBhdXRvSW1wb3J0KHtcclxuICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NSB2dWUgXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwXHJcbiAgICBpbXBvcnRzOiBbJ3Z1ZScsICd2dWUtcm91dGVyJywge1xyXG4gICAgICAvLyB2dWUgMy41LnhcclxuICAgICAgdnVlOiBbJ3VzZVRlbXBsYXRlUmVmJywgJ29uV2F0Y2hlckNsZWFudXAnLCAndXNlSWQnXSxcclxuICAgIH1dLFxyXG4gICAgZHRzOiAnLi9zcmMvdHlwZXMvYXV0by1pbXBvcnRzLmQudHMnLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXGNvbXBvbmVudHMudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzLzIyMjE0L0Rlc2t0b3AvJUU2JTk5JUJBJUU4JTgzJUJEJUU1JUI5JUIzJUU1JThGJUIwL0luZHVzdHJpYWwtaW1hZ2UtbWFuYWdlbWVudC1zeXN0ZW0tLS13ZWIvY29uZmlnL3BsdWdpbnMvY29tcG9uZW50cy50c1wiO2ltcG9ydCBjb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnRzKCkge1xyXG4gIHJldHVybiBjb21wb25lbnRzKHtcclxuICAgIC8vIFx1NjMwN1x1NUI5QVx1N0VDNFx1NEVGNlx1NEY0RFx1N0Y2RVx1RkYwQ1x1OUVEOFx1OEJBNFx1NjYyRiBzcmMvY29tcG9uZW50cyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjVcdTgxRUFcdTVCOUFcdTRFNDlcdTdFQzRcdTRFRjZcclxuICAgIGRpcnM6IFsnc3JjL2NvbXBvbmVudHMnXSxcclxuICAgIGV4dGVuc2lvbnM6IFsndnVlJywgJ3RzeCddLFxyXG4gICAgLy8gXHU5MTREXHU3RjZFXHU2NTg3XHU0RUY2XHU3NTFGXHU2MjEwXHU0RjREXHU3RjZFXHJcbiAgICBkdHM6ICcuL3NyYy90eXBlcy9jb21wb25lbnRzLmQudHMnLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXHN2Zy1pY29uLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9DOi9Vc2Vycy8yMjIxNC9EZXNrdG9wLyVFNiU5OSVCQSVFOCU4MyVCRCVFNSVCOSVCMyVFNSU4RiVCMC9JbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViL2NvbmZpZy9wbHVnaW5zL3N2Zy1pY29uLnRzXCI7aW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJ1xyXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnXHJcbmltcG9ydCB7IGNyZWF0ZVN2Z0ljb25zUGx1Z2luIH0gZnJvbSAndml0ZS1wbHVnaW4tc3ZnLWljb25zJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbihpc0J1aWxkKSB7XHJcbiAgcmV0dXJuIGNyZWF0ZVN2Z0ljb25zUGx1Z2luKHtcclxuICAgIC8vIFx1NjMwN1x1NUI5QVx1OTcwMFx1ODk4MVx1N0YxM1x1NUI1OFx1NzY4NFx1NTZGRVx1NjgwN1x1NjU4N1x1NEVGNlx1NTkzOVxyXG4gICAgaWNvbkRpcnM6IFtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3NyYy9hc3NldHMvaWNvbnMnKV0sXHJcbiAgICAvLyBcdTYzMDdcdTVCOUEgc3ltYm9sSWQgXHU2ODNDXHU1RjBGXHJcbiAgICBzeW1ib2xJZDogJ2ljb24tW2Rpcl0tW25hbWVdJyxcclxuICAgIHN2Z29PcHRpb25zOiBpc0J1aWxkLFxyXG4gIH0pXHJcbn1cclxuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFwyMjIxNFxcXFxEZXNrdG9wXFxcXFx1NjY3QVx1ODBGRFx1NUU3M1x1NTNGMFxcXFxJbmR1c3RyaWFsLWltYWdlLW1hbmFnZW1lbnQtc3lzdGVtLS0td2ViXFxcXGNvbmZpZ1xcXFxwbHVnaW5zXFxcXG1vY2sudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzLzIyMjE0L0Rlc2t0b3AvJUU2JTk5JUJBJUU4JTgzJUJEJUU1JUI5JUIzJUU1JThGJUIwL0luZHVzdHJpYWwtaW1hZ2UtbWFuYWdlbWVudC1zeXN0ZW0tLS13ZWIvY29uZmlnL3BsdWdpbnMvbW9jay50c1wiO2ltcG9ydCB7IHZpdGVNb2NrU2VydmUgfSBmcm9tICd2aXRlLXBsdWdpbi1tb2NrJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlTW9jayhlbnYsIGlzQnVpbGQpIHtcclxuICBjb25zdCB7IFZJVEVfQlVJTERfTU9DSyB9ID0gZW52XHJcbiAgcmV0dXJuIHZpdGVNb2NrU2VydmUoe1xyXG4gICAgbW9ja1BhdGg6ICdzcmMvbW9jaycsIC8vIFx1NzZFRVx1NUY1NVx1NEY0RFx1N0Y2RVxyXG4gICAgbG9nZ2VyOiAhaXNCdWlsZCwgLy8gIFx1NjYyRlx1NTQyNlx1NTcyOFx1NjNBN1x1NTIzNlx1NTNGMFx1NjYzRVx1NzkzQVx1OEJGN1x1NkM0Mlx1NjVFNVx1NUZEN1xyXG4gICAgc3VwcG9ydFRzOiB0cnVlLCAvLyBcdTY2MkZcdTU0MjZcdThCRkJcdTUzRDYgdHMgXHU2NTg3XHU0RUY2XHU2QTIxXHU1NzU3XHJcbiAgICBsb2NhbEVuYWJsZWQ6IHRydWUsIC8vIFx1OEJCRVx1N0Y2RVx1NjYyRlx1NTQyNlx1NTQyRlx1NzUyOFx1NjcyQ1x1NTczMG1vY2tcdTY1ODdcdTRFRjZcclxuICAgIHByb2RFbmFibGVkOiBpc0J1aWxkICYmIFZJVEVfQlVJTERfTU9DSyA9PT0gJ3RydWUnLCAvLyBcdThCQkVcdTdGNkVcdTYyNTNcdTUzMDVcdTY2MkZcdTU0MjZcdTU0MkZcdTc1Mjhtb2NrXHU1MjlGXHU4MEZEXHJcbiAgICAvLyBcdThGRDlcdTY4MzdcdTUzRUZcdTRFRTVcdTYzQTdcdTUyMzZcdTUxNzNcdTk1RURtb2NrXHU3Njg0XHU2NUY2XHU1MDE5XHU0RTBEXHU4QkE5bW9ja1x1NjI1M1x1NTMwNVx1NTIzMFx1NjcwMFx1N0VDOFx1NEVFM1x1NzgwMVx1NTE4NVxyXG4gICAgaW5qZWN0Q29kZTogYFxyXG4gICAgICAgICAgaW1wb3J0IHsgc2V0dXBQcm9kTW9ja1NlcnZlciB9IGZyb20gJy4uL3NyYy9tb2NrL2luZGV4JztcclxuICAgICAgICAgIHNldHVwUHJvZE1vY2tTZXJ2ZXIoKTtcclxuICAgICAgICBgLFxyXG4gIH0pXHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUEwYSxTQUFTLEtBQUsscUJBQXFCO0FBQzdjLFNBQVMsY0FBYyxlQUFlOzs7QUNBdEMsT0FBTyxTQUFTO0FBQ2hCLE9BQU8sWUFBWTs7O0FDRmtjLE9BQU8sV0FBVztBQUN2ZSxPQUFPLGdCQUFnQjtBQUdSLFNBQVIsVUFBbUM7QUFDeEMsU0FBTztBQUFBLElBQ0wsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsTUFBTSxhQUFhO0FBQ2pCLFlBQU0sRUFBRSxNQUFNLE9BQU8sTUFBTSxTQUFTLFVBQVUsSUFBSTtBQUVsRCxjQUFRO0FBQUEsUUFDTjtBQUFBLFVBQ0UsR0FBRyxLQUFLLE1BQU0sR0FBRyxRQUFRLGdDQUFnQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBSyxLQUFLLGdDQUFPLENBQUMsR0FB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