Commit d6c4dc63 authored by limengyang's avatar limengyang

feat(lmy): ops新增功能

parent 2c4f22ab
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
"cropperjs": "^1.5.12", "cropperjs": "^1.5.12",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"echarts": "^5.2.2", "echarts": "^5.2.2",
"file-saver": "^2.0.2",
"intro.js": "^4.3.0", "intro.js": "^4.3.0",
"jsencrypt": "^3.3.2", "jsencrypt": "^3.3.2",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
...@@ -97,6 +98,7 @@ ...@@ -97,6 +98,7 @@
"prettier": "^2.4.1", "prettier": "^2.4.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rollup-plugin-visualizer": "^5.5.2", "rollup-plugin-visualizer": "^5.5.2",
"script-loader": "^0.7.2",
"stylelint": "^14.0.1", "stylelint": "^14.0.1",
"stylelint-config-html": "^1.0.0", "stylelint-config-html": "^1.0.0",
"stylelint-config-prettier": "^9.0.3", "stylelint-config-prettier": "^9.0.3",
...@@ -6639,214 +6641,6 @@ ...@@ -6639,214 +6641,6 @@
"which": "bin/which" "which": "bin/which"
} }
}, },
"node_modules/bin-wrapper": {
"name": "bin-wrapper-china",
"version": "0.1.0",
"resolved": "https://registry.npmmirror.com/bin-wrapper-china/-/bin-wrapper-china-0.1.0.tgz",
"integrity": "sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg==",
"dev": true,
"license": "MIT",
"dependencies": {
"bin-check": "^4.1.0",
"bin-version-check": "^4.0.0",
"binary-mirror-config": "^1",
"download": "^7.1.0",
"import-lazy": "^4.0.0",
"os-filter-obj": "^2.0.0",
"pify": "^4.0.1"
},
"bin": {
"china-bin-env": "inject-env.js"
},
"engines": {
"node": ">=8.3"
}
},
"node_modules/bin-wrapper/node_modules/download": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"archive-type": "^4.0.0",
"caw": "^2.0.1",
"content-disposition": "^0.5.2",
"decompress": "^4.2.0",
"ext-name": "^5.0.0",
"file-type": "^8.1.0",
"filenamify": "^2.0.0",
"get-stream": "^3.0.0",
"got": "^8.3.1",
"make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/bin-wrapper/node_modules/download/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/file-type": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/bin-wrapper/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"license": "MIT",
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/bin-wrapper/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"license": "MIT",
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/bin-wrapper/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/bin-wrapper/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
...@@ -6857,13 +6651,6 @@ ...@@ -6857,13 +6651,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/binary-mirror-config": {
"version": "1.41.0",
"resolved": "https://registry.npmmirror.com/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz",
"integrity": "sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==",
"dev": true,
"license": "MIT"
},
"node_modules/bl": { "node_modules/bl": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
...@@ -8601,61 +8388,258 @@ ...@@ -8601,61 +8388,258 @@
"url": "https://github.com/imagemin/cwebp-bin?sponsor=1" "url": "https://github.com/imagemin/cwebp-bin?sponsor=1"
} }
}, },
"node_modules/cz-conventional-changelog": { "node_modules/cwebp-bin/node_modules/bin-wrapper": {
"version": "3.3.0", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", "resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==", "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"chalk": "^2.4.1", "bin-check": "^4.1.0",
"commitizen": "^4.0.3", "bin-version-check": "^4.0.0",
"conventional-commit-types": "^3.0.0", "download": "^7.1.0",
"lodash.map": "^4.5.1", "import-lazy": "^3.1.0",
"longest": "^2.0.1", "os-filter-obj": "^2.0.0",
"word-wrap": "^1.0.3" "pify": "^4.0.1"
}, },
"engines": { "engines": {
"node": ">= 10" "node": ">=6"
},
"optionalDependencies": {
"@commitlint/load": ">6.1.1"
} }
}, },
"node_modules/cz-conventional-changelog/node_modules/ansi-styles": { "node_modules/cwebp-bin/node_modules/download": {
"version": "3.2.1", "version": "7.1.0",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"color-convert": "^1.9.0" "archive-type": "^4.0.0",
"caw": "^2.0.1",
"content-disposition": "^0.5.2",
"decompress": "^4.2.0",
"ext-name": "^5.0.0",
"file-type": "^8.1.0",
"filenamify": "^2.0.0",
"get-stream": "^3.0.0",
"got": "^8.3.1",
"make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
}, },
"engines": { "engines": {
"node": ">=4" "node": ">=6"
} }
}, },
"node_modules/cz-conventional-changelog/node_modules/chalk": { "node_modules/cwebp-bin/node_modules/download/node_modules/pify": {
"version": "2.4.2", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/cz-conventional-changelog/node_modules/color-convert": { "node_modules/cwebp-bin/node_modules/file-type": {
"version": "1.9.3", "version": "8.1.0",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", "resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true, "dev": true,
"license": "MIT", "engines": {
"node": ">=6"
}
},
"node_modules/cwebp-bin/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/cwebp-bin/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/cwebp-bin/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/cwebp-bin/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/cwebp-bin/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cz-conventional-changelog": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz",
"integrity": "sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^2.4.1",
"commitizen": "^4.0.3",
"conventional-commit-types": "^3.0.0",
"lodash.map": "^4.5.1",
"longest": "^2.0.1",
"word-wrap": "^1.0.3"
},
"engines": {
"node": ">= 10"
},
"optionalDependencies": {
"@commitlint/load": ">6.1.1"
}
},
"node_modules/cz-conventional-changelog/node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cz-conventional-changelog/node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cz-conventional-changelog/node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"color-name": "1.1.3" "color-name": "1.1.3"
} }
...@@ -11198,6 +11182,11 @@ ...@@ -11198,6 +11182,11 @@
"node": "^10.12.0 || >=12.0.0" "node": "^10.12.0 || >=12.0.0"
} }
}, },
"node_modules/file-saver": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.2.tgz",
"integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
},
"node_modules/file-type": { "node_modules/file-type": {
"version": "12.4.2", "version": "12.4.2",
"resolved": "https://registry.npmmirror.com/file-type/-/file-type-12.4.2.tgz", "resolved": "https://registry.npmmirror.com/file-type/-/file-type-12.4.2.tgz",
...@@ -11914,63 +11903,260 @@ ...@@ -11914,63 +11903,260 @@
"url": "https://github.com/imagemin/gisicle-bin?sponsor=1" "url": "https://github.com/imagemin/gisicle-bin?sponsor=1"
} }
}, },
"node_modules/git-raw-commits": { "node_modules/gifsicle/node_modules/bin-wrapper": {
"version": "2.0.11", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"dargs": "^7.0.0", "bin-check": "^4.1.0",
"lodash": "^4.17.15", "bin-version-check": "^4.0.0",
"meow": "^8.0.0", "download": "^7.1.0",
"split2": "^3.0.0", "import-lazy": "^3.1.0",
"through2": "^4.0.0" "os-filter-obj": "^2.0.0",
}, "pify": "^4.0.1"
"bin": {
"git-raw-commits": "cli.js"
}, },
"engines": { "engines": {
"node": ">=10" "node": ">=6"
} }
}, },
"node_modules/git-remote-origin-url": { "node_modules/gifsicle/node_modules/download": {
"version": "2.0.0", "version": "7.1.0",
"resolved": "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"gitconfiglocal": "^1.0.0", "archive-type": "^4.0.0",
"pify": "^2.3.0" "caw": "^2.0.1",
"content-disposition": "^0.5.2",
"decompress": "^4.2.0",
"ext-name": "^5.0.0",
"file-type": "^8.1.0",
"filenamify": "^2.0.0",
"get-stream": "^3.0.0",
"got": "^8.3.1",
"make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
}, },
"engines": { "engines": {
"node": ">=4" "node": ">=6"
} }
}, },
"node_modules/git-semver-tags": { "node_modules/gifsicle/node_modules/download/node_modules/pify": {
"version": "4.1.1", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": {
"meow": "^8.0.0",
"semver": "^6.0.0"
},
"bin": {
"git-semver-tags": "cli.js"
},
"engines": { "engines": {
"node": ">=10" "node": ">=4"
} }
}, },
"node_modules/git-semver-tags/node_modules/semver": { "node_modules/gifsicle/node_modules/file-type": {
"version": "6.3.1", "version": "8.1.0",
"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", "resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true, "dev": true,
"license": "ISC", "engines": {
"node": ">=6"
}
},
"node_modules/gifsicle/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/gifsicle/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/gifsicle/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/gifsicle/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/gifsicle/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/git-raw-commits": {
"version": "2.0.11",
"resolved": "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
"integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
"dev": true,
"license": "MIT",
"dependencies": {
"dargs": "^7.0.0",
"lodash": "^4.17.15",
"meow": "^8.0.0",
"split2": "^3.0.0",
"through2": "^4.0.0"
},
"bin": {
"git-raw-commits": "cli.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/git-remote-origin-url": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz",
"integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==",
"dev": true,
"license": "MIT",
"dependencies": {
"gitconfiglocal": "^1.0.0",
"pify": "^2.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/git-semver-tags": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz",
"integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==",
"dev": true,
"license": "MIT",
"dependencies": {
"meow": "^8.0.0",
"semver": "^6.0.0"
},
"bin": {
"git-semver-tags": "cli.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/git-semver-tags/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,
"license": "ISC",
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
} }
...@@ -14856,53 +15042,250 @@ ...@@ -14856,53 +15042,250 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/js-base64": { "node_modules/jpegtran-bin/node_modules/bin-wrapper": {
"version": "2.6.4", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz", "resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true, "dev": true,
"license": "BSD-3-Clause" "dependencies": {
"bin-check": "^4.1.0",
"bin-version-check": "^4.0.0",
"download": "^7.1.0",
"import-lazy": "^3.1.0",
"os-filter-obj": "^2.0.0",
"pify": "^4.0.1"
}, },
"node_modules/js-beautify": { "engines": {
"version": "1.15.1", "node": ">=6"
"resolved": "https://registry.npmmirror.com/js-beautify/-/js-beautify-1.15.1.tgz", }
"integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", },
"node_modules/jpegtran-bin/node_modules/download": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"config-chain": "^1.1.13", "archive-type": "^4.0.0",
"editorconfig": "^1.0.4", "caw": "^2.0.1",
"glob": "^10.3.3", "content-disposition": "^0.5.2",
"js-cookie": "^3.0.5", "decompress": "^4.2.0",
"nopt": "^7.2.0" "ext-name": "^5.0.0",
}, "file-type": "^8.1.0",
"bin": { "filenamify": "^2.0.0",
"css-beautify": "js/bin/css-beautify.js", "get-stream": "^3.0.0",
"html-beautify": "js/bin/html-beautify.js", "got": "^8.3.1",
"js-beautify": "js/bin/js-beautify.js" "make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
}, },
"engines": { "engines": {
"node": ">=14" "node": ">=6"
} }
}, },
"node_modules/js-beautify/node_modules/brace-expansion": { "node_modules/jpegtran-bin/node_modules/download/node_modules/pify": {
"version": "2.0.1", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true, "dev": true,
"license": "MIT", "engines": {
"dependencies": { "node": ">=4"
"balanced-match": "^1.0.0"
} }
}, },
"node_modules/js-beautify/node_modules/glob": { "node_modules/jpegtran-bin/node_modules/file-type": {
"version": "10.3.10", "version": "8.1.0",
"resolved": "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz", "resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true, "dev": true,
"license": "ISC", "engines": {
"dependencies": { "node": ">=6"
"foreground-child": "^3.1.0", }
},
"node_modules/jpegtran-bin/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/jpegtran-bin/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/jpegtran-bin/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/jpegtran-bin/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/jpegtran-bin/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
"integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/js-beautify": {
"version": "1.15.1",
"resolved": "https://registry.npmmirror.com/js-beautify/-/js-beautify-1.15.1.tgz",
"integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==",
"dev": true,
"license": "MIT",
"dependencies": {
"config-chain": "^1.1.13",
"editorconfig": "^1.0.4",
"glob": "^10.3.3",
"js-cookie": "^3.0.5",
"nopt": "^7.2.0"
},
"bin": {
"css-beautify": "js/bin/css-beautify.js",
"html-beautify": "js/bin/html-beautify.js",
"js-beautify": "js/bin/js-beautify.js"
},
"engines": {
"node": ">=14"
}
},
"node_modules/js-beautify/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/js-beautify/node_modules/glob": {
"version": "10.3.10",
"resolved": "https://registry.npmmirror.com/glob/-/glob-10.3.10.tgz",
"integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.3.5", "jackspeak": "^2.3.5",
"minimatch": "^9.0.1", "minimatch": "^9.0.1",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
...@@ -16619,71 +17002,268 @@ ...@@ -16619,71 +17002,268 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/ms": { "node_modules/mozjpeg/node_modules/bin-wrapper": {
"version": "2.1.2", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true,
"license": "MIT"
},
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true, "dev": true,
"license": "ISC" "dependencies": {
}, "bin-check": "^4.1.0",
"node_modules/nanoid": { "bin-version-check": "^4.0.0",
"version": "3.3.7", "download": "^7.1.0",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", "import-lazy": "^3.1.0",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "os-filter-obj": "^2.0.0",
"funding": [ "pify": "^4.0.1"
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
}, },
"engines": { "engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" "node": ">=6"
} }
}, },
"node_modules/nanomatch": { "node_modules/mozjpeg/node_modules/download": {
"version": "1.2.13", "version": "7.1.0",
"resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", "resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"arr-diff": "^4.0.0", "archive-type": "^4.0.0",
"array-unique": "^0.3.2", "caw": "^2.0.1",
"define-property": "^2.0.2", "content-disposition": "^0.5.2",
"extend-shallow": "^3.0.2", "decompress": "^4.2.0",
"fragment-cache": "^0.2.1", "ext-name": "^5.0.0",
"is-windows": "^1.0.2", "file-type": "^8.1.0",
"kind-of": "^6.0.2", "filenamify": "^2.0.0",
"object.pick": "^1.3.0", "get-stream": "^3.0.0",
"regex-not": "^1.0.0", "got": "^8.3.1",
"snapdragon": "^0.8.1", "make-dir": "^1.2.0",
"to-regex": "^3.0.1" "p-event": "^2.1.0",
"pify": "^3.0.0"
}, },
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=6"
} }
}, },
"node_modules/nanomatch/node_modules/define-property": { "node_modules/mozjpeg/node_modules/download/node_modules/pify": {
"version": "2.0.2", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true, "dev": true,
"license": "MIT", "engines": {
"dependencies": { "node": ">=4"
"is-descriptor": "^1.0.2", }
"isobject": "^3.0.1" },
}, "node_modules/mozjpeg/node_modules/file-type": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mozjpeg/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mozjpeg/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/mozjpeg/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mozjpeg/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/mozjpeg/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true,
"license": "MIT"
},
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true,
"license": "ISC"
},
"node_modules/nanoid": {
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
"fragment-cache": "^0.2.1",
"is-windows": "^1.0.2",
"kind-of": "^6.0.2",
"object.pick": "^1.3.0",
"regex-not": "^1.0.0",
"snapdragon": "^0.8.1",
"to-regex": "^3.0.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/nanomatch/node_modules/define-property": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
},
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
...@@ -17413,53 +17993,250 @@ ...@@ -17413,53 +17993,250 @@
"resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz",
"integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/optionator": {
"version": "0.9.3",
"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz",
"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@aashutoshrathi/word-wrap": "^1.2.3",
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/optipng-bin": {
"version": "7.0.1",
"resolved": "https://registry.npmmirror.com/optipng-bin/-/optipng-bin-7.0.1.tgz",
"integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"bin-build": "^3.0.0",
"bin-wrapper": "^4.0.0"
},
"bin": {
"optipng": "cli.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/optipng-bin/node_modules/bin-wrapper": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true,
"dependencies": {
"bin-check": "^4.1.0",
"bin-version-check": "^4.0.0",
"download": "^7.1.0",
"import-lazy": "^3.1.0",
"os-filter-obj": "^2.0.0",
"pify": "^4.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/optipng-bin/node_modules/download": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true,
"dependencies": {
"archive-type": "^4.0.0",
"caw": "^2.0.1",
"content-disposition": "^0.5.2",
"decompress": "^4.2.0",
"ext-name": "^5.0.0",
"file-type": "^8.1.0",
"filenamify": "^2.0.0",
"get-stream": "^3.0.0",
"got": "^8.3.1",
"make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/optipng-bin/node_modules/download/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/file-type": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/optipng-bin/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/optipng-bin/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/optipng-bin/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/optipng-bin/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": { "dependencies": {
"define-lazy-prop": "^2.0.0", "p-finally": "^1.0.0"
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=4"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/optionator": { "node_modules/optipng-bin/node_modules/pify": {
"version": "0.9.3", "version": "4.0.1",
"resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz", "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true, "dev": true,
"license": "MIT", "engines": {
"dependencies": { "node": ">=6"
"@aashutoshrathi/word-wrap": "^1.2.3", }
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0"
}, },
"node_modules/optipng-bin/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.8.0" "node": ">=4"
} }
}, },
"node_modules/optipng-bin": { "node_modules/optipng-bin/node_modules/url-parse-lax": {
"version": "7.0.1", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/optipng-bin/-/optipng-bin-7.0.1.tgz", "resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-W99mpdW7Nt2PpFiaO+74pkht7KEqkXkeRomdWXfEz3SALZ6hns81y/pm1dsGZ6ItUIfchiNIP6ORDr1zETU1jA==", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true, "dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": { "dependencies": {
"bin-build": "^3.0.0", "prepend-http": "^2.0.0"
"bin-wrapper": "^4.0.0"
},
"bin": {
"optipng": "cli.js"
}, },
"engines": { "engines": {
"node": ">=10" "node": ">=4"
} }
}, },
"node_modules/ora": { "node_modules/ora": {
...@@ -18119,6 +18896,64 @@ ...@@ -18119,6 +18896,64 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/pngquant-bin/node_modules/bin-wrapper": {
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz",
"integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==",
"dev": true,
"dependencies": {
"bin-check": "^4.1.0",
"bin-version-check": "^4.0.0",
"download": "^7.1.0",
"import-lazy": "^3.1.0",
"os-filter-obj": "^2.0.0",
"pify": "^4.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/download": {
"version": "7.1.0",
"resolved": "https://registry.npmmirror.com/download/-/download-7.1.0.tgz",
"integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==",
"dev": true,
"dependencies": {
"archive-type": "^4.0.0",
"caw": "^2.0.1",
"content-disposition": "^0.5.2",
"decompress": "^4.2.0",
"ext-name": "^5.0.0",
"file-type": "^8.1.0",
"filenamify": "^2.0.0",
"get-stream": "^3.0.0",
"got": "^8.3.1",
"make-dir": "^1.2.0",
"p-event": "^2.1.0",
"pify": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/download/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/download/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/execa": { "node_modules/pngquant-bin/node_modules/execa": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz", "resolved": "https://registry.npmmirror.com/execa/-/execa-4.1.0.tgz",
...@@ -18143,6 +18978,15 @@ ...@@ -18143,6 +18978,15 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1" "url": "https://github.com/sindresorhus/execa?sponsor=1"
} }
}, },
"node_modules/pngquant-bin/node_modules/file-type": {
"version": "8.1.0",
"resolved": "https://registry.npmmirror.com/file-type/-/file-type-8.1.0.tgz",
"integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/get-stream": { "node_modules/pngquant-bin/node_modules/get-stream": {
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz",
...@@ -18159,6 +19003,52 @@ ...@@ -18159,6 +19003,52 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/pngquant-bin/node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmmirror.com/got/-/got-8.3.2.tgz",
"integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==",
"dev": true,
"dependencies": {
"@sindresorhus/is": "^0.7.0",
"cacheable-request": "^2.1.1",
"decompress-response": "^3.3.0",
"duplexer3": "^0.1.4",
"get-stream": "^3.0.0",
"into-stream": "^3.1.0",
"is-retry-allowed": "^1.1.0",
"isurl": "^1.0.0-alpha5",
"lowercase-keys": "^1.0.0",
"mimic-response": "^1.0.0",
"p-cancelable": "^0.4.0",
"p-timeout": "^2.0.1",
"pify": "^3.0.0",
"safe-buffer": "^5.1.1",
"timed-out": "^4.0.1",
"url-parse-lax": "^3.0.0",
"url-to-options": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/got/node_modules/get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/got/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/human-signals": { "node_modules/pngquant-bin/node_modules/human-signals": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz",
...@@ -18169,6 +19059,99 @@ ...@@ -18169,6 +19059,99 @@
"node": ">=8.12.0" "node": ">=8.12.0"
} }
}, },
"node_modules/pngquant-bin/node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz",
"integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/make-dir": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz",
"integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
"dev": true,
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/make-dir/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/p-cancelable": {
"version": "0.4.1",
"resolved": "https://registry.npmmirror.com/p-cancelable/-/p-cancelable-0.4.1.tgz",
"integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/p-event": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/p-event/-/p-event-2.3.1.tgz",
"integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==",
"dev": true,
"dependencies": {
"p-timeout": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/p-timeout": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-2.0.1.tgz",
"integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
"dev": true,
"dependencies": {
"p-finally": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/pngquant-bin/node_modules/prepend-http": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/pngquant-bin/node_modules/url-parse-lax": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
"dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/posix-character-classes": { "node_modules/posix-character-classes": {
"version": "0.1.1", "version": "0.1.1",
"resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
...@@ -19028,6 +20011,12 @@ ...@@ -19028,6 +20011,12 @@
"safe-buffer": "^5.1.0" "safe-buffer": "^5.1.0"
} }
}, },
"node_modules/raw-loader": {
"version": "0.5.1",
"resolved": "https://registry.npmmirror.com/raw-loader/-/raw-loader-0.5.1.tgz",
"integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==",
"dev": true
},
"node_modules/react-is": { "node_modules/react-is": {
"version": "17.0.2", "version": "17.0.2",
"resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz", "resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz",
...@@ -19881,6 +20870,15 @@ ...@@ -19881,6 +20870,15 @@
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/script-loader": {
"version": "0.7.2",
"resolved": "https://registry.npmmirror.com/script-loader/-/script-loader-0.7.2.tgz",
"integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==",
"dev": true,
"dependencies": {
"raw-loader": "~0.5.1"
}
},
"node_modules/scroll-into-view-if-needed": { "node_modules/scroll-into-view-if-needed": {
"version": "2.2.31", "version": "2.2.31",
"resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
...@@ -24199,6 +25197,21 @@ ...@@ -24199,6 +25197,21 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/vite/node_modules/rollup": {
"version": "2.77.3",
"resolved": "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz",
"integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=10.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/void-elements": { "node_modules/void-elements": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz", "resolved": "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz",
......
import { tmallabHttp } from '/@/utils/http/axios';
enum Api {
List = '/system/productNegotiated/getList',
BrandList = '/regionalSpotManage/commit',
GetAreaList = '/system/opsProduct/getAreaList',
OpsAddProduct = '/system/opsProduct/opsAddProduct',
GetGhsAreaList = '/system/opsProduct/getGhsAreaList',
OpsDeleteProduct = '/system/opsProduct/opsDeleteProduct',
OpsEditProduct = '/system/opsProduct/opsEditProduct',
UploadOpsProduct = '/excel/excelNew/uploadOpsProduct',
RevokeExcelUpload = '/system/logProductManager/revokeExcelUpload',
PlatformProBatchList = '/system/logNegotiationProductOperate/getList',
PlatformProBatchGetDetail = '/system/logNegotiationProductOperate/getList',
}
/**
* @description: 区域现货管理列表
*/
export const regionalSpotManageListApi = (data) =>
tmallabHttp.post({ url: Api.List, data }, { errorMessageMode: 'message'});
/**
* @description: 获取品牌列表
*/
export const regionalSpotManageBrandListApi = (data) =>
tmallabHttp.post({ url: Api.BrandList,data }, { errorMessageMode: 'message'});
/**
* @description: 获取现货区域列表
*/
export const regionalSpotManageGetAreaListApi = (data) =>
tmallabHttp.post({ url: Api.GetAreaList,data },{ errorMessageMode: 'message' });
/**
* @description: 新增商品接口
*/
export const regionalSpotManageOpsAddProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsAddProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 获取已开通区域
*/
export const regionalSpotManageGetGhsAreaListApi = (data) =>
tmallabHttp.post({ url: Api.GetGhsAreaList, data },{ errorMessageMode: 'message' });
/**
* @description: 单条/批量删除
*/
export const regionalSpotManageOpsDeleteProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsDeleteProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 增加区域
*/
export const regionalSpotManageOpsEditProductApi = (data) =>
tmallabHttp.post({ url: Api.OpsEditProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 批量上传
*/
export const regionalSpotManageUploadOpsProductApi = (data) =>
tmallabHttp.post({ url: Api.UploadOpsProduct, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表
*/
export const taskCenterQueryListApi = (data) =>
tmallabHttp.post({ url: Api.RevokeExcelUpload, data },{ errorMessageMode: 'message' });
/**
* @description: 撤销
*/
export const taskCenterRevokeExcelUploadApi = (data) =>
tmallabHttp.post({ url: Api.RevokeExcelUpload, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表--平台商品批量页签
*/
export const platformProBatchGetListApi = (data) =>
tmallabHttp.post({ url: Api.PlatformProBatchList, data },{ errorMessageMode: 'message' });
/**
* @description: 任务中心获取列表--平台商品批量页签--操作记录详情
*/
export const platformProBatchGetDetailApi = (data) =>
tmallabHttp.post({ url: Api.PlatformProBatchGetDetail, data },{ errorMessageMode: 'message' });
...@@ -14,10 +14,11 @@ import { setupStore } from '/@/store'; ...@@ -14,10 +14,11 @@ import { setupStore } from '/@/store';
import { setupGlobDirectives } from '/@/directives'; import { setupGlobDirectives } from '/@/directives';
import { setupI18n } from '/@/locales/setupI18n'; import { setupI18n } from '/@/locales/setupI18n';
import { registerGlobComp } from '/@/components/registerGlobComp'; import { registerGlobComp } from '/@/components/registerGlobComp';
import Antd from 'ant-design-vue';
if (import.meta.env.DEV) { import 'ant-design-vue/dist/antd.less';
import('ant-design-vue/dist/antd.less'); // if (import.meta.env.DEV) {
} // import('ant-design-vue/dist/antd.less');
// }
async function bootstrap() { async function bootstrap() {
const app = createApp(App); const app = createApp(App);
...@@ -38,6 +39,7 @@ async function bootstrap() { ...@@ -38,6 +39,7 @@ async function bootstrap() {
setupErrorHandle(app); setupErrorHandle(app);
app.mount('#app'); app.mount('#app');
app.use(Antd)
} }
bootstrap(); bootstrap();
import type { AppRouteModule } from '/@/router/types';
import { LAYOUT } from '/@/router/constant';
const product: AppRouteModule = {
path: '/product',
name: 'Product',
component: LAYOUT,
redirect: '/product/regionalSpot',
meta: {
hideChildrenInMenu: false,
orderNo: 500,
icon: 'ion:grid-outline',
title: '商品管理',
},
children: [
{
path: 'regionalSpot',
name: 'RegionalSpot',
component: () => import('/@/views/regionalSpotManage/index.vue'),
meta: {
title: '区域现货管理',
},
},
{
path: 'taskCenter',
name: 'TaskCenter',
component: () => import('/@/views/regionalSpotManage/taskCenter.vue'),
meta: {
title: '任务中心',
},
}
],
};
export default product;
/* eslint-disable */
import { saveAs } from 'file-saver'
import XLSX from 'xlsx'
function generateArray(table) {
var out = [];
var rows = table.querySelectorAll('tr');
var ranges = [];
for (var R = 0; R < rows.length; ++R) {
var outRow = [];
var row = rows[R];
var columns = row.querySelectorAll('td');
for (var C = 0; C < columns.length; ++C) {
var cell = columns[C];
var colspan = cell.getAttribute('colspan');
var rowspan = cell.getAttribute('rowspan');
var cellValue = cell.innerText;
if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
//Skip ranges
ranges.forEach(function (range) {
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
}
});
//Handle Row Span
if (rowspan || colspan) {
rowspan = rowspan || 1;
colspan = colspan || 1;
ranges.push({
s: {
r: R,
c: outRow.length
},
e: {
r: R + rowspan - 1,
c: outRow.length + colspan - 1
}
});
};
//Handle Value
outRow.push(cellValue !== "" ? cellValue : null);
//Handle Colspan
if (colspan)
for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
}
out.push(outRow);
}
return [out, ranges];
};
function datenum(v, date1904) {
if (date1904) v += 1462;
var epoch = Date.parse(v);
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}
function sheet_from_array_of_arrays(data, opts) {
var ws = {};
var range = {
s: {
c: 10000000,
r: 10000000
},
e: {
c: 0,
r: 0
}
};
for (var R = 0; R != data.length; ++R) {
for (var C = 0; C != data[R].length; ++C) {
if (range.s.r > R) range.s.r = R;
if (range.s.c > C) range.s.c = C;
if (range.e.r < R) range.e.r = R;
if (range.e.c < C) range.e.c = C;
var cell = {
v: data[R][C]
};
if (cell.v == null) continue;
var cell_ref = XLSX.utils.encode_cell({
c: C,
r: R
});
if (typeof cell.v === 'number') cell.t = 'n';
else if (typeof cell.v === 'boolean') cell.t = 'b';
else if (cell.v instanceof Date) {
cell.t = 'n';
cell.z = XLSX.SSF._table[14];
cell.v = datenum(cell.v);
} else cell.t = 's';
ws[cell_ref] = cell;
}
}
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
return ws;
}
function Workbook() {
if (!(this instanceof Workbook)) return new Workbook();
this.SheetNames = [];
this.Sheets = {};
}
function s2ab(s) {
var buf = new ArrayBuffer(s.length);
var view = new Uint8Array(buf);
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
return buf;
}
export function export_table_to_excel(id) {
var theTable = document.getElementById(id);
var oo = generateArray(theTable);
var ranges = oo[1];
/* original data */
var data = oo[0];
var ws_name = "SheetJS";
var wb = new Workbook(),
ws = sheet_from_array_of_arrays(data);
/* add ranges to worksheet */
// ws['!cols'] = ['apple', 'banan'];
ws['!merges'] = ranges;
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, {
bookType: 'xlsx',
bookSST: false,
type: 'binary'
});
saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), "test.xlsx")
}
export function export_json_to_excel({
searchList,
multiHeader = [],
header,
data,
filename,
merges = [],
autoWidth = true,
bookType = 'xlsx',
XlsWidth
} = {}) {
/* original data */
filename = filename || 'excel-list'
data = [...data]
data.unshift(header);
if (searchList) {
data.unshift([])
data.unshift(searchList)
}
for (let i = multiHeader.length - 1; i > -1; i--) {
data.unshift(multiHeader[i])
}
var ws_name = "SheetJS";
var wb = new Workbook(),
ws = sheet_from_array_of_arrays(data);
if (merges.length > 0) {
if (!ws['!merges']) ws['!merges'] = [];
merges.forEach(item => {
ws['!merges'].push(XLSX.utils.decode_range(item))
})
}
if (autoWidth) {
/*设置worksheet每列的最大宽度*/
const colWidth = data.map(row => row.map(val => {
/*先判断是否为null/undefined*/
if (val == null) {
return {
'wch': 10
};
}
/*再判断是否为中文*/
else if (val.toString().charCodeAt(0) > 255) {
return {
'wch': val.toString().length * 2
};
} else {
return {
'wch': val.toString().length
};
}
}))
/*以第一行为初始值*/
let result = colWidth[0];
for (let i = 1; i < colWidth.length; i++) {
for (let j = 0; j < colWidth[i].length; j++) {
if (result[j]['wch'] < colWidth[i][j]['wch']) {
result[j]['wch'] = colWidth[i][j]['wch'];
}
}
}
ws['!cols'] = result;
if (XlsWidth) {
ws['!cols'] = XlsWidth;
}
}
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, {
bookType: bookType,
bookSST: false,
type: 'binary'
});
saveAs(new Blob([s2ab(wbout)], {
type: "application/octet-stream"
}), `${filename}.${bookType}`);
}
<script lang="ts" setup>
import { ref, computed } from 'vue';
import { message } from 'ant-design-vue';
import {
Input,
Button,
} from 'ant-design-vue';
import { RightOutlined, LeftOutlined } from '@ant-design/icons-vue';
const emit = defineEmits(['close'])
import {
regionalSpotManageBrandListApi,
regionalSpotManageGetAreaListApi,
regionalSpotManageOpsAddProductApi
} from '/@/api/regionalSpotManage';
import { getAuthCache } from '/@/utils/auth';
const userInfo: any = getAuthCache('USER__INFO__')
const ghsCode = userInfo.supplier.ghsCode
let searchBrand = ref('')
let searchItemNo = ref('')
let searchBrandList = ref<any[]>([])
const handleSearch = async (value) => {
const res = await regionalSpotManageBrandListApi({brand: value});
if (res.code === 20000) {
searchBrandList.value = res.data
} else {
searchBrandList.value = []
}
}
const closeModal = () => {
emit('close', false)
}
const leftData = ref<any[]>([])
const leftColumns = [
{ title: '商品名称', dataIndex: 'productName', key: 'productName', width: '25%', align: 'center'},
{ title: '品牌', dataIndex: 'brand', key: 'brand', width: '25%', align: 'center'},
{ title: '货号', dataIndex: 'goodsNo', key: 'goodsNo', width: '20%', align: 'center'},
{ title: '规格', dataIndex: 'spec', key: 'spec', width: '20%', align: 'center'},
]
const pagination = ref({
size: 'small',
pageSize: 10,
current: 1,
total: 0,
showTotal: total => `共 ${total} 条`,
hideOnSinglePage: false,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => {
pagination.value.current = current
getLeftData()
},
onShowSizeChange: (size) => {
pagination.value.pageSize = size
getLeftData()
}
})
const getLeftData = () => {
leftData.value = [
{
productName: '测试产品1',
brand: '测试品牌1',
goodsNo: '213651',
spec: '100ml',
sysid: '1'
},
{
productName: '测试产品2',
brand: '测试品牌2',
goodsNo: '213652',
spec: '100ml',
sysid: '2'
},
{
productName: '测试产品3',
brand: '测试品牌3',
goodsNo: '213653',
spec: '100ml',
sysid: '3'
},
{
productName: '测试产品4',
brand: '测试品牌4',
goodsNo: '213654',
spec: '100ml',
sysid: '4'
},
{
productName: '测试产品5',
brand: '测试品牌5',
goodsNo: '213655',
spec: '100ml',
sysid: '5',
choice: true
},
{
productName: '测试产品6',
brand: '测试品牌6',
goodsNo: '213656',
spec: '100ml',
sysid: '6',
choice: true
}
]
if (rightData.value.length > 0) {
for (let i = 0; i < rightData.value.length; i++) {
if (leftData.value.findIndex((v) => v.sysid === rightData.value[i].sysid) !== -1) {
leftData.value.find((v) => v.sysid === rightData.value[i].sysid).choice = true
}
}
}
leftData.value = [...leftData.value]
pagination.value.total = leftData.value.length
}
let selectedRowKeys = ref<any[]>([])
let selectedRows = ref<any[]>([])
const rowSelection = computed(() => {
return {
selectedRowKeys: selectedRowKeys.value,
onChange: (RowKeys, Rows) => {
selectedRowKeys.value = RowKeys
selectedRows.value = Rows
},
getCheckboxProps: (record) => ({
disabled: record.choice === true,
}),
}
})
const toRight = () => {
console.log(selectedRows.value);
let arr = JSON.parse(JSON.stringify(selectedRows.value))
rightData.value = [...arr, ...rightData.value]
for (let i = 0; i < selectedRows.value.length; i++) {
if (leftData.value.findIndex((v) => v.sysid === selectedRows.value[i].sysid) !== -1) {
leftData.value.find((v) => v.sysid === selectedRows.value[i].sysid).choice = true
}
}
leftData.value = [...leftData.value]
selectedRowKeys.value = []
selectedRows.value = []
}
const rightData = ref<any[]>([])
const rightSelectedRowKeys = ref<any[]>([])
const rightSelectedRows = ref<any[]>([])
const rightRowSelection = computed(() => {
return {
selectedRowKeys: rightSelectedRowKeys.value,
onChange: (RowKeys, Rows) => {
rightSelectedRowKeys.value = RowKeys
rightSelectedRows.value = Rows
},
}
})
const toLeft = () => {
for (let i = 0; i < rightSelectedRows.value.length; i++) {
if (leftData.value.findIndex((v) => v.sysid === rightSelectedRows.value[i].sysid) !== -1) {
leftData.value.find((v) => v.sysid === rightSelectedRows.value[i].sysid).choice = false
rightData.value.splice(
rightData.value.findIndex((v) => v.sysid == rightSelectedRows.value[i].sysid),
1
)
} else {
rightData.value.splice(
rightData.value.findIndex((v) => v.sysid == rightSelectedRows.value[i].sysid),
1
)
}
}
leftData.value = [...leftData.value]
rightData.value = [...rightData.value]
rightSelectedRowKeys.value = []
rightSelectedRows.value = []
}
const rowClassName = () => {
return 'table-back'
}
let loading = ref(false)
let addressLoading = ref(false)
const goNext = async () => {
if(!rightData.value.length) return message.error('请先选择商品');
addressVisible.value = true
addressLoading.value = true
const res = await regionalSpotManageGetAreaListApi({});
if (res.code === 20000) {
areaList.value = res.data
} else {
areaList.value = []
}
addressLoading.value = false
}
// ==================================================
const confirmLoading = ref(false)
const addressVisible = ref(false)
const checkboxValue = ref([])
const areaList = ref<any[]>([
{
"id": "0",
"provinceId": "0",
"province": '北京市',
"cityId": 0,
"city": '市辖区',
"creator": '',
"creationTime": ''
},
{
"id": "1",
"provinceId": "1",
"province": '河北省',
"cityId": 1,
"city": '保定市',
"creator": '',
"creationTime": ''
},
{
"id": "2",
"provinceId": "2",
"province": '河北省',
"cityId": 2,
"city": '石家庄市',
"creator": '',
"creationTime": ''
},
{
"id": "3",
"provinceId": "3",
"province": '河北省',
"cityId": 3,
"city": '秦皇岛市',
"creator": '',
"creationTime": ''
},
{
"id": "4",
"provinceId": "4",
"province": '河北省',
"cityId": 3,
"city": '承德市',
"creator": '',
"creationTime": ''
}
])
const handleCancel = () => {
addressVisibleClose()
}
const goPrevious = () => {
addressVisibleClose()
}
const addressVisibleClose = () => {
addressVisible.value = false
checkboxValue.value = []
}
const confirm = async () => {
if(!checkboxValue.value.length) return message.error('请选择现货区域')
const param = ref<{ [key: string]: any }>({
products: [],
areas: ''
})
param.value.products = rightData.value.map(v => {
return {
goodsNo: v.goodsNo,
brand: v.brand,
spec: v.spec,
ghscode: ghsCode
}
})
param.value.areas = checkboxValue.value.join
console.log(param.value);
confirmLoading.value = true
const res = await regionalSpotManageOpsAddProductApi(param.value);
if (res.code === 20000) {
message.success('新增成功')
addressVisibleClose()
emit('close', false)
} else {
message.error(res.message)
}
confirmLoading.value = false
}
</script>
<template>
<a-modal :visible="true" title="新增区域现货商品" :width="1200" @cancel="closeModal" :maskClosable="false" :keyboard="false">
<template #footer>
<a-button key="back" @click="closeModal">取消</a-button>
<a-button key="submit" type="primary" :loading="loading" @click="goNext">下一步</a-button>
</template>
<div>
<span>品牌名称:</span>
<a-select
v-model:value="searchBrand"
show-search
placeholder="请输入品牌名称"
style="width: 200px"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="handleSearch"
>
<a-select-option v-for="item in searchBrandList" :key="item.value" :label="item.label" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select>
<span style="margin-left: 15px">货号:</span>
<Input v-model:value="searchItemNo" allow-clear placeholder="请输入货号" style="width: 200px" />
<Button style="margin-left:10px">重置</Button>
<Button @click="getLeftData" type="primary" style="margin-left:10px">查询</Button>
</div>
<div class="main">
<div class="left">
<div class="header">
<div>筛选结果商品</div>
<span>{{ selectedRowKeys.length }}/{{ pagination.total }}</span>
</div>
<div class="table">
<a-table
bordered
:data-source="leftData"
:columns="leftColumns"
:pagination="pagination"
:row-selection="rowSelection"
:rowKey="(record) => record.sysid"
:scroll="{ x: false, y: 280 }"
:rowClassName="rowClassName"
:loading="loading"
>
<!-- <template #bodyCell="{ column, record }">
<template v-if="column.key === 'productName'">
<span>{{ record.chineseName ? record.chineseName : record.englishName }}</span>
</template>
</template> -->
</a-table>
</div>
</div>
<div class="operate">
<div style="margin-top: 200px;display:flex">
<a-button
@click="toLeft"
type="primary"
:disabled="rightSelectedRowKeys.length === 0"
style="display: block; margin-bottom: 10px;margin-right:10px"
>
<template #icon>
<LeftOutlined />
</template>
</a-button>
<a-button
@click="toRight"
type="primary"
style="display: block"
:disabled="selectedRowKeys.length === 0"
>
<template #icon>
<RightOutlined />
</template>
</a-button>
</div>
</div>
<div class="right">
<div class="header">
<div>被选中商品</div>
<span>{{ rightSelectedRowKeys.length }}/{{ rightData.length }}</span>
</div>
<div class="table">
<a-table
:data-source="rightData"
:columns="leftColumns"
:pagination="false"
:rowKey="(record) => record.sysid"
:scroll="{ x: false, y: 280 }"
:rowClassName="rowClassName"
:row-selection="rightRowSelection"
>
</a-table>
</div>
</div>
</div>
</a-modal>
<a-modal v-model:visible="addressVisible" title="新增区域现货商品" @cancel="handleCancel" @ok="confirm" :width="1200" :maskClosable="false" :keyboard="false">
<template #footer>
<a-button :loading="confirmLoading" @click="handleCancel">取消</a-button>
<a-button :loading="confirmLoading" @click="goPrevious">上一步</a-button>
<a-button type="primary" :loading="confirmLoading" @click="confirm">提交</a-button>
</template>
<a-alert type="warning">
<template #message>
<span style="color: red">特别提醒:</span>北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为 北京市-直辖市;天津市-直辖市;四川省-成都市。
</template>
</a-alert>
<a-spin v-if="addressLoading" style="height: 150px;width: 100%;line-height: 150px" />
<div v-else>
<p style="margin-top: 15px">选择现货区域:</p>
<a-checkbox-group v-model:value="checkboxValue" style="width: 100%">
<a-row>
<a-col :span="6" v-for="(item, index) in areaList" :key="index">
<a-checkbox :value="item.id">{{ item.province }}-{{ item.city }}</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</div>
</a-modal>
</template>
<style lang="less" scoped>
.main {
display: flex;
justify-content: space-around;
width: 100%;
margin-top: 15px;
.left {
width: 45%;
border: 1px solid #ddd;
height: 450px;
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
height: 60px;
background: #F3F6F9
}
}
.right {
width: 45%;
border: 1px solid #ddd;
height: 450px;
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 10px;
height: 60px;
background: #F3F6F9
}
}
.operate {
width: 10%;
height: 450px;
display: flex;
justify-content: center;
align-content: center;
}
}
/deep/.table-back {
background-color: #fff;
}
</style>
\ No newline at end of file
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
const config = import.meta.env
import {
taskCenterQueryListApi,
} from '/@/api/regionalSpotManage';
onMounted(async () => {
getList()
});
let list = ref<any[]>([])
let listLoading = ref(false)
const downLoad = (url) => {
window.open(config.VITE_GLOB_API_URL + '/system/' + url, '_blank')
}
const getList = async () => {
listLoading.value = true
const res = await taskCenterQueryListApi({type:1})
if (res.code === 20000) {
list.value = res.data
} else {
list.value = []
}
listLoading.value = false
}
</script>
<template>
<div>
<a-button @click="getList" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="导出状态" align="center" :width="100">
<template v-slot="{record}">
<p>{{ record.status == 0 ? '待进行 ': (record.status == 1 ? '进行中' : '已完成') }}</p>
</template>
</a-table-column>
<a-table-column title="数据量" align="center" :width="100">
<template v-slot="{record}">
{{ record.successNum }}
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.createName }}
</template>
</a-table-column>
<a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}">
<Button v-if="record.fileUrl" type="link" @click="downLoad(record.fileUrl)">下载文件</Button>
<span v-else>——</span>
</template>
</a-table-column>
</a-table>
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import {
Form,
FormItem,
Input,
Button,
Select,
SelectOption,
Row,
Col,
message,
} from 'ant-design-vue';
import { UploadOutlined } from '@ant-design/icons-vue';
import { useRouter } from 'vue-router';
import { getAuthCache } from '/@/utils/auth';
import {
regionalSpotManageBrandListApi,
regionalSpotManageListApi,
regionalSpotManageGetAreaListApi,
regionalSpotManageGetGhsAreaListApi,
regionalSpotManageOpsDeleteProductApi,
regionalSpotManageOpsEditProductApi,
regionalSpotManageUploadOpsProductApi
} from '/@/api/regionalSpotManage';
import addProductModal from './addProduct.vue'
const config = import.meta.env
const userInfo: any = getAuthCache('USER__INFO__')
const ghsCode = userInfo.supplier.ghsCode
const router = useRouter();
const list = ref<any[]>([])
onMounted(async () => {
getList()
getAllAreaList()
});
const searchForm = ref<{
brandList: any;
goodsNo: any;
areaIds: any;
types: any;
}>({
brandList: [],
goodsNo: '',
areaIds: [],
types: []
});
const areaIdsOption = ref([
{ label: '区域1', value: '区域1' },
{ label: '区域2', value: '区域2' },
])
const typesOption = ref([
{ label: '组1', value: '组1' },
{ label: '组2', value: '组2' },
])
let searchBrandList = ref<any[]>([])
const handleSearch = async (value) => {
const res = await regionalSpotManageBrandListApi({brand: value});
searchBrandList.value = res.data
}
let listLoading = ref(false)
const pagination = ref({
pageSize: 10,
current: 1,
total: 0,
showTotal: total => `共 ${total} 条`,
hideOnSinglePage: false,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => {
pagination.value.current = current
getList()
},
onShowSizeChange: (size) => {
pagination.value.pageSize = size
getList()
}
})
const getList = async () => {
const pager = ref({
pageIndex: 1,
pageSize: 10
})
const param = ref({
...searchForm.value,
...pager.value
})
param.value.areaIds = param.value.areaIds ? param.value.areaIds : []
param.value.types = param.value.types ? param.value.types : []
listLoading.value = true
const res = await regionalSpotManageListApi(param.value);
if (res.code === 20000) {
list.value = res.data
pagination.value.total = res.data[0].total
} else {
list.value = []
pagination.value.total = 0
}
listLoading.value = false
list.value = [
{
productName: '测试商品',
brand: '测试品牌',
goodsNo: '45641',
spec: '100ml',
productStatus: '上架',
sysid: '1'
},
{
productName: 'ffff',
brand: 'fff',
goodsNo: 'fff',
spec: 'ff',
productStatus: '上架',
sysid: '2'
}
]
}
const onRset = () => {
searchForm.value.brandList = []
searchForm.value.goodsNo = ''
searchForm.value.areaIds = []
searchForm.value.types = []
getList()
}
const onSearch = () => {
pagination.value.pageSize = 1
getList()
}
let showModal = ref(false)
const addProduct = () => {
showModal.value = true
}
// 关闭新增商品弹窗
const closeVisible = (val) => {
showModal.value = val
}
let curItem = ref<{ [key: string]: any }>({});
// =========查看区域现货 statr ===========
const loading1 = ref(false)
const visible = ref(false)
const regionalSpotGoods = ref([])
const viewCurrent = async (val) => {
curItem.value = val
visible.value = true
const param = ref<{ [key: string]: any }>({
products: [{
goodsNo: val.goodsNo,
brand: val.brand,
spec: val.spec,
ghscode: ghsCode
}],
})
console.log(param.value);
loading1.value = true
const result = await getAreaList(param.value)
regionalSpotGoods.value = result
loading1.value = false
}
const getAreaList = async (param) => {
const res = await regionalSpotManageGetGhsAreaListApi(param);
if (res.code === 20000) {
return res.data
} else {
return []
}
}
// ==========查看区域现货 end =============
let selectedRowKeys = ref([])
let selectedRows = ref<any[]>([])
const onSelectChange = (Keys, Rows) => {
selectedRowKeys.value = Keys
selectedRows.value = Rows
}
// ===============增加区域 start=======================
let addVisible = ref(false)
let addAreaLoading = ref(false)
let addCheckboxValue = ref(['0'])
const addArea = async (row) => {
curItem.value = row
addVisible.value = true
addAreaLoading.value = true
const param = ref<{ [key: string]: any }>({
products: [{
goodsNo: row.goodsNo,
brand: row.brand,
spec: row.spec,
ghscode: ghsCode
}],
})
const result = await getAreaList(param.value)
delAreaList.value = result
const curArr = delAreaList.value.map(it => it.id)
for (const k of allAreaList.value) {
if (curArr.includes(k.id)) {
addCheckboxValue.value.push(k.id)
k.disabled = true
}
}
addAreaLoading.value = false
}
const addVisibleCancel = () => {
addVisible.value = false
addCheckboxValue.value = []
}
let confirmAddLoading = ref(false)
const confirmAddArea = async () => {
const param = ref<{ [key: string]: any }>({
products: [{
goodsNo: curItem.value.goodsNo,
brand: curItem.value.brand,
spec: curItem.value.spec,
ghscode: ghsCode
}],
areas: addCheckboxValue.value.join
})
confirmAddLoading.value = true
const res = await regionalSpotManageOpsEditProductApi(param.value);
if (res.success) {
message.success('添加区域成功')
} else {
message.error(res.message)
}
confirmAddLoading.value = false
}
// ===============增加区域 end=======================
// ================区域现货商品删除 start=====================
let delVisible = ref(false)
let delLoading = ref(false)
let deleteNum = ref(0)
let radioValue = ref(1)
let delAreaList = ref<any[]>([
{
"id": "0",
"provinceId": "0",
"province": '北京市',
"cityId": 0,
"city": '市辖区',
"creator": '',
"creationTime": ''
},
{
"id": "1",
"provinceId": "1",
"province": '河北省',
"cityId": 1,
"city": '保定市',
"creator": '',
"creationTime": ''
},
])//已添加的区域
let delCheckboxValue = ref([])
const del = async (val) => {
curItem.value = val
deleteNum.value = 1
delVisible.value = true
const param = ref<{ [key: string]: any }>({
products: [{
goodsNo: val.goodsNo,
brand: val.brand,
spec: val.spec,
ghscode: ghsCode
}],
})
console.log(param.value);
// delLoading.value = true
// const result = await getAreaList(param.value)
// delAreaList.value = result
// delLoading.value = false
}
const delVisibleCancel = () => {
delVisible.value = false
deleteNum.value = 0
radioValue.value = 1
delCheckboxValue.value = []
isBatchDel.value = false
}
let delConfirLoading = ref(false)
const confirmDel = async () => {
if(radioValue.value === 2 && !delCheckboxValue.value.length) return message.error('请选择需要删除的现货区域')
const param = ref<{ [key: string]: any }>({
products: [],
areas: '',
isAll: false
})
if (isBatchDel.value) {
param.value.products = selectedRows.value.map(v => {
return {
goodsNo: v.goodsNo,
brand: v.brand,
spec: v.spec,
ghscode: ghsCode
}
})
} else {
param.value.products = [{
goodsNo: curItem.value.goodsNo,
brand: curItem.value.brand,
spec: curItem.value.spec,
ghscode: ghsCode
}]
}
if (radioValue.value === 1) {
param.value.isAll = true
param.value.areas = delAreaList.value.map(v => v.id)
} else if (radioValue.value === 2) {
param.value.areas = delCheckboxValue.value
}
delConfirLoading.value = true
const res = await regionalSpotManageOpsDeleteProductApi(param.value);
if (res.success) {
message.success('删除成功')
} else {
message.success(res.message)
}
delConfirLoading.value = false
}
// 批量删除
let isBatchDel = ref(false)
const batchDel = () => {
if(!selectedRowKeys.value.length) return message.error('请勾选商品')
isBatchDel.value = true
deleteNum.value = selectedRows.value.length
delVisible.value = true
const param = ref<{ [key: string]: any }>({
products: []
})
param.value.products = selectedRows.value.map(v => {
return {
goodsNo: v.goodsNo,
brand: v.brand,
spec: v.spec,
ghscode: ghsCode
}
})
// delLoading.value = true
// const result = await getAreaList(param.value)
// delAreaList.value = result
// delLoading.value = false
}
// ================区域现货商品删除 end=====================
let allAreaList = ref<any[]>([
{
"id": "0",
"provinceId": "0",
"province": '北京市',
"cityId": 0,
"city": '市辖区',
"creator": '',
"creationTime": '',
disabled: true,
},
{
"id": "1",
"provinceId": "1",
"province": '河北省',
"cityId": 1,
"city": '保定市',
"creator": '',
"creationTime": ''
},
{
"id": "2",
"provinceId": "2",
"province": '河北省',
"cityId": 2,
"city": '石家庄市',
"creator": '',
"creationTime": ''
},
{
"id": "3",
"provinceId": "3",
"province": '河北省',
"cityId": 3,
"city": '秦皇岛市',
"creator": '',
"creationTime": ''
},
{
"id": "4",
"provinceId": "4",
"province": '河北省',
"cityId": 3,
"city": '承德市',
"creator": '',
"creationTime": ''
}
])
const getAllAreaList = async () => {
const res = await regionalSpotManageGetAreaListApi({});
if (res.success) {
allAreaList.value = res.data
} else {
allAreaList.value = []
}
}
// =====================批量导入 start=======================
let productExcelList = ref<any[]>([])
let importVisible = ref(false)
const impotrCheckboxValue = ref([])
const batchImport = () => {
importVisible.value = true
allAreaList.value.forEach(v => {
v.disabled = false
})
}
const productExcelBeforeUpload = (file, fileList) => {
const isLt8M = file.size / 1024 / 1024 <= 8
const extension = file.name.substring(file.name.lastIndexOf('.') + 1)
if (!isLt8M) {
message.error('上传文件大小不能超过 8MB!')
return false
}
if (extension !== 'xls' && extension !== 'xlsx') {
message.error('只能上传excel的文件')
return false
}
let curFileList = [...fileList]
curFileList = curFileList.slice(-1)
productExcelList.value = curFileList
return false
}
const productExcelRemove = () => {
productExcelList.value = []
}
const downLoad = () => {
window.open(config.VITE_GLOB_API_URL, '_blank')
}
let importLoading = ref(false)
const confirmImport = async () => {
if(!productExcelList.value.length) return message.error('请上传文件')
if(!impotrCheckboxValue.value.length) return message.error('请选择现货区域')
const param: FormData = new FormData();
param.append('ghsCode', ghsCode)
param.append('file', productExcelList.value[0])
param.append('areaIds', impotrCheckboxValue.value.join(','))
importLoading.value = true
const res = await regionalSpotManageUploadOpsProductApi(param);
if (res.code === 20000) {
message.success('批量导入成功')
} else {
message.error(res.message)
}
importLoading.value = false
}
const importCancel = () => {
importVisible.value = false
impotrCheckboxValue.value = []
productExcelList.value = []
}
// =====================批量导入 end=======================
const goTaskCenter = () => {
router.push({
path: '/taskCenter'
})
}
</script>
<template>
<div class="body-box">
<Form :model="searchForm" :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" class="top-search">
<Row :gutter="20">
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="品牌名称" name="brandList">
<!-- <Input v-model:value="searchForm.brandList" allow-clear placeholder="请输入品牌名称" /> -->
<a-select
v-model:value="searchForm.brandList"
show-search
mode="multiple"
placeholder="请输入品牌名称"
style="width: 100%"
:default-active-first-option="false"
:show-arrow="false"
:filter-option="false"
:not-found-content="null"
@search="handleSearch"
>
<a-select-option v-for="item in searchBrandList" :key="item.value" :label="item.label" :value="item.value">
{{ item.label }}
</a-select-option>
</a-select>
</FormItem>
</Col>
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="货号" name="goodsNo">
<Input v-model:value="searchForm.goodsNo" allow-clear placeholder="请输入货号" />
</FormItem>
</Col>
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="现货区域" name="areaIds">
<Select v-model:value="searchForm.areaIds" allowClear mode="multiple" placeholder="请选择现货区域" style="width: 100%">
<SelectOption v-for="(item, index) in areaIdsOption" :key="index" :value="item.value">{{ item.label }}</SelectOption>
</Select>
</FormItem>
</Col>
<Col :xxl="4" :xl="6" :lg="8" :sm="12" :xs="24">
<FormItem label="商品分组" name="types">
<Select v-model:value="searchForm.types" allowClear mode="multiple" placeholder="请选择商品分组" style="width: 100%">
<SelectOption v-for="(item, index) in typesOption" :key="index" :value="item.value">{{ item.label }}</SelectOption>
</Select>
</FormItem>
</Col>
<Col :span="24" style="display: flex;justify-content: space-between;">
<div>
<Button type="primary" style="margin: 0 5px" @click="onSearch">查询</Button>
<Button style="margin: 0 5px" @click="onRset">重置</Button>
<Button type="primary" @click="addProduct" style="margin: 0 5px">新增商品</Button>
<Button type="primary" @click="batchImport" style="margin: 0 5px">批量导入</Button>
<Button type="primary" @click="batchDel" style="margin: 0 5px">批量删除</Button>
</div>
<Button @click="goTaskCenter" style="margin: 0 5px">任务中心日志</Button>
</Col>
</Row>
</Form>
<a-table
:data-source="list"
:loading="listLoading"
bordered
:pagination="pagination"
:rowKey="(record) => record.sysid"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, columnWidth: 65 }"
style="margin-top: 15px"
>
<a-table-column title="商品名称" align="center" :width="100">
<template v-slot="{record}">
{{ record.productName }}
</template>
</a-table-column>
<a-table-column title="品牌" align="center" :width="100">
<template v-slot="{record}">
{{ record.brand }}
</template>
</a-table-column>
<a-table-column title="货号" align="center" :width="100">
<template v-slot="{record}">
{{ record.goodsNo }}
</template>
</a-table-column>
<a-table-column title="规格" align="center" :width="100">
<template v-slot="{record}">
{{ record.spec }}
</template>
</a-table-column>
<a-table-column title="当前现货区域" align="center" :width="100">
<template v-slot="{record}">
<Button type="link" @click="viewCurrent(record)">查看区域现货</Button>
</template>
</a-table-column>
<a-table-column title="上架状态" align="center" :width="100">
<template v-slot="{record}">
{{ record.productStatus }}
</template>
</a-table-column>
<a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}">
<Button type="link" @click="addArea(record)">增加区域</Button>
<Button type="link" style="margin-left: 5px" @click="del(record)">删除</Button>
</template>
</a-table-column>
</a-table>
</div>
<addProductModal v-if="showModal" @close="closeVisible"></addProductModal>
<a-modal v-model:visible="visible" title="商品可提供现货区域查看" :width="600" @ok="visible = false" :footer="null" :maskClosable="false" okText="提交">
<div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div>
<div>商品品牌:{{ curItem.brand }}</div>
<div>商品货号:{{ curItem.goodsNo }}</div>
<div>商品规格:{{ curItem.spec }}</div>
<a-table
:data-source="regionalSpotGoods"
bordered
:loading="loading1"
:pagination="false"
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="区域" align="center" :width="100">
<template v-slot="{record}">
{{ record.provinceName }}-{{ record.cityName }}
</template>
</a-table-column>
<a-table-column title="添加时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="添加人" align="center" :width="100">
<template v-slot="{record}">
{{ record.createName }}
</template>
</a-table-column>
</a-table>
</a-modal>
<!-- 删除 -->
<a-modal v-model:visible="delVisible" title="区域现货商品删除" :width="650" :maskClosable="false" :keyboard="false" @cancel="delVisibleCancel" @ok="confirmDel" :confirmLoading="delConfirLoading" okText="提交">
<p>您已选中 <span style="color: #1684FC">{{ deleteNum }}条</span> 商品</p>
<a-spin v-if="delLoading" style="height: 150px;width: 100%;line-height: 150px" />
<p v-else>选择需要删除的现货区域:
<a-radio-group v-model:value="radioValue">
<a-radio :value="1">全部区域</a-radio>
<a-radio :value="2">部分区域</a-radio>
</a-radio-group>
<a-checkbox-group v-model:value="delCheckboxValue" :disabled="radioValue === 1" style="width: 100%;margin-top: 15px">
<a-row>
<a-col :span="6" v-for="(item, index) in delAreaList" :key="index">
<a-checkbox :value="item.id">{{ item.province }}-{{ item.city }}</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</p>
</a-modal>
<!-- 增加区域 -->
<a-modal v-model:visible="addVisible" title="现货商品增加区域" :width="700" :maskClosable="false" @cancel="addVisibleCancel" @ok="confirmAddArea" okText="提交" :confirmLoading="confirmAddLoading">
<div style="margin-top: -35px">商品名称:{{ curItem.productName }}</div>
<div>商品品牌:{{ curItem.brand }}</div>
<div>商品货号:{{ curItem.goodsNo }}</div>
<div>商品规格:{{ curItem.spec }}</div>
<p style="margin-top: 15px">选择可提供现货的区域:</p>
<a-checkbox-group v-model:value="addCheckboxValue" style="width: 100%">
<a-row>
<a-col :span="6" v-for="(item, index) in allAreaList" :key="index">
<a-checkbox :value="item.id" :disabled="item.disabled">{{ item.province }}-{{ item.city }}</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</a-modal>
<!-- 批量导入 -->
<a-modal v-model:visible="importVisible" title="区域现货商品批量导入" :width="700" :maskClosable="false" okText="提交" @ok="confirmImport" @cancel="importCancel" :confirmLoading="importLoading">
<a-alert type="warning">
<template #message>
<span style="color: red">特别提醒:</span>若商品之前已设置现货区域,则本次设置为在之前设置基础上新增。例如,原来商品设置为 北京市-直辖市;天津市-直辖市。本次设置为,北京市-直辖市;四川省-成都市。提交后,商品现货区域将更新为 北京市-直辖市;天津市-直辖市;四川省-成都市。
</template>
</a-alert>
<div style="margin-top: 15px;display: flex;align-items: center">
<span>上传商品文件:</span>
<a-upload
accept=".xls,.xlsx"
:file-list="productExcelList"
:before-upload="productExcelBeforeUpload"
@remove="productExcelRemove"
>
<a-button><upload-outlined></upload-outlined>上传文件</a-button>
</a-upload>
<span style="margin-left: 15px">
下载
<a @click="downLoad">区域现货商品上传模板</a>
</span>
</div>
<p style="margin-top: 15px">选择现货区域:</p>
<a-checkbox-group v-model:value="impotrCheckboxValue" style="width: 100%;">
<a-row>
<a-col :span="6" v-for="(item, index) in allAreaList" :key="index">
<a-checkbox :value="item.id" :disabled="item.disabled">{{ item.province }}-{{ item.city }}</a-checkbox>
</a-col>
</a-row>
</a-checkbox-group>
</a-modal>
</template>
<style lang="less" scoped>
.body-box {
.top-search {
margin-top: 15px;
}
}
</style>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import {
platformProBatchGetListApi,
platformProBatchGetDetailApi
} from '/@/api/regionalSpotManage';
import { message } from 'ant-design-vue';
onMounted(async () => {
getList()
});
let list = ref<any[]>([
{
createTime: '2024/12/12 12:22:22',
operateModule: '平台商品管理-议价商品',
type: '批量导入议价商品',
operateNum: 8882,
successNum: 8882,
failNum: 0,
operateName: '赵欣雨'
}
])
let listLoading = ref(false)
const pagination = ref({
pageSize: 10,
current: 1,
total: 0,
showTotal: total => `共 ${total} 条`,
hideOnSinglePage: false,
showQuickJumper: true,
showSizeChanger: true,
pageSizeOptions: ['10', '20', '30', '50', '100'],
onChange: (current) => {
pagination.value.current = current
getList()
},
onShowSizeChange: (size) => {
pagination.value.pageSize = size
getList()
}
})
const search = () => {
pagination.value.current = 1
getList()
}
const getList = async () => {
const param = ref<{ [key: string]: any }>({
currentPage: pagination.value.current,
pageSize: pagination.value.pageSize
})
listLoading.value = true
const res = await platformProBatchGetListApi(param)
if (res.code === 20000) {
list.value = res.data
pagination.value.total = res.data[0].total
} else {
list.value = []
pagination.value.total = 0
}
listLoading.value = false
}
let curItem = ref<{ [key: string]: any }>({});
let visible = ref(false)
let operationList = ref<any[]>([])
let detailLoading = ref(false)
const viewRecord = (item) => {
curItem.value = item
visible.value = true
getDetails(item)
}
const getDetails = async (item) => {
const param = ref<{ [key: string]: any }>({
sysid: item.sysid,
type: ''
})
detailLoading.value = true
const res = await platformProBatchGetDetailApi(param)
if (res.code === 20000) {
operationList.value = res.data
} else {
operationList.value = []
}
detailLoading.value = false
}
// =================导出========================
let exportLoading = ref(false)
const exportExcel = async () => {
handleDownload([
{
"brand": "生工",
"category": "",
"createTime": "2024-03-29 14:42:35",
"discount": null,
"expirationDate": null,
"failReason": "该商品在商品目录不存在;",
"identificationType": "商品议价",
"itemNo": "G508013-0001",
"negotiationPrice": 5000,
"operateSysid": 13877,
"platforms": [
"北京协和医院"
],
"productName": "微孔板迷你离心机,500~3000 rpm",
"spec": "1 /PK",
"status": false,
"sysid": 83466873,
"total": 32,
"type": 2
}
])
const param = ref<{ [key: string]: any }>({
sysid: curItem.value.sysid,
type: ''
})
exportLoading.value = true
const res = await platformProBatchGetDetailApi(param)
if (res.code === 20000) {
handleDownload(res.data)
} else {
message.error('暂无数据')
}
exportLoading.value = false
}
const handleDownload = (list) => {
import('/@/vendor/Export2Excel').then(excel => {
let tHeader = ['商品名称', '品牌', '货号', '包装规格', '平台', '状态', '失败原因', '执行时间']
let filterVal = ['productName', 'brand', 'itemNo', 'spec', 'platforms', 'status', 'failReason', 'createTime']
list.forEach(item => {
if(item.status) {
item.status = '成功'
} else {
item.status = '失败'
}
if(item.platforms) {
item.platforms = item.platforms.join(',')
} else {
item.platforms = ''
}
});
const data = formatJson(filterVal, list)
excel.export_json_to_excel({
header: tHeader as any,
data: data as any,
filename: '操作记录详情' as any,
autoWidth: true as any,
bookType: 'xlsx' as any,
XlsWidth: null as any,
searchList: [] as any
})
})
}
const formatJson = (filterVal, jsonData) => {
return jsonData.map(v => filterVal.map(j => {
return v[j]
}))
}
</script>
<template>
<div>
<a-button @click="search" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
:pagination="pagination"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="功能模块" align="center" :width="100">
<template v-slot="{record}">
{{ record.operateModule }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="操作数量" align="center" :width="100">
<template v-slot="{record}">
<a-button v-if="record.operateNum" type="link" @click="viewRecord(record)">{{ record.operateNum }}</a-button>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="解析成功数量" align="center" :width="100">
<template v-slot="{record}">
<span v-if="record.successNum">{{ record.successNum }}</span>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="解析失败数量" align="center" :width="100">
<template v-slot="{record}">
<span v-if="record.failNum">{{ record.failNum }}</span>
<span v-else>/</span>
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.operateName }}
</template>
</a-table-column>
</a-table>
<a-modal v-model:visible="visible" title="操作记录详情" :width="1200" :maskClosable="false" :keyboard="false">
<template #footer>
<a-button type="primary" :loading="exportLoading" @click="exportExcel">导出数据</a-button>
</template>
<a-table
:data-source="operationList"
:loading="detailLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: -15px"
>
<a-table-column title="商品名称" align="center" :width="100">
<template v-slot="{record}">
{{ record.productName }}
</template>
</a-table-column>
<a-table-column title="品牌" align="center" :width="100">
<template v-slot="{record}">
{{ record.brand }}
</template>
</a-table-column>
<a-table-column title="货号" align="center" :width="100">
<template v-slot="{record}">
{{ record.itemNo }}
</template>
</a-table-column>
<a-table-column title="包装规格" align="center" :width="100">
<template v-slot="{record}">
{{ record.spec }}
</template>
</a-table-column>
<a-table-column title="平台" align="center" :width="150">
<template v-slot="{record}">
<span v-if="record.platforms && record.platforms.length > 1" :title="record.platforms.join(',')">{{ record.platforms[0] + '...' }}</span>
<span v-else>{{ record.platforms ? record.platforms[0] : '' }}</span>
</template>
</a-table-column>
<a-table-column title="状态" align="center" :width="100">
<template v-slot="{record}">
{{ record.status ? '成功' : '失败' }}
</template>
</a-table-column>
<a-table-column title="失败原因" :width="150">
<template v-slot="{record}">
<span class="opinionClass" :title="record.failReason">{{ record.failReason }}</span>
</template>
</a-table-column>
<a-table-column title="执行时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
</a-table>
</a-modal>
</template>
<style lang="less" scoped>
.opinionClass {
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import {
message,
} from 'ant-design-vue';
const config = import.meta.env
import {
taskCenterQueryListApi,
taskCenterRevokeExcelUploadApi,
} from '/@/api/regionalSpotManage';
onMounted(async () => {
getList()
});
let list = ref<any[]>([])
let listLoading = ref(false)
const downLoad = (url) => {
window.open(config.VITE_GLOB_API_URL + '/system/excelFile/' + url, '_blank')
}
const downloadFail = (record) => {
if(record.failNum === 0) return
let href = config.VITE_GLOB_API_URL + '/excel/excelNew/fail/download?sysid=' + record.sysid+'&type='+record.type.slice(2,6)
window.open(href,'blank')
}
const cancel = async (record) => {
const param = ref<{ [key: string]: any }>({
sysid: record.sysid
})
const res = await taskCenterRevokeExcelUploadApi(param.value)
if (res.code === 20000) {
message.success('操作成功')
getList()
} else {
message.error(res.message)
}
}
const getList = async () => {
listLoading.value = true
const res = await taskCenterQueryListApi({type:0})
if (res.code === 20000) {
list.value = res.data
} else {
list.value = []
}
listLoading.value = false
}
</script>
<template>
<div>
<a-button @click="getList" type="primary">刷新数据</a-button>
</div>
<a-table
:data-source="list"
:loading="listLoading"
bordered
:rowKey="(record) => record.sysid"
style="margin-top: 15px"
>
<a-table-column title="操作时间" align="center" :width="100">
<template v-slot="{record}">
{{ record.createTime }}
</template>
</a-table-column>
<a-table-column title="类型" align="center" :width="100">
<template v-slot="{record}">
{{ record.type }}
</template>
</a-table-column>
<a-table-column title="状态" align="center" :width="100">
<template v-slot="{record}">
<p>{{ record.isRevoke ? '已撤销' : record.status == 0 ? '待进行':(record.status == 1 ? '进行中':'已完成') }}</p>
</template>
</a-table-column>
<a-table-column title="操作数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.sproductNumpec }}
</template>
</a-table-column>
<a-table-column title="成功数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.successNum }}
</template>
</a-table-column>
<a-table-column title="错误数据" align="center" :width="100">
<template v-slot="{record}">
{{ record.failNum }}
</template>
</a-table-column>
<a-table-column title="操作人" align="center" :width="100">
<template v-slot="{record}">
{{ record.createName }}
</template>
</a-table-column>
<a-table-column title="操作" align="center" :width="200">
<template v-slot="{record}">
<Button type="link" @click="downLoad(record.fileUrl)">下载源文件</Button>
<Button type="link" v-if="record.failNum" @click="downloadFail(record)">下载错误数据</Button>
<Button type="link" v-if="record.status == 0 && !record.isRevoke" @click="cancel(record)">撤销</Button>
</template>
</a-table-column>
</a-table>
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
import ManageList from './components/list.vue';
</script>
<template>
<ManageList />
</template>
<style lang="less" scoped>
</style>
<script lang="ts" setup>
import { ref } from 'vue';
import uploadTask from './components/upLoadTask.vue'
import downLoadTask from './components/downLoadTask.vue'
import platformProBatch from './components/platformProBatch.vue'
const activeKey = ref('1')
const callback = (val) => {
activeKey.value = val
}
</script>
<template>
<a-tabs @change="callback" v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="上传任务数据">
<uploadTask v-if="activeKey === '1'"></uploadTask>
</a-tab-pane>
<a-tab-pane key="2" tab="下载任务数据" force-render>
<downLoadTask v-if="activeKey === '2'"></downLoadTask>
</a-tab-pane>
<a-tab-pane key="3" tab="平台商品批量">
<platformProBatch v-if="activeKey === '3'"></platformProBatch>
</a-tab-pane>
</a-tabs>
</template>
<style lang="less" scoped>
</style>
...@@ -3071,16 +3071,27 @@ bin-version@^3.0.0: ...@@ -3071,16 +3071,27 @@ bin-version@^3.0.0:
execa "^1.0.0" execa "^1.0.0"
find-versions "^3.0.0" find-versions "^3.0.0"
bin-wrapper@^4.0.0, bin-wrapper@^4.0.1: bin-wrapper@^4.0.0:
version "0.1.0" version "4.1.0"
resolved "https://registry.npmmirror.com/bin-wrapper-china/-/bin-wrapper-china-0.1.0.tgz" resolved "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz"
integrity sha512-1UCm17WYEbgry50tup+AQN+JGVEVzoW4f8HMl899k1lvuFxWKGZXl/G2fgxQxAckRjnloO3ijLVVEsv8zescUg== integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
dependencies: dependencies:
bin-check "^4.1.0" bin-check "^4.1.0"
bin-version-check "^4.0.0" bin-version-check "^4.0.0"
binary-mirror-config "^1"
download "^7.1.0" download "^7.1.0"
import-lazy "^4.0.0" import-lazy "^3.1.0"
os-filter-obj "^2.0.0"
pify "^4.0.1"
bin-wrapper@^4.0.1:
version "4.1.0"
resolved "https://registry.npmmirror.com/bin-wrapper/-/bin-wrapper-4.1.0.tgz"
integrity sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==
dependencies:
bin-check "^4.1.0"
bin-version-check "^4.0.0"
download "^7.1.0"
import-lazy "^3.1.0"
os-filter-obj "^2.0.0" os-filter-obj "^2.0.0"
pify "^4.0.1" pify "^4.0.1"
...@@ -3089,11 +3100,6 @@ binary-extensions@^2.0.0: ...@@ -3089,11 +3100,6 @@ binary-extensions@^2.0.0:
resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz" resolved "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
binary-mirror-config@^1:
version "1.41.0"
resolved "https://registry.npmmirror.com/binary-mirror-config/-/binary-mirror-config-1.41.0.tgz"
integrity sha512-ZiIhR1s6Sv1Fv6qCQqfPjx0Cj86BgFlhqNxZgHkQOWcxJcMbO3mj1iqsuVjowYqJqeZL8e52+IEv7IRnSX6T6w==
bl@^1.0.0: bl@^1.0.0:
version "1.2.3" version "1.2.3"
resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz" resolved "https://registry.npmmirror.com/bl/-/bl-1.2.3.tgz"
...@@ -5416,6 +5422,11 @@ file-entry-cache@^6.0.1: ...@@ -5416,6 +5422,11 @@ file-entry-cache@^6.0.1:
dependencies: dependencies:
flat-cache "^3.0.4" flat-cache "^3.0.4"
file-saver@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.2.tgz"
integrity sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw==
file-type@^10.4.0: file-type@^10.4.0:
version "10.11.0" version "10.11.0"
resolved "https://registry.npmmirror.com/file-type/-/file-type-10.11.0.tgz" resolved "https://registry.npmmirror.com/file-type/-/file-type-10.11.0.tgz"
...@@ -6452,6 +6463,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: ...@@ -6452,6 +6463,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1:
parent-module "^1.0.0" parent-module "^1.0.0"
resolve-from "^4.0.0" resolve-from "^4.0.0"
import-lazy@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-3.1.0.tgz"
integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==
import-lazy@^4.0.0: import-lazy@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz" resolved "https://registry.npmmirror.com/import-lazy/-/import-lazy-4.0.0.tgz"
...@@ -9501,6 +9517,11 @@ randombytes@^2.1.0: ...@@ -9501,6 +9517,11 @@ randombytes@^2.1.0:
dependencies: dependencies:
safe-buffer "^5.1.0" safe-buffer "^5.1.0"
raw-loader@~0.5.1:
version "0.5.1"
resolved "https://registry.npmmirror.com/raw-loader/-/raw-loader-0.5.1.tgz"
integrity sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==
react-is@^17.0.1: react-is@^17.0.1:
version "17.0.2" version "17.0.2"
resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz" resolved "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz"
...@@ -9876,13 +9897,20 @@ rollup-plugin-visualizer@^5.5.2: ...@@ -9876,13 +9897,20 @@ rollup-plugin-visualizer@^5.5.2:
source-map "^0.7.4" source-map "^0.7.4"
yargs "^17.5.1" yargs "^17.5.1"
"rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1, rollup@^2.60.2, "rollup@>=2.59.0 <2.78.0", "rollup@2.x || 3.x || 4.x": "rollup@^1.20.0 || ^2.0.0", rollup@^1.20.0||^2.0.0, rollup@^2.0.0, rollup@^2.43.1, rollup@^2.60.2, "rollup@2.x || 3.x || 4.x":
version "2.79.1" version "2.79.1"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz" resolved "https://registry.npmmirror.com/rollup/-/rollup-2.79.1.tgz"
integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
"rollup@>=2.59.0 <2.78.0":
version "2.77.3"
resolved "https://registry.npmmirror.com/rollup/-/rollup-2.77.3.tgz"
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
optionalDependencies:
fsevents "~2.3.2"
run-async@^2.4.0: run-async@^2.4.0:
version "2.4.1" version "2.4.1"
resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz" resolved "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz"
...@@ -9955,6 +9983,13 @@ saxes@^5.0.1: ...@@ -9955,6 +9983,13 @@ saxes@^5.0.1:
dependencies: dependencies:
xmlchars "^2.2.0" xmlchars "^2.2.0"
script-loader@^0.7.2:
version "0.7.2"
resolved "https://registry.npmmirror.com/script-loader/-/script-loader-0.7.2.tgz"
integrity sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==
dependencies:
raw-loader "~0.5.1"
scroll-into-view-if-needed@^2.2.25: scroll-into-view-if-needed@^2.2.25:
version "2.2.31" version "2.2.31"
resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz" resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment