提交图片、其他数据、词云的功能-liyuchen

This commit is contained in:
李宇辰 2023-04-13 19:45:57 +08:00
commit 0c4867e91d
19 changed files with 1920 additions and 109 deletions

651
package-lock.json generated
View File

@ -289,6 +289,20 @@
"@intlify/shared": "9.2.2" "@intlify/shared": "9.2.2"
} }
}, },
"@mapbox/leaflet-omnivore": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@mapbox/leaflet-omnivore/-/leaflet-omnivore-0.3.4.tgz",
"integrity": "sha512-KHdJXk7EBBygCuErNkI981y51Fd80odYlBmWzsHPtmdzqmvV0D+allIi8uMiTzfW1K3aasOnOw4p6OV0rOs4TQ==",
"requires": {
"brfs": "1.4.3",
"corslite": "0.0.7",
"csv2geojson": "~5.0.0",
"polyline": "0.2.0",
"togeojson": "0.13.0",
"topojson": "1.6.26",
"wellknown": "0.4.2"
}
},
"@nodelib/fs.scandir": { "@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@ -336,6 +350,11 @@
"integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
"dev": true "dev": true
}, },
"@types/geojson": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz",
"integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w=="
},
"@types/lodash": { "@types/lodash": {
"version": "4.14.191", "version": "4.14.191",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
@ -512,6 +531,12 @@
"uri-js": "^4.2.2" "uri-js": "^4.2.2"
} }
}, },
"amdefine": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
"optional": true
},
"ansi-regex": { "ansi-regex": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -600,6 +625,27 @@
"fill-range": "^7.0.1" "fill-range": "^7.0.1"
} }
}, },
"brfs": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/brfs/-/brfs-1.4.3.tgz",
"integrity": "sha512-fHHsBNkim3FJNT4j5GsfcCEEq5nZAZxKQl2L1haCkh41Q3+Ib0aX23PTCjWOGis/Ywx6IQ/OY/xj31z/k3j4qw==",
"requires": {
"quote-stream": "^1.0.1",
"resolve": "^1.1.5",
"static-module": "^1.1.0",
"through2": "^2.0.0"
}
},
"buffer-equal": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
"integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA=="
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
},
"call-bind": { "call-bind": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
@ -691,6 +737,27 @@
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true "dev": true
}, },
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^2.2.2",
"typedarray": "^0.0.6"
}
},
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"corslite": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/corslite/-/corslite-0.0.7.tgz",
"integrity": "sha512-XJwov1fnFuhJBiBlAdu0eV8dVjif4TAbCPX3CzaG5dyfNvb/3GlyRk0t6yj31wiZOGqMReOTSVOgygaynSn0bg=="
},
"cross-spawn": { "cross-spawn": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@ -713,6 +780,78 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
}, },
"csv2geojson": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/csv2geojson/-/csv2geojson-5.0.2.tgz",
"integrity": "sha512-hcO+NVF6CO0ZtjwEJ4D7c/dVdiaEqqWZOpQvmNY7PS5LzQbpSKghQ9TuQTgzPCqlzcmrpfzPsA9rVENb5LRNAw==",
"requires": {
"concat-stream": "~1.5.1",
"d3-dsv": "1.0.1",
"optimist": "~0.6.1",
"sexagesimal": "0.5.0"
},
"dependencies": {
"concat-stream": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
"integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~2.0.0",
"typedarray": "~0.0.5"
}
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw=="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~0.10.x",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
}
}
},
"d3": {
"version": "3.5.17",
"resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz",
"integrity": "sha512-yFk/2idb8OHPKkbAL8QaOaqENNoMhIaSHZerk3oQsECwkObkCpJyjYwCe+OHiq6UEdhe1m8ZGARRRO3ljFjlKg=="
},
"d3-dsv": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.1.tgz",
"integrity": "sha512-VjRi8bmInbdZsnNr5inlWEEd7GutNcQUb+gXgr4LUyt+8lZjAxU2PBPMNMBBLHCPwosiFcmdwBfnWFpN4/khsQ==",
"requires": {
"rw": "1"
}
},
"d3-geo-projection": {
"version": "0.2.16",
"resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-0.2.16.tgz",
"integrity": "sha512-NB4/NRMnfJnpodvRbNY/nOzuoU17P229ASYf2l1GwjZyfD7l5aIuMylDMbIBF4y42BGZZvGdUwFW8iFM/5UBzg==",
"requires": {
"brfs": "^1.3.0"
}
},
"d3-queue": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-2.0.3.tgz",
"integrity": "sha512-ejbdHqZYEmk9ns/ljSbEcD6VRiuNwAkZMdFf6rsUb3vHROK5iMFd8xewDQnUVr6m/ba2BG63KmR/LySfsluxbg=="
},
"dayjs": { "dayjs": {
"version": "1.11.7", "version": "1.11.7",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
@ -752,6 +891,37 @@
"esutils": "^2.0.2" "esutils": "^2.0.2"
} }
}, },
"duplexer2": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==",
"requires": {
"readable-stream": "~1.1.9"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
}
}
},
"echarts": { "echarts": {
"version": "5.4.2", "version": "5.4.2",
"resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz", "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.2.tgz",
@ -824,6 +994,38 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true "dev": true
}, },
"escodegen": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz",
"integrity": "sha512-z9FWgKc48wjMlpzF5ymKS1AF8OIgnKLp9VyN7KbdtyrP/9lndwUFqCtMm+TAJmJf7KJFFYc4cFJfVTTGkKEwsA==",
"requires": {
"esprima": "~1.1.1",
"estraverse": "~1.5.0",
"esutils": "~1.0.0",
"source-map": "~0.1.33"
},
"dependencies": {
"estraverse": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
"integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ=="
},
"esutils": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
"integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg=="
},
"source-map": {
"version": "0.1.43",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
"integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==",
"optional": true,
"requires": {
"amdefine": ">=0.0.4"
}
}
}
},
"eslint": { "eslint": {
"version": "8.36.0", "version": "8.36.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz",
@ -914,6 +1116,11 @@
"eslint-visitor-keys": "^3.3.0" "eslint-visitor-keys": "^3.3.0"
} }
}, },
"esprima": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz",
"integrity": "sha512-qxxB994/7NtERxgXdFgLHIs9M6bhLXc6qtUmWZ3L8+gTQ9qaoyki2887P2IqAYsoENyr8SUbTutStDniOHSDHg=="
},
"esquery": { "esquery": {
"version": "1.5.0", "version": "1.5.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
@ -949,6 +1156,27 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true "dev": true
}, },
"falafel": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.5.tgz",
"integrity": "sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==",
"requires": {
"acorn": "^7.1.1",
"isarray": "^2.0.1"
},
"dependencies": {
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
}
}
},
"fast-deep-equal": { "fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@ -1144,6 +1372,11 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
}, },
"iconv-lite": {
"version": "0.2.11",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
"integrity": "sha512-KhmFWgaQZY83Cbhi+ADInoUQ8Etn6BG5fikM9syeOjQltvR45h7cRKJ/9uvQEuD61I3Uju77yYce0/LhKVClQw=="
},
"ignore": { "ignore": {
"version": "5.2.4", "version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@ -1185,8 +1418,7 @@
"inherits": { "inherits": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"dev": true
}, },
"is-binary-path": { "is-binary-path": {
"version": "2.1.0", "version": "2.1.0",
@ -1201,7 +1433,6 @@
"version": "2.11.0", "version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
"integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"requires": { "requires": {
"has": "^1.0.3" "has": "^1.0.3"
} }
@ -1242,6 +1473,11 @@
"@types/estree": "*" "@types/estree": "*"
} }
}, },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"isexe": { "isexe": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@ -1300,6 +1536,19 @@
"resolved": "https://registry.npmmirror.com/leaflet/-/leaflet-1.9.3.tgz", "resolved": "https://registry.npmmirror.com/leaflet/-/leaflet-1.9.3.tgz",
"integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ==" "integrity": "sha512-iB2cR9vAkDOu5l3HAay2obcUHZ7xwUBBjph8+PGtmW/2lYhbLizWtG7nTeYht36WfOslixQF9D/uSIzhZgGMfQ=="
}, },
"leaflet-draw": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/leaflet-draw/-/leaflet-draw-1.0.4.tgz",
"integrity": "sha512-rsQ6saQO5ST5Aj6XRFylr5zvarWgzWnrg46zQ1MEOEIHsppdC/8hnN8qMoFvACsPvTioAuysya/TVtog15tyAQ=="
},
"leaflet-imageoverlay-rotated": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/leaflet-imageoverlay-rotated/-/leaflet-imageoverlay-rotated-0.2.1.tgz",
"integrity": "sha512-8MsrIuW/aXI0EjDXgJSJJ67nqVNQJsP/glmND9g6yc6t+zQgdPUbTRHC65jSs/IBwzwyhggnDgDuydalcEX+ew==",
"requires": {
"leaflet": "^1.0.0"
}
},
"levn": { "levn": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -1384,6 +1633,11 @@
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
} }
}, },
"minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
},
"mitt": { "mitt": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz",
@ -1436,6 +1690,11 @@
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
}, },
"object-keys": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
"integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw=="
},
"once": { "once": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@ -1445,6 +1704,22 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"optimist": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
"integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==",
"requires": {
"minimist": "~0.0.1",
"wordwrap": "~0.0.2"
},
"dependencies": {
"minimist": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
"integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw=="
}
}
},
"optionator": { "optionator": {
"version": "0.9.1", "version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@ -1507,8 +1782,7 @@
"path-parse": { "path-parse": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
"dev": true
}, },
"picocolors": { "picocolors": {
"version": "1.0.0", "version": "1.0.0",
@ -1530,6 +1804,11 @@
"vue-demi": "*" "vue-demi": "*"
} }
}, },
"polyline": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/polyline/-/polyline-0.2.0.tgz",
"integrity": "sha512-rCJSkIHWZ/HOUoEWgjZ1DrRjLpTeTjgaktyJV0yhm8PugM5sKoavNjUHtI/amjsTn/Tq+Q3IIAuBD/dUSsWwxQ=="
},
"postcss": { "postcss": {
"version": "8.4.21", "version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
@ -1562,6 +1841,11 @@
"integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
"dev": true "dev": true
}, },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-from-env": { "proxy-from-env": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@ -1592,6 +1876,30 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true "dev": true
}, },
"quote-stream": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
"integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==",
"requires": {
"buffer-equal": "0.0.1",
"minimist": "^1.1.3",
"through2": "^2.0.0"
}
},
"readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"readdirp": { "readdirp": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@ -1605,7 +1913,6 @@
"version": "1.22.1", "version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dev": true,
"requires": { "requires": {
"is-core-module": "^2.9.0", "is-core-module": "^2.9.0",
"path-parse": "^1.0.7", "path-parse": "^1.0.7",
@ -1651,6 +1958,16 @@
"queue-microtask": "^1.2.2" "queue-microtask": "^1.2.2"
} }
}, },
"rw": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"sass": { "sass": {
"version": "1.60.0", "version": "1.60.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.60.0.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.60.0.tgz",
@ -1681,6 +1998,41 @@
"lru-cache": "^6.0.0" "lru-cache": "^6.0.0"
} }
}, },
"sexagesimal": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/sexagesimal/-/sexagesimal-0.5.0.tgz",
"integrity": "sha512-xwbZEEGr5SQxON2PskNQQmPjrir+rnkaAoZqeHEDQ29fElSgpOh2rA5tBmZZd07NyBgUpU5/budc6wWm2Wjy+w=="
},
"shallow-copy": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
"integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw=="
},
"shapefile": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/shapefile/-/shapefile-0.3.1.tgz",
"integrity": "sha512-BZoPvnq4ULce0pyKiZUU4D8CdPl0Z1fpE73AeCkwyMbD2hpUeVA0s7jIE/wX8uWNruVeJV6e+rznPHBwuH5J6g==",
"requires": {
"d3-queue": "1",
"iconv-lite": "0.2",
"optimist": "0.3"
},
"dependencies": {
"d3-queue": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-1.2.3.tgz",
"integrity": "sha512-m6KtxX4V5pmVf1PqhH4SkQVMshSJfyCLM2vf2oFPi9FWFVT3+rtbCGerk766b/JXymHQDU3oqXHaZoiQ/e8yUQ=="
},
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
"requires": {
"wordwrap": "~0.0.2"
}
}
}
},
"shebang-command": { "shebang-command": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@ -1726,6 +2078,121 @@
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
}, },
"static-eval": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/static-eval/-/static-eval-0.2.4.tgz",
"integrity": "sha512-6dWWPfa/0+1zULdQi7ssT5EQZHsGK8LygBzhE/HdafNCo4e/Ibt7vLPfxBw9VcdVV+t0ARtN4ZAJKtApVc0A5Q==",
"requires": {
"escodegen": "~0.0.24"
},
"dependencies": {
"escodegen": {
"version": "0.0.28",
"resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.28.tgz",
"integrity": "sha512-6ioQhg16lFs5c7XJlJFXIDxBjO4yRvXC9yK6dLNNGuhI3a/fJukHanPF6qtpjGDgAFzI8Wuq3PSIarWmaOq/5A==",
"requires": {
"esprima": "~1.0.2",
"estraverse": "~1.3.0",
"source-map": ">= 0.1.2"
}
},
"esprima": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
"integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA=="
},
"estraverse": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.3.2.tgz",
"integrity": "sha512-OkbCPVUu8D9tbsLcUR+CKFRBbhZlogmkbWaP3BPERlkqzWL5Q6IdTz6eUk+b5cid2MTaCqJb2nNRGoJ8TpfPrg=="
}
}
},
"static-module": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/static-module/-/static-module-1.5.0.tgz",
"integrity": "sha512-XTj7pQOHT33l77lK/Pu8UXqzI44C6LYAqwAc9hLTTESHRqJAFudBpReuopFPpoRr5CtOoSmGfFQC6FPlbDnyCw==",
"requires": {
"concat-stream": "~1.6.0",
"duplexer2": "~0.0.2",
"escodegen": "~1.3.2",
"falafel": "^2.1.0",
"has": "^1.0.0",
"object-inspect": "~0.4.0",
"quote-stream": "~0.0.0",
"readable-stream": "~1.0.27-1",
"shallow-copy": "~0.0.1",
"static-eval": "~0.2.0",
"through2": "~0.4.1"
},
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q=="
},
"object-inspect": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-0.4.0.tgz",
"integrity": "sha512-8WvkvUZiKAjjsy/63rJjA7jw9uyF0CLVLjBKEfnPHE3Jxvs1LgwqL2OmJN+LliIX1vrzKW+AAu02Cc+xv27ncQ=="
},
"quote-stream": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-0.0.0.tgz",
"integrity": "sha512-m4VtvjAMx00wgAS6eOy50ZDat1EBQeFKBIrtF/oxUt0MenEI33y7runJcRiOihc+JBBIt2aFFJhILIh4e9shJA==",
"requires": {
"minimist": "0.0.8",
"through2": "~0.4.1"
}
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
},
"through2": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
"integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==",
"requires": {
"readable-stream": "~1.0.17",
"xtend": "~2.1.1"
}
},
"xtend": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
"integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==",
"requires": {
"object-keys": "~0.4.0"
}
}
}
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"strip-ansi": { "strip-ansi": {
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@ -1753,8 +2220,24 @@
"supports-preserve-symlinks-flag": { "supports-preserve-symlinks-flag": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
"dev": true },
"terraformer": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.12.tgz",
"integrity": "sha512-MokUp0+MFal4CmJDVL6VAO1bKegeXcBM2RnPVfqcFIp2IIv8EbPAjG0j/vEy/vuKB8NVMMSF2vfpVS/QLe4DBg==",
"requires": {
"@types/geojson": "^7946.0.0 || ^1.0.0"
}
},
"terraformer-wkt-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.1.tgz",
"integrity": "sha512-+CJyNLWb3lJ9RsZMTM66BY0MT3yIo4l4l22Jd9CrZuwzk54fsu4Sc7zejuS9fCITTuTQy3p06d4MZMVI7v5wSg==",
"requires": {
"@types/geojson": "^1.0.0",
"terraformer": "~1.0.5"
}
}, },
"text-table": { "text-table": {
"version": "0.2.0", "version": "0.2.0",
@ -1762,6 +2245,15 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true "dev": true
}, },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"requires": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
}
},
"tiny-emitter": { "tiny-emitter": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
@ -1776,6 +2268,77 @@
"is-number": "^7.0.0" "is-number": "^7.0.0"
} }
}, },
"togeojson": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/togeojson/-/togeojson-0.13.0.tgz",
"integrity": "sha512-d8qA5mSUpnqYBQDuq0Lhgl1rMUOWwrHh50Qy00qkk3SuwjYnaxZR2h8pXMOrMGa6d/7m1YmStOI4CMRa14K46A==",
"requires": {
"concat-stream": "~1.4.5",
"minimist": "0.0.8",
"xmldom": "~0.1.19"
},
"dependencies": {
"concat-stream": {
"version": "1.4.11",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.11.tgz",
"integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~1.1.9",
"typedarray": "~0.0.5"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"minimist": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q=="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
}
}
},
"topojson": {
"version": "1.6.26",
"resolved": "https://registry.npmjs.org/topojson/-/topojson-1.6.26.tgz",
"integrity": "sha512-W0B6UMeC9ZzH6OQ4vWG8tGb6ITis7/gDG0nNq13GL/ysy1LKU07HM0GtjQMrecQ/Q8S5EP7sjpjBjoKiz6P3nQ==",
"requires": {
"d3": "3",
"d3-geo-projection": "0.2",
"d3-queue": "2",
"optimist": "0.3",
"rw": "1",
"shapefile": "0.3"
},
"dependencies": {
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
"requires": {
"wordwrap": "~0.0.2"
}
}
}
},
"tslib": { "tslib": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
@ -1796,6 +2359,11 @@
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true "dev": true
}, },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"universalify": { "universalify": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
@ -1814,8 +2382,7 @@
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"dev": true
}, },
"vite": { "vite": {
"version": "4.2.1", "version": "4.2.1",
@ -1937,6 +2504,55 @@
"@vue/devtools-api": "^6.4.5" "@vue/devtools-api": "^6.4.5"
} }
}, },
"wellknown": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/wellknown/-/wellknown-0.4.2.tgz",
"integrity": "sha512-ivKT+rEy/GKU3q4Yi0dT/OnkMPXmUJF0SoPwthcCh2cr4PFeEeFjIENV3kB2WF7KgLakl2J0kbkcEMDl3WXSUA==",
"requires": {
"concat-stream": "~1.5.0",
"minimist": "~1.1.2"
},
"dependencies": {
"concat-stream": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
"integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~2.0.0",
"typedarray": "~0.0.5"
}
},
"minimist": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz",
"integrity": "sha512-2RbeLaM/Hbo9vJ1+iRrxzfDnX9108qb2m923U+s+Ot2eMey0IYGdSjzHmvtg2XsxoCuMnzOMw7qc573RvnLgwg=="
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw=="
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "~1.0.0",
"process-nextick-args": "~1.0.6",
"string_decoder": "~0.10.x",
"util-deprecate": "~1.0.1"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
}
}
},
"which": { "which": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@ -1952,6 +2568,11 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true "dev": true
}, },
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw=="
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -1964,6 +2585,16 @@
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
"dev": true "dev": true
}, },
"xmldom": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
"integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
},
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
},
"yallist": { "yallist": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",

View File

@ -11,12 +11,15 @@
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.1.0",
"@mapbox/leaflet-omnivore": "^0.3.4",
"axios": "^1.3.4", "axios": "^1.3.4",
"echarts": "^5.4.2", "echarts": "^5.4.2",
"leaflet": "^1.9.3",
"element-plus": "^2.3.1", "element-plus": "^2.3.1",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
"js-md5": "^0.7.3", "js-md5": "^0.7.3",
"leaflet": "^1.9.3",
"leaflet-draw": "^1.0.4",
"leaflet-imageoverlay-rotated": "^0.2.1",
"mitt": "^3.0.0", "mitt": "^3.0.0",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.0.33", "pinia": "^2.0.33",
@ -24,6 +27,7 @@
"qs": "^6.11.1", "qs": "^6.11.1",
"screenfull": "^6.0.2", "screenfull": "^6.0.2",
"sortablejs": "^1.15.0", "sortablejs": "^1.15.0",
"terraformer-wkt-parser": "^1.2.1",
"vue": "^3.2.47", "vue": "^3.2.47",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-demi": "^0.13.11", "vue-demi": "^0.13.11",

39
src/api/contact/index.js Normal file
View File

@ -0,0 +1,39 @@
import request from '/@/utils/request';
import {moduleName} from '/@/utils/request';
export const getList = (current, size, param) => {
return request({
url: '/api/'+moduleName+'/ui/contact/list',
method: 'get',
params: {
current,
size,
param,
},
});
}
export const submit = (row) => {
return request({
url: '/api/'+moduleName+'/ui/contact/submit',
method: 'post',
data: row
})
}
export const remove = (ids) => {
return request({
url: '/api/'+moduleName+'/ui/contact/remove',
method: 'post',
data: {
ids,
}
})
}
export const detail = (id) => {
return request({
url: '/api/'+moduleName+'/ui/contact/data',
method: 'get',
params: {
id
}
})
}

View File

@ -9,10 +9,10 @@ export function getList(params) {
}); });
} }
//review //review
export function review(id) { export function review(data) {
return request({ return request({
url: '/api/'+moduleName+'/ui/disasterInfo/review', url: '/api/'+moduleName+'/ui/disasterInfo/review',
method: 'post', method: 'post',
params: { id }, data: data,
}); });
} }

39
src/api/tool/index.js Normal file
View File

@ -0,0 +1,39 @@
import request from '/@/utils/request';
import {moduleName} from '/@/utils/request';
export const getList = (current, size, param) => {
return request({
url: '/api/'+moduleName+'/ui/tool/list',
method: 'get',
params: {
current,
size,
param,
},
});
}
export const submit = (row) => {
return request({
url: '/api/'+moduleName+'/ui/tool/submit',
method: 'post',
data: row
})
}
export const remove = (ids) => {
return request({
url: '/api/'+moduleName+'/ui/tool/remove',
method: 'post',
data: {
ids,
}
})
}
export const detail = (id) => {
return request({
url: '/api/'+moduleName+'/ui/tool/data',
method: 'get',
params: {
id
}
})
}

View File

@ -1,16 +1,28 @@
<template> <template>
<div ref="map" class="container"></div> <div ref="map"
class="container"></div>
</template> </template>
<script setup> <script setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue'
import L from "leaflet"; import WKT from 'terraformer-wkt-parser'
import "leaflet/dist/leaflet.css";
import L from 'leaflet'
import 'leaflet/dist/leaflet.css'
import 'leaflet-draw/dist/leaflet.draw'
import 'leaflet-draw/dist/leaflet.draw.css'
import 'Leaflet-ImageOverlay-Rotated'
import { useVariableStore } from '/@/stores/index.ts'
import * as omnivore from '@mapbox/leaflet-omnivore'
const variableStore = useVariableStore()
const map = ref() const map = ref()
let homeMap = null
let text = null
let featureLayerG_area = null
let featureLayerG_point = null
onMounted(() => { onMounted(() => {
const homeMap = L.map(map.value, { homeMap = L.map(map.value, {
preferCanvas: true, preferCanvas: true,
crs: L.CRS.EPSG4326, crs: L.CRS.EPSG4326,
center: [29.563761, 106.550464], center: [29.563761, 106.550464],
@ -18,12 +30,393 @@ onMounted(() => {
minZoom: 1, minZoom: 1,
maxZoom: 18, maxZoom: 18,
attributionControl: false, // leaflet attributionControl: false, // leaflet
zoomControl: false zoomControl: false,
}); })
const IMG_C = "http://t0.tianditu.com/img_c/wmts?layer=img&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk="; const IMG_C =
'http://t0.tianditu.com/img_c/wmts?layer=img&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk='
// const CIA_C = "http://t0.tianditu.com/cia_c/wmts?layer=cia&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk="; // const CIA_C = "http://t0.tianditu.com/cia_c/wmts?layer=cia&style=default&tilematrixset=c&Service=WMTS&Request=GetTile&Version=1.0.0&Format=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}&tk=";
const TK_KEY = "dc8182ebeca998e22154d404aa3c0c17"; const TK_KEY = 'dc8182ebeca998e22154d404aa3c0c17'
L.tileLayer(IMG_C + TK_KEY, { maxZoom: 20, tileSize: 256, zoomOffset: 1 }).addTo(homeMap); L.tileLayer(IMG_C + TK_KEY, {
maxZoom: 20,
tileSize: 256,
zoomOffset: 1,
}).addTo(homeMap)
text = new L.Draw.Polygon(homeMap)
L.drawLocal = {
draw: {
handlers: {
circle: {
tooltip: {
start: '单击并拖动可绘制圆',
},
radius: '半径',
},
circlemarker: {
tooltip: {
start: '点击地图放置圆形标记',
},
},
marker: {
tooltip: {
start: '点击地图放置标记Esc取消',
},
},
polygon: {
tooltip: {
start: '点击开始绘制Esc取消',
cont: '单击以继续绘制Esc取消',
end: '单击第一个点完成绘制Esc取消',
},
},
polyline: {
error: '<strong>异常:</strong> 形状边缘不能交叉!',
tooltip: {
start: '点击开始绘制Esc取消',
cont: '单击以继续绘制Esc取消',
end: '双击完成绘制Esc取消',
},
},
rectangle: {
tooltip: {
start: '单击并拖动以绘制矩形',
end: '完成',
},
},
simpleshape: {
tooltip: {
end: '释放鼠标完成绘图',
},
},
},
},
edit: {
toolbar: {
actions: {
save: {
title: '保存改动',
text: '保存',
},
cancel: {
title: '取消编辑,丢弃所有更改',
text: '取消',
},
clearAll: {
title: '清除所有标记',
text: '清除所有',
},
},
buttons: {
edit: '编辑图层',
editDisabled: '不需要编辑图层',
remove: '删除图层',
removeDisabled: '没有要删除的图层',
},
},
handlers: {
edit: {
tooltip: {
text: '拖动节点或标记来编辑图形',
subtext: '单击“取消”撤消更改',
},
},
remove: {
tooltip: {
text: '单击某个标记进行删除',
},
},
},
},
}
featureLayerG_area = L.layerGroup().addTo(homeMap)
featureLayerG_point = L.layerGroup().addTo(homeMap)
}) })
/** WKT
* Object param 参数集合
* @param {
* res
* popup string 弹框内容
* }
*/
const mapOperations = {
wktParseToMap: (res) => {
return omnivore.wkt.parse(res).addTo(homeMap)
},
/**
* Object param 参数集合
* @param {
* x int 经度
* y int 经度
* iconUrl string 图片路径
* }
*/
addMarker: (param) => {
var markerInfo = L.marker(
new L.latLng(Number(param.y), Number(param.x)),
{
icon: new L.icon({
iconUrl:
param.iconUrl == null
? '../src/assets/map/eq.png'
: param.iconUrl,
}),
}
)
markerInfo.addTo(homeMap)
return markerInfo
},
addInteractMarker: (lat, lon) => {
featureLayerG_point.clearLayers()
variableStore.layerGroupPoint = null
var marker = L.marker([lat, lon], { draggable: true }).addTo(
featureLayerG_point
)
let features = featureLayerG_point.toGeoJSON().features
// console.log(features)
variableStore.layerGroupPoint = features.map(function (feature) {
return WKT.convert(feature.geometry)
})
variableStore.layerGroupPoint = variableStore.layerGroupPoint.join('\n')
console.log(variableStore.layerGroupPoint)
// marker.on('click',function(){
// featureLayerG_point.removeLayer(marker)
// })
},
/**
* Object param 参数集合
* @param {
* points 点数组 [[x, y],[x, y]...];
* color string 多边形颜色合法的CSS颜色值
* }
*/
addPolygon: (param) => {
const polygonInfo = L.polygon(param.points, { color: param.color })
polygonInfo.addTo(homeMap)
return polygonInfo
},
/**
* Object param 参数集合
* @param {
* bounds 地理边界 [[x, y],[x, y]];
* color string 矩形颜色合法的CSS颜色值
* }
*/
addRectangle: (param) => {
const rectangleInfo = L.rectangle(param.bounds, {
color: param.color,
weight: 1,
})
rectangleInfo.addTo(homeMap)
return rectangleInfo
},
/**
* Object param 参数集合
* @param {
* point [x,y] 中心点坐标
* radius int 范围半径
* }
*/
addCircle: (param) => {
const circleInfo = L.circle(param.point, { radius: param.radius })
circleInfo.addTo(homeMap)
return circleInfo
},
/**
* Object param 参数集合
* @param {
* imageUrl string 图片链接
* imageBounds 点数组 [[x, y],[x, y]...];
* }
*/
addImageLayer: (param) => {
const imageInfo = L.imageOverlay(param.imageUrl, param.imageBounds)
imageInfo.addTo(homeMap)
return imageInfo
},
/**
* Object param 参数集合
* @param {
* imageUrl string 图片链接
* topleft L.latLng(40.52256691873593, -3.7743186950683594);
* topright L.latLng(40.52256691873593, -3.7743186950683594);
* bottom L.latLng(40.52256691873593, -3.7743186950683594);
* }
*/
addImageRotated: (imageUrl, topleft, topright, bottomleft) => {
const imageInfo = L.imageOverlay.rotated(
imageUrl,
topleft,
topright,
bottomleft
)
imageInfo.addTo(homeMap)
return imageInfo
},
/**
* Object param 参数集合
* @param {
* position 点数组 [lat,lon];
* zoom Int 6;
* }
*/
flyTo: (position, zoom) => {
return homeMap.flyTo(L.latLng(position), zoom)
// imageInfo.addTo(homeMap);
// return imageInfo;
},
/** wms
* Object param 参数集合
* @param {
* wmsUrl link wms链接;
* layers string 图层名称;
* format 'image/png';
* transparent true;
* zIndex int 2
* }
*/
addWMSLayer: (wmsUrl, param) => {
const layerInfo = L.tileLayer.wms(wmsUrl, param)
layerInfo.addTo(homeMap);
return layerInfo;
},
/**
* Object layerInfo 图层对象
*/
removeLayer: (layerInfo) => {
homeMap.removeLayer(layerInfo)
},
/**
* Object param 参数集合
* @param {
* x int 经度
* y int 经度
* zoom int 地图的比例尺级别范围为1-18之间的整数
* popup
* }
*/
goPosition: (param) => {
homeMap.setView(L.latLng(Number(param.y), Number(param.x)), param.zoom)
// console.log(homeMap);
},
/**
* Object param 参数集合
* @param {
* event 事件
* function 回调函数
* }
*/
on: (event, func) => {
// console.log("1-1")
homeMap.on(event, func)
},
/**
* Object param 参数集合
* @param {
* event 事件
* function 回调函数
* }
*/
off: (event, func) => {
// console.log('2-1')
homeMap.off(event, func)
},
/**
* Object param 参数集合
* @param {
*
*
* }
*/
removeAll: () => {
// homeMap.eachLayer(function(layer){
// if(layer instanceof L.TileLayer)return;
// homeMap.removeLayer(layer)
// })
featureLayerG_area.clearLayers()
featureLayerG_point.clearLayers()
variableStore.layerGroupPoint = null
variableStore.layerGroupPoly = null
if (variableStore.polygoncontrol == 'option2') {
text = new L.Draw.Polygon(homeMap)
text.enable()
}
},
/**
* 清楚wkt添加的所有
*/
removeWktAll: () => {
homeMap.eachLayer(function (layer) {
if (layer instanceof L.TileLayer) return;
homeMap.removeLayer(layer)
})
},
/** |
* Object param 参数集合
* @param {
*
*
* }
*/
drawPolygon: () => {
// console.log('2-2')
variableStore.layerGroupPoint = null
featureLayerG_point.clearLayers()
// featureLayerG_area.clearLayers()
// variableStore.layerGroupPoly=null;
text = new L.Draw.Polygon(homeMap)
text.enable()
},
clearPolygon: () => {
// console.log('1-2')
text.disable()
featureLayerG_area.clearLayers()
variableStore.layerGroupPoly = null
// variableStore.layerGroupPoint=null
// featureLayerG_point.clearLayers()
},
drawCreated: () => {
// console.log("2-3")
homeMap.on('draw:created', function (elll) {
featureLayerG_area.clearLayers()
variableStore.layerGroupPoly = null
elll.layer.setStyle({
color: '#FF0080',
opacity: 1,
})
featureLayerG_area.addLayer(elll.layer)
let features = featureLayerG_area.toGeoJSON().features
// console.log(features)
variableStore.layerGroupPoly = features.map(function (feature) {
return WKT.convert(feature.geometry)
})
variableStore.layerGroupPoly =
variableStore.layerGroupPoly.join('\n')
console.log(variableStore.layerGroupPoly)
text.enable()
})
},
drawDestroyed: () => {
homeMap.off('draw:created', function (elll) {
elll.layer.setStyle({
color: '#FF0080',
opacity: 1,
})
featureLayerG_area.addLayer(elll.layer)
let features = featureLayerG_area.toGeoJSON().features
// console.log(features)
variableStore.layerGroupPoly = features.map(function (feature) {
return WKT.convert(feature.geometry)
})
variableStore.layerGroupPoly =
variableStore.layerGroupPoly.join('\n')
console.log(variableStore.layerGroupPoly)
text = new L.Draw.Polygon(homeMap)
text.enable()
})
},
}
//omnivore.wkt.parse('POINT(-80 0)').addTo(homeMap);
defineExpose({
mapOperations,
})
</script> </script>

View File

@ -49,19 +49,21 @@
</template> </template>
</el-popover> </el-popover>
</div> </div>
<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange"> <el-dropdown :show-timeout="70"
:hide-timeout="50"
trigger="click"
@command="onLanguageChange">
<div class="layout-navbars-breadcrumb-user-icon"> <div class="layout-navbars-breadcrumb-user-icon">
<i <i class="iconfont"
class="iconfont" :class="state.disabledI18n === 'en' ? 'icon-fuhao-zhongwen' : 'icon-fuhao-yingwen'"></i>
:class="state.disabledI18n === 'en' ? 'icon-fuhao-zhongwen' : 'icon-fuhao-yingwen'"
></i>
</div> </div>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item command="zh-cn" :disabled="state.disabledI18n === 'zh-cn'">English</el-dropdown-item> <el-dropdown-item command="zh-cn"
<el-dropdown-item command="en" :disabled="state.disabledI18n === 'en'">简体中文</el-dropdown-item> :disabled="state.disabledI18n === 'zh-cn'">English</el-dropdown-item>
<!-- <el-dropdown-item command="zh-tw" :disabled="state.disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item> --> <el-dropdown-item command="en"
:disabled="state.disabledI18n === 'en'">简体中文</el-dropdown-item>
<!-- <el-dropdown-item command="zh-cn" :disabled="state.disabledI18n === 'zh-cn'">简体中文</el-dropdown-item> -->
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
@ -115,15 +117,15 @@ import other from '/@/utils/other';
// //
const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/userNews.vue')); const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/userNews.vue'));
const Search = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/search.vue')); const Search = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/search.vue'));
const useTranslateStore=useTranslate() const useTranslateStore = useTranslate()
const onLanguageChange = (lang) => { const onLanguageChange = (lang) => {
if(lang=="en"){ if (lang == "en") {
state.disabledI18n="en" state.disabledI18n = "en"
useTranslateStore.translate_control=0 useTranslateStore.translate_control = 0
} }
else{ else {
state.disabledI18n="zh-cn" state.disabledI18n = "zh-cn"
useTranslateStore.translate_control=1 useTranslateStore.translate_control = 1
} }
}; };
// //
@ -138,7 +140,7 @@ const state = reactive({
isScreenfull: false, isScreenfull: false,
disabledSize: 'large', disabledSize: 'large',
setIntervalId: null, setIntervalId: null,
disabledI18n:"en", disabledI18n: "en",
}); });
// //

View File

@ -93,6 +93,38 @@ export const dynamicRoutes = [
zh: '数据上传管理', zh: '数据上传管理',
}, },
}, },
{
path: '/responseManagement/tool',
name: 'tool-management',
component: () => import('/@/views/responseManagement/tool/index.vue'),
meta: {
title: 'Tool Management',
isLink: '',
isHide: false,
isKeepAlive: true,
isAffix: false,
isIframe: false,
roles: ['admin', 'chief'],
icon: 'iconfont icon-icon-',
zh: 'tool管理',
},
},
{
path: '/responseManagement/contact',
name: 'contact-management',
component: () => import('/@/views/responseManagement/contact/index.vue'),
meta: {
title: 'Contact Management',
isLink: '',
isHide: false,
isKeepAlive: true,
isAffix: false,
isIframe: false,
roles: ['admin', 'chief'],
icon: 'iconfont icon-icon-',
zh: 'tool管理',
},
},
], ],
}, },
{ {

80
src/stores/index.ts Normal file
View File

@ -0,0 +1,80 @@
import { defineStore } from "pinia";
import { Names } from "./store_name";
export const useVariableStore = defineStore(Names.TEST, {
state: () => {
return {
OtherdataTag:1,
RemotesensingTag: 1,
remoteSensingDataTable: [
{
ID: 1,
Satellite_type:"Sentinel-2_Sentinel-2A",
Production_date:"2023-02-10 12:10:25",
Product_resolution: "10",
Cloud_coverage:'15.5191',
Central_longitude_and_latitude:'(96.6408,122.1683)',
Thumbnail:"../assets/home/1.jpg",
Download_link:"../assets/detail/list_download_icon.png",
Data_source:"",
Data_upload_agency:""
},
{
ID: 2,
Satellite_type:"Sentinel-2_Sentinel-2B",
Production_date:"2023-02-10 12:10:23",
Product_resolution: "10",
Cloud_coverage:'15.5256',
Central_longitude_and_latitude:'(96.6408,122.1683)',
Thumbnail:"../assets/home/5.jpg",
Download_link:'../assets/detail/list_download_icon.png',
Data_source:"",
Data_upload_agency:""
},
{
ID: 3,
Satellite_type:"Landsat-8",
Production_date:"2023-02-10 12:01:34",
Product_resolution: "6",
Cloud_coverage:'13.5345',
Central_longitude_and_latitude:'(96.6408,122.1683)',
Thumbnail:"../assets/home/3.jpg",
Download_link:'../assets/detail/list_download_icon.png',
Data_source:"",
Data_upload_agency:""
}
// {
// ID: 1,
// Satellite_type:"Sentinel-2_Sentinel-2A",
// Production_date:"2023-02-10 12:10:25",
// Product_resolution(m):"10",
// Cloud_coverage(%):'15.5191',
// Central_longitude_and_latitude:'(96.6408,122.1683)',
// Thumbnail:"@/assets/home/1.jpg",
// Download_link:'',
// Data_source:"",
// Data_upload_agency:""
// }
],
layerGroupPoint:null,
layerGroupPoly:null,
polygoncontrol:null,
toolData:{
records:null,
total:null,
current:null,
size:null,
pages:null,
},
}
},
getters: {
},
actions: {
}
})

4
src/stores/store_name.ts Normal file
View File

@ -0,0 +1,4 @@
export const enum Names {
TEST = "TEST"
}

View File

@ -147,8 +147,8 @@ export const useThemeConfig = defineStore('themeConfig', {
globalViceTitle: 'vueNextAdmin', globalViceTitle: 'vueNextAdmin',
// 网站副标题(登录页顶部文字) // 网站副标题(登录页顶部文字)
globalViceTitleMsg: '专注、免费、开源、维护、解疑', globalViceTitleMsg: '专注、免费、开源、维护、解疑',
// 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 zh-cn // 默认初始语言,可选值"<zh-cn|en|zh-tw>",默认 en
globalI18n: 'zh-cn', globalI18n: 'en',
// 默认全局组件大小,可选值"<large|'default'|small>",默认 'large' // 默认全局组件大小,可选值"<large|'default'|small>",默认 'large'
globalComponentSize: 'large', globalComponentSize: 'large',
}, },

View File

@ -3,7 +3,8 @@ import { ElMessage, ElMessageBox } from 'element-plus';
import qs from 'qs'; import qs from 'qs';
import { Session } from '/@/utils/storage'; import { Session } from '/@/utils/storage';
export const moduleName = 'yyhouc-biz-vordm'; // export const moduleName = 'zqq-biz-vordm';
export const moduleName = 'biz-vordm';
// 配置新建一个 axios 实例 // 配置新建一个 axios 实例
const service = axios.create({ const service = axios.create({
@ -60,9 +61,9 @@ service.interceptors.response.use(
ElMessage.error('网络超时'); ElMessage.error('网络超时');
} else if (error.message == 'Network Error') { } else if (error.message == 'Network Error') {
ElMessage.error('网络连接错误'); ElMessage.error('网络连接错误');
} else if (error.response&&error.response.data.code == '500') { } else if (error.response && error.response.data.code == '500') {
ElMessage.error(error.response.data.msg); ElMessage.error(error.response.data.msg);
} else{ } else {
if (error.response.data.error_description) ElMessage.error(error.response.data.error_description); if (error.response.data.error_description) ElMessage.error(error.response.data.error_description);
else { else {
//if (error.response.data) ElMessage.error(error.response.statusText); //if (error.response.data) ElMessage.error(error.response.statusText);

View File

@ -136,7 +136,7 @@
<script setup> <script setup>
import { ref, reactive, onMounted } from 'vue'; import { ref, reactive, onMounted } from 'vue';
import { getRemoteSensingSourceData, getSelectionCondition } from "/@/api/remoteSensingSourceData/index.js"; import { getRemoteSensingSourceData, getSelectionCondition } from "/@/api/remoteSensingSourceData/remoteSensingSourceData.js";
const state = reactive({ const state = reactive({
tableData: { tableData: {
@ -215,8 +215,8 @@ const searchDisasterType = () => {
state.options_disasterType = [] state.options_disasterType = []
for (let index = 0; index < res.length; index++) { for (let index = 0; index < res.length; index++) {
let obj = {} let obj = {}
obj.value = res[index].name obj.value = res[index].dictValue
obj.label = res[index].name obj.label = res[index].dictValue
state.options_disasterType.push(obj) state.options_disasterType.push(obj)
} }
} }

View File

@ -0,0 +1,99 @@
<template>
<div class="system-add-dept-container">
<el-dialog :title="state.title" v-model="state.isShowDialog" width="769px">
<el-form :model="state.ruleForm" size="default" label-width="90px" ref="formRef" :rules="rules">
<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="用户姓名" prop="userName">
<el-input v-model="state.ruleForm.userName" placeholder="请输入用户姓名" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="电子邮件" prop="email">
<el-input v-model="state.ruleForm.email" placeholder="请输入电子邮件" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="组织" prop="organization">
<el-input v-model="state.ruleForm.organization" placeholder="请输入组织" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="意见建议" prop="message">
<el-input v-model="state.ruleForm.message" placeholder="请输入意见建议" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="数据自增列" prop="id">
<el-input v-model="state.ruleForm.id" placeholder="请输入数据自增列" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default"> </el-button>
<el-button type="primary" @click="onSubmit(formRef)" size="default">{{state.title}}</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ElMessage } from 'element-plus';
import { submit } from '/@/api/contact/index';
import { ref,reactive,onMounted,nextTick } from 'vue';
const formRef =ref();
const state = reactive({
isShowDialog: false,
ruleForm: {
},
deptData: [], //
deptCategory:[],
title: '新增',
});
const rules = reactive({
userName: [{ required: true, message: '请输入用户姓名', trigger: 'blur' }],
email: [{ required: true, message: '请输入电子邮件', trigger: 'blur' }],
organization: [{ required: true, message: '请输入组织', trigger: 'blur' }],
message: [{ required: true, message: '请输入意见建议', trigger: 'blur' }],
id: [{ required: true, message: '请输入数据自增列', trigger: 'blur' }],
})
//
const openDialog = (row) => {
if(row) {
state.title = '编辑';
state.ruleForm = row;
} else {
state.title = '新增';
state.ruleForm = {};
}
state.isShowDialog = true;
};
//
const closeDialog = () => {
formRef.value.resetFields();
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
const emit = defineEmits(['callback']);
//
const onSubmit = async (el) => {
await el.validate((valid, fields) => {
if (valid) {
submit(state.ruleForm).then((res) => {
emit('callback');
ElMessage.success('操作成功');
closeDialog();
});
}
});
};
defineExpose({
openDialog,
});
</script>

View File

@ -0,0 +1,140 @@
<template>
<div class="system-user-container" style="width:calc(100% - 10px) !important ;">
<el-row :gutter="10" >
<el-col :span="24">
<el-card shadow="hover">
<div class="system-user-search mb15">
<el-row>
<span class="label-span">名称:</span><el-input size="default" placeholder="请输入名称" style="max-width: 180px" v-model="state.query.name" clearable> </el-input>
<el-button size="default" type="primary" class="ml10" @click="initTableData" >
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
</el-row>
<el-row style="margin-top: 20px; margin-left: -10px;">
<el-button size="default" type="success" class="ml10" @click="onOpenAdd" >
<el-icon>
<ele-FolderAdd />
</el-icon>
新增
</el-button>
</el-row>
</div>
<el-table :data="state.tableData.data" style="width: 100%" v-loading="state.tableData.loading" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"/>
<el-table-column prop="userName" label="用户姓名" > </el-table-column>
<el-table-column prop="email" label="电子邮件" > </el-table-column>
<el-table-column prop="organization" label="组织" > </el-table-column>
<el-table-column prop="message" label="意见建议" > </el-table-column>
<el-table-column prop="id" label="数据自增列" > </el-table-column>
<el-table-column label="操作" width="100">
<template #default="scope">
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenEdit(scope.row)">修改</el-button>
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.pageNum"
background
v-model:page-size="state.tableData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total"
>
</el-pagination>
</el-card>
</el-col>
</el-row>
<Add ref = 'AddRef' @callback="initTableData"></Add>
</div>
</template>
<script setup name="contact">
import { getList ,remove} from '/@/api/contact/index'
import { ElMessageBox, ElMessage } from 'element-plus';
import { ref,reactive,onMounted,nextTick } from 'vue';
import Add from '/@/views/responseManagement/contact/component/add.vue';
const AddRef = ref();
const state = reactive({
tableData: {
data: [],
total: 0,
loading: false,
param:{
pageNum: 1,
pageSize: 10,
},
},
//
query: {
},
selected: [],
//
});
//
const initTableData = () => {
state.tableData.loading = true;
getList(state.tableData.param.pageNum,state.tableData.param.pageSize,state.query).then(res=>{
state.tableData = {
data: res.records,
total: res.total,
loading :false,
param: {
pageNum: res.current,
pageSize: res.size,
}
}
})
};
//
const onOpenAdd = () => {
AddRef.value.openDialog();
};
//
const onOpenEdit = (row) => {
AddRef.value.openDialog(row);
};
//
const onRowDel = (row) => {
ElMessageBox.confirm(`此操作将永久此参数:“${row.name}”,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
remove(row.id).then(res=>{
ElMessage.success('删除成功');
initTableData();
})
})
.catch(() => {});
};
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
initTableData();
};
//
const handleSelectionChange = (val) => {
state.selected = val;
};
//
const onHandleCurrentChange = (val) => {
state.tableData.param.pageNum = val;
initTableData();
};
onMounted(() => {
nextTick(() => {
initTableData();
});
});
</script>

View File

@ -0,0 +1,153 @@
<template>
<div class="system-add-dept-container">
<el-dialog :title="state.title" v-model="state.isShowDialog" width="769px">
<el-form :model="state.ruleForm" size="default" label-width="90px" ref="formRef" :rules="rules">
<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="数据自增列" prop="id">
<el-input v-model="state.ruleForm.id" placeholder="请输入数据自增列" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="工具名称" prop="toolName">
<el-input v-model="state.ruleForm.toolName" placeholder="请输入工具名称" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="数据标签" prop="label">
<el-input v-model="state.ruleForm.label" placeholder="请输入数据标签" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="导论" prop="introduction">
<el-input v-model="state.ruleForm.introduction" placeholder="请输入导论" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="工具链接" prop="link">
<el-input v-model="state.ruleForm.link" placeholder="请输入工具链接" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="对模型的进一步描述" prop="detail">
<el-input v-model="state.ruleForm.detail" placeholder="请输入对模型的进一步描述" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="数据条目创建时间" prop="createTime">
<el-input v-model="state.ruleForm.createTime" placeholder="请输入数据条目创建时间" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="用户上传者" prop="uploadId">
<el-input v-model="state.ruleForm.uploadId" placeholder="请输入用户上传者" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="管理者/审核者" prop="managerId">
<el-input v-model="state.ruleForm.managerId" placeholder="请输入管理者/审核者" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="审核时间" prop="reviewTime">
<el-input v-model="state.ruleForm.reviewTime" placeholder="请输入审核时间" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="分类" prop="type">
<el-input v-model="state.ruleForm.type" placeholder="请输入分类" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="是否由志愿者上传0-不是1-是)" prop="voluntaryFlag">
<el-input v-model="state.ruleForm.voluntaryFlag" placeholder="请输入是否由志愿者上传0-不是1-是)" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="上传人" prop="uploader">
<el-input v-model="state.ruleForm.uploader" placeholder="请输入上传人" clearable></el-input>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="用户名展示" prop="showName">
<el-input v-model="state.ruleForm.showName" placeholder="请输入用户名展示" clearable></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default"> </el-button>
<el-button type="primary" @click="onSubmit(formRef)" size="default">{{state.title}}</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ElMessage } from 'element-plus';
import { submit } from '/@/api/tool/index';
import { ref, reactive } from 'vue';
const formRef =ref();
const state = reactive({
isShowDialog: false,
ruleForm: {
},
deptData: [], //
deptCategory:[],
title: '新增',
});
const rules = reactive({
id: [{ required: true, message: '请输入数据自增列', trigger: 'blur' }],
toolName: [{ required: true, message: '请输入工具名称', trigger: 'blur' }],
label: [{ required: true, message: '请输入数据标签', trigger: 'blur' }],
introduction: [{ required: true, message: '请输入导论', trigger: 'blur' }],
link: [{ required: true, message: '请输入工具链接', trigger: 'blur' }],
detail: [{ required: true, message: '请输入对模型的进一步描述', trigger: 'blur' }],
createTime: [{ required: true, message: '请输入数据条目创建时间', trigger: 'blur' }],
uploadId: [{ required: true, message: '请输入用户上传者', trigger: 'blur' }],
managerId: [{ required: true, message: '请输入管理者/审核者', trigger: 'blur' }],
reviewTime: [{ required: true, message: '请输入审核时间', trigger: 'blur' }],
type: [{ required: true, message: '请输入分类', trigger: 'blur' }],
voluntaryFlag: [{ required: true, message: '请输入是否由志愿者上传0-不是1-是)', trigger: 'blur' }],
uploader: [{ required: true, message: '请输入上传人', trigger: 'blur' }],
showName: [{ required: true, message: '请输入用户名展示', trigger: 'blur' }],
})
//
const openDialog = (row) => {
if(row) {
state.title = '编辑';
state.ruleForm = row;
} else {
state.title = '新增';
state.ruleForm = {};
}
state.isShowDialog = true;
};
//
const closeDialog = () => {
formRef.value.resetFields();
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
const emit = defineEmits(['callback']);
//
const onSubmit = async (el) => {
await el.validate((valid, fields) => {
if (valid) {
submit(state.ruleForm).then((res) => {
emit('callback');
ElMessage.success('操作成功');
closeDialog();
});
}
});
};
defineExpose({
openDialog,
});
</script>

View File

@ -0,0 +1,142 @@
<template>
<div class="system-user-container" style="width:calc(100% - 10px) !important ;">
<el-row :gutter="10" >
<el-col :span="24">
<el-card shadow="hover">
<div class="system-user-search mb15">
<el-row>
<span class="label-span">名称:</span><el-input size="default" placeholder="请输入名称" style="max-width: 180px" v-model="state.query.name" clearable> </el-input>
<el-button size="default" type="primary" class="ml10" @click="initTableData" >
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
</el-row>
<el-row style="margin-top: 20px; margin-left: -10px;">
<el-button size="default" type="success" class="ml10" @click="onOpenAdd" >
<el-icon>
<ele-FolderAdd />
</el-icon>
新增
</el-button>
</el-row>
</div>
<el-table :data="state.tableData.data" style="width: 100%" v-loading="state.tableData.loading" @selection-change="handleSelectionChange">
<el-table-column prop="toolName" label="Tool Name" >
<template #default="scope">
<a :href="scope.row.link" target="_blank">{{scope.row.toolName}}</a>
</template>
</el-table-column>
<el-table-column prop="label" label="label" > </el-table-column>
<el-table-column prop="introduction" label="introduction" > </el-table-column>
<el-table-column prop="showName" label="Show Name" ></el-table-column>
<el-table-column label="Operate" width="100">
<template #default="scope">
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenEdit(scope.row)">修改</el-button>
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="onHandleSizeChange"
@current-change="onHandleCurrentChange"
class="mt15"
:pager-count="5"
:page-sizes="[10, 20, 30]"
v-model:current-page="state.tableData.param.pageNum"
background
v-model:page-size="state.tableData.param.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="state.tableData.total"
>
</el-pagination>
</el-card>
</el-col>
</el-row>
<Add ref = 'AddRef' @callback="initTableData"></Add>
</div>
</template>
<script setup name="systemUser">
import { getList ,remove} from '/@/api/tool/index'
import { ElMessageBox, ElMessage } from 'element-plus';
import { reactive, ref,onMounted,nextTick } from 'vue';
import Add from '/@/views/responseManagement/tool/component/add.vue';
const AddRef = ref();
const state = reactive({
tableData: {
data: [],
total: 0,
loading: false,
param:{
pageNum: 1,
pageSize: 10,
},
},
//
query: {
},
selected: [],
//
});
//
const initTableData = () => {
state.tableData.loading = true;
getList(state.tableData.param.pageNum,state.tableData.param.pageSize,state.query).then(res=>{
state.tableData = {
data: res.records,
total: res.total,
loading :false,
param: {
pageNum: res.current,
pageSize: res.size,
}
}
})
};
//
const onOpenAdd = () => {
AddRef.value.openDialog();
};
//
const onOpenEdit = (row) => {
AddRef.value.openDialog(row);
};
//
const onRowDel = (row) => {
ElMessageBox.confirm(`此操作将永久此参数:“${row.name}”,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
remove(row.id).then(res=>{
ElMessage.success('删除成功');
initTableData();
})
})
.catch(() => {});
};
//
const onHandleSizeChange = (val) => {
state.tableData.param.pageSize = val;
initTableData();
};
//
const handleSelectionChange = (val) => {
state.selected = val;
};
//
const onHandleCurrentChange = (val) => {
state.tableData.param.pageNum = val;
initTableData();
};
onMounted(() => {
nextTick(() => {
initTableData();
});
});
</script>

View File

@ -2,7 +2,7 @@
<div class="system-role-container layout-padding"> <div class="system-role-container layout-padding">
<div class="system-role-padding layout-padding-auto layout-padding-view"> <div class="system-role-padding layout-padding-auto layout-padding-view">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="margin-left: 20px"> <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick" style="margin-left: 20px">
<el-tab-pane label="Not reviewed" name="first"> <el-tab-pane label="unchecked" name="first">
<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%"> <el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
<el-table-column type="index" label="ID" width="50" /> <el-table-column type="index" label="ID" width="50" />
<el-table-column prop="username" label="User name" show-overflow-tooltip></el-table-column> <el-table-column prop="username" label="User name" show-overflow-tooltip></el-table-column>
@ -17,18 +17,22 @@
<!-- <el-table-column prop="affectedCountry" label="Affected country" show-overflow-tooltip></el-table-column> --> <!-- <el-table-column prop="affectedCountry" label="Affected country" show-overflow-tooltip></el-table-column> -->
<!-- <el-table-column prop="Longitude" label="Longitude" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="Longitude" label="Longitude" show-overflow-tooltip></el-table-column>
<el-table-column prop="Latitude" label="Latitude" show-overflow-tooltip></el-table-column> --> <el-table-column prop="Latitude" label="Latitude" show-overflow-tooltip></el-table-column> -->
<el-table-column prop="disasterTime" label="Disaster time" show-overflow-tooltip></el-table-column> <el-table-column prop="disasterTime" label="Disaster time" show-overflow-tooltip>
<template #default="scope">
<!-- 格式化去除时分秒 -->
{{ dateFormat(scope.row.disasterTime) }}
</template>
</el-table-column>
<!-- <el-table-column prop="responseTime" label="Response time" show-overflow-tooltip></el-table-column> --> <!-- <el-table-column prop="responseTime" label="Response time" show-overflow-tooltip></el-table-column> -->
<el-table-column prop="respondStatus" label="Response status" show-overflow-tooltip> <el-table-column prop="respondStatus" label="Response status" show-overflow-tooltip>
<template #default="scope"> <template #default="scope">
<el-tag type="info" v-if="scope.row.respondStatus===0">Not reviewed</el-tag> <el-tag type="info" v-if="scope.row.respondStatus === 0">Not reviewed</el-tag>
<el-tag type="info" v-if="scope.row.respondStatus === 1">Failed</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="Operate" label="Operate" show-overflow-tooltip> <el-table-column prop="Operate" label="Operate" show-overflow-tooltip>
<template #default="scope"> <template #default="scope">
<el-button size="small" text type="primary" @click="onOpenEditRole('edit', scope.row)" <el-button size="small" text type="primary" @click="onOpenEditRole('edit', scope.row)">Review</el-button>
>Review</el-button
>
</template> </template>
</el-table-column> </el-table-column>
@ -57,7 +61,7 @@
:total="state.tableData.total"> :total="state.tableData.total">
</el-pagination> </el-pagination>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="Reviewed" name="second"> <el-tab-pane label="checked" name="second">
<el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%"> <el-table :data="state.tableData.data" v-loading="state.tableData.loading" style="width: 100%">
<el-table-column type="index" label="ID" width="50" /> <el-table-column type="index" label="ID" width="50" />
<el-table-column prop="username" label="User name" show-overflow-tooltip></el-table-column> <el-table-column prop="username" label="User name" show-overflow-tooltip></el-table-column>
@ -74,14 +78,19 @@
<!-- <el-table-column prop="Affected country" label="Affected country" show-overflow-tooltip></el-table-column> --> <!-- <el-table-column prop="Affected country" label="Affected country" show-overflow-tooltip></el-table-column> -->
<!-- <el-table-column prop="Longitude" label="Longitude" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="Longitude" label="Longitude" show-overflow-tooltip></el-table-column>
<el-table-column prop="Latitude" label="Latitude" show-overflow-tooltip></el-table-column> --> <el-table-column prop="Latitude" label="Latitude" show-overflow-tooltip></el-table-column> -->
<el-table-column prop="disasterTime" label="Disaster time" show-overflow-tooltip></el-table-column> <el-table-column prop="disasterTime" label="Disaster time" show-overflow-tooltip>
<template #default="scope">
<!-- 格式化去除时分秒 -->
{{ dateFormat(scope.row.disasterTime) }}
</template>
</el-table-column>
<!-- <el-table-column prop="responseTime" label="Response time" show-overflow-tooltip></el-table-column> --> <!-- <el-table-column prop="responseTime" label="Response time" show-overflow-tooltip></el-table-column> -->
<!-- <el-table-column prop="Operate" label="Operate" show-overflow-tooltip></el-table-column> --> <!-- <el-table-column prop="Operate" label="Operate" show-overflow-tooltip></el-table-column> -->
<el-table-column prop="respondStatus" label="Response status" show-overflow-tooltip> <el-table-column prop="respondStatus" label="Response status" show-overflow-tooltip>
<template #default="scope"> <template #default="scope">
<el-tag type="info" v-if="scope.row.respondStatus===2">Reviewed</el-tag> <el-tag type="info" v-if="scope.row.respondStatus === 2">Reviewed</el-tag>
<el-tag type="info" v-if="scope.row.respondStatus===1">Failed</el-tag> <el-tag type="info" v-if="scope.row.respondStatus === 1">Failed</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -113,28 +122,65 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
<RoleDialog ref="roleDialogRef" @refresh="getTableData()" /> <el-dialog v-model="state.dialogVisible" title="Review" width="30%" :before-close="handleClose">
<el-container style="margin-top: -2%;margin-bottom: 2%;">
<el-radio v-model="state.radio" label='1'>Point</el-radio>
<el-radio v-model="state.radio" label='2'>Area</el-radio>
<el-button type="primary" style="margin-left: 5%;">Clear</el-button>
</el-container>
<el-container style="margin-top: 2%;margin-bottom: 2%;" v-if="state.radio==='1'?true:false">
<span style="line-height: 35px;"> Latitude</span>
<el-input v-model="input" placeholder="请输入内容" style="height:35px;margin-right: 1%;"></el-input>
<span style="line-height: 35px;">Longitude</span>
<el-input v-model="input" placeholder="请输入内容" style="height:35px;"></el-input>
</el-container>
<Map style="height:350px ; width:100% ;margin-bottom: 10px;" ref="map"></Map>
<el-form-item label="Disaster Time">
<el-date-picker v-model="state.edit.disasterTime" type="date" value-format="YYYY-MM-DD"
placeholder="Select date and time" />
</el-form-item>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">Cancel</el-button>
<el-button type="danger" @click="reviews(1)">
Not Review
</el-button>
<el-button type="primary" @click="reviews(2)">
Review
</el-button>
</span>
</template>
</el-dialog>
</div> </div>
</template> </template>
<script setup name="userResponse"> <script setup name="userResponse">
import { defineAsyncComponent, reactive, onMounted, ref } from 'vue'; import { reactive, onMounted, ref, nextTick } from 'vue';
import { ElMessageBox, ElMessage} from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import {getList ,review } from '/@/api/disasterInfo/index'; import { getList, review } from '/@/api/disasterInfo/index';
import { getDictionary } from '/@/api/system/dictbiz'; import { getDictionary } from '/@/api/system/dictbiz';
//
import Map from '/@/components/Map.vue';
import { useDateFormat } from '@vueuse/shared';
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import 'leaflet-draw/dist/leaflet.draw'
import 'leaflet-draw/dist/leaflet.draw.css'
const map = ref(null);
const activeName = ref('first'); const activeName = ref('first');
const handleClick = (tab ,event) => { const handleClick = (tab, event) => {
state.selectName=tab.props.name; state.selectName = tab.props.name;
getTableData(); getTableData();
}; };
// const dateFormat = (date) => {
const RoleDialog = defineAsyncComponent(() => import('/@/views/system/role/dialog.vue')); return useDateFormat(date, 'YYYY-MM-DD').value;
}
// //
const roleDialogRef = ref(); const roleDialogRef = ref();
const state = reactive({ const state = reactive({
dialogVisible: false,
tableData: { tableData: {
data: [], data: [],
total: 0, total: 0,
@ -143,19 +189,21 @@ const state = reactive({
search: '', search: '',
current: 1, current: 1,
size: 10, size: 10,
respondStatus:0, respondStatus: 0,
}, },
}, },
disasterTypeList: [], disasterTypeList: [],
selectName: 'first', selectName: 'first',
edit: {},
radio:null,
}); });
// //
const getTableData = () => { const getTableData = () => {
state.tableData.loading = true; state.tableData.loading = true;
//activeNametab //activeNametab
if(state.selectName === 'first'){ if (state.selectName === 'first') {
state.tableData.param.respondStatus = 0; state.tableData.param.respondStatus = 0;
}else{ } else {
state.tableData.param.respondStatus = 2; state.tableData.param.respondStatus = 2;
} }
console.log(activeName.value); console.log(activeName.value);
@ -170,31 +218,35 @@ const onHandleSizeChange = (val) => {
getTableData(); getTableData();
}; };
const onOpenEditRole = (type, row) => { const onOpenEditRole = (type, row) => {
//使 //
ElMessageBox.confirm('Are you sure you want to review this data ?', 'Tips', { state.edit = JSON.parse(JSON.stringify(row));
confirmButtonText: 'OK', nextTick(() => {
cancelButtonText: 'Cancel', console.log(map.value);
type: 'warning', //
}) //TODO
.then(() => { map.mapOperations.wktParseToMap(row.geometry)
//
review(row.id).then(() => {
ElMessage({
type: 'success',
message: 'Review success!',
}); });
state.dialogVisible = true;
};
const reviews = (index) => {
//state.edit.geometry
//TODO
//state.edit.geometry = map.mapOperations.getWkt();
//index
if (index === 1) {
state.edit.respondStatus = 1;
} else {
state.edit.respondStatus = 2;
}
//
state.edit.disasterTime = useDateFormat(state.edit.disasterTime, 'YYYY-MM-DD').value + " 00:00:00";
review(state.edit).then((res) => {
ElMessage.success('操作成功');
state.dialogVisible = false;
getTableData(); getTableData();
}); });
}) }
.catch(() => {
//
ElMessage({
type: 'info',
message: 'Review failed!',
});
});
};
// //
const onHandleCurrentChange = (val) => { const onHandleCurrentChange = (val) => {
console.log(val); console.log(val);
@ -204,7 +256,7 @@ const onHandleCurrentChange = (val) => {
// //
onMounted(() => { onMounted(() => {
getTableData(); getTableData();
getDictionary({code:'disaster'}).then((res) => { getDictionary({ code: 'disaster' }).then((res) => {
state.disasterTypeList = res; state.disasterTypeList = res;
}); });
}); });