| | |
| | | "docxtemplater-image-module": "^3.1.0", |
| | | "docxtemplater-image-module-free": "^1.1.1", |
| | | "echarts": "^5.5.1", |
| | | "element-plus": "^2.8.3", |
| | | "element-plus": "^2.11.9", |
| | | "exceljs": "^4.4.0", |
| | | "file-saver": "^2.0.5", |
| | | "js-base64": "^3.7.5", |
| | |
| | | "less": "^4.1.3", |
| | | "less-loader": "^11.1.0", |
| | | "prettier": "^3.1.0", |
| | | "sass": "^1.56.2", |
| | | "sass": "^1.94.2", |
| | | "start-server-and-test": "^1.14.0", |
| | | "typescript": "^4.9.4", |
| | | "unplugin-element-plus": "^0.4.1", |
| | |
| | | } |
| | | }, |
| | | "node_modules/@element-plus/icons-vue": { |
| | | "version": "2.3.1", |
| | | "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", |
| | | "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", |
| | | "version": "2.3.2", |
| | | "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", |
| | | "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", |
| | | "peerDependencies": { |
| | | "vue": "^3.2.0" |
| | | } |
| | |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", |
| | | "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", |
| | | "dev": true, |
| | | "hasInstallScript": true, |
| | | "optional": true, |
| | | "dependencies": { |
| | | "detect-libc": "^1.0.3", |
| | | "is-glob": "^4.0.3", |
| | | "micromatch": "^4.0.5", |
| | | "node-addon-api": "^7.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | }, |
| | | "optionalDependencies": { |
| | | "@parcel/watcher-android-arm64": "2.5.1", |
| | | "@parcel/watcher-darwin-arm64": "2.5.1", |
| | | "@parcel/watcher-darwin-x64": "2.5.1", |
| | | "@parcel/watcher-freebsd-x64": "2.5.1", |
| | | "@parcel/watcher-linux-arm-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-arm-musl": "2.5.1", |
| | | "@parcel/watcher-linux-arm64-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-arm64-musl": "2.5.1", |
| | | "@parcel/watcher-linux-x64-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-x64-musl": "2.5.1", |
| | | "@parcel/watcher-win32-arm64": "2.5.1", |
| | | "@parcel/watcher-win32-ia32": "2.5.1", |
| | | "@parcel/watcher-win32-x64": "2.5.1" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-android-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", |
| | | "cpu": [ |
| | | "arm64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "android" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-darwin-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", |
| | | "cpu": [ |
| | | "arm64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "darwin" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-darwin-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", |
| | | "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", |
| | | "cpu": [ |
| | | "x64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "darwin" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-freebsd-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", |
| | | "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", |
| | | "cpu": [ |
| | | "x64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "freebsd" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-arm-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", |
| | | "cpu": [ |
| | | "arm" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-arm-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", |
| | | "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", |
| | | "cpu": [ |
| | | "arm" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-arm64-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", |
| | | "cpu": [ |
| | | "arm64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-arm64-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", |
| | | "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", |
| | | "cpu": [ |
| | | "arm64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-x64-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", |
| | | "cpu": [ |
| | | "x64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-linux-x64-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", |
| | | "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", |
| | | "cpu": [ |
| | | "x64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "linux" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-win32-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", |
| | | "cpu": [ |
| | | "arm64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "win32" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-win32-ia32": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", |
| | | "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", |
| | | "cpu": [ |
| | | "ia32" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "win32" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@parcel/watcher-win32-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", |
| | | "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", |
| | | "cpu": [ |
| | | "x64" |
| | | ], |
| | | "dev": true, |
| | | "optional": true, |
| | | "os": [ |
| | | "win32" |
| | | ], |
| | | "engines": { |
| | | "node": ">= 10.0.0" |
| | | }, |
| | | "funding": { |
| | | "type": "opencollective", |
| | | "url": "https://opencollective.com/parcel" |
| | | } |
| | | }, |
| | | "node_modules/@popperjs/core": { |
| | | "name": "@sxzz/popperjs-es", |
| | | "version": "2.11.7", |
| | |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/@types/lodash": { |
| | | "version": "4.14.191", |
| | | "license": "MIT" |
| | | "version": "4.17.21", |
| | | "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz", |
| | | "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==" |
| | | }, |
| | | "node_modules/@types/lodash-es": { |
| | | "version": "4.17.6", |
| | | "license": "MIT", |
| | | "version": "4.17.12", |
| | | "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", |
| | | "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", |
| | | "dependencies": { |
| | | "@types/lodash": "*" |
| | | } |
| | |
| | | } |
| | | }, |
| | | "node_modules/dayjs": { |
| | | "version": "1.11.13", |
| | | "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", |
| | | "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" |
| | | "version": "1.11.19", |
| | | "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz", |
| | | "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==" |
| | | }, |
| | | "node_modules/debug": { |
| | | "version": "4.3.4", |
| | |
| | | "license": "MIT", |
| | | "engines": { |
| | | "node": ">=0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/detect-libc": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", |
| | | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "bin": { |
| | | "detect-libc": "bin/detect-libc.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.10" |
| | | } |
| | | }, |
| | | "node_modules/dfa": { |
| | |
| | | "license": "ISC" |
| | | }, |
| | | "node_modules/element-plus": { |
| | | "version": "2.8.3", |
| | | "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.3.tgz", |
| | | "integrity": "sha512-BXQOyDf0s7JHyNEV8iaO+iaOzTZPsBXVKMzMI967vLCodUBDLrtiY5vglAn1YEebQcUOEUMhGcttTpIvEkcBjQ==", |
| | | "version": "2.11.9", |
| | | "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.11.9.tgz", |
| | | "integrity": "sha512-yTckX+fMGDGiBHVL1gpwfmjEc8P8OwuyU5ZX3f4FhMy2OdC2Y+OwQYWUXmuB+jFMukuSdnGYXYgHq6muBjSxTg==", |
| | | "dependencies": { |
| | | "@ctrl/tinycolor": "^3.4.1", |
| | | "@element-plus/icons-vue": "^2.3.1", |
| | | "@element-plus/icons-vue": "^2.3.2", |
| | | "@floating-ui/dom": "^1.0.1", |
| | | "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", |
| | | "@types/lodash": "^4.14.182", |
| | | "@types/lodash-es": "^4.17.6", |
| | | "@types/lodash": "^4.17.20", |
| | | "@types/lodash-es": "^4.17.12", |
| | | "@vueuse/core": "^9.1.0", |
| | | "async-validator": "^4.2.5", |
| | | "dayjs": "^1.11.3", |
| | | "escape-html": "^1.0.3", |
| | | "dayjs": "^1.11.19", |
| | | "lodash": "^4.17.21", |
| | | "lodash-es": "^4.17.21", |
| | | "lodash-unified": "^1.0.2", |
| | | "lodash-unified": "^1.0.3", |
| | | "memoize-one": "^6.0.0", |
| | | "normalize-wheel-es": "^1.2.0" |
| | | }, |
| | |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/escape-html": { |
| | | "version": "1.0.3", |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/escape-string-regexp": { |
| | | "version": "4.0.0", |
| | |
| | | "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" |
| | | }, |
| | | "node_modules/immutable": { |
| | | "version": "4.1.0", |
| | | "dev": true, |
| | | "license": "MIT" |
| | | "version": "5.1.4", |
| | | "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.4.tgz", |
| | | "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", |
| | | "dev": true |
| | | }, |
| | | "node_modules/import-fresh": { |
| | | "version": "3.3.0", |
| | |
| | | "license": "MIT", |
| | | "peer": true |
| | | }, |
| | | "node_modules/node-addon-api": { |
| | | "version": "7.1.1", |
| | | "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", |
| | | "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "node_modules/node-releases": { |
| | | "version": "2.0.6", |
| | | "dev": true, |
| | |
| | | "license": "MIT" |
| | | }, |
| | | "node_modules/sass": { |
| | | "version": "1.56.2", |
| | | "version": "1.94.2", |
| | | "resolved": "https://registry.npmmirror.com/sass/-/sass-1.94.2.tgz", |
| | | "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", |
| | | "dev": true, |
| | | "license": "MIT", |
| | | "dependencies": { |
| | | "chokidar": ">=3.0.0 <4.0.0", |
| | | "immutable": "^4.0.0", |
| | | "chokidar": "^4.0.0", |
| | | "immutable": "^5.0.2", |
| | | "source-map-js": ">=0.6.2 <2.0.0" |
| | | }, |
| | | "bin": { |
| | | "sass": "sass.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12.0.0" |
| | | "node": ">=14.0.0" |
| | | }, |
| | | "optionalDependencies": { |
| | | "@parcel/watcher": "^2.4.1" |
| | | } |
| | | }, |
| | | "node_modules/sass/node_modules/chokidar": { |
| | | "version": "4.0.3", |
| | | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", |
| | | "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", |
| | | "dev": true, |
| | | "dependencies": { |
| | | "readdirp": "^4.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 14.16.0" |
| | | }, |
| | | "funding": { |
| | | "url": "https://paulmillr.com/funding/" |
| | | } |
| | | }, |
| | | "node_modules/sass/node_modules/readdirp": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", |
| | | "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", |
| | | "dev": true, |
| | | "engines": { |
| | | "node": ">= 14.18.0" |
| | | }, |
| | | "funding": { |
| | | "type": "individual", |
| | | "url": "https://paulmillr.com/funding/" |
| | | } |
| | | }, |
| | | "node_modules/sax": { |
| | |
| | | } |
| | | }, |
| | | "@element-plus/icons-vue": { |
| | | "version": "2.3.1", |
| | | "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", |
| | | "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", |
| | | "version": "2.3.2", |
| | | "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz", |
| | | "integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==", |
| | | "requires": {} |
| | | }, |
| | | "@eslint-community/eslint-utils": { |
| | |
| | | "fastq": "^1.6.0" |
| | | } |
| | | }, |
| | | "@parcel/watcher": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", |
| | | "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", |
| | | "dev": true, |
| | | "optional": true, |
| | | "requires": { |
| | | "@parcel/watcher-android-arm64": "2.5.1", |
| | | "@parcel/watcher-darwin-arm64": "2.5.1", |
| | | "@parcel/watcher-darwin-x64": "2.5.1", |
| | | "@parcel/watcher-freebsd-x64": "2.5.1", |
| | | "@parcel/watcher-linux-arm-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-arm-musl": "2.5.1", |
| | | "@parcel/watcher-linux-arm64-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-arm64-musl": "2.5.1", |
| | | "@parcel/watcher-linux-x64-glibc": "2.5.1", |
| | | "@parcel/watcher-linux-x64-musl": "2.5.1", |
| | | "@parcel/watcher-win32-arm64": "2.5.1", |
| | | "@parcel/watcher-win32-ia32": "2.5.1", |
| | | "@parcel/watcher-win32-x64": "2.5.1", |
| | | "detect-libc": "^1.0.3", |
| | | "is-glob": "^4.0.3", |
| | | "micromatch": "^4.0.5", |
| | | "node-addon-api": "^7.0.0" |
| | | } |
| | | }, |
| | | "@parcel/watcher-android-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-darwin-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-darwin-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", |
| | | "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-freebsd-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", |
| | | "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-arm-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-arm-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", |
| | | "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-arm64-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-arm64-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", |
| | | "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-x64-glibc": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", |
| | | "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-linux-x64-musl": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", |
| | | "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-win32-arm64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", |
| | | "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-win32-ia32": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", |
| | | "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@parcel/watcher-win32-x64": { |
| | | "version": "2.5.1", |
| | | "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", |
| | | "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "@popperjs/core": { |
| | | "version": "npm:@sxzz/popperjs-es@2.11.7" |
| | | }, |
| | |
| | | "dev": true |
| | | }, |
| | | "@types/lodash": { |
| | | "version": "4.14.191" |
| | | "version": "4.17.21", |
| | | "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.21.tgz", |
| | | "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==" |
| | | }, |
| | | "@types/lodash-es": { |
| | | "version": "4.17.6", |
| | | "version": "4.17.12", |
| | | "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", |
| | | "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", |
| | | "requires": { |
| | | "@types/lodash": "*" |
| | | } |
| | |
| | | } |
| | | }, |
| | | "dayjs": { |
| | | "version": "1.11.13", |
| | | "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", |
| | | "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" |
| | | "version": "1.11.19", |
| | | "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.19.tgz", |
| | | "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==" |
| | | }, |
| | | "debug": { |
| | | "version": "4.3.4", |
| | |
| | | }, |
| | | "delayed-stream": { |
| | | "version": "1.0.0" |
| | | }, |
| | | "detect-libc": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", |
| | | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "dfa": { |
| | | "version": "1.2.0", |
| | |
| | | "dev": true |
| | | }, |
| | | "element-plus": { |
| | | "version": "2.8.3", |
| | | "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.8.3.tgz", |
| | | "integrity": "sha512-BXQOyDf0s7JHyNEV8iaO+iaOzTZPsBXVKMzMI967vLCodUBDLrtiY5vglAn1YEebQcUOEUMhGcttTpIvEkcBjQ==", |
| | | "version": "2.11.9", |
| | | "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.11.9.tgz", |
| | | "integrity": "sha512-yTckX+fMGDGiBHVL1gpwfmjEc8P8OwuyU5ZX3f4FhMy2OdC2Y+OwQYWUXmuB+jFMukuSdnGYXYgHq6muBjSxTg==", |
| | | "requires": { |
| | | "@ctrl/tinycolor": "^3.4.1", |
| | | "@element-plus/icons-vue": "^2.3.1", |
| | | "@element-plus/icons-vue": "^2.3.2", |
| | | "@floating-ui/dom": "^1.0.1", |
| | | "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", |
| | | "@types/lodash": "^4.14.182", |
| | | "@types/lodash-es": "^4.17.6", |
| | | "@types/lodash": "^4.17.20", |
| | | "@types/lodash-es": "^4.17.12", |
| | | "@vueuse/core": "^9.1.0", |
| | | "async-validator": "^4.2.5", |
| | | "dayjs": "^1.11.3", |
| | | "escape-html": "^1.0.3", |
| | | "dayjs": "^1.11.19", |
| | | "lodash": "^4.17.21", |
| | | "lodash-es": "^4.17.21", |
| | | "lodash-unified": "^1.0.2", |
| | | "lodash-unified": "^1.0.3", |
| | | "memoize-one": "^6.0.0", |
| | | "normalize-wheel-es": "^1.2.0" |
| | | }, |
| | |
| | | "escalade": { |
| | | "version": "3.1.1", |
| | | "dev": true |
| | | }, |
| | | "escape-html": { |
| | | "version": "1.0.3" |
| | | }, |
| | | "escape-string-regexp": { |
| | | "version": "4.0.0", |
| | |
| | | "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" |
| | | }, |
| | | "immutable": { |
| | | "version": "4.1.0", |
| | | "version": "5.1.4", |
| | | "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.1.4.tgz", |
| | | "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", |
| | | "dev": true |
| | | }, |
| | | "import-fresh": { |
| | |
| | | "dev": true, |
| | | "peer": true |
| | | }, |
| | | "node-addon-api": { |
| | | "version": "7.1.1", |
| | | "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", |
| | | "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", |
| | | "dev": true, |
| | | "optional": true |
| | | }, |
| | | "node-releases": { |
| | | "version": "2.0.6", |
| | | "dev": true |
| | |
| | | "version": "2.1.2" |
| | | }, |
| | | "sass": { |
| | | "version": "1.56.2", |
| | | "version": "1.94.2", |
| | | "resolved": "https://registry.npmmirror.com/sass/-/sass-1.94.2.tgz", |
| | | "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", |
| | | "dev": true, |
| | | "requires": { |
| | | "chokidar": ">=3.0.0 <4.0.0", |
| | | "immutable": "^4.0.0", |
| | | "@parcel/watcher": "^2.4.1", |
| | | "chokidar": "^4.0.0", |
| | | "immutable": "^5.0.2", |
| | | "source-map-js": ">=0.6.2 <2.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "chokidar": { |
| | | "version": "4.0.3", |
| | | "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", |
| | | "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", |
| | | "dev": true, |
| | | "requires": { |
| | | "readdirp": "^4.0.1" |
| | | } |
| | | }, |
| | | "readdirp": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", |
| | | "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", |
| | | "dev": true |
| | | } |
| | | } |
| | | }, |
| | | "sax": { |
| | |
| | | "docxtemplater-image-module": "^3.1.0", |
| | | "docxtemplater-image-module-free": "^1.1.1", |
| | | "echarts": "^5.5.1", |
| | | "element-plus": "^2.8.3", |
| | | "element-plus": "^2.11.9", |
| | | "exceljs": "^4.4.0", |
| | | "file-saver": "^2.0.5", |
| | | "js-base64": "^3.7.5", |
| | |
| | | "less": "^4.1.3", |
| | | "less-loader": "^11.1.0", |
| | | "prettier": "^3.1.0", |
| | | "sass": "^1.56.2", |
| | | "sass": "^1.94.2", |
| | | "start-server-and-test": "^1.14.0", |
| | | "typescript": "^4.9.4", |
| | | "unplugin-element-plus": "^0.4.1", |
| | |
| | | ::v-deep .el-dialog { |
| | | :deep(.el-dialog) { |
| | | --el-dialog-margin-top: 8vh; |
| | | } |
| | | ::v-deep .el-dialog__body { |
| | | :deep(.el-dialog__body) { |
| | | padding: 0 var(--el-dialog-padding-primary) var(--el-dialog-padding-primary) var(--el-dialog-padding-primary); |
| | | } |
| | | ::v-deep .el-drawer__body { |
| | | :deep(.el-drawer__body) { |
| | | padding: 0 var(--el-drawer-padding-primary); |
| | | } |
| | |
| | | ); |
| | | </script> |
| | | <style scoped> |
| | | ::v-deep .el-drawer__body { |
| | | :deep(.el-drawer__body) { |
| | | padding-top: 0; |
| | | } |
| | | |
| | | ::v-deep .el-drawer__header { |
| | | :deep(.el-drawer__header) { |
| | | margin-bottom: 16px; |
| | | } |
| | | </style> |
| | |
| | | padding: 5px; |
| | | } |
| | | |
| | | ::v-deep .el-dialog__body { |
| | | :deep(.el-dialog__body) { |
| | | padding: 10px calc(var(--el-dialog-padding-primary) + 10px) !important; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div class="wrapper"> |
| | | <el-row justify="space-between" class="m-t-4"> |
| | | <el-col :span="20"> |
| | | <el-col :span="24"> |
| | | <div class="text-title"> |
| | | <el-tag |
| | | size="small" |
| | |
| | | <el-icon class="m-r-4" size="16"><AlarmClock /></el-icon> |
| | | <span>时间:</span> |
| | | </div> |
| | | {{ $fm.formatYMDHM(item.executionstarttime) }}至{{ $fm.formatYMDHM(item.executionendtime) }} |
| | | {{ $fm.formatYMDHM(item.executionstarttime) }}至{{ |
| | | $fm.formatYMDHM(item.executionendtime) |
| | | }} |
| | | </div> |
| | | <div class="text-info"> |
| | | <div class="text-label"> |
| | |
| | | </div> |
| | | {{ item.executorrealtimes }} |
| | | </div> |
| | | <el-space class="m-t-4"> |
| | | <el-tag size="small" type="info" effect="" |
| | | >问题:{{ status.proNum }}</el-tag |
| | | > |
| | | <el-tag size="small" type="info" effect="" |
| | | >整改:{{ status.changeNum }}</el-tag |
| | | > |
| | | <el-tag size="small" :type="changePerType" effect="" |
| | | >整改率:{{ status.changePer }}</el-tag |
| | | > |
| | | </el-space> |
| | | <el-row justify="space-between"> |
| | | <el-space class="m-t-4"> |
| | | <el-tag size="small" type="info" effect="" |
| | | >问题:{{ status.proNum }}</el-tag |
| | | > |
| | | <el-tag size="small" type="info" effect="" |
| | | >整改:{{ status.changeNum }}</el-tag |
| | | > |
| | | <el-tag size="small" :type="changePerType" effect="" |
| | | >整改率:{{ status.changePer }}</el-tag |
| | | > |
| | | </el-space> |
| | | <slot :item="item"></slot> |
| | | </el-row> |
| | | </el-col> |
| | | <el-col :span="4"> |
| | | <slot :item="item"></slot> |
| | | </el-col> |
| | | <!-- <el-col :span="4"> </el-col> --> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | |
| | | <template> |
| | | <BaseMap></BaseMap> |
| | | <div class="wrap p-events-none"> |
| | | <el-row class="p-events-none"> |
| | | <el-row class="p-events-none top-left-wrap"> |
| | | <FYOptionScene |
| | | class="p-events-auto" |
| | | label="" |
| | |
| | | </div> |
| | | </el-row> |
| | | <el-row |
| | | class="p-events-none left-wrap" |
| | | align="bottom" |
| | | class="p-events-none bottom-left-wrap" |
| | | align="middle" |
| | | :style="leftCardWrapStyle" |
| | | > |
| | | <div |
| | | ref="refLeftCard" |
| | | v-show="leftCardShow" |
| | | class="card-left p-events-auto" |
| | | > |
| | | <div><el-text size="large">场景列表</el-text></div> |
| | | <el-scrollbar height="400px" class="scrollbar"> |
| | | <el-row |
| | | v-for="s in selectedSceneList" |
| | | :key="s.guid" |
| | | justify="space-between" |
| | | class="p-v-4 scene-item" |
| | | > |
| | | <el-text truncated style="width: 250px"> |
| | | {{ s.index + '、' + s.name }} |
| | | </el-text> |
| | | <el-space> |
| | | <el-icon |
| | | :color=" |
| | | s._checked ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)' |
| | | " |
| | | @click="locateTo(s)" |
| | | > |
| | | <LocationInformation /> |
| | | </el-icon> |
| | | <el-icon |
| | | class="cursor-p" |
| | | :color=" |
| | | s._visible ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)' |
| | | " |
| | | @click="handleVisibleChange(s)" |
| | | > |
| | | <View /> |
| | | </el-icon> |
| | | </el-space> |
| | | <div class="card-left" ref="refLeftCard"> |
| | | <div v-show="leftCardShow" class="p-events-auto"> |
| | | <el-row ref="refLeftCardTitle" class="p-8" justify="space-between"> |
| | | <el-text size="large">场景列表</el-text> |
| | | <el-input |
| | | v-model="filterText" |
| | | icon="Search" |
| | | style="width: 250px" |
| | | placeholder="输入关键字,按回车键搜索" |
| | | clearable |
| | | /> |
| | | <!-- <el-badge |
| | | ref="sampleBadgeRef" |
| | | :value="1" |
| | | type="success" |
| | | :offset="[-2, 2]" |
| | | > |
| | | <img |
| | | style="width: 30px; height: 30px" |
| | | :src="sceneIcon(1)" |
| | | alt="工地" |
| | | /> |
| | | <template #content="{ value }"> |
| | | <div class="custom-content"> |
| | | <el-icon :size="8"><Select /></el-icon> |
| | | </div> |
| | | </template> |
| | | </el-badge> --> |
| | | </el-row> |
| | | </el-scrollbar> |
| | | <el-scrollbar :height="scrollHeight" class="scrollbar"> |
| | | <el-row |
| | | v-for="s in filteredSceneList" |
| | | :key="s.guid" |
| | | justify="space-between" |
| | | class="p-v-4 scene-item" |
| | | > |
| | | <el-text truncated style="width: 100%"> |
| | | {{ s.index + '. ' + s.name }} |
| | | </el-text> |
| | | <el-row justify="space-between" style="margin-top: 4px"> |
| | | <el-space> |
| | | <el-tag type="info" effect="plain" size="small"> |
| | | {{ s.type }} |
| | | </el-tag> |
| | | <el-tag |
| | | :type="s.extension1 == '0' ? 'info' : 'success'" |
| | | size="small" |
| | | > |
| | | {{ onlineFormat(s.extension1) }} |
| | | </el-tag> |
| | | </el-space> |
| | | </el-row> |
| | | <el-space> |
| | | <el-icon |
| | | class="cursor-p" |
| | | :color=" |
| | | s._checked ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)' |
| | | " |
| | | @click="locateTo(s)" |
| | | > |
| | | <LocationInformation /> |
| | | </el-icon> |
| | | <el-icon |
| | | class="cursor-p" |
| | | :color=" |
| | | s._visible ? 'rgb(121, 187, 255)' : 'rgb(200, 201, 204)' |
| | | " |
| | | @click="handleVisibleChange(s)" |
| | | > |
| | | <View /> |
| | | </el-icon> |
| | | </el-space> |
| | | </el-row> |
| | | </el-scrollbar> |
| | | </div> |
| | | </div> |
| | | <el-button |
| | | class="close-btn-right p-events-auto" |
| | | type="primary" |
| | | plain |
| | | type="success" |
| | | size="small" |
| | | :icon="leftCardShow ? 'ArrowLeft' : 'ArrowRight'" |
| | | @click="leftCardShow = !leftCardShow" |
| | | ></el-button> |
| | | </el-row> |
| | | </div> |
| | | |
| | | <!-- <el-row class="right-wrap"> |
| | | <el-col :span="4"> |
| | | <el-button>close</el-button> |
| | | </el-col> |
| | | <el-col :span="20"> |
| | | |
| | | </el-col> |
| | | </el-row> --> |
| | | </template> |
| | | <script setup> |
| | | import { ref, watch, computed, onMounted } from 'vue'; |
| | |
| | | import marks from '@/utils/map/marks'; |
| | | import mapUtil from '@/utils/map/util'; |
| | | import { sceneIcon } from '@/assets/scene-icon'; |
| | | |
| | | const startHtml = `<div class="el-badge">`; |
| | | const endHtml = `<sup |
| | | class="el-badge__content el-badge__content--success is-fixed" |
| | | style="margin-top: 2px; margin-right: 2px" |
| | | > |
| | | <div class="custom-content"> |
| | | <i class="el-icon" style="font-size: 8px"> |
| | | <svg |
| | | xmlns="http://www.w3.org/2000/svg" |
| | | viewBox="0 0 1024 1024" |
| | | > |
| | | <path |
| | | fill="currentColor" |
| | | d="M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496" |
| | | ></path> |
| | | </svg> |
| | | </i> |
| | | </div> |
| | | </sup> |
| | | </div>`; |
| | | // |
| | | const markContentHtml = (sceneType, checked) => { |
| | | const imgHtml = `<img |
| | | style="width: 30px; height: 30px" |
| | | src="${sceneIcon(sceneType)}" |
| | | />`; |
| | | if (checked) { |
| | | return startHtml + imgHtml + endHtml; |
| | | } else { |
| | | return imgHtml; |
| | | } |
| | | }; |
| | | |
| | | const props = defineProps({ |
| | | // 选中的场景 |
| | | modelValue: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | // 场景点位信息 |
| | | data: Array |
| | | }); |
| | | |
| | | const emits = defineEmits(['update:modelValue']); |
| | | |
| | | onMounted(() => { |
| | | // refLeftCard.value.offsetHeight; |
| | | // leftCardWrapStyle.value = { |
| | | // height: refLeftCard.value.offsetHeight + 'px' |
| | | // }; |
| | | setTimeout(() => { |
| | | scrollHeight.value = |
| | | refLeftCard.value.offsetHeight - |
| | | refLeftCardTitle.value.offsetHeight + |
| | | 'px'; |
| | | }, 500); |
| | | }); |
| | | |
| | | const refLeftCard = ref(); |
| | | const refLeftCardTitle = ref(); |
| | | |
| | | const leftCardShow = ref(true); |
| | | const leftCardWrapStyle = ref(); |
| | | const scrollHeight = ref('400px'); |
| | | |
| | | let allMarkViews = []; |
| | | let markViewList = []; |
| | | |
| | | const scenetype = ref(); |
| | | |
| | | const selectedSceneList = computed(() => { |
| | | return props.data.filter((v) => { |
| | | // 选中的场景 |
| | | const selectedSceneList = ref(props.modelValue); |
| | | |
| | | const allSceneList = computed(() => props.data); |
| | | const filterText = ref(''); |
| | | // 根据场景类型筛选场景列表 |
| | | const filteredSceneList = computed(() => { |
| | | return allSceneList.value.filter((v) => { |
| | | v._visible = true; |
| | | return ( |
| | | scenetype.value == undefined || |
| | | scenetype.value.value == null || |
| | | v.typeid + '' == scenetype.value.value |
| | | (scenetype.value == undefined || |
| | | scenetype.value.value == null || |
| | | v.typeid + '' == scenetype.value.value) && |
| | | (v.name.indexOf(filterText.value) != -1 || |
| | | v.index + '' == filterText.value) |
| | | ); |
| | | }); |
| | | }); |
| | |
| | | () => props.data, |
| | | (nV, oV) => { |
| | | if (nV != oV) { |
| | | clearSceneMarks(); |
| | | createSceneMarks(); |
| | | filterMarkViews(true); |
| | | } |
| | |
| | | |
| | | watch(scenetype, (nV, oV) => { |
| | | if (nV != oV) { |
| | | clearSceneMarks(); |
| | | filterMarkViews(true); |
| | | } |
| | | }); |
| | | |
| | | // 监听外部选中或移除场景变化 |
| | | watch( |
| | | () => props.modelValue, |
| | | (nV, oV) => { |
| | | if (nV != oV) { |
| | | // 外部选中场景变化时,更新内部选中场景列表 |
| | | selectedSceneList.value = nV; |
| | | // 外部选中场景变化时,更新地图标注内容 |
| | | allMarkViews.forEach((mv) => { |
| | | const scene = mv.getExtData(); |
| | | const findOne = selectedSceneList.value.some((s) => { |
| | | return s.guid == scene.guid; |
| | | }); |
| | | if (findOne) { |
| | | changeSceneMark(mv, true); |
| | | } else { |
| | | changeSceneMark(mv, false); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | ); |
| | | |
| | | function handleVisibleChange(scene) { |
| | | const mv = markViewList.find((v) => { |
| | |
| | | return scene.guid == v.getExtData().guid; |
| | | }); |
| | | if (mv) { |
| | | mapUtil.setFitView(mv); |
| | | // mapUtil.setFitView(mv); |
| | | mapUtil.setCenter(mv.getPosition()); |
| | | } |
| | | } |
| | | |
| | | // 创建场景地图标注,添加鼠标事件和点击事件 |
| | | function createSceneMarks() { |
| | | onMapMounted(() => { |
| | | allMarkViews = []; |
| | |
| | | // 创建场景地图标注 |
| | | const mark = marks.createMarker({ |
| | | position: [d.longitude, d.latitude], |
| | | img: sceneIcon(d.typeid), |
| | | label: '', |
| | | // img: sceneIcon(d.typeid), |
| | | content: markContentHtml(d.typeid), |
| | | label: d.index, |
| | | title: d.name, |
| | | extData: d |
| | | }); |
| | | var timeout; |
| | | // 添加点击事件 |
| | | mark.on('mouseover', (ev) => { |
| | | if (timeout) { |
| | | clearTimeout(timeout); |
| | | } |
| | | const _mark = ev.target; |
| | | const _extData = _mark.getExtData(); |
| | | ev.target.setLabel({ |
| | | content: _extData.name |
| | | }); |
| | | timeout = setTimeout(() => { |
| | | ev.target.setLabel({ |
| | | content: '' |
| | | }); |
| | | }, 2000); |
| | | // if (_extData._show) { |
| | | // ev.target.setLabel({ |
| | | // content: '' |
| | | // // direction: 'bottom' |
| | | // }); |
| | | // _extData._show = false; |
| | | // ev.target.setExtData(_extData); |
| | | // } else { |
| | | // ev.target.setLabel({ |
| | | // content: _extData.name |
| | | // // direction: 'bottom' |
| | | // }); |
| | | // _extData._show = true; |
| | | // ev.target.setExtData(_extData); |
| | | // } |
| | | }); |
| | | // 鼠标事件 |
| | | // onMouseOverListener(mark); |
| | | onClickListener(mark); |
| | | |
| | | allMarkViews.push(mark); |
| | | }); |
| | | }); |
| | |
| | | if (markViewList.length > 0) { |
| | | map.remove(markViewList); |
| | | } |
| | | // 1. 筛选场景类型 |
| | | if (scenetype.value == undefined) { |
| | | markViewList = allMarkViews; |
| | | } else { |
| | |
| | | ); |
| | | }); |
| | | } |
| | | markViewList = markViewList.filter((v) => { |
| | | const _index = selectedSceneList.value.findIndex((s) => { |
| | | return s.guid == v.getExtData().guid && s._visible; |
| | | }); |
| | | return _index != -1; |
| | | }); |
| | | map.add(markViewList); |
| | | if (setFitView) { |
| | | setTimeout(() => { |
| | | map.setFitView(markViewList); |
| | | // const list = markViewList.map((v) => { |
| | | // const _extData = v.getExtData(); |
| | | // return [_extData.longitude, _extData.latitude]; |
| | | // }); |
| | | // mapUtil.setBound(list); |
| | | }, 1000); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function clearSceneMarks() { |
| | | onMapMounted(() => { |
| | | if (markViewList.length > 0) { |
| | | map.remove(markViewList); |
| | | function onlineFormat(s) { |
| | | if (s == '0') { |
| | | return '下线'; |
| | | } else { |
| | | return '上线'; |
| | | } |
| | | } |
| | | |
| | | /** 地图场景标记鼠标事件 *********************************************/ |
| | | const onMouseOverListener = (mark) => { |
| | | let timeout; |
| | | // 添加点击事件 |
| | | mark.on('mouseover', (ev) => { |
| | | if (timeout) { |
| | | clearTimeout(timeout); |
| | | } |
| | | const _mark = ev.target; |
| | | const _extData = _mark.getExtData(); |
| | | _mark.setLabel({ |
| | | content: _extData.name |
| | | }); |
| | | timeout = setTimeout(() => { |
| | | _mark.setLabel({ |
| | | content: '' |
| | | }); |
| | | }, 2000); |
| | | }); |
| | | }; |
| | | const onClickListener = (mark) => { |
| | | mark.on('click', (ev) => { |
| | | const _mark = ev.target; |
| | | const extData = _mark.getExtData(); |
| | | const index = selectedSceneList.value.indexOf(extData); |
| | | if (index == -1) { |
| | | selectedSceneList.value.push(extData); |
| | | changeSceneMark(_mark, true); |
| | | } else { |
| | | selectedSceneList.value.splice(index, 1); |
| | | changeSceneMark(_mark, false); |
| | | } |
| | | emits('update:modelValue', selectedSceneList.value); |
| | | }); |
| | | }; |
| | | /********************************************************************/ |
| | | |
| | | /** |
| | | * 根据选中状态修改地图标记的样式 |
| | | * @param {AMap.Marker} mark 地图标记 |
| | | * @param checked |
| | | */ |
| | | function changeSceneMark(mark, checked) { |
| | | const scene = mark.getExtData(); |
| | | if (checked && !scene._checked) { |
| | | scene._checked = true; |
| | | mark.setContent(markContentHtml(scene.typeid, true)); |
| | | } else if (!checked && scene._checked) { |
| | | scene._checked = false; |
| | | mark.setContent(markContentHtml(scene.typeid, false)); |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | .left-wrap { |
| | | .top-left-wrap { |
| | | position: absolute; |
| | | left: 0; |
| | | left: 0px; |
| | | top: 1px; |
| | | } |
| | | .bottom-left-wrap { |
| | | position: absolute; |
| | | left: 0px; |
| | | bottom: 1px; |
| | | } |
| | | |
| | | .card-left { |
| | | background-color: white; |
| | | /* border-radius: 4px; */ |
| | | width: 316px; |
| | | /* box-shadow: var(--el-box-shadow); */ |
| | | background-color: rgba(255, 255, 255, 0.8); |
| | | border-radius: 4px; |
| | | /* width: 350px; */ |
| | | height: 50vh; |
| | | box-shadow: var(--el-box-shadow); |
| | | z-index: 0; |
| | | /* padding: 8px; */ |
| | | } |
| | | |
| | | .scrollbar { |
| | | padding-right: 8px; |
| | | /* width: 300px; */ |
| | | width: 350px; |
| | | } |
| | | |
| | | .close-btn-right { |
| | | margin-left: -3px; |
| | | /* margin-left: -3px; */ |
| | | height: 60px; |
| | | width: 20px; |
| | | } |
| | | |
| | | .p-events-auto { |
| | |
| | | |
| | | .scene-item { |
| | | /* background-color: aliceblue; */ |
| | | padding: 8px; |
| | | border-radius: 8px; |
| | | border: 1px solid var(--el-border-color); |
| | | box-shadow: var(--el-box-shadow-lighter); |
| | | margin-bottom: 6px; |
| | | } |
| | | |
| | | .custom-content { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | </style> |
| | |
| | | message: msg, |
| | | type: 'success', |
| | | // offset: 170, |
| | | position: 'top-right', |
| | | position: 'bottom-right', |
| | | }); |
| | | }) |
| | | .catch((err) => { |
| | |
| | | name: 'taskmanage', |
| | | path: 'manage', |
| | | component: () => import('@/views/fysp/task/TaskManage.vue'), |
| | | meta: { keepAlive: true } |
| | | meta: { keepAlive: false } |
| | | }, |
| | | { |
| | | //监管任务场景编辑 |
| | |
| | | } |
| | | |
| | | @each $i in $size { |
| | | .p-#{$i} { |
| | | padding: #{$i}px; |
| | | } |
| | | .p-v-#{$i} { |
| | | padding: #{$i}px 0; |
| | | } |
| | |
| | | return layer; |
| | | }, |
| | | |
| | | createMarker({ position, img, label = '', extData }) { |
| | | createMarker({ position, img, title, content, label = '', extData }) { |
| | | //创建 AMap.Icon 实例: |
| | | const icon = new AMap.Icon({ |
| | | size: new AMap.Size(30, 30), //图标尺寸 |
| | |
| | | position: position, |
| | | // offset: new AMap.Pixel(-13, -30), |
| | | icon: icon, //添加 icon 图标 URL |
| | | title: label, |
| | | content: content, |
| | | title: title, |
| | | label: { |
| | | content: label, |
| | | direction: 'bottom' |
| | |
| | | const units = [ |
| | | { unit: '天', value: 24 * 60 * 60 }, |
| | | { unit: '小时', value: 60 * 60 }, |
| | | { unit: '分', value: 60 }, |
| | | { unit: '分钟', value: 60 }, |
| | | { unit: '秒', value: 1 } |
| | | ]; |
| | | |
| | |
| | | margin-bottom: 30px; |
| | | margin-left: 63px; |
| | | } |
| | | ::v-deep .el-dialog__body { |
| | | :deep(.el-dialog__body) { |
| | | width: 95%; |
| | | } |
| | | ::v-deep .el-upload-list--picture-card .el-upload-list__item-thumbnail { |
| | | :deep(.el-upload-list--picture-card .el-upload-list__item-thumbnail) { |
| | | object-fit: cover !important; |
| | | } |
| | | .preview-pic { |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | ::v-deep .el-upload--picture-card { |
| | | :deep(.el-upload--picture-card) { |
| | | display: none; |
| | | } |
| | | /* 隐藏el-upload上传成功组件 */ |
| | | ::v-deep .el-upload-list__item-status-label { |
| | | :deep(.el-upload-list__item-status-label) { |
| | | display: none !important; |
| | | } |
| | | </style> |
| | |
| | | .row { |
| | | width: 100%; |
| | | } |
| | | ::v-deep .el-upload-list--picture-card .el-upload-list__item-thumbnail { |
| | | :deep(.el-upload-list--picture-card .el-upload-list__item-thumbnail) { |
| | | object-fit: cover !important; |
| | | } |
| | | .preview-pic { |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | ::v-deep .el-upload--picture-card { |
| | | :deep(.el-upload--picture-card) { |
| | | display: none; |
| | | } |
| | | /* 隐藏el-upload上传成功组件 */ |
| | | ::v-deep .el-upload-list__item-status-label { |
| | | :deep(.el-upload-list__item-status-label) { |
| | | display: none !important; |
| | | } |
| | | </style> |
| | |
| | | .row { |
| | | width: 100%; |
| | | } |
| | | ::v-deep .el-upload-list--picture-card .el-upload-list__item-thumbnail { |
| | | :deep(.el-upload-list--picture-card .el-upload-list__item-thumbnail) { |
| | | object-fit: cover !important; |
| | | } |
| | | .preview-pic { |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | ::v-deep .el-upload--picture-card { |
| | | :deep(.el-upload--picture-card) { |
| | | display: none; |
| | | } |
| | | /* 隐藏el-upload上传成功组件 */ |
| | | ::v-deep .el-upload-list__item-status-label { |
| | | :deep(.el-upload-list__item-status-label) { |
| | | display: none !important; |
| | | } |
| | | </style> |
| | |
| | | .fetchProblemCountByArea(opt) |
| | | .then(async (res) => { |
| | | if (res.success) { |
| | | const data = res.data.sort((a, b) => b.ratio - a.ratio); |
| | | const data = res.data.sort((a, b) => b.proAvg - a.proAvg); |
| | | templateParam.townCount = data.length; |
| | | templateParam.topThree = |
| | | data |
| | | .slice(0, 3) |
| | | .map((item) => `${item.townName}(${item.ratio.toFixed(1)}个)`) |
| | | .map((item) => `${item.townName}(${item.proAvg.toFixed(1)}个)`) |
| | | .join('、') + '。'; |
| | | |
| | | const res2 = |
| | | await dataprodmiddleApi.fetchProblemCountByArea(compareOpt); |
| | | if (res2.success) { |
| | | const data2 = res2.data.sort((a, b) => b.ratio - a.ratio); |
| | | const data2 = res2.data.sort((a, b) => b.proAvg - a.proAvg); |
| | | const combineData = ProdProblemCountSummaryProxy.combineData( |
| | | data, |
| | | data2 |
| | |
| | | class="el-scrollbar" |
| | | v-loading="mainLoading" |
| | | > |
| | | <el-row justify="space-between"> |
| | | <!-- <div><el-text>监管计划</el-text></div> |
| | | <!-- <div><el-text>监管计划</el-text></div> |
| | | <el-button type="warning" size="small" @click="editPlan" |
| | | >计划调整</el-button |
| | | > --> |
| | | <el-tabs model-value="first"> |
| | | <el-tab-pane label="巡查计划" name="first"> |
| | | <el-row> |
| | | <el-col :span="curSubTaskList ? 16 : 24"> |
| | | <CompMonitorPlan |
| | | :loading="daytaskLoading" |
| | | ref="planRef" |
| | | :task="curTask.data" |
| | | :day-task-list="curDayTaskList" |
| | | @date-change="onDateChange" |
| | | ></CompMonitorPlan> |
| | | </el-col> |
| | | <el-col v-if="curSubTaskList" :span="8"> |
| | | <CompSubTaskList |
| | | create |
| | | v-model="curSubTaskList" |
| | | :date="curDay" |
| | | :loading="subTaskLoading" |
| | | :create-loading="daytaskCreateLoading" |
| | | height="56vh" |
| | | @add="handleAddSubtask" |
| | | @submit="handleSubtaskSubmit" |
| | | ></CompSubTaskList> |
| | | </el-col> |
| | | </el-row> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="场景地图" name="second"> |
| | | <CompTaskMap :plans="curMonitorObjList"></CompTaskMap> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | <!-- <el-tabs model-value="first"> |
| | | <el-tab-pane label="巡查计划" name="first"> --> |
| | | <el-row justify="space-between" style="padding: 16px 0px 16px 16px"> |
| | | <el-text size="large">巡查计划</el-text> |
| | | <!-- <el-button type="primary" size="small" @click="sceneMapDialog = true"> |
| | | 进入场景地图<el-icon class="el-icon--right"><Right /></el-icon> |
| | | </el-button> --> |
| | | </el-row> |
| | | <div class="plan-container"> |
| | | <el-row> |
| | | <el-col :span="curSubTaskList ? 16 : 24"> |
| | | <CompMonitorPlan |
| | | :loading="daytaskLoading" |
| | | ref="planRef" |
| | | :task="curTask.data" |
| | | :day-task-list="curDayTaskList" |
| | | @date-change="onDateChange" |
| | | ></CompMonitorPlan> |
| | | </el-col> |
| | | <el-col v-if="curSubTaskList" :span="8"> |
| | | <!-- <el-affix target=".plan-container" :offset="140"> --> |
| | | <CompSubTaskList |
| | | create |
| | | v-model="curSubTaskList" |
| | | :date="curDay" |
| | | :loading="subTaskLoading" |
| | | :create-loading="daytaskCreateLoading" |
| | | height="66vh" |
| | | @openMap="sceneMapDialog = true" |
| | | @add="handleAddSubtask" |
| | | @submit="onSubtaskUpdate" |
| | | @remove="onSubtaskUpdate" |
| | | ></CompSubTaskList> |
| | | <!-- </el-affix> --> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <!-- </el-tab-pane> |
| | | <el-tab-pane label="场景地图" name="second"> --> |
| | | <!-- <CompTaskMap :plans="curMonitorObjList"></CompTaskMap> --> |
| | | <!-- </el-tab-pane> |
| | | </el-tabs> --> |
| | | <el-divider></el-divider> |
| | | <el-row justify="space-between"> |
| | | <div><el-text>监管场景</el-text></div> |
| | |
| | | title="日计划管理" |
| | | direction="btt" |
| | | size="96%" |
| | | destroy-on-close |
| | | > |
| | | <CompDayTask |
| | | :day-task="curDayTask" |
| | | :mObjList="curMonitorObjList" |
| | | @submit="handleSubtaskSubmit" |
| | | @submit="onSubtaskUpdate" |
| | | ></CompDayTask> |
| | | </el-drawer> |
| | | <el-dialog |
| | |
| | | @cancel="topTaskAddVisible = false" |
| | | ></CompTaskEdit> |
| | | </el-dialog> |
| | | <el-drawer |
| | | v-model="sceneMapDialog" |
| | | title="场景地图" |
| | | direction="btt" |
| | | size="100%" |
| | | body-class="el-drawer__custom" |
| | | > |
| | | <CompTaskMap |
| | | :plans="curMonitorObjList" |
| | | :day-task="curDayTask" |
| | | @submit="onSubtaskUpdate" |
| | | ></CompTaskMap> |
| | | </el-drawer> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | curSubTaskList: undefined, |
| | | subTaskLoading: false, |
| | | // 总任务新增弹出框 |
| | | topTaskAddVisible: false |
| | | topTaskAddVisible: false, |
| | | // 场景地图弹出框 |
| | | sceneMapDialog: false |
| | | }; |
| | | }, |
| | | provide() { |
| | |
| | | } |
| | | }); |
| | | }, |
| | | handleSubtaskSubmit() { |
| | | this.subTaskLoading = true; |
| | | this.$refs.planRef |
| | | .fetchDayTasks() |
| | | .finally(() => (this.subTaskLoading = false)); |
| | | onSubtaskUpdate() { |
| | | // this.subTaskLoading = true; |
| | | // this.$refs.planRef |
| | | // .fetchDayTasks() |
| | | // .finally(() => (this.subTaskLoading = false)); |
| | | this.fetchDayTasks(); |
| | | }, |
| | | handleAddSubtask() { |
| | | // 判断当日是否有日任务,若没有,先创建在跳转子任务创建界面 |
| | |
| | | totalTaskNum: 0 |
| | | }; |
| | | this.subTaskDrawer = true; |
| | | this.handleSubtaskSubmit(); |
| | | this.onSubtaskUpdate(); |
| | | }) |
| | | .finally(() => (this.daytaskCreateLoading = false)); |
| | | } |
| | |
| | | |
| | | .el-scrollbar { |
| | | height: calc((100vh - 60px - 20px * 2 - var(--height-toolbar))); |
| | | padding-right: 8px; |
| | | } |
| | | |
| | | .plan-container { |
| | | /* background-color: aliceblue; */ |
| | | } |
| | | </style> |
| | | <style> |
| | | .el-drawer__custom { |
| | | padding: 0px !important; |
| | | } |
| | | </style> |
| | |
| | | import { unref } from 'vue'; |
| | | import dayjs from 'dayjs'; |
| | | import taskApi from '@/api/fysp/taskApi'; |
| | | import subtaskApi from '@/api/fysp/subtaskApi'; |
| | | |
| | | export default { |
| | | /** |
| | | * 生成巡查子任务对象 |
| | | */ |
| | | ceateSubTask(){ |
| | | createSubtasks(dayTask, sceneList, executors) { |
| | | const seletedSceneList = unref(sceneList); |
| | | const subtasks = seletedSceneList.map((_) => { |
| | | const s = _.scene; |
| | | return { |
| | | // 主键由服务端创建 |
| | | stguid: undefined, |
| | | tguid: dayTask.tsGuid, |
| | | tsguid: dayTask.guid, |
| | | name: `${s.name}巡查`, |
| | | typeno: 1, |
| | | type: '巡查', |
| | | provincecode: s.provincecode, |
| | | provincename: s.provincename, |
| | | citycode: s.citycode, |
| | | cityname: s.cityname, |
| | | districtcode: s.districtcode, |
| | | districtname: s.districtname, |
| | | scensename: s.name, |
| | | scenseid: s.guid, |
| | | scenseaddress: s.location, |
| | | planstarttime: dayTask.date, |
| | | planendtime: dayjs(dayTask.date) |
| | | .endOf('day') |
| | | .set('millisecond', 0) |
| | | .toDate(), |
| | | deployerguid: 'rAR0A4gJdlOZEqZs', |
| | | deployerusername: 'ccheck', |
| | | deployerrealname: '整改审核', |
| | | executorguids: executors.ids, |
| | | executorusernames: executors.uName, |
| | | executorrealtimes: executors.rName, |
| | | status: '未执行', |
| | | remark: undefined |
| | | }; |
| | | }); |
| | | |
| | | // 更新场景监管次数 |
| | | seletedSceneList.forEach((s) => { |
| | | s.extension1 = s.extension1 ? parseInt(s.extension1) + 1 + '' : '1'; |
| | | }); |
| | | taskApi.updateMonitorObject(seletedSceneList); |
| | | return subtaskApi.putSubtasks(subtasks); |
| | | }, |
| | | |
| | | /** |
| | | * 根据多选下拉框的选项值,返回任务执行人对象 |
| | | * @returns |
| | | * @returns |
| | | */ |
| | | getExecutors(data, executorOptions) { |
| | | const ids = []; |
| | |
| | | rName: rNames.join('#') |
| | | }; |
| | | } |
| | | } |
| | | }; |
| | |
| | | </div> |
| | | <el-divider /> |
| | | <CompSubTaskSelect |
| | | :data="seletedSceneList" |
| | | v-model="seletedSceneList" |
| | | :dayTask="dayTask" |
| | | @delete="deleteScene" |
| | | @submit="createSubtasks" |
| | | ></CompSubTaskSelect> |
| | | <div> |
| | |
| | | <CompSubTaskList |
| | | v-model="curSubTaskList" |
| | | :height="height" |
| | | :date="dayTask.date" |
| | | @submit="deleteSubtasks" |
| | | ></CompSubTaskList> |
| | | </el-col> |
| | |
| | | mObjList: Array |
| | | }); |
| | | |
| | | const emit = defineEmits(['submit']) |
| | | const emit = defineEmits(['submit']); |
| | | |
| | | /*************************** 数据初始化 ************************************/ |
| | | // 巡查子任务集合 |
| | |
| | | seletedSceneList.value.push(item); |
| | | } |
| | | // 移除任务场景 |
| | | function deleteScene(item) { |
| | | item.select = false; |
| | | const index = seletedSceneList.value.indexOf(item); |
| | | seletedSceneList.value.splice(index, 1); |
| | | } |
| | | // function deleteScene(item) { |
| | | // item.select = false; |
| | | // const index = seletedSceneList.value.indexOf(item); |
| | | // seletedSceneList.value.splice(index, 1); |
| | | // } |
| | | |
| | | function createSubtasks(executors) { |
| | | const dt = props.dayTask; |
| | | const subtasks = seletedSceneList.value.map((_) => { |
| | | const s = _.scene; |
| | | return { |
| | | // 主键由服务端创建 |
| | | stguid: undefined, |
| | | tguid: dt.tsGuid, |
| | | tsguid: dt.guid, |
| | | name: `${s.name}巡查`, |
| | | typeno: 1, |
| | | type: '巡查', |
| | | provincecode: s.provincecode, |
| | | provincename: s.provincename, |
| | | citycode: s.citycode, |
| | | cityname: s.cityname, |
| | | districtcode: s.districtcode, |
| | | districtname: s.districtname, |
| | | scensename: s.name, |
| | | scenseid: s.guid, |
| | | scenseaddress: s.location, |
| | | planstarttime: dt.date, |
| | | planendtime: dayjs(dt.date).endOf('day').set('millisecond', 0).toDate(), |
| | | deployerguid: 'rAR0A4gJdlOZEqZs', |
| | | deployerusername: 'ccheck', |
| | | deployerrealname: '整改审核', |
| | | executorguids: executors.ids, |
| | | executorusernames: executors.uName, |
| | | executorrealtimes: executors.rName, |
| | | status: '未执行', |
| | | remark: undefined |
| | | }; |
| | | function createSubtasks() { |
| | | seletedSceneList.value = []; |
| | | fetchSubTask(props.dayTask.guid); |
| | | ElMessage({ |
| | | message: '巡查任务添加成功', |
| | | type: 'success' |
| | | }); |
| | | |
| | | // 更新场景监管次数 |
| | | seletedSceneList.value.forEach((s) => { |
| | | s.extension1 = s.extension1 ? parseInt(s.extension1) + 1 + '' : '1'; |
| | | }); |
| | | taskApi.updateMonitorObject(seletedSceneList.value).then((res) => { |
| | | if (res > 0) { |
| | | subtaskApi.putSubtasks(subtasks).then((res) => { |
| | | seletedSceneList.value = []; |
| | | fetchSubTask(props.dayTask.guid); |
| | | ElMessage({ |
| | | message: '巡查任务添加成功', |
| | | type: 'success' |
| | | }); |
| | | emit('submit') |
| | | }); |
| | | } |
| | | }); |
| | | emit('submit'); |
| | | } |
| | | |
| | | function deleteSubtasks() { |
| | | emit('submit') |
| | | emit('submit'); |
| | | } |
| | | </script> |
| | | <style scoped></style> |
| | |
| | | @update:model-value="onDateChange" |
| | | > |
| | | <template #header="{ date }"> |
| | | <div> |
| | | <div style="width: 100%"> |
| | | <el-row justify="space-between"> |
| | | <el-space> |
| | | <el-tag type="default" |
| | |
| | | ) |
| | | }}</el-tag |
| | | > |
| | | <el-tag type="default">整改:{{ taskStatistic.changed }}</el-tag> |
| | | <!-- <el-tag type="default">整改:{{ taskStatistic.changed }}</el-tag> --> |
| | | </el-space> |
| | | <el-space> |
| | | <el-text>聚焦用户:</el-text> |
| | |
| | | v-model="selectedUsers" |
| | | multiple |
| | | clearable |
| | | collapse-tags |
| | | :max-collapse-tags="1" |
| | | style="width: 150px" |
| | | > |
| | | <el-option |
| | |
| | | v-for="user in taskStatistic.progressPerUser" |
| | | :key="user.userId" |
| | | > |
| | | {{ |
| | | <!-- {{ |
| | | `${user.userName}:巡查量 ${ |
| | | user.completeTaskNum |
| | | },及时整改率 ${formatPercent( |
| | | },即时整改率 ${formatPercent( |
| | | user.changedProblemNumOnTime / user.totalProblemNum |
| | | )},平均耗时 ${ |
| | | user.avgInspectionTime ? user.avgInspectionTime : '--' |
| | | }` |
| | | }} --> |
| | | {{ |
| | | `${user.userName}:${ |
| | | user.completeTaskNum |
| | | } | ${formatPercent( |
| | | user.changedProblemNumOnTime / user.totalProblemNum |
| | | )} | ${ |
| | | user.avgInspectionTime ? user.avgInspectionTime : '--' |
| | | }` |
| | | }} |
| | |
| | | > |
| | | <el-row justify="space-between"> |
| | | <el-text |
| | | title="巡查人员" |
| | | size="small" |
| | | :type=" |
| | | selectedUsers.includes(item.userName) ? 'primary' : 'info' |
| | |
| | | <el-row justify="space-between"> |
| | | <!-- <el-space> --> |
| | | <el-text |
| | | title="巡查量" |
| | | size="small" |
| | | style="text-align: center; flex: 1" |
| | | :type=" |
| | |
| | | >{{ item.completeTaskNum }}</el-text |
| | | > |
| | | <el-text |
| | | title="即时整改率" |
| | | size="small" |
| | | style="text-align: center; flex: 1" |
| | | :type=" |
| | |
| | | }}</el-text |
| | | > |
| | | <el-text |
| | | title="平均耗时" |
| | | size="small" |
| | | style="text-align: center; flex: 1" |
| | | :type=" |
| | |
| | | |
| | | // 总任务统计 |
| | | const taskStatistic = computed(() => { |
| | | // const resMap = new Map() |
| | | const res = { |
| | | total: 0, |
| | | complete: 0, |
| | |
| | | top: 5px; |
| | | } |
| | | |
| | | ::v-deep .el-calendar-table .el-calendar-day { |
| | | :deep(.el-calendar-table .el-calendar-day) { |
| | | height: initial; |
| | | padding: initial; |
| | | } |
| | | |
| | | ::v-deep .el-calendar-table .el-calendar-day:hover { |
| | | :deep(.el-calendar-table .el-calendar-day:hover) { |
| | | background-color: transparent; |
| | | } |
| | | |
| | | /* ::v-deep .el-calendar-table td.is-selected { |
| | | /* :deep(.el-calendar-table td.is-selected) { |
| | | background-color: initial; |
| | | } */ |
| | | |
| | |
| | | cursor: not-allowed; |
| | | } |
| | | |
| | | /* ::v-deep .el-calendar-table tr td:first-child { |
| | | /* :deep(.el-calendar-table tr td:first-child) { |
| | | border-left: none !important; |
| | | } */ |
| | | |
| | | /* ::v-deep .el-calendar-table tr:first-child td { |
| | | /* :deep(.el-calendar-table tr:first-child td) { |
| | | border-top: none; |
| | | } */ |
| | | |
| | | /* ::v-deep .el-calendar-table td { |
| | | /* :deep(.el-calendar-table td) { |
| | | border-bottom: none; |
| | | border-right: none; |
| | | vertical-align: top; |
| | |
| | | transition: background-color 0.2s ease; |
| | | } */ |
| | | |
| | | ::v-deep .el-calendar-table thead th { |
| | | :deep(.el-calendar-table thead th) { |
| | | padding: 12px 0; |
| | | color: #606266; |
| | | font-weight: normal; |
| | |
| | | <template> |
| | | <el-row justify="space-between"> |
| | | <el-text>{{dateStr}}计划</el-text> |
| | | <el-text>{{ dateStr }}计划</el-text> |
| | | <div v-show="create && data && data.length > 0"> |
| | | <el-button |
| | | icon="IconPrinter" |
| | |
| | | <el-button type="success" size="small" @click="add" icon="Switch" |
| | | >任务调整</el-button |
| | | > |
| | | <el-button type="primary" size="small" @click="openMap"> |
| | | 进入地图<el-icon class="el-icon--right"><Right /></el-icon> |
| | | </el-button> |
| | | </div> |
| | | </el-row> |
| | | <el-divider /> |
| | |
| | | > |
| | | <ItemSubTask v-for="s in data" :key="s.guid" :item="s"> |
| | | <template #default="{ item }"> |
| | | <el-space direction="vertical"> |
| | | <el-space direction="horizontal"> |
| | | <el-button |
| | | :disabled="item.status != '未执行'" |
| | | plain |
| | |
| | | size="small" |
| | | icon="EditPen" |
| | | @click="edit(item)" |
| | | >修改</el-button |
| | | > |
| | | title="修改" |
| | | ></el-button> |
| | | <el-button |
| | | :disabled="item.status != '未执行'" |
| | | type="danger" |
| | | size="small" |
| | | icon="Delete" |
| | | @click="remove(item)" |
| | | >移除</el-button |
| | | > |
| | | title="移除" |
| | | ></el-button> |
| | | </el-space> |
| | | </template> |
| | | </ItemSubTask> |
| | |
| | | const downloadDialog = ref(false); |
| | | const downloadSceneList = ref([]); |
| | | |
| | | const emit = defineEmits(['submit', 'add', 'remove', 'update:modelValue']); |
| | | const emit = defineEmits(['submit', 'add', 'openMap', 'remove', 'update:modelValue']); |
| | | |
| | | const dateStr = computed(()=> dayjs(props.date).format('MM月DD日')) |
| | | const dateStr = computed(() => dayjs(props.date).format('MM月DD日')); |
| | | |
| | | function remove(item) { |
| | | if (item.status == '未执行') { |
| | |
| | | emit('add'); |
| | | } |
| | | |
| | | /** |
| | | * 打开场景地图 |
| | | */ |
| | | function openMap() { |
| | | emit('openMap'); |
| | | } |
| | | |
| | | |
| | | |
| | | onUnmounted(() => { |
| | | dialogVisible.value = false; |
| | | }); |
| | |
| | | collapse-tags |
| | | placeholder="选择执行人" |
| | | :max-collapse-tags="1" |
| | | style="width: 240px" |
| | | style="width: 150px" |
| | | > |
| | | <template #header> |
| | | <el-checkbox |
| | |
| | | </FYForm> |
| | | </el-row> |
| | | <div> |
| | | <el-scrollbar :height="scrollHeight" v-if="data.length > 0"> |
| | | <el-space wrap> |
| | | <ItemMonitorObj v-for="obj in data" :key="obj.movid" :item="obj"> |
| | | <el-scrollbar :height="height" v-if="modelValue.length > 0"> |
| | | <el-space wrap :direction="direction"> |
| | | <ItemMonitorObj |
| | | v-for="obj in modelValue" |
| | | :key="obj.movid" |
| | | :item="obj" |
| | | > |
| | | <template #default="{ item }"> |
| | | <el-button |
| | | size="small" |
| | |
| | | |
| | | const props = defineProps({ |
| | | // 子任务集合 |
| | | data: { |
| | | modelValue: { |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | height: String, |
| | | height: { |
| | | type: String, |
| | | default: '14vh' |
| | | }, |
| | | direction: { |
| | | type: String, |
| | | default: 'horizontal' |
| | | }, |
| | | // 日任务 |
| | | dayTask: Object |
| | | }); |
| | | |
| | | const emit = defineEmits(['submit', 'delete']); |
| | | const emit = defineEmits(['submit', 'delete', 'update:modelValue']); |
| | | |
| | | const scrollHeight = ref('14vh'); |
| | | const data = computed(() => props.modelValue); |
| | | |
| | | // 移除任务场景 |
| | | function deleteScene(item) { |
| | | item.select = false; |
| | | const index = data.value.indexOf(item); |
| | | if (index > -1) { |
| | | data.value.splice(index, 1); |
| | | emit('update:modelValue', data.value); |
| | | } |
| | | emit('delete', item); |
| | | } |
| | | |
| | |
| | | ] |
| | | }); |
| | | function submit(v, success, fail) { |
| | | if (props.data.length == 0) { |
| | | if (props.modelValue.length == 0) { |
| | | fail('未选择监管场景'); |
| | | } else if (v.value.executor.length == 0) { |
| | | fail('未选择执行人'); |
| | |
| | | success(); |
| | | // 将任务执行人格式化并传递 |
| | | const param = TaskProxy.getExecutors(v.value.executor, executors.value); |
| | | emit('submit', param); |
| | | TaskProxy.createSubtasks(props.dayTask, props.modelValue, param).then( |
| | | () => { |
| | | formInfo.value.executor = []; |
| | | emit('update:modelValue', []); |
| | | emit('submit'); |
| | | } |
| | | ); |
| | | } |
| | | } |
| | | |
| | |
| | | }); |
| | | |
| | | executors.value = list; |
| | | formInfo.value.executor = []; |
| | | } |
| | | // watch(topTask, (nV, oV) => { |
| | | // if (nV != oV) { |
| | |
| | | <template> |
| | | <div style="width: 68vw; height: 600px; background-color: aliceblue"> |
| | | <SceneMap :data="scenes"> |
| | | <div class="map-wrapper"> |
| | | <SceneMap |
| | | :model-value="seletedSceneList" |
| | | @update:model-value="onUpdateSeletedSceneList" |
| | | :data="scenes" |
| | | > |
| | | <template #left-top> |
| | | <FYOptionSupervisionStatus |
| | | label="" |
| | |
| | | ></FYOptionSupervisionStatus> |
| | | </template> |
| | | </SceneMap> |
| | | <el-row class="p-events-none top-right-wrap" align="middle"> |
| | | <el-button |
| | | class="close-btn-left p-events-auto" |
| | | type="success" |
| | | size="small" |
| | | :icon="rightCardShow ? 'ArrowRight' : 'ArrowLeft'" |
| | | @click="rightCardShow = !rightCardShow" |
| | | ></el-button> |
| | | <div class="right-wrapper"> |
| | | <div v-show="rightCardShow" class="p-events-auto subtask-select"> |
| | | <CompSubTaskSelect |
| | | :model-value="selectedPlans" |
| | | @update:model-value="onUpdateSelectedPlans" |
| | | height="82vh" |
| | | :dayTask="dayTask" |
| | | @submit="handleSubmitDone" |
| | | ></CompSubTaskSelect> |
| | | </div> |
| | | </div> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import { ref, computed } from 'vue'; |
| | | import { ref, computed, watch } from 'vue'; |
| | | |
| | | import CompSubTaskSelect from './CompSubTaskSelect.vue'; |
| | | |
| | | const props = defineProps({ |
| | | // 场景计划 |
| | |
| | | type: Array, |
| | | default: () => [] |
| | | }, |
| | | dayTasks: { |
| | | type: Array, |
| | | default: () => [] |
| | | dayTask: { |
| | | type: Object |
| | | } |
| | | }); |
| | | |
| | | const supervisionStatus = ref(); |
| | | const emits = defineEmits(['submit']); |
| | | |
| | | const supervisionStatus = ref(); |
| | | const rightCardShow = ref(true); |
| | | const seletedSceneList = ref([]); |
| | | const selectedPlans = ref([]); |
| | | |
| | | watch( |
| | | () => props.dayTask, |
| | | (newVal, oldVal) => { |
| | | if (newVal != oldVal) { |
| | | seletedSceneList.value = []; |
| | | selectedPlans.value = []; |
| | | } |
| | | } |
| | | ); |
| | | |
| | | // 监管计划包含的场景点位信息 |
| | | const scenes = computed(() => { |
| | | return props.plans |
| | | .filter((v) => { |
| | |
| | | return true; |
| | | } |
| | | } else { |
| | | return true |
| | | return true; |
| | | } |
| | | }) |
| | | .map((p) => { |
| | | return p.scene; |
| | | }); |
| | | }); |
| | | |
| | | // 监听地图选中场景事件 |
| | | function onUpdateSeletedSceneList(val) { |
| | | seletedSceneList.value = val; |
| | | selectedPlans.value = seletedSceneList.value.map((s) => { |
| | | return props.plans.find((p) => p.scene.guid == s.guid); |
| | | }); |
| | | } |
| | | |
| | | // 监听子任务移除事件 |
| | | function onUpdateSelectedPlans(val) { |
| | | selectedPlans.value = val; |
| | | seletedSceneList.value = selectedPlans.value.map((v) => v.scene); |
| | | } |
| | | |
| | | function handleSubmitDone(e) { |
| | | console.log(e); |
| | | emits('submit', e); |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .map-wrapper { |
| | | position: relative; |
| | | width: 100%; |
| | | height: 90vh; |
| | | } |
| | | |
| | | .right-wrapper { |
| | | background-color: rgba(255, 255, 255, 0.8); |
| | | box-shadow: var(--el-box-shadow); |
| | | border-radius: 4px; |
| | | height: 90vh; |
| | | } |
| | | |
| | | .subtask-select { |
| | | width: 330px; |
| | | padding-left: 4px; |
| | | padding-top: 8px; |
| | | } |
| | | |
| | | .close-btn-left { |
| | | margin-right: 0px; |
| | | height: 60px; |
| | | width: 20px; |
| | | } |
| | | |
| | | .top-right-wrap { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 1px; |
| | | } |
| | | </style> |