Compare commits

...

10 Commits

  1. 4
      index.html
  2. 503
      package-lock.json
  3. 3
      package.json
  4. 56
      src/api/axios/Axios.ts
  5. 73
      src/api/dike/index.ts
  6. 77
      src/api/sluice/index.ts
  7. 5
      src/components.d.ts
  8. 2
      src/main.ts
  9. 264
      src/views/Main/Dike/components/BaseInfo.vue
  10. 278
      src/views/Main/Dike/components/fileManagement.vue
  11. 638
      src/views/Main/Dike/components/floodControlMaterials.vue
  12. 450
      src/views/Main/Dike/components/safetyAppraisal.vue
  13. 24
      src/views/Main/Dike/index.vue
  14. 9
      src/views/Main/Reservoir/components/BaseInfo.vue
  15. 5
      src/views/Main/Reservoir/index.vue
  16. 348
      src/views/Main/Sluice/components/BaseInfo.vue
  17. 252
      src/views/Main/Sluice/components/fileManagement.vue
  18. 553
      src/views/Main/Sluice/components/floodControlMaterials.vue
  19. 440
      src/views/Main/Sluice/components/safetyAppraisal.vue
  20. 24
      src/views/Main/Sluice/index.vue
  21. 42
      src/views/Main/index.vue
  22. 2
      vite.config.ts
  23. 213
      yarn.lock

4
index.html

@ -12,10 +12,10 @@
<div id="app"></div>
<script src="/icons_29287_360.1953ee44cbba89dfe274d4094cd9fb21.es5.js"></script>
<script type="module" src="/src/main.ts"></script>
<script type="module">
<!-- <script type="module">
import * as SyCim from "sy-cesium-sdk";
window.Cesium = SyCim.Cesium;
</script>
<script src="/lib/SuperMap3D/SuperMap3D.js" defer></script>
<script src="/lib/SuperMap3D/SuperMap3D.js" defer></script> -->
</body>
</html>

503
package-lock.json

@ -24,7 +24,6 @@
"pinia": "2.0.28",
"qs": "6.11.0",
"spark-md5": "^3.0.2",
"sy-cesium-sdk": "^2.4.1",
"vue": "3.3.7",
"vue-router": "4.0.16",
"vuedraggable": "^4.1.0"
@ -947,70 +946,6 @@
"url": "https://opencollective.com/popperjs"
}
},
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/base64": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"node_modules/@protobufjs/float": {
"version": "1.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/path": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/pool": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
"license": "BSD-3-Clause"
},
"node_modules/@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
"license": "BSD-3-Clause"
},
"node_modules/@rollup/pluginutils": {
"version": "5.1.0",
"dev": true,
@ -1032,57 +967,6 @@
}
}
},
"node_modules/@sycesium/engine": {
"version": "13.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@sycesium/engine/-/engine-13.1.0.tgz",
"integrity": "sha512-7wz3IMTfuIIPTKHpfGl6uftuLcy2yPokC+JsvIhssFLFx6vY042biwHWEoCh7vLQuFfNM9c8ipu92V+01DXrWg==",
"license": "Apache-2.0",
"dependencies": {
"@tweenjs/tween.js": "^25.0.0",
"@zip.js/zip.js": "^2.7.34",
"autolinker": "^4.0.0",
"bitmap-sdf": "^1.0.3",
"dompurify": "^3.0.2",
"draco3d": "^1.5.1",
"earcut": "^3.0.0",
"grapheme-splitter": "^1.0.4",
"jsep": "^1.3.8",
"kdbush": "^4.0.1",
"ktx-parse": "^0.7.0",
"lerc": "^2.0.0",
"mersenne-twister": "^1.1.0",
"meshoptimizer": "^0.22.0",
"pako": "^2.0.4",
"protobufjs": "^7.1.0",
"rbush": "3.0.1",
"topojson-client": "^3.1.0",
"urijs": "^1.19.7"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@sycesium/engine/node_modules/earcut": {
"version": "3.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-3.0.1.tgz",
"integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw==",
"license": "ISC"
},
"node_modules/@sycesium/engine/node_modules/quickselect": {
"version": "2.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==",
"license": "ISC"
},
"node_modules/@sycesium/engine/node_modules/rbush": {
"version": "3.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/rbush/-/rbush-3.0.1.tgz",
"integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
"license": "MIT",
"dependencies": {
"quickselect": "^2.0.0"
}
},
"node_modules/@techstark/opencv-js": {
"version": "4.9.0-release.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@techstark/opencv-js/-/opencv-js-4.9.0-release.2.tgz",
@ -2760,12 +2644,6 @@
"url": "https://opencollective.com/turf"
}
},
"node_modules/@tweenjs/tween.js": {
"version": "25.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
"integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==",
"license": "MIT"
},
"node_modules/@types/crypto-js": {
"version": "4.2.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/crypto-js/-/crypto-js-4.2.1.tgz",
@ -2822,6 +2700,7 @@
},
"node_modules/@types/node": {
"version": "20.11.25",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
@ -2839,13 +2718,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/trusted-types": {
"version": "2.0.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"license": "MIT",
"optional": true
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@ -3470,17 +3342,6 @@
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@zip.js/zip.js": {
"version": "2.7.57",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@zip.js/zip.js/-/zip.js-2.7.57.tgz",
"integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA==",
"license": "BSD-3-Clause",
"engines": {
"bun": ">=0.7.0",
"deno": ">=1.0.0",
"node": ">=16.5.0"
}
},
"node_modules/acorn": {
"version": "8.11.3",
"dev": true,
@ -3722,21 +3583,6 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/autolinker": {
"version": "4.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/autolinker/-/autolinker-4.1.0.tgz",
"integrity": "sha512-mYzdZMei1zIXcHVS/LjnuCJG+C/hNi8O+5m0R8YWtrIBWGrjL8CVzEZXxOfH0l1kioEXHNpUJRkgZdyL4GgIHQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.8.1"
}
},
"node_modules/autolinker/node_modules/tslib": {
"version": "2.8.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@ -3779,12 +3625,6 @@
"node": ">=8"
}
},
"node_modules/bitmap-sdf": {
"version": "1.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
"integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==",
"license": "MIT"
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/boolbase/-/boolbase-1.0.0.tgz",
@ -4247,21 +4087,6 @@
"node": ">=0.10.0"
}
},
"node_modules/dompurify": {
"version": "3.2.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/dompurify/-/dompurify-3.2.4.tgz",
"integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==",
"license": "(MPL-2.0 OR Apache-2.0)",
"optionalDependencies": {
"@types/trusted-types": "^2.0.7"
}
},
"node_modules/draco3d": {
"version": "1.5.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/draco3d/-/draco3d-1.5.7.tgz",
"integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==",
"license": "Apache-2.0"
},
"node_modules/earcut": {
"version": "2.2.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-2.2.4.tgz",
@ -5448,12 +5273,6 @@
"dev": true,
"license": "ISC"
},
"node_modules/grapheme-splitter": {
"version": "1.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"license": "MIT"
},
"node_modules/graphemer": {
"version": "1.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/graphemer/-/graphemer-1.4.0.tgz",
@ -5987,15 +5806,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsep": {
"version": "1.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/jsep/-/jsep-1.4.0.tgz",
"integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==",
"license": "MIT",
"engines": {
"node": ">= 10.16.0"
}
},
"node_modules/jsesc": {
"version": "2.5.2",
"dev": true,
@ -6059,12 +5869,6 @@
"graceful-fs": "^4.1.6"
}
},
"node_modules/kdbush": {
"version": "4.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/kdbush/-/kdbush-4.0.2.tgz",
"integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==",
"license": "ISC"
},
"node_modules/keyv": {
"version": "4.5.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/keyv/-/keyv-4.5.4.tgz",
@ -6075,24 +5879,12 @@
"json-buffer": "3.0.1"
}
},
"node_modules/ktx-parse": {
"version": "0.7.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/ktx-parse/-/ktx-parse-0.7.1.tgz",
"integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==",
"license": "MIT"
},
"node_modules/leader-line-vue": {
"version": "2.1.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/leader-line-vue/-/leader-line-vue-2.1.1.tgz",
"integrity": "sha512-ZfNoDcwgfHESNLErfPBdJ4I/1tbXLBUFwGfbqAZvTcOghcm7UtUm7mUPZVAOThlO3q75n8pZmDTGtM/Gwfx+xA==",
"license": "ISC"
},
"node_modules/lerc": {
"version": "2.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/lerc/-/lerc-2.0.0.tgz",
"integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg==",
"license": "Apache-2.0"
},
"node_modules/less": {
"version": "4.2.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/less/-/less-4.2.0.tgz",
@ -6200,12 +5992,6 @@
"dev": true,
"license": "MIT"
},
"node_modules/long": {
"version": "5.3.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/long/-/long-5.3.1.tgz",
"integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==",
"license": "Apache-2.0"
},
"node_modules/lru-cache": {
"version": "6.0.0",
"dev": true,
@ -6269,18 +6055,6 @@
"node": ">= 8"
}
},
"node_modules/mersenne-twister": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/mersenne-twister/-/mersenne-twister-1.1.0.tgz",
"integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==",
"license": "MIT"
},
"node_modules/meshoptimizer": {
"version": "0.22.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/meshoptimizer/-/meshoptimizer-0.22.0.tgz",
"integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg==",
"license": "MIT"
},
"node_modules/micromatch": {
"version": "4.0.5",
"dev": true,
@ -6628,12 +6402,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pako": {
"version": "2.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/pako/-/pako-2.1.0.tgz",
"integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==",
"license": "(MIT AND Zlib)"
},
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/parent-module/-/parent-module-1.0.1.tgz",
@ -6880,30 +6648,6 @@
"node": ">=6.0.0"
}
},
"node_modules/protobufjs": {
"version": "7.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/protobufjs/-/protobufjs-7.4.0.tgz",
"integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@ -7446,14 +7190,6 @@
"version": "1.0.0",
"dev": true
},
"node_modules/sy-cesium-sdk": {
"version": "2.4.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/sy-cesium-sdk/-/sy-cesium-sdk-2.4.1.tgz",
"integrity": "sha512-thizaU6o7WbRs095JVZf54kJS1tTahLiVzDQSyIpNcpbkMmFzGb3rroaTrUdxP7vJzrBsXxXbB1bxVYh4Fg69w==",
"dependencies": {
"@sycesium/engine": "^13.1.0"
}
},
"node_modules/synckit": {
"version": "0.8.8",
"dev": true,
@ -7700,6 +7436,7 @@
},
"node_modules/undici-types": {
"version": "5.26.5",
"dev": true,
"license": "MIT"
},
"node_modules/unimport": {
@ -7942,12 +7679,6 @@
"punycode": "^2.1.0"
}
},
"node_modules/urijs": {
"version": "1.19.11",
"resolved": "http://172.16.32.57:8931/repository/npm-group/urijs/-/urijs-1.19.11.tgz",
"integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
"license": "MIT"
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -8881,60 +8612,6 @@
"resolved": "http://172.16.32.57:8931/repository/npm-group/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
"integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
},
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
},
"@protobufjs/base64": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
},
"@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
},
"@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
},
"@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
"version": "1.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
},
"@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
},
"@protobufjs/path": {
"version": "1.1.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
},
"@protobufjs/pool": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
},
"@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
},
"@rollup/pluginutils": {
"version": "5.1.0",
"dev": true,
@ -8944,52 +8621,6 @@
"picomatch": "^2.3.1"
}
},
"@sycesium/engine": {
"version": "13.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@sycesium/engine/-/engine-13.1.0.tgz",
"integrity": "sha512-7wz3IMTfuIIPTKHpfGl6uftuLcy2yPokC+JsvIhssFLFx6vY042biwHWEoCh7vLQuFfNM9c8ipu92V+01DXrWg==",
"requires": {
"@tweenjs/tween.js": "^25.0.0",
"@zip.js/zip.js": "^2.7.34",
"autolinker": "^4.0.0",
"bitmap-sdf": "^1.0.3",
"dompurify": "^3.0.2",
"draco3d": "^1.5.1",
"earcut": "^3.0.0",
"grapheme-splitter": "^1.0.4",
"jsep": "^1.3.8",
"kdbush": "^4.0.1",
"ktx-parse": "^0.7.0",
"lerc": "^2.0.0",
"mersenne-twister": "^1.1.0",
"meshoptimizer": "^0.22.0",
"pako": "^2.0.4",
"protobufjs": "^7.1.0",
"rbush": "3.0.1",
"topojson-client": "^3.1.0",
"urijs": "^1.19.7"
},
"dependencies": {
"earcut": {
"version": "3.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-3.0.1.tgz",
"integrity": "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw=="
},
"quickselect": {
"version": "2.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/quickselect/-/quickselect-2.0.0.tgz",
"integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
},
"rbush": {
"version": "3.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/rbush/-/rbush-3.0.1.tgz",
"integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
"requires": {
"quickselect": "^2.0.0"
}
}
}
},
"@techstark/opencv-js": {
"version": "4.9.0-release.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@techstark/opencv-js/-/opencv-js-4.9.0-release.2.tgz",
@ -10238,11 +9869,6 @@
"d3-voronoi": "1.1.2"
}
},
"@tweenjs/tween.js": {
"version": "25.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
"integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A=="
},
"@types/crypto-js": {
"version": "4.2.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/crypto-js/-/crypto-js-4.2.1.tgz",
@ -10291,6 +9917,7 @@
},
"@types/node": {
"version": "20.11.25",
"dev": true,
"requires": {
"undici-types": "~5.26.4"
}
@ -10305,12 +9932,6 @@
"integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"@types/trusted-types": {
"version": "2.0.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/trusted-types/-/trusted-types-2.0.7.tgz",
"integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"optional": true
},
"@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
@ -10758,11 +10379,6 @@
"vue-demi": "*"
}
},
"@zip.js/zip.js": {
"version": "2.7.57",
"resolved": "http://172.16.32.57:8931/repository/npm-group/@zip.js/zip.js/-/zip.js-2.7.57.tgz",
"integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA=="
},
"acorn": {
"version": "8.11.3",
"dev": true
@ -10914,21 +10530,6 @@
"resolved": "http://172.16.32.57:8931/repository/npm-group/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"autolinker": {
"version": "4.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/autolinker/-/autolinker-4.1.0.tgz",
"integrity": "sha512-mYzdZMei1zIXcHVS/LjnuCJG+C/hNi8O+5m0R8YWtrIBWGrjL8CVzEZXxOfH0l1kioEXHNpUJRkgZdyL4GgIHQ==",
"requires": {
"tslib": "^2.8.1"
},
"dependencies": {
"tslib": {
"version": "2.8.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
}
}
},
"available-typed-arrays": {
"version": "1.0.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@ -10958,11 +10559,6 @@
"version": "2.2.0",
"dev": true
},
"bitmap-sdf": {
"version": "1.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
"integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg=="
},
"boolbase": {
"version": "1.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/boolbase/-/boolbase-1.0.0.tgz",
@ -11262,19 +10858,6 @@
"esutils": "^2.0.2"
}
},
"dompurify": {
"version": "3.2.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/dompurify/-/dompurify-3.2.4.tgz",
"integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==",
"requires": {
"@types/trusted-types": "^2.0.7"
}
},
"draco3d": {
"version": "1.5.7",
"resolved": "http://172.16.32.57:8931/repository/npm-group/draco3d/-/draco3d-1.5.7.tgz",
"integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="
},
"earcut": {
"version": "2.2.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-2.2.4.tgz",
@ -12077,11 +11660,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"grapheme-splitter": {
"version": "1.0.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
},
"graphemer": {
"version": "1.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/graphemer/-/graphemer-1.4.0.tgz",
@ -12391,11 +11969,6 @@
"argparse": "^2.0.1"
}
},
"jsep": {
"version": "1.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/jsep/-/jsep-1.4.0.tgz",
"integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw=="
},
"jsesc": {
"version": "2.5.2",
"dev": true
@ -12441,11 +12014,6 @@
"universalify": "^2.0.0"
}
},
"kdbush": {
"version": "4.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/kdbush/-/kdbush-4.0.2.tgz",
"integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="
},
"keyv": {
"version": "4.5.4",
"resolved": "http://172.16.32.57:8931/repository/npm-group/keyv/-/keyv-4.5.4.tgz",
@ -12455,21 +12023,11 @@
"json-buffer": "3.0.1"
}
},
"ktx-parse": {
"version": "0.7.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/ktx-parse/-/ktx-parse-0.7.1.tgz",
"integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ=="
},
"leader-line-vue": {
"version": "2.1.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/leader-line-vue/-/leader-line-vue-2.1.1.tgz",
"integrity": "sha512-ZfNoDcwgfHESNLErfPBdJ4I/1tbXLBUFwGfbqAZvTcOghcm7UtUm7mUPZVAOThlO3q75n8pZmDTGtM/Gwfx+xA=="
},
"lerc": {
"version": "2.0.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/lerc/-/lerc-2.0.0.tgz",
"integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg=="
},
"less": {
"version": "4.2.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/less/-/less-4.2.0.tgz",
@ -12543,11 +12101,6 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
"long": {
"version": "5.3.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/long/-/long-5.3.1.tgz",
"integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng=="
},
"lru-cache": {
"version": "6.0.0",
"dev": true,
@ -12592,16 +12145,6 @@
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true
},
"mersenne-twister": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/mersenne-twister/-/mersenne-twister-1.1.0.tgz",
"integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA=="
},
"meshoptimizer": {
"version": "0.22.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/meshoptimizer/-/meshoptimizer-0.22.0.tgz",
"integrity": "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg=="
},
"micromatch": {
"version": "4.0.5",
"dev": true,
@ -12820,11 +12363,6 @@
"p-limit": "^3.0.2"
}
},
"pako": {
"version": "2.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/pako/-/pako-2.1.0.tgz",
"integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
},
"parent-module": {
"version": "1.0.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/parent-module/-/parent-module-1.0.1.tgz",
@ -12970,25 +12508,6 @@
"fast-diff": "^1.1.2"
}
},
"protobufjs": {
"version": "7.4.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/protobufjs/-/protobufjs-7.4.0.tgz",
"integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
}
},
"proxy-from-env": {
"version": "1.1.0",
"resolved": "http://172.16.32.57:8931/repository/npm-group/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@ -13319,14 +12838,6 @@
"version": "1.0.0",
"dev": true
},
"sy-cesium-sdk": {
"version": "2.4.1",
"resolved": "http://172.16.32.57:8931/repository/npm-group/sy-cesium-sdk/-/sy-cesium-sdk-2.4.1.tgz",
"integrity": "sha512-thizaU6o7WbRs095JVZf54kJS1tTahLiVzDQSyIpNcpbkMmFzGb3rroaTrUdxP7vJzrBsXxXbB1bxVYh4Fg69w==",
"requires": {
"@sycesium/engine": "^13.1.0"
}
},
"synckit": {
"version": "0.8.8",
"dev": true,
@ -13488,7 +12999,8 @@
}
},
"undici-types": {
"version": "5.26.5"
"version": "5.26.5",
"dev": true
},
"unimport": {
"version": "3.7.1",
@ -13635,11 +13147,6 @@
"punycode": "^2.1.0"
}
},
"urijs": {
"version": "1.19.11",
"resolved": "http://172.16.32.57:8931/repository/npm-group/urijs/-/urijs-1.19.11.tgz",
"integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "http://172.16.32.57:8931/repository/npm-group/util-deprecate/-/util-deprecate-1.0.2.tgz",

3
package.json

@ -31,7 +31,6 @@
"pinia": "2.0.28",
"qs": "6.11.0",
"spark-md5": "^3.0.2",
"sy-cesium-sdk": "^2.4.1",
"vue": "3.3.7",
"vue-router": "4.0.16",
"vuedraggable": "^4.1.0"
@ -67,4 +66,4 @@
"vite-plugin-static-copy": "0.17.0",
"vue-tsc": "1.4.2"
}
}
}

56
src/api/axios/Axios.ts

@ -169,31 +169,43 @@ export class VAxios {
conf = this.supportFormData(conf);
return await new Promise((resolve, reject) => {
this.axiosInstance
.request<any, AxiosResponse<Result>>(conf)
.then(async (res: AxiosResponse<Result>) => {
if (transformRequestHook && isFunction(transformRequestHook)) {
try {
const ret = transformRequestHook(res, opt);
if (ret instanceof Promise) {
try {
const data = await ret;
resolve(data);
} catch (error) {
console.error('reponse error:结构体错误!' + config.url);
reject(error);
.request<any, AxiosResponse<Result>>(conf)
.then(async (res: AxiosResponse<Result>) => {
if (transformRequestHook && isFunction(transformRequestHook)) {
try {
let ret;
if (res.data instanceof Blob) {
// 如果是 Blob 类型,直接返回 Blob
ret = res.data;
} else {
ret = transformRequestHook(res, opt);
}
if (ret instanceof Promise) {
try {
const data = await ret;
resolve(data);
} catch (error) {
console.error('reponse error:结构体错误!' + config.url);
reject(error);
}
} else {
resolve(ret);
}
} catch (err) {
reject(err || new Error('request error!'));
}
resolve(ret);
} catch (err) {
reject(err || new Error('request error!'));
return;
}
return;
}
resolve(res as unknown as Promise<T>);
})
.catch((e: Error | AxiosError) => {
reject(e);
});
// 如果没有 transformRequestHook,直接返回响应数据
if (res.data instanceof Blob) {
resolve(res.data as unknown as T);
} else {
resolve(res as unknown as T);
}
})
.catch((e: Error | AxiosError) => {
reject(e);
});
});
}
}

73
src/api/dike/index.ts

@ -28,6 +28,9 @@ export function getJbxx(id: any) {
});
}
// 查询水文特征列表
export function listSwtz(query: any) {
return request({
@ -40,6 +43,74 @@ export function listSwtz(query: any) {
});
}
export function listHdmtzz(query: any) {
return request({
url: '/df/hdmtzz/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
});
}
export function listJyjl(query:any) {
return request({
url: '/df/jyjl/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function listAqjdxx(query:any) {
return request({
url: '/df/aqjdxx/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function listFzwz(query:any) {
return request({
url: '/df/fxwz/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function listDagl(query:any) {
return request({
url: '/df/dagl/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function getFileStream(query:any) {
return request({
url: '/common/download',
method: 'get',
params: query,
responseType: "blob"
})
}
// 查询水文特征详细
export function getSwtz(id: any) {
return request({
@ -108,4 +179,4 @@ export function getV2PatrolStatisticChart(data: any) {
shuili: 'water ' + shuili
}
});
}
}

77
src/api/sluice/index.ts

@ -26,3 +26,80 @@ export function listSwtz(query: any) {
}
});
}
export function listXlnl(query: any) {
return request({
url: '/yg/xlnl/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
});
}
export function listGctx(query: any) {
return request({
url: '/sz/gctx/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
});
}
export function listGcjg(query: any) {
return request({
url: '/sz/gcjg/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
});
}
export function listCxjl(query: any) {
return request({
url: '/sz/cxjl/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
});
}
export function listFzwz(query:any) {
return request({
url: '/fxwz/fxwz/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function listAqjd(query:any) {
return request({
url: '/aqjdxx/aqjdxx/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}
export function listDaglsz(query:any) {
return request({
url: '/sz/dagl/list',
method: 'post',
data: query,
headers: {
shuili: 'water ' + shuili
}
})
}

5
src/components.d.ts

@ -15,10 +15,10 @@ declare module 'vue' {
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElOption: typeof import('element-plus/es')['ElOption']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElSelect: typeof import('element-plus/es')['ElSelect']
@ -26,9 +26,6 @@ declare module 'vue' {
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
Form: typeof import('./components/Form/index.vue')['default']
InputNumber: typeof import('./components/Input/input-number.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink']

2
src/main.ts

@ -3,7 +3,7 @@ import App from './App.vue';
import router from './router';
import { setupStore } from './store';
import './style.css';
import 'sy-cesium-sdk/dist/sycim.min.css';
// import 'sy-cesium-sdk/dist/sycim.min.css';
import 'element-plus/dist/index.css';
import '~/theme/var.css';
import '~/theme/index.scss';

264
src/views/Main/Dike/components/BaseInfo.vue

@ -9,7 +9,7 @@
border
:labelStyle="{
'text-align': 'left',
width: '120px',
width: '200px',
height: '50px',
}"
:contentStyle="{ minWidth: '180px' }"
@ -142,147 +142,115 @@
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="水文特征" name="2">
<div class="sub-title">水库水文特征</div>
<el-descriptions
class="mt-16"
:column="3"
border
:labelStyle="{
'text-align': 'left',
width: '120px',
height: '50px',
}"
:contentStyle="{ minWidth: '180px' }"
<el-tab-pane label="堤防横断面特征值" name="2" class="sub-tabs">
<el-table
:data="hdmzData"
style="color: black"
>
<el-descriptions-item>
<template #label> 河道宽度 </template>
{{ form.riverWidth }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 河道比降 </template>
{{ form.riverGradient }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 多年平均径流量 </template>
{{ form.annualAverageRunoff }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 多年平均输沙量 </template>
{{ form.averageSedimentTransport }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 多年平均最低气温 </template>
{{ form.averageMinimumTemperature }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计重现期 </template>
{{ form.dsrcin }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计洪峰流量 </template>
{{ form.peakFlowRate }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 校核重现期 </template>
{{ form.chrcin }}
</el-descriptions-item>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
fixed
/>
<el-table-column
label="堤防横断面代码"
align="center"
prop="bntrCode"
min-width="200"
/>
<el-table-column
label="测量日期"
align="center"
prop="srDate"
min-width="200"
/>
<el-table-column
label="断面桩号"
align="center"
prop="trCh"
min-width="200"
/>
<el-table-column
label="起始断面位置"
align="center"
prop="intrPl"
min-width="200"
/>
<el-table-column
label="起始断面桩号"
align="center"
prop="intrCh"
min-width="200"
/>
<el-descriptions-item>
<template #label> 校核洪峰流量 </template>
{{ form.verifyFlowRate }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计过闸流量 </template>
{{ form.dslcfl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计闸上水位 </template>
{{ form.dsuswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计闸下水位 </template>
{{ form.dsdswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 校核过闸流量 </template>
{{ form.chlcfl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 校核闸上水位 </template>
{{ form.chuswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 校核闸下水位 </template>
{{ form.chdswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计洪水标准 </template>
{{ form.designFloodStandard }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计洪水位 </template>
{{ form.designFloodHigh }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 保证水位 </template>
{{ form.ensureLevel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 警戒水位 </template>
{{ form.alertLevel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设防水位 </template>
{{ form.fortificationLevel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设计流量 </template>
{{ form.designFlow }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 警戒流量 </template>
{{ form.alertFlow }}
</el-descriptions-item>
</el-table>
</el-tab-pane>
<el-tab-pane label="历史决溢记录" name="4" class="sub-tabs">
<el-table
:data="overflows"
style="color: black"
>
<el-table-column
label="序号"
type="index"
width="100"
align="center"
<el-descriptions-item>
<template #label> 校核水位 </template>
{{ form.checkLevel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 校核流量 </template>
{{ form.checkFlow }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 历史最高水位 </template>
{{ form.highestWaterLevel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 最高水位日期 </template>
{{ form.highestWaterLevelTime }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 历史最大洪峰流量 </template>
{{ form.highestWaterFlow }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 历史最大洪峰流量日期 </template>
{{ form.highestWaterFlowTime }}
</el-descriptions-item>
</el-descriptions>
/>
<el-table-column
label="堤防名称"
align="center"
prop="dikeName"
min-width="200"
>
{{ form.dikeName }}
</el-table-column>
<el-table-column
label="记录更新时间"
align="center"
prop="updateDate"
min-width="200"
/>
<el-table-column
label="决溢地点"
align="center"
prop="brspPl"
min-width="200"
/>
<el-table-column
label="决溢时间"
align="center"
prop="brspDatetime"
min-width="200"
/>
<el-table-column
label=""
align="决溢形式"
prop="brspForm"
min-width="200"
/>
<!-- <el-table-column
label="责任人类型"
align="center"
prop="personResponsibleType"
:formatter="personResponsibleTypeFormat"
min-width="200"
/> -->
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script lang="ts" setup>
import { ref, watch } from "vue";
import { getJbxx, listSwtz } from "@/api/dike";
import {getJbxx, listHdmtzz, listJyjl, listSwtz} from "@/api/dike";
import { getDictLabel } from "@/utils/dictUtils";
const props = defineProps({
resCode: {
type: String,
default: "",
},
pattOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
@ -297,15 +265,18 @@ const props = defineProps({
default: [],
},
});
let code: any = null;
const activeName: any = ref("1");
let typeApi: any = {
["1"]: initBaseAndRsppInfo,
["2"]: initBaseAndRsppInfo,
["2"]: initHdmtzz,
["4"]: initJyjl,
};
const hdmzData: any=ref([]);
const overflows: any=ref([])
const form: any = ref({});
const emits = defineEmits(["getResInfo"]);
function initBaseInfo() {
getJbxx(props.resCode).then((res) => {
if (res) {
@ -331,14 +302,45 @@ function initRsppInfo() {
});
}
function initHdmtzz() {
listHdmtzz({
page: 1,
pageSize: 10,
data: {
dikeCode: props.resCode,
},
}).then((res) => {
if (res) {
hdmzData.value=res.records || [];
}
});
}
function initJyjl() {
listJyjl({
page: 1,
pageSize: 10,
data: {
dikeCode: props.resCode,
},
}).then((res) => {
if (res) {
overflows.value=res.records || [];
}
});
}
function initBaseAndRsppInfo() {
initBaseInfo();
initRsppInfo();
}
function initData() {
activeName.value = "1";
initBaseAndRsppInfo();
initHdmtzz();
initJyjl()
}
function handleChangeTab() {
@ -402,7 +404,7 @@ watch(
.sy-descriptions {
.sy-descriptions__label {
text-align: left;
min-width: 120px;
min-width: 200px;
height: 50px;
}
.sy-descriptions__content {

278
src/views/Main/Dike/components/fileManagement.vue

@ -0,0 +1,278 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<div class="search-item">
<span class="option-label">档案类型</span>
<el-select
v-model="selectedFileType"
placeholder="请选择档案类型"
clearable
style="width: 200px"
>
<el-option
v-for="item in scaleOptions"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</div>
</div>
<div class="right-options">
<el-button
type="primary"
class="search-btn !ml-12"
@click="handleSearch"
>查询</el-button
>
<el-button @click="handleReset">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%; color: black">
<el-table-column type="index" label="序号" width="120" align="center" />
<el-table-column
prop="regulationsAttachment"
label="档案类型"
width="650"
align="center"
>
<template #default="{ row }">
{{ projTypeFormat(row.regulationsAttachment) }}
</template>
</el-table-column>
<el-table-column prop="planAttachment" label="档案附件" align="center">
<template #default="{ row }">
<div
style="cursor: pointer"
v-for="(item, index) in parseAttachments(row.planAttachment)"
:key="index"
@click="downloadFile(item, index)"
>
<i class="el-icon-document"></i>
{{ item.name }}
<i class="el-icon-download" style="cursor: pointer"></i>
</div>
</template>
</el-table-column>
</el-table>
</div>
<el-dialog v-model="dialogVisible" title="档案详情" width="50%">
<div class="detail-container">
<div class="detail-item">
<span class="detail-label">档案类型</span>
<span class="detail-value">{{
projTypeFormat(currentRow.regulationsAttachment) || "--"
}}</span>
</div>
<div class="detail-item">
<span class="detail-label">档案附件</span>
<div class="detail-value attachment-list">
<div
v-for="(item, index) in parseAttachments(
currentRow.planAttachment
)"
:key="index"
class="attachment-item"
>
<i class="el-icon-document"></i>
{{ item.name }}
<i
class="el-icon-download"
style="cursor: pointer; margin-left: 8px"
></i>
</div>
<div
v-if="!parseAttachments(currentRow.planAttachment).length"
class="no-attachments"
>
无附件
</div>
</div>
</div>
<!-- 如果有其他字段可以在此添加 -->
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch, reactive } from "vue";
import type { PropType } from "vue";
import { listAqjdxx, listDagl, listFzwz, getFileStream } from "~/api/dike";
import { getDicts } from "~/api/common";
import { getDictLabel } from "~/utils/dictUtils";
const props = defineProps({
resCode: {
type: String as PropType<string>,
},
});
const scaleOptions = ref([]);
function getType() {
getDicts("file_data_type").then((res) => {
scaleOptions.value = res || [];
});
}
// Data for the table
const tableData = ref([]);
// Search parameters
const searchDate = ref([]);
function projTypeFormat(key: string) {
if (!key) return "--";
return getDictLabel(scaleOptions.value, key) || key;
}
const dialogVisible = ref(false);
// Current row being viewed
const currentRow = reactive({
regulationsAttachment: "",
planAttachment: "",
});
// View function
const handleView = (row: any) => {
console.log("View row:", row);
// Copy row data to currentRow
currentRow.regulationsAttachment = row.regulationsAttachment || "";
currentRow.planAttachment = row.planAttachment || "";
// Show dialog
dialogVisible.value = true;
};
const selectedFileType = ref("");
// View function
// const handleView = (row: any) => {
// console.log('View row:', row);
// };
const handleSearch = () => {
initDagl();
};
//
const handleReset = () => {
selectedFileType.value = "";
initDagl();
};
function downloadFile(item: string, index: number): void {
console.log(item, 1111);
const file = item;
console.log(file);
handlePreview(item);
}
function parseAttachments(attachment: string): [] {
return JSON.parse(attachment);
}
function handlePreview(file: object): void {
getFileStream({ fileName: file.fileName }).then((res) => {
const blob = new Blob([res], {
type: "application/xlsx",
});
const href = URL.createObjectURL(blob);
const a = document.createElement("a");
a.style.display = "none";
a.href = href;
a.download = file.name;
a.click();
URL.revokeObjectURL(a.href);
});
}
// Fetch safety appraisal data
// const fetchSafetyData = async () => {};
// // Fetch data based on resCode changes
// watch(
// () => props.resCode,
// (newVal) => {
// if (newVal) {
// fetchSafetyData();
// }
// },
// { immediate: true }
// );
function initDagl() {
const requestData: any = {
dikeCode: props.resCode,
};
//
if (selectedFileType.value) {
requestData.regulationsAttachment = selectedFileType.value;
}
listDagl({
page: 1,
pageSize: 10,
data: requestData,
}).then((res) => {
if (res) {
tableData.value = res.records || [];
}
});
}
onMounted(() => {
getType();
initDagl();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
.option-label {
margin-left: 10px;
margin-right: 8px;
}
}
.right-options {
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #666;
border-color: #666;
color: white;
}
}
}
.table-container {
.view-button {
color: #3a89fe;
}
}
}
</style>

638
src/views/Main/Dike/components/floodControlMaterials.vue

@ -0,0 +1,638 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<div class="search-item">
<span class="option-label">采购时间</span>
<el-date-picker
v-model="procurementTime"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="width: 240px"
/>
</div>
<div class="search-item" style="margin-left: 10px">
<span class="option-label">物资名称</span>
<el-input
v-model="materialName"
placeholder="请输入物资名称"
style="width: 200px"
/>
</div>
</div>
<div class="right-options">
<el-button
type="primary"
class="search-btn !ml-12"
@click="handleSearch"
>查询</el-button
>
<el-button @click="handleReset">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%; color: black">
<el-table-column type="index" label="序号" width="120" align="center" />
<el-table-column
prop="materialName"
label="物资名称"
width="180"
align="center"
/>
<el-table-column
prop="materialNumber"
label="物资数量"
align="center"
/>
<el-table-column prop="materialType" label="物资类型" align="center">
<template #default="scope">
{{ projTypeFormat(scope.row.materialType) }}
</template>
</el-table-column>
<el-table-column
prop="procurementTime"
label="采购时间"
align="center"
/>
<el-table-column prop="personName" label="负责人" align="center" />
<el-table-column label="操作" align="center" width="120">
<template #default="scope">
<el-button
type="text"
class="view-button"
@click="handleView(scope.row)"
>查看</el-button
>
</template>
</el-table-column>
</el-table>
</div>
<Teleport to="body">
<Transition name="dialog-fade">
<div
v-if="dialogVisible"
class="modern-dialog-overlay"
@click="handleOverlayClick"
>
<div class="modern-dialog-container" @click.stop>
<div class="modern-dialog-header">
<div class="modern-dialog-title">
<div class="title-icon">
<i class="el-icon-document"></i>
</div>
<h3>防汛物资详情</h3>
</div>
<button
class="modern-dialog-close"
@click="dialogVisible = false"
>
<svg viewBox="0 0 24 24" width="24" height="24">
<path
fill="currentColor"
d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
/>
</svg>
</button>
</div>
<div class="modern-dialog-content">
<div class="detail-card">
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">物资名称</span>
<span class="detail-value">{{
currentRow.materialName || "--"
}}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">负责人</span>
<span class="detail-value">{{
currentRow.personName || "--"
}}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">负责人电话</span>
<span class="detail-value">{{
currentRow.personPhone || "--"
}}</span>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">负责人职务</span>
<div class="detail-value">
{{ currentRow.personLevel || "--" }}
</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">物资数量</span>
<div class="detail-value">
{{ currentRow.materialNumber || "--" }}
</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">采购时间</span>
<div class="detail-value">
{{ currentRow.procurementTime || "--" }}
</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">物资种类</span>
<div class="detail-value">
{{ projTypeFormat(currentRow.materialType) || "--" }}
</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">保质期</span>
<div class="detail-value">
{{ currentRow.shelfLife || "--" }}
</div>
</div>
</div>
</div>
</div>
<div class="modern-dialog-footer">
<el-button class="close-button" @click="dialogVisible = false"
>关闭</el-button
>
</div>
</div>
</div>
</Transition>
</Teleport>
<!-- <el-dialog-->
<!-- v-model="dialogVisible"-->
<!-- title="物资详情"-->
<!-- width="50%"-->
<!-- :before-close="handleDialogClose"-->
<!-- >-->
<!-- <div class="detail-container">-->
<!-- <div class="detail-item">-->
<!-- <span class="detail-label">物资名称</span>-->
<!-- <span class="detail-value">{{ currentRow.materialName || '&#45;&#45;' }}</span>-->
<!-- </div>-->
<!-- <div class="detail-item">-->
<!-- <span class="detail-label">物资数量</span>-->
<!-- <span class="detail-value">{{ currentRow.materialNumber || '&#45;&#45;' }}</span>-->
<!-- </div>-->
<!-- <div class="detail-item">-->
<!-- <span class="detail-label">物资类型</span>-->
<!-- <span class="detail-value">{{ projTypeFormat(currentRow.materialType) || '&#45;&#45;' }}</span>-->
<!-- </div>-->
<!-- <div class="detail-item">-->
<!-- <span class="detail-label">采购时间</span>-->
<!-- <span class="detail-value">{{ currentRow.procurementTime || '&#45;&#45;' }}</span>-->
<!-- </div>-->
<!-- <div class="detail-item">-->
<!-- <span class="detail-label">负责人</span>-->
<!-- <span class="detail-value">{{ currentRow.personName || '&#45;&#45;' }}</span>-->
<!-- </div>-->
<!-- </div>-->
<!-- <template #footer>-->
<!-- <div class="dialog-footer">-->
<!-- <el-button @click="dialogVisible = false">关闭</el-button>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-dialog>-->
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch, reactive } from "vue";
import type { PropType } from "vue";
import { listAqjdxx, listFzwz } from "~/api/dike";
import { getDictLabel } from "~/utils/dictUtils";
import { getDicts } from "~/api/common";
const handleOverlayClick = (e: MouseEvent) => {
dialogVisible.value = false;
};
const props = defineProps({
resCode: {
type: String as PropType<string>,
},
});
const dateRange = ref([]);
const materialName = ref("");
const responsiblePerson = ref("");
const procurementTime = ref(null);
// Dialog visibility
const dialogVisible = ref(false);
// Current row being viewed
const currentRow = reactive({
materialName: "",
materialNumber: "",
personLevel: "",
personPhone: "",
shelfLife: "",
materialType: "",
procurementTime: "",
personName: "",
});
const handleReset = () => {
procurementTime.value = null;
materialName.value = "";
responsiblePerson.value = "";
initFxwz();
};
// View function
const handleView = (row: any) => {
console.log("View row:", row);
// Copy row data to currentRow
currentRow.materialName = row.materialName || "";
currentRow.materialNumber = row.materialNumber || "";
currentRow.materialType = row.materialType || "";
currentRow.procurementTime = row.procurementTime || "";
currentRow.personName = row.personName || "";
(currentRow.personPhone = row.personPhone || ""),
(currentRow.personLevel = row.personLevel || ""),
(currentRow.shelfLife = row.shelfLife || "");
// Show dialog
dialogVisible.value = true;
};
const typesMaterials = ref([]);
// Handle dialog close
const handleDialogClose = () => {
dialogVisible.value = false;
};
function getType() {
getDicts("types_materials").then((res) => {
typesMaterials.value = res || [];
console.log(typesMaterials.value, "11111");
});
}
function projTypeFormat(key: string) {
if (!key) return "--";
return getDictLabel(typesMaterials.value, key) || key;
}
// Search function
const handleSearch = () => {
initFxwz();
};
// Data for the table
const tableData = ref([]);
// Search parameters
const searchDate = ref([]);
// View function
// Fetch safety appraisal data
// const fetchSafetyData = async () => {};
// // Fetch data based on resCode changes
// watch(
// () => props.resCode,
// (newVal) => {
// if (newVal) {
// fetchSafetyData();
// }
// },
// { immediate: true }
// );
function initFxwz() {
const requestData: any = {
dikeCode: props.resCode,
};
if (procurementTime.value) {
requestData.procurementTime = procurementTime.value;
}
// Add search parameters if they exist
if (materialName.value) {
requestData.materialName = materialName.value;
}
if (responsiblePerson.value) {
requestData.personName = responsiblePerson.value;
}
// Add date range if selected
listFzwz({
page: 1,
pageSize: 10,
data: requestData,
}).then((res) => {
if (res) {
tableData.value = res.records || [];
}
});
}
onMounted(() => {
getType();
initFxwz();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 15px;
.search-item {
display: flex;
align-items: center;
.option-label {
padding: 15px;
white-space: nowrap;
}
}
}
.right-options {
display: flex;
align-items: center;
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #666;
border-color: #666;
color: white;
}
}
}
.table-container {
.view-button {
color: #3a89fe;
}
}
}
/* 详情对话框样式 */
.detail-container {
padding: 10px;
.detail-item {
margin-bottom: 15px;
display: flex;
.detail-label {
width: 100px;
font-weight: 500;
color: #606266;
}
.detail-value {
flex: 1;
color: #333;
}
}
}
.dialog-footer {
text-align: right;
margin-top: 20px;
}
.dialog-fade-enter-active,
.dialog-fade-leave-active {
transition:
opacity 0.3s ease,
transform 0.3s ease;
}
.dialog-fade-enter-from,
.dialog-fade-leave-to {
opacity: 0;
transform: scale(0.9);
}
.modern-dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 2000;
}
.modern-dialog-container {
width: 550px;
max-width: 90%;
background: #fff;
border-radius: 12px;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
flex-direction: column;
animation: dialog-slide-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes dialog-slide-in {
0% {
opacity: 0;
transform: translateY(30px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.modern-dialog-header {
padding: 20px 24px;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
color: #fff;
.modern-dialog-title {
display: flex;
align-items: center;
.title-icon {
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.2);
}
h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
}
}
.modern-dialog-close {
background: transparent;
border: none;
cursor: pointer;
color: #fff;
width: 32px;
height: 22px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.2s;
&:hover {
background-color: rgba(255, 255, 255, 0.2);
}
}
}
.modern-dialog-content {
padding: 24px;
flex: 1;
overflow-y: auto;
.detail-card {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
}
.detail-item {
display: flex;
align-items: flex-start;
margin-bottom: 5px;
padding-bottom: 5px;
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
transition:
transform 0.2s,
box-shadow 0.2s;
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
&:hover {
transform: translateX(5px);
}
.detail-icon {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 8px;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
margin-right: 16px;
}
.detail-content {
flex: 1;
display: flex;
flex-direction: column;
}
.detail-label {
font-size: 14px;
color: #666;
margin-bottom: 6px;
}
.detail-value {
font-size: 16px;
font-weight: 500;
color: #333;
}
&.conclusion-item {
.conclusion-value {
font-size: 16px;
font-weight: 500;
color: #333;
padding: 12px;
background: #fff;
border-radius: 6px;
border-left: 4px solid #0acccc;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
}
}
}
.modern-dialog-footer {
padding: 16px 24px;
display: flex;
justify-content: flex-end;
background: #f8f9fa;
border-top: 1px solid #e9ecef;
.close-button {
background: linear-gradient(135deg, #2c7ef8 0%, #2c5ef8 100%);
border: none;
color: white;
padding: 10px 24px;
border-radius: 6px;
font-weight: 500;
cursor: pointer;
transition:
transform 0.15s,
box-shadow 0.15s;
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(44, 126, 248, 0.3);
}
&:active {
transform: translateY(0);
}
}
}
</style>

450
src/views/Main/Dike/components/safetyAppraisal.vue

@ -0,0 +1,450 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<span class="option-label">安全评定时间</span>
<el-date-picker
v-model="identifyTime"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="color: black"
/>
</div>
<div class="right-options">
<el-button type="primary" class="search-btn !ml-12" @click="handleSearch">查询</el-button>
<el-button @click="resetFilter">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%;color: black" class="custom-table">
<el-table-column type="index" label="序号" width="120" align="center"/>
<el-table-column prop="identifyTime" label="安全评定时间" width="180" align="center" />
<el-table-column prop="safetyEvaluationUnit" label="安全评的单位" align="center" />
<el-table-column prop="unitQualification" label="评价单位资质" align="center" />
<el-table-column prop="mainIssues" label="安全评价结论" align="center" />
<el-table-column label="操作" align="center" width="120">
<template #default="scope">
<el-button type="text" class="view-button" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Teleport to="body">
<Transition name="dialog-fade">
<div v-if="dialogVisible" class="modern-dialog-overlay" @click="handleOverlayClick">
<div class="modern-dialog-container" @click.stop>
<div class="modern-dialog-header">
<div class="modern-dialog-title">
<div class="title-icon">
<i class="el-icon-document"></i>
</div>
<h3>安全评定详情</h3>
</div>
<button class="modern-dialog-close" @click="dialogVisible = false">
<svg viewBox="0 0 24 24" width="24" height="24">
<path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
</svg>
</button>
</div>
<div class="modern-dialog-content">
<div class="detail-card">
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">安全评定时间</span>
<span class="detail-value">{{ currentRow.identifyTime || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">安全评的单位</span>
<span class="detail-value">{{ currentRow.safetyEvaluationUnit || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">评价单位资质</span>
<span class="detail-value">{{ currentRow.unitQualification || '--' }}</span>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">安全评价结论</span>
<div class="conclusion-value">{{ currentRow.mainIssues || '--' }}</div>
</div>
</div>
</div>
</div>
<div class="modern-dialog-footer">
<el-button class="close-button" @click="dialogVisible = false">关闭</el-button>
</div>
</div>
</div>
</Transition>
</Teleport>
</div>
</template>
<script setup lang="ts">
import {ref, onMounted, watch, reactive} from 'vue';
import type { PropType } from 'vue';
import {listAqjdxx, listJyjl} from "~/api/dike";
const props = defineProps({
resCode: {
type: String as PropType<string>,
},
});
// Data for the table
const tableData = ref([]);
const identifyTime = ref(null);
// Search parameters
const searchDate = ref([]);
// Watch for resCode changes
// watch(
// () => props.resCode,
// (newVal) => {
// if (newVal) {
// fetchSafetyData();
// }
// },
// { immediate: true }
// );
// Fetch safety appraisal data
// const fetchSafetyData = async () => {
//
// };
// Current row data for dialog
const currentRow = reactive({
identifyTime: '',
safetyEvaluationUnit: '',
unitQualification: '',
mainIssues: ''
});
const handleSearch = () => {
initSafe();
};
// Dialog visibility
const dialogVisible = ref(false);
// Handle viewing a row
const handleView = (row: any) => {
console.log('View row:', row);
// Copy row data to currentRow
currentRow.identifyTime = row.identifyTime || '';
currentRow.safetyEvaluationUnit = row.safetyEvaluationUnit || '';
currentRow.unitQualification = row.unitQualification || '';
currentRow.mainIssues = row.mainIssues || '';
// Show dialog with animation
dialogVisible.value = true;
};
// Handle dialog overlay click
const handleOverlayClick = (e: MouseEvent) => {
dialogVisible.value = false;
};
// Reset filter
const resetFilter = () => {
identifyTime.value = null;
initSafe();
};
// Initialize safety data
function initSafe() {
console.log("Selected date:", identifyTime.value);
// Build request data object
const requestData: any = {
dikeCode: props.resCode
};
// Only add identifyTime if it has a value
if (identifyTime.value) {
requestData.identifyTime= identifyTime.value;
}
listAqjdxx({
page: 1,
pageSize: 10,
data: requestData,
}).then((res) => {
if (res) {
tableData.value=res.records || [];
}
});
}
onMounted(() => {
initSafe();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
color: #333;
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
.option-label {
margin-right: 8px;
}
}
.right-options {
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #666;
border-color: #666;
color: black;
}
}
}
.table-container {
.custom-table {
.el-table__cell {
color: #333;
}
}
.view-button {
color: #3a89fe;
}
}
}
/* 惊艳的弹窗样式 */
.dialog-fade-enter-active,
.dialog-fade-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
.dialog-fade-enter-from,
.dialog-fade-leave-to {
opacity: 0;
transform: scale(0.9);
}
.modern-dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 2000;
}
.modern-dialog-container {
width: 550px;
max-width: 90%;
background: #fff;
border-radius: 12px;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
flex-direction: column;
animation: dialog-slide-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes dialog-slide-in {
0% {
opacity: 0;
transform: translateY(30px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.modern-dialog-header {
padding: 20px 24px;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
color: #fff;
.modern-dialog-title {
display: flex;
align-items: center;
.title-icon {
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.2);
}
h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
}
}
.modern-dialog-close {
background: transparent;
border: none;
cursor: pointer;
color: #fff;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.2s;
&:hover {
background-color: rgba(255, 255, 255, 0.2);
}
}
}
.modern-dialog-content {
padding: 24px;
flex: 1;
overflow-y: auto;
.detail-card {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
}
.detail-item {
display: flex;
align-items: flex-start;
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
transition: transform 0.2s, box-shadow 0.2s;
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
&:hover {
transform: translateX(5px);
}
.detail-icon {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 8px;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
margin-right: 16px;
}
.detail-content {
flex: 1;
display: flex;
flex-direction: column;
}
.detail-label {
font-size: 14px;
color: #666;
margin-bottom: 6px;
}
.detail-value {
font-size: 16px;
font-weight: 500;
color: #333;
}
&.conclusion-item {
.conclusion-value {
font-size: 16px;
font-weight: 500;
color: #333;
padding: 12px;
background: #fff;
border-radius: 6px;
border-left: 4px solid #0acccc;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
}
}
}
.modern-dialog-footer {
padding: 16px 24px;
display: flex;
justify-content: flex-end;
background: #f8f9fa;
border-top: 1px solid #e9ecef;
.close-button {
background: linear-gradient(135deg, #2C7EF8 0%, #2C5EF8 100%);
border: none;
color: white;
padding: 10px 24px;
border-radius: 6px;
font-weight: 500;
cursor: pointer;
transition: transform 0.15s, box-shadow 0.15s;
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(44, 126, 248, 0.3);
}
&:active {
transform: translateY(0);
}
}
}
</style>

24
src/views/Main/Dike/index.vue

@ -52,19 +52,37 @@
:resCode="resCode"
></PestAnimalAnalysis>
</el-tab-pane>
<el-tab-pane label="安全鉴定" name="" lazy disabled> </el-tab-pane>
<el-tab-pane label="安全鉴定" name="6" lazy >
<safetyAppraisal
ref="safetyAppraisal"
:resCode="resCode"
/>
</el-tab-pane>
<el-tab-pane label="病险核查" name="" lazy disabled> </el-tab-pane>
<el-tab-pane label="防汛物资" name="" lazy disabled> </el-tab-pane>
<el-tab-pane label="档案管理" name="" lazy disabled> </el-tab-pane>
<el-tab-pane label="防汛物资" name="8" lazy >
<floodControlMaterials
ref="floodControlMaterials"
:resCode="resCode"
/>
</el-tab-pane>
<el-tab-pane label="档案管理" name="9" lazy >
<fileManagement
ref="fileManagement"
:resCode="resCode"
/>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, watch, onMounted } from "vue";
import floodControlMaterials from './components/floodControlMaterials.vue'
import fileManagement from './components/fileManagement.vue'
import BaseInfo from "./components/BaseInfo.vue";
import DataStatistics from "./components/DataStatistics.vue";
import MonitorWarning from "./components/MonitorWarning.vue";
import safetyAppraisal from "./components/safetyAppraisal.vue"
import StatisticsAnalysis from "./components/StatisticsAnalysis.vue";
import PestAnimalAnalysis from "./components/PestAnimalAnalysis.vue";
import { Close } from "@element-plus/icons-vue";

9
src/views/Main/Reservoir/components/BaseInfo.vue

@ -106,7 +106,7 @@
</el-descriptions-item>
<el-descriptions-item>
<template #label> 工程建设情况 </template>
{{ form.engStat }}
{{ engStateFormat(form.engStat) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 有效年份 </template>
@ -566,6 +566,10 @@ const props = defineProps({
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
situationOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
});
let myChart: any = null;
let code: any = null;
@ -747,6 +751,9 @@ function scaleFormat(key: string) {
function departmentFormat(key: string) {
return getDictLabel(props.departmentOptions, key);
}
function engStateFormat(key: string) {
return getDictLabel(props.situationOptions, key);
}
watch(
() => props.resCode,

5
src/views/Main/Reservoir/index.vue

@ -28,6 +28,7 @@
:projTypeOptions="projTypeOptions"
:scaleOptions="scaleOptions"
:departmentOptions="departmentOptions"
:situationOptions="situationOptions"
@getResInfo="handleGetResInfo"
></BaseInfo>
</el-tab-pane>
@ -117,6 +118,7 @@ const gradeOptions = ref([]);
const projTypeOptions = ref([]);
const scaleOptions = ref([]);
const departmentOptions = ref([]);
const situationOptions = ref([]);
function initDict() {
getDicts("reservoir_type").then((res) => {
projTypeOptions.value = res || [];
@ -130,6 +132,9 @@ function initDict() {
getDicts("centralized_management_department").then((res) => {
departmentOptions.value = res || [];
});
getDicts("res_engineering_construct_situation").then((res) => {
situationOptions.value = res || [];
});
}
function scaleFormat(key: string) {

348
src/views/Main/Sluice/components/BaseInfo.vue

@ -180,18 +180,254 @@
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="水位过闸流量" name="3">
<el-descriptions
class="margin-top"
:column="2"
border
:labelStyle="{
'text-align': 'left',
width: '180px',
height: '50px',
}"
:contentStyle="{ minWidth: '350px' }"
>
<el-descriptions-item>
<template #label> 水闸名称 </template>
{{ form.wagaName }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 记录更新时间 </template>
{{ form.updateDate }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸上水位m </template>
{{ form.uswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸下水位m </template>
{{ form.dswl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 过闸总流量m/s </template>
{{ form.ttfl }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 备注 </template>
{{ form.note }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="工程特性" name="4">
<el-descriptions
class="margin-top"
:column="2"
border
:labelStyle="{
'text-align': 'left',
width: '180px',
height: '50px',
}"
:contentStyle="{ minWidth: '350px' }"
>
<el-descriptions-item>
<template #label> 枢纽组成简介 </template>
{{ form.hfBrf }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 运用原则 </template>
{{ form.opPr }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸基地质条件 </template>
{{ form.slbsglcn }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 地震基本烈度 </template>
{{ form.bsssin }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 设防地震烈度 </template>
{{ form.freqin }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 是否穿堤建筑物 </template>
{{ leStruFlagFormat(form.leStruFlag) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸上游堤顶高程 </template>
{{ form.gubTel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸下游堤顶高程 </template>
{{ form.gdbTel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸门全开需要时间 </template>
{{ form.gtfloptm }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 存在问题 </template>
{{ form.existQa }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 备注 </template>
{{ form.note }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="工程结构" name="5">
<el-descriptions
class="margin-top"
:column="2"
border
:labelStyle="{
'text-align': 'left',
width: '180px',
height: '50px',
}"
:contentStyle="{ minWidth: '350px' }"
>
<!-- <el-descriptions-item>-->
<!-- <template #label> 近闸边坡稳定性 </template>-->
<!-- {{ this.form.nrgtslst }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item>
<template #label> 水闸名称 </template>
{{ form.wagaName }}
</el-descriptions-item>
<!-- <el-descriptions-item>-->
<!-- <template #label> 闸室结构 </template>-->
<!-- {{ this.form.slwrst }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item>
<template #label> 启闭机型式 </template>
{{form.hseq }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 启闭机数量 </template>
{{ form.hsgram }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 记录更新时间 </template>
{{form.updateDate }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸室结构 </template>
{{ slwrstFormat(form.slwrst) }}
</el-descriptions-item>
<!-- <el-descriptions-item>-->
<!-- <template #label> 闸孔净高m </template>-->
<!-- {{ this.form.gthlnthg }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item>
<template #label> 闸孔净宽m </template>
{{ form.gthlntwd }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸孔数量 </template>
{{ form.gaorNum }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 副闸闸孔数量 </template>
{{ form.agaorNum }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 副闸闸孔总净宽m </template>
{{ form.agthlntwd }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 高程系统 </template>
{{ gcxtFormat(form.elevSys) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 高程转换值 </template>
{{ form.elevSysConver }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>启闭机型式 </template>
{{ machineFormFormat(form.hseq) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 启闭机数量 </template>
{{ form.hsgram }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸门顶高程m </template>
{{ form.gttpel }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 消能型式 </template>
{{ endsstFormat(form.endsst) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 闸门型式 </template>
{{ gtstFormat(form.gtst) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 备注 </template>
{{ form.note }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="出险记录" name="6">
<el-descriptions
class="margin-top"
:column="2"
border
:labelStyle="{
'text-align': 'left',
width: '180px',
height: '50px',
}"
:contentStyle="{ minWidth: '350px' }"
>
<el-descriptions-item>
<template #label> 水闸名称 </template>
{{ form.wagaName }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 记录更新时间 </template>
{{ form.updateDate }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 险情描述 </template>
{{ form.dnstov }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 出险时间 </template>
{{ form.dntm }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 水闸险情类别 </template>
{{ dnstgrFormat(form.wagaDnstgr) }}
</el-descriptions-item>
<el-descriptions-item>
<template #label> 备注 </template>
{{ form.note }}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script lang="ts" setup>
import { ref, watch } from "vue";
import { getJbxx, listSwtz } from "@/api/sluice";
import {getJbxx, listCxjl, listGcjg, listGctx, listSwtz, listXlnl} from "@/api/sluice";
import { getDictLabel } from "@/utils/dictUtils";
const props = defineProps({
resCode: {
type: String,
default: "",
},
projTypeOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
@ -209,10 +445,40 @@ const props = defineProps({
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
mainOptions:{
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
gcxtOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
slwrstOptions:{
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
endsstOptions:{
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
leStruFlagOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
gtstOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
seismicOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
dnstgrOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
},
departmentOptions: {
type: Array<{ dictLabel: string; dictValue: string }>,
default: [],
@ -223,6 +489,10 @@ const activeName: any = ref("1");
let typeApi: any = {
["1"]: initBaseAndRsppInfo,
["2"]: initBaseAndRsppInfo,
["3"]: initXlnl,
["4"]:initGctx,
["5"]:initGcjg,
["6"]:initCxjl,
};
const form: any = ref({});
const emits = defineEmits(["getResInfo"]);
@ -242,7 +512,57 @@ function initRsppInfo() {
pageNum: 1,
pageSize: 10,
data: {
wagaId: props.resCode,
wagaCode: props.resCode,
},
}).then((res) => {
if (res?.records) {
Object.assign(form.value, res.records[0] || {});
}
});
}function initXlnl() {
listXlnl({
pageNum: 1,
pageSize: 10,
data: {
wagaCode: props.resCode,
},
}).then((res) => {
if (res?.records) {
Object.assign(form.value, res.records[0] || {});
}
});
}function initGctx() {
listGctx({
pageNum: 1,
pageSize: 10,
data: {
wagaCode: props.resCode,
},
}).then((res) => {
if (res?.records) {
Object.assign(form.value, res.records[0] || {});
}
});
}
function initGcjg() {
listGcjg({
pageNum: 1,
pageSize: 10,
data: {
wagaCode: props.resCode,
},
}).then((res) => {
if (res?.records) {
Object.assign(form.value, res.records[0] || {});
}
});
}
function initCxjl() {
listCxjl({
pageNum: 1,
pageSize: 10,
data: {
wagaCode: props.resCode,
},
}).then((res) => {
if (res?.records) {
@ -275,9 +595,31 @@ function gradeFormat(key: string) {
function scaleFormat(key: string) {
return getDictLabel(props.scaleOptions, key);
}
function dnstgrFormat(key: string) {
return getDictLabel(props.dnstgrOptions, key);
}
function machineFormFormat(key: string) {
return getDictLabel(props.mainOptions, key);
}
function buildingLevelFormat(key: string) {
return getDictLabel(props.buildingLevelOptions, key);
}
function endsstFormat(key: string) {
return getDictLabel(props.endsstOptions, key);
}
function slwrstFormat(key:string){
return getDictLabel(props.slwrstOptions,key)
}
function gcxtFormat(key:string){
return getDictLabel(props.gcxtOptions,key)
}
function leStruFlagFormat(key: string) {
return getDictLabel(props.leStruFlagOptions, key);
}
function gtstFormat(key: string) {
return getDictLabel(props.leStruFlagOptions, key);
}
function seismicFormat(key: string) {
return getDictLabel(props.seismicOptions, key);
}

252
src/views/Main/Sluice/components/fileManagement.vue

@ -0,0 +1,252 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<div class="search-item">
<span class="option-label">档案类型</span>
<el-select
v-model="selectedFileType"
placeholder="请选择档案类型"
clearable
style="width: 200px"
>
<el-option
v-for="item in scaleOptions"
:key="item.dictValue"
:label="item.dictLabel"
:value="item.dictValue"
/>
</el-select>
</div>
</div>
<div class="right-options">
<el-button
type="primary"
class="search-btn !ml-12"
@click="handleSearch"
>查询</el-button
>
<el-button @click="handleReset">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%; color: black">
<el-table-column type="index" label="序号" width="120" align="center" />
<el-table-column
prop="regulationsAttachment"
label="档案类型"
width="650"
align="center"
>
<template #default="{ row }">
{{ projTypeFormat(row.regulationsAttachment) }}
</template>
</el-table-column>
<el-table-column prop="planAttachment" label="档案附件" align="center">
<template #default="{ row }">
<div
v-for="(item, index) in parseAttachments(row.planAttachment)"
:key="index"
>
<i class="el-icon-document"></i>
{{ item.name }}
<i class="el-icon-download" style="cursor: pointer"></i>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch } from "vue";
import type { PropType } from "vue";
import { listDaglsz } from "~/api/sluice";
import { getDicts } from "~/api/common";
import { getDictLabel } from "~/utils/dictUtils";
// import {getFileStream} from "~/api/common"; //
interface FileItem {
fileName: string;
name: string;
[key: string]: any;
}
const props = defineProps({
resCode: {
type: String as PropType<string>,
},
});
//
const selectedFileType = ref("");
const scaleOptions = ref([]);
function getType() {
getDicts("file_data_type").then((res) => {
scaleOptions.value = res || [];
});
}
// Data for the table
const tableData = ref([]);
// Search parameters
const searchDate = ref([]);
// View function
// const handleView = (row: any) => {
// console.log('View row:', row);
// };
//
const handleSearch = () => {
initDagl();
};
const handleView = (row: any) => {
console.log("View row:", row);
// Copy row data to currentRow
currentRow.regulationsAttachment = row.regulationsAttachment || "";
currentRow.planAttachment = row.planAttachment || "";
// Show dialog
dialogVisible.value = true;
};
//
const handleReset = () => {
selectedFileType.value = "";
initDagl();
};
function projTypeFormat(key: string) {
console.log(scaleOptions.value, 11111111);
return getDictLabel(scaleOptions.value, key);
}
function downloadFile(item: string, index: number): void {
const file = JSON.parse(item)[index];
handlePreview(file);
}
function parseAttachments(attachment: string): FileItem[] {
if (!attachment) return [];
try {
return JSON.parse(attachment);
} catch (error) {
console.error("Error parsing attachments:", error);
return [];
}
}
function handlePreview(file: { fileName: string; name: string }): void {
// getFileStream({ fileName: file.fileName }).then((res) => {
// const blob = new Blob([res], {
// type: "application/xlsx",
// });
// const href = URL.createObjectURL(blob);
// const a = document.createElement("a");
// a.style.display = "none";
// a.href = href;
// a.download = file.name;
// a.click();
// URL.revokeObjectURL(a.href);
// });
}
// Fetch data based on resCode changes
// watch(
// () => props.resCode,
// (newVal) => {
// if (newVal) {
// fetchSafetyData();
// }
// },
// { immediate: true }
// );
// // Fetch safety appraisal data
// const fetchSafetyData = async () => {
// };
function initDagl() {
//
const requestData: any = {
wagaCode: props.resCode,
};
//
if (selectedFileType.value) {
requestData.regulationsAttachment = selectedFileType.value;
}
listDaglsz({
page: 1,
pageSize: 10,
data: requestData,
})
.then((res) => {
if (res) {
tableData.value = res.records || [];
}
})
.catch((error) => {
console.error("API error:", error);
});
}
onMounted(() => {
getType();
initDagl();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
.search-item {
display: flex;
align-items: center;
.option-label {
margin-right: 8px;
white-space: nowrap;
}
}
}
.right-options {
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #666;
border-color: #666;
color: white;
}
}
}
.table-container {
.view-button {
color: #3a89fe;
}
}
}
</style>

553
src/views/Main/Sluice/components/floodControlMaterials.vue

@ -0,0 +1,553 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<div class="search-item">
<span class="option-label">采购时间</span>
<el-date-picker
v-model="procurementTime"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="width: 240px"
/>
</div>
<div class="search-item">
<span class="option-label">物资名称</span>
<el-input
v-model="materialName"
placeholder="请输入物资名称"
style="width: 200px"
/>
</div>
</div>
<div class="right-options">
<el-button type="primary" class="search-btn !ml-12" @click="handleSearch">查询</el-button>
<el-button @click="handleReset">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%;color: black">
<el-table-column type="index" label="序号" width="120" align="center" />
<el-table-column prop="materialName" label="物资名称" width="180" align="center" />
<el-table-column prop="materialNumber" label="物资数量" align="center" />
<el-table-column prop="materialType" label="物资类型" align="center" >
<template #default="scope">
{{projTypeFormat(scope.row.materialType)}}
</template>
</el-table-column> <el-table-column prop="purchaseTime" label="采购时间" align="center" />
<el-table-column prop="responsiblePerson" label="负责人" align="center" />
<el-table-column label="操作" align="center" width="100">
<template #default="scope">
<el-button type="text" class="view-button" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 查看详情对话框 -->
<Teleport to="body">
<Transition name="dialog-fade">
<div v-if="dialogVisible" class="modern-dialog-overlay" @click="handleOverlayClick">
<div class="modern-dialog-container" @click.stop>
<div class="modern-dialog-header">
<div class="modern-dialog-title">
<div class="title-icon">
<i class="el-icon-document"></i>
</div>
<h3>防汛物资详情</h3>
</div>
<button class="modern-dialog-close" @click="dialogVisible = false">
<svg viewBox="0 0 24 24" width="24" height="24">
<path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
</svg>
</button>
</div>
<div class="modern-dialog-content">
<div class="detail-card">
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">物资名称</span>
<span class="detail-value">{{ currentRow.materialName || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">负责人</span>
<span class="detail-value">{{ currentRow.personName || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">负责人电话</span>
<span class="detail-value">{{ currentRow.personPhone || '--' }}</span>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">负责人职务</span>
<div class="detail-value">{{ currentRow.personLevel || '--' }}</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">物资数量</span>
<div class="detail-value">{{ currentRow.materialNumber || '--' }}</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">采购时间</span>
<div class="detail-value">{{ currentRow.procurementTime || '--' }}</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">物资种类</span>
<div class="detail-value">{{ projTypeFormat(currentRow.materialType) || '--' }}</div>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">保质期</span>
<div class="detail-value">{{ currentRow.shelfLife || '--' }}</div>
</div>
</div>
</div>
</div>
<div class="modern-dialog-footer">
<el-button class="close-button" @click="dialogVisible = false">关闭</el-button>
</div>
</div>
</div>
</Transition>
</Teleport>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, watch, reactive } from 'vue';
import type { PropType } from 'vue';
import {listFzwz} from "~/api/sluice";
import {getDicts} from "~/api/common";
import {getDictLabel} from "~/utils/dictUtils";
const props = defineProps({
resCode: {
type: String as PropType<string>
},
});
// Data for the table
const tableData = ref([]);
// Search parameters
const dateRange = ref([]);
const materialName = ref('');
const responsiblePerson = ref('');
// Dialog visibility
const dialogVisible = ref(false);
const typesMaterials=ref([])
// Current row being viewed
const currentRow = reactive({
materialName: '',
materialNumber: '',
personLevel:'',
personPhone:'',
shelfLife:'',
materialType: '',
procurementTime: '',
personName: ''
});
function getType() {
getDicts("types_materials").then((res) => {
typesMaterials.value = res || [];
});
}
// View function
const handleView = (row: any) => {
console.log('View row:', row);
// Copy row data to currentRow
currentRow.materialName = row.materialName || '';
currentRow.materialNumber = row.materialNumber || '';
currentRow.materialType = row.materialType || '';
currentRow.procurementTime = row.procurementTime || '';
currentRow.personName = row.personName || '';
currentRow.personPhone=row.personPhone||'',
currentRow.personLevel=row.personLevel||'',
currentRow.shelfLife=row.shelfLife||''
// Show dialog
dialogVisible.value = true;
};
// Handle dialog close
const handleDialogClose = () => {
dialogVisible.value = false;
};
const handleOverlayClick = (e: MouseEvent) => {
dialogVisible.value = false;
};
// Search function
const handleSearch = () => {
initFxwz();
};
// Reset function
const handleReset = () => {
procurementTime.value = null;
materialName.value = '';
responsiblePerson.value = '';
initFxwz();
};
// Fetch data based on resCode changes
watch(
() => props.resCode,
(newVal) => {
if (newVal) {
initFxwz();
}
},
{ immediate: true }
);
const procurementTime=ref(null)
function initFxwz() {
// Prepare request data
const requestData: any = {
wagaCode: props.resCode,
};
if (procurementTime.value){
requestData.procurementTime=procurementTime.value;
}
// Add search parameters if they exist
if (materialName.value) {
requestData.materialName = materialName.value;
}
if (responsiblePerson.value) {
requestData.responsiblePerson = responsiblePerson.value;
}
// Add date range if selected
listFzwz({
page: 1,
pageSize: 10,
data: requestData,
}).then((res) => {
if (res) {
tableData.value = res.records || [];
}
}).catch(error => {
console.error("API error:", error);
});
}
function projTypeFormat(key: string) {
if (!key) return '--';
return getDictLabel(typesMaterials.value, key) || key;
}
onMounted(() => {
getType()
initFxwz();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 15px;
.search-item {
display: flex;
align-items: center;
.option-label {
padding: 15px;
white-space: nowrap;
}
}
}
.right-options {
display: flex;
align-items: center;
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #666;
border-color: #666;
color: white;
}
}
}
.table-container {
.view-button {
color: #3a89fe;
}
}
}
/* 详情对话框样式 */
.detail-container {
padding: 10px;
.detail-item {
margin-bottom: 15px;
display: flex;
.detail-label {
width: 100px;
font-weight: 500;
color: #606266;
}
.detail-value {
flex: 1;
color: #333;
}
}
}
.dialog-footer {
text-align: right;
margin-top: 20px;
}
.dialog-fade-enter-active,
.dialog-fade-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
.dialog-fade-enter-from,
.dialog-fade-leave-to {
opacity: 0;
transform: scale(0.9);
}
.modern-dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 2000;
}
.modern-dialog-container {
width: 550px;
max-width: 90%;
background: #fff;
border-radius: 12px;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
flex-direction: column;
animation: dialog-slide-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes dialog-slide-in {
0% {
opacity: 0;
transform: translateY(30px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.modern-dialog-header {
padding: 20px 24px;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
color: #fff;
.modern-dialog-title {
display: flex;
align-items: center;
.title-icon {
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.2);
}
h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
}
}
.modern-dialog-close {
background: transparent;
border: none;
cursor: pointer;
color: #fff;
width: 32px;
height: 22px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.2s;
&:hover {
background-color: rgba(255, 255, 255, 0.2);
}
}
}
.modern-dialog-content {
padding: 24px;
flex: 1;
overflow-y: auto;
.detail-card {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
}
.detail-item {
display: flex;
align-items: flex-start;
margin-bottom: 5px;
padding-bottom: 5px;
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
transition: transform 0.2s, box-shadow 0.2s;
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
&:hover {
transform: translateX(5px);
}
.detail-icon {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 8px;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
margin-right: 16px;
}
.detail-content {
flex: 1;
display: flex;
flex-direction: column;
}
.detail-label {
font-size: 14px;
color: #666;
margin-bottom: 6px;
}
.detail-value {
font-size: 16px;
font-weight: 500;
color: #333;
}
&.conclusion-item {
.conclusion-value {
font-size: 16px;
font-weight: 500;
color: #333;
padding: 12px;
background: #fff;
border-radius: 6px;
border-left: 4px solid #0acccc;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
}
}
}
.modern-dialog-footer {
padding: 16px 24px;
display: flex;
justify-content: flex-end;
background: #f8f9fa;
border-top: 1px solid #e9ecef;
.close-button {
background: linear-gradient(135deg, #2C7EF8 0%, #2C5EF8 100%);
border: none;
color: white;
padding: 10px 24px;
border-radius: 6px;
font-weight: 500;
cursor: pointer;
transition: transform 0.15s, box-shadow 0.15s;
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(44, 126, 248, 0.3);
}
&:active {
transform: translateY(0);
}
}
}
</style>

440
src/views/Main/Sluice/components/safetyAppraisal.vue

@ -0,0 +1,440 @@
<template>
<div class="safety-appraisal-container">
<div class="top-options">
<div class="left-options">
<span class="option-label">安全评定时间</span>
<el-date-picker
v-model="identifyTime"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
style="color: black"
/>
</div>
<div class="right-options">
<el-button type="primary" class="search-btn !ml-12" @click="handleSearch">查询</el-button>
<el-button @click="resetFilter">重置</el-button>
</div>
</div>
<div class="table-container">
<el-table :data="tableData" border style="width: 100%;color: black" class="custom-table">
<el-table-column type="index" label="序号" width="120" align="center"/>
<el-table-column prop="identifyTime" label="安全评定时间" width="180" align="center" />
<el-table-column prop="safetyEvaluationUnit" label="安全评的单位" align="center" />
<el-table-column prop="unitQualification" label="评价单位资质" align="center" />
<el-table-column prop="mainIssues" label="安全评价结论" align="center" />
<el-table-column label="操作" align="center" width="120">
<template #default="scope">
<el-button type="text" class="view-button" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 查看详情对话框 -->
<Teleport to="body">
<Transition name="dialog-fade">
<div v-if="dialogVisible" class="modern-dialog-overlay" @click="handleOverlayClick">
<div class="modern-dialog-container" @click.stop>
<div class="modern-dialog-header">
<div class="modern-dialog-title">
<div class="title-icon">
<i class="el-icon-document"></i>
</div>
<h3>安全评定详情</h3>
</div>
<button class="modern-dialog-close" @click="dialogVisible = false">
<svg viewBox="0 0 24 24" width="24" height="24">
<path fill="currentColor" d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
</svg>
</button>
</div>
<div class="modern-dialog-content">
<div class="detail-card">
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">安全评定时间</span>
<span class="detail-value">{{ currentRow.identifyTime || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">安全评的单位</span>
<span class="detail-value">{{ currentRow.safetyEvaluationUnit || '--' }}</span>
</div>
</div>
<div class="detail-item">
<div class="detail-content">
<span class="detail-label">评价单位资质</span>
<span class="detail-value">{{ currentRow.unitQualification || '--' }}</span>
</div>
</div>
<div class="detail-item conclusion-item">
<div class="detail-content">
<span class="detail-label">安全评价结论</span>
<div class="conclusion-value">{{ currentRow.mainIssues || '--' }}</div>
</div>
</div>
</div>
</div>
<div class="modern-dialog-footer">
<el-button class="close-button" @click="dialogVisible = false">关闭</el-button>
</div>
</div>
</div>
</Transition>
</Teleport>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue';
import type { PropType } from 'vue';
import { listAqjd } from "~/api/sluice";
import { isDate } from "lodash-es";
const props = defineProps({
resCode: {
type: String as PropType<string>
}
});
// Use null as default, so we don't send an empty string
const identifyTime = ref(null);
// Data for the table
const tableData = ref([]);
// Dialog visibility
const dialogVisible = ref(false);
// Current row being viewed
const currentRow = reactive({
identifyTime: '',
safetyEvaluationUnit: '',
unitQualification: '',
mainIssues: ''
});
const handleSearch = () => {
initSafe();
};
const handleOverlayClick = (e: MouseEvent) => {
dialogVisible.value = false;
};
// View function
const handleView = (row: any) => {
console.log('View row:', row);
// Copy row data to currentRow
currentRow.identifyTime = row.identifyTime || '';
currentRow.safetyEvaluationUnit = row.safetyEvaluationUnit || '';
currentRow.unitQualification = row.unitQualification || '';
currentRow.mainIssues = row.mainIssues || '';
// Show dialog
dialogVisible.value = true;
};
// Handle dialog close
const handleDialogClose = () => {
dialogVisible.value = false;
};
// Reset filter function
const resetFilter = () => {
identifyTime.value = null;
initSafe();
};
function initSafe() {
console.log("Selected date:", identifyTime.value);
// Build request data object
const requestData: any = {
wagaCode: props.resCode
};
// Only add identifyTime if it has a value
if (identifyTime.value) {
requestData.identifyTime = identifyTime.value;
}
console.log("Request data:", requestData);
listAqjd({
page: 1,
pageSize: 10,
data: requestData,
}).then((res) => {
if (res) {
tableData.value = res.records || [];
}
}).catch(error => {
console.error("API error:", error);
});
}
onMounted(() => {
initSafe();
});
</script>
<style scoped lang="scss">
.safety-appraisal-container {
padding: 16px;
height: 100%;
color: #333; //
.top-options {
display: flex;
justify-content: space-between;
margin-bottom: 16px;
.left-options {
display: flex;
align-items: center;
.option-label {
margin-right: 8px;
}
}
.right-options {
.add-button {
background-color: #4cd964;
border-color: #4cd964;
margin-right: 8px;
}
.reset-button {
background-color: #3a89fe;
border-color: #3a89fe;
color: white;
}
}
}
.table-container {
.custom-table {
.el-table__cell {
color: #333; //
}
}
.view-button {
color: #3a89fe;
}
}
}
.dialog-fade-enter-active,
.dialog-fade-leave-active {
transition: opacity 0.3s ease, transform 0.3s ease;
}
.dialog-fade-enter-from,
.dialog-fade-leave-to {
opacity: 0;
transform: scale(0.9);
}
.modern-dialog-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
backdrop-filter: blur(4px);
display: flex;
justify-content: center;
align-items: center;
z-index: 2000;
}
.modern-dialog-container {
width: 550px;
max-width: 90%;
background: #fff;
border-radius: 12px;
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
overflow: hidden;
display: flex;
flex-direction: column;
animation: dialog-slide-in 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
@keyframes dialog-slide-in {
0% {
opacity: 0;
transform: translateY(30px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.modern-dialog-header {
padding: 20px 24px;
display: flex;
justify-content: space-between;
align-items: center;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
color: #fff;
.modern-dialog-title {
display: flex;
align-items: center;
.title-icon {
margin-right: 12px;
display: flex;
align-items: center;
justify-content: center;
width: 36px;
height: 36px;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.2);
}
h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
}
}
.modern-dialog-close {
background: transparent;
border: none;
cursor: pointer;
color: #fff;
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.2s;
&:hover {
background-color: rgba(255, 255, 255, 0.2);
}
}
}
.modern-dialog-content {
padding: 24px;
flex: 1;
overflow-y: auto;
.detail-card {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
}
.detail-item {
display: flex;
align-items: flex-start;
margin-bottom: 20px;
padding-bottom: 20px;
border-bottom: 1px solid rgba(0, 0, 0, 0.06);
transition: transform 0.2s, box-shadow 0.2s;
&:last-child {
margin-bottom: 0;
padding-bottom: 0;
border-bottom: none;
}
&:hover {
transform: translateX(5px);
}
.detail-icon {
flex-shrink: 0;
width: 40px;
height: 40px;
border-radius: 8px;
background: linear-gradient(135deg, #0acccc 0%, #0acccc 100%);
display: flex;
align-items: center;
justify-content: center;
color: white;
margin-right: 16px;
}
.detail-content {
flex: 1;
display: flex;
flex-direction: column;
}
.detail-label {
font-size: 14px;
color: #666;
margin-bottom: 6px;
}
.detail-value {
font-size: 16px;
font-weight: 500;
color: #333;
}
&.conclusion-item {
.conclusion-value {
font-size: 16px;
font-weight: 500;
color: #333;
padding: 12px;
background: #fff;
border-radius: 6px;
border-left: 4px solid #0acccc;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
}
}
}
}
.modern-dialog-footer {
padding: 16px 24px;
display: flex;
justify-content: flex-end;
background: #f8f9fa;
border-top: 1px solid #e9ecef;
.close-button {
background: linear-gradient(135deg, #2C7EF8 0%, #2C5EF8 100%);
border: none;
color: white;
padding: 10px 24px;
border-radius: 6px;
font-weight: 500;
cursor: pointer;
transition: transform 0.15s, box-shadow 0.15s;
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(44, 126, 248, 0.3);
}
&:active {
transform: translateY(0);
}
}
}
</style>

24
src/views/Main/Sluice/index.vue

@ -53,10 +53,25 @@
</el-tab-pane>
<el-tab-pane label="巡查养护" name="7" disabled lazy> </el-tab-pane>
<el-tab-pane label="动物防治" name="8" disabled lazy> </el-tab-pane>
<el-tab-pane label="安全鉴定" name="9" disabled lazy> </el-tab-pane>
<el-tab-pane label="安全鉴定" name="9" lazy>
<safetyAppraisal
ref="safetyAppraisal"
:resCode="resCode"
/>
</el-tab-pane>
<el-tab-pane label="病险核查" name="10" disabled lazy> </el-tab-pane>
<el-tab-pane label="防汛物资" name="11" disabled lazy> </el-tab-pane>
<el-tab-pane label="档案管理" name="12" disabled lazy> </el-tab-pane>
<el-tab-pane label="防汛物资" name="11" lazy>
<floodControlMaterials
ref="floodControlMaterials"
:resCode="resCode"
/>
</el-tab-pane>
<el-tab-pane label="档案管理" name="12" lazy>
<fileManagement
ref="fileManagement"
:resCode="resCode"
/>
</el-tab-pane>
</el-tabs>
</div>
</div>
@ -67,6 +82,9 @@ import BaseInfo from "./components/BaseInfo.vue";
import DataStatistics from "./components/DataStatistics.vue";
import MonitorWarning from "./components/MonitorWarning.vue";
import StatisticsAnalysis from "./components/StatisticsAnalysis.vue";
import safetyAppraisal from './components/safetyAppraisal.vue'
import floodControlMaterials from './components/floodControlMaterials.vue'
import fileManagement from './components/fileManagement.vue'
// import VideoAnalysis from "./components/VideoAnalysis.vue";
import { Close } from "@element-plus/icons-vue";
import SB from "@/assets/map/sluice_big.png";

42
src/views/Main/index.vue

@ -1,13 +1,13 @@
<template>
<LeftPanel v-if="showLeftDrawer">
<!-- <LeftPanel v-if="showLeftDrawer">
<Drawer style="width: 458px">
<ProjectCountCard />
<MonitoringCard />
<InspectionCard />
</Drawer>
<RegionSelect />
</LeftPanel>
<RightPanel v-if="showRightDrawer">
</LeftPanel> -->
<!-- <RightPanel v-if="showRightDrawer">
<div class="right-panel-left">
<div class="top">
<MapSearch />
@ -21,9 +21,9 @@
<Drawer style="width: 460px">
<SafetyOverviewCard />
</Drawer>
</RightPanel>
<BottomPanel v-if="showBottomPanel"></BottomPanel>
<Map></Map>
</RightPanel> -->
<!-- <BottomPanel v-if="showBottomPanel"></BottomPanel> -->
<!-- <Map></Map> -->
<!-- 水库详情弹窗 -->
<Reservoir v-if="showReservoir" :data="reservoirData"></Reservoir>
<!-- 堤防详情弹窗 -->
@ -33,20 +33,20 @@
</template>
<script setup lang="ts">
import LeftPanel from "../LeftPanel/index.vue";
import RightPanel from "../RightPanel/index.vue";
import BottomPanel from "../BottomPanel/index.vue";
import Drawer from "../Drawer/index.vue";
import ProjectCountCard from "./ProjectCountCard/index.vue";
import MonitoringCard from "./MonitoringCard/index.vue";
import InspectionCard from "./InspectionCard/index.vue";
import SafetyOverviewCard from "./SafetyOverviewCard/index.vue";
import MapLegend from "./Map/components/Legend.vue";
import MapLayerSwitch from "./Map/components/LayerSwitch.vue";
import LayerTree from "./Map/components/LayerTree.vue";
import Map from "./Map/index.vue";
import RegionSelect from "../RegionSelect/index.vue";
import MapSearch from "./MapSearch/index.vue";
// import LeftPanel from "../LeftPanel/index.vue";
// import RightPanel from "../RightPanel/index.vue";
// import BottomPanel from "../BottomPanel/index.vue";
// import Drawer from "../Drawer/index.vue";
// import ProjectCountCard from "./ProjectCountCard/index.vue";
// import MonitoringCard from "./MonitoringCard/index.vue";
// import InspectionCard from "./InspectionCard/index.vue";
// import SafetyOverviewCard from "./SafetyOverviewCard/index.vue";
// import MapLegend from "./Map/components/Legend.vue";
// import MapLayerSwitch from "./Map/components/LayerSwitch.vue";
// import LayerTree from "./Map/components/LayerTree.vue";
// import Map from "./Map/index.vue";
// import RegionSelect from "../RegionSelect/index.vue";
// import MapSearch from "./MapSearch/index.vue";
import Reservoir from "./Reservoir/index.vue";
import Sluice from "./Sluice/index.vue";
import Dike from "./Dike/index.vue";
@ -62,7 +62,7 @@ const showReservoir = ref(false); // 水库详情弹窗
const reservoirData = ref({});
const showSluice = ref(false); //
const sluiceData = ref({});
const showDike = ref(false); //
const showDike = ref(true); //
const dikeData = ref({});
function layerTreeChange(val: boolean) {
showLayerTree.value = val;

2
vite.config.ts

@ -92,7 +92,7 @@ export default defineConfig(({ mode }) => {
rewrite: (path) => path.replace(/^\/api/, "/tianhui-admin-web"),
},
"/api": {
target: "http://shuili.product.dev.com:30115/", // 'http://172.16.34.59:18083'
target: "http://127.0.0.1:18082", // 'http://172.16.34.59:18083'
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, "/tianhui-admin-web"),
},

213
yarn.lock

@ -389,59 +389,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz"
"version" "2.11.7"
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
"integrity" "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/aspromise/-/aspromise-1.1.2.tgz"
"version" "1.1.2"
"@protobufjs/base64@^1.1.2":
"integrity" "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/base64/-/base64-1.1.2.tgz"
"version" "1.1.2"
"@protobufjs/codegen@^2.0.4":
"integrity" "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/codegen/-/codegen-2.0.4.tgz"
"version" "2.0.4"
"@protobufjs/eventemitter@^1.1.0":
"integrity" "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz"
"version" "1.1.0"
"@protobufjs/fetch@^1.1.0":
"integrity" "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/fetch/-/fetch-1.1.0.tgz"
"version" "1.1.0"
dependencies:
"@protobufjs/aspromise" "^1.1.1"
"@protobufjs/inquire" "^1.1.0"
"@protobufjs/float@^1.0.2":
"integrity" "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/float/-/float-1.0.2.tgz"
"version" "1.0.2"
"@protobufjs/inquire@^1.1.0":
"integrity" "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/inquire/-/inquire-1.1.0.tgz"
"version" "1.1.0"
"@protobufjs/path@^1.1.2":
"integrity" "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/path/-/path-1.1.2.tgz"
"version" "1.1.2"
"@protobufjs/pool@^1.1.0":
"integrity" "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/pool/-/pool-1.1.0.tgz"
"version" "1.1.0"
"@protobufjs/utf8@^1.1.0":
"integrity" "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@protobufjs/utf8/-/utf8-1.1.0.tgz"
"version" "1.1.0"
"@rollup/pluginutils@^4.2.1":
"integrity" "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@rollup/pluginutils/-/pluginutils-4.2.1.tgz"
@ -457,31 +404,6 @@
"estree-walker" "^2.0.2"
"picomatch" "^2.3.1"
"@sycesium/engine@^13.1.0":
"integrity" "sha512-7wz3IMTfuIIPTKHpfGl6uftuLcy2yPokC+JsvIhssFLFx6vY042biwHWEoCh7vLQuFfNM9c8ipu92V+01DXrWg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@sycesium/engine/-/engine-13.1.0.tgz"
"version" "13.1.0"
dependencies:
"@tweenjs/tween.js" "^25.0.0"
"@zip.js/zip.js" "^2.7.34"
"autolinker" "^4.0.0"
"bitmap-sdf" "^1.0.3"
"dompurify" "^3.0.2"
"draco3d" "^1.5.1"
"earcut" "^3.0.0"
"grapheme-splitter" "^1.0.4"
"jsep" "^1.3.8"
"kdbush" "^4.0.1"
"ktx-parse" "^0.7.0"
"lerc" "^2.0.0"
"mersenne-twister" "^1.1.0"
"meshoptimizer" "^0.22.0"
"pako" "^2.0.4"
"protobufjs" "^7.1.0"
"rbush" "3.0.1"
"topojson-client" "^3.1.0"
"urijs" "^1.19.7"
"@techstark/opencv-js@4.9.0-release.2":
"integrity" "sha512-e5yGVAD7vBZs6GJ2VSlNKhtYqeeo8cHL/SrYBO7i3YrA2Nf5BThpy8a1yEMptWwGThxb6DupG2UDdUkv/vwdDg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@techstark/opencv-js/-/opencv-js-4.9.0-release.2.tgz"
@ -1624,11 +1546,6 @@
"@turf/invariant" "^6.5.0"
"d3-voronoi" "1.1.2"
"@tweenjs/tween.js@^25.0.0":
"integrity" "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@tweenjs/tween.js/-/tween.js-25.0.0.tgz"
"version" "25.0.0"
"@types/crypto-js@4.2.1":
"integrity" "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@types/crypto-js/-/crypto-js-4.2.1.tgz"
@ -1668,7 +1585,7 @@
"@types/lodash@*", "@types/lodash@^4.14.182":
"version" "4.14.202"
"@types/node@^20.11.19", "@types/node@>= 14", "@types/node@>=13.7.0":
"@types/node@^20.11.19", "@types/node@>= 14":
"version" "20.11.25"
dependencies:
"undici-types" "~5.26.4"
@ -1681,11 +1598,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/@types/semver/-/semver-7.5.8.tgz"
"version" "7.5.8"
"@types/trusted-types@^2.0.7":
"integrity" "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@types/trusted-types/-/trusted-types-2.0.7.tgz"
"version" "2.0.7"
"@types/web-bluetooth@^0.0.16":
"integrity" "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz"
@ -2028,11 +1940,6 @@
dependencies:
"vue-demi" "*"
"@zip.js/zip.js@^2.7.34":
"integrity" "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/@zip.js/zip.js/-/zip.js-2.7.57.tgz"
"version" "2.7.57"
"acorn-jsx@^5.3.2":
"integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
@ -2162,13 +2069,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/asynckit/-/asynckit-0.4.0.tgz"
"version" "0.4.0"
"autolinker@^4.0.0":
"integrity" "sha512-mYzdZMei1zIXcHVS/LjnuCJG+C/hNi8O+5m0R8YWtrIBWGrjL8CVzEZXxOfH0l1kioEXHNpUJRkgZdyL4GgIHQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/autolinker/-/autolinker-4.1.0.tgz"
"version" "4.1.0"
dependencies:
"tslib" "^2.8.1"
"available-typed-arrays@^1.0.6", "available-typed-arrays@^1.0.7":
"integrity" "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz"
@ -2193,11 +2093,6 @@
"binary-extensions@^2.0.0":
"version" "2.2.0"
"bitmap-sdf@^1.0.3":
"integrity" "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz"
"version" "1.0.4"
"boolbase@^1.0.0":
"integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/boolbase/-/boolbase-1.0.0.tgz"
@ -2477,28 +2372,11 @@
dependencies:
"esutils" "^2.0.2"
"dompurify@^3.0.2":
"integrity" "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/dompurify/-/dompurify-3.2.4.tgz"
"version" "3.2.4"
optionalDependencies:
"@types/trusted-types" "^2.0.7"
"draco3d@^1.5.1":
"integrity" "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/draco3d/-/draco3d-1.5.7.tgz"
"version" "1.5.7"
"earcut@^2.0.0":
"integrity" "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-2.2.4.tgz"
"version" "2.2.4"
"earcut@^3.0.0":
"integrity" "sha512-0l1/0gOjESMeQyYaK5IDiPNvFeu93Z/cO0TjZh9eZ1vyCtZnA7KMZ8rQggpsJHIbGSdrqYq9OhuveadOVHCshw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/earcut/-/earcut-3.0.1.tgz"
"version" "3.0.1"
"echarts-liquidfill@^3.1.0":
"integrity" "sha512-5Dlqs/jTsdTUAsd+K5LPLLTgrbbNORUSBQyk8PSy1Mg2zgHDWm83FmvA4s0ooNepCJojFYRITTQ4GU1UUSKYLw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/echarts-liquidfill/-/echarts-liquidfill-3.1.0.tgz"
@ -3100,11 +2978,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/graceful-fs/-/graceful-fs-4.2.11.tgz"
"version" "4.2.11"
"grapheme-splitter@^1.0.4":
"integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz"
"version" "1.0.4"
"graphemer@^1.4.0":
"integrity" "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/graphemer/-/graphemer-1.4.0.tgz"
@ -3353,11 +3226,6 @@
dependencies:
"argparse" "^2.0.1"
"jsep@^1.3.8":
"integrity" "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/jsep/-/jsep-1.4.0.tgz"
"version" "1.4.0"
"jsesc@^2.5.1":
"version" "2.5.2"
@ -3400,11 +3268,6 @@
optionalDependencies:
"graceful-fs" "^4.1.6"
"kdbush@^4.0.1":
"integrity" "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/kdbush/-/kdbush-4.0.2.tgz"
"version" "4.0.2"
"keyv@^4.5.3":
"integrity" "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/keyv/-/keyv-4.5.4.tgz"
@ -3412,21 +3275,11 @@
dependencies:
"json-buffer" "3.0.1"
"ktx-parse@^0.7.0":
"integrity" "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/ktx-parse/-/ktx-parse-0.7.1.tgz"
"version" "0.7.1"
"leader-line-vue@^2.1.1":
"integrity" "sha512-ZfNoDcwgfHESNLErfPBdJ4I/1tbXLBUFwGfbqAZvTcOghcm7UtUm7mUPZVAOThlO3q75n8pZmDTGtM/Gwfx+xA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/leader-line-vue/-/leader-line-vue-2.1.1.tgz"
"version" "2.1.1"
"lerc@^2.0.0":
"integrity" "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/lerc/-/lerc-2.0.0.tgz"
"version" "2.0.0"
"less@*", "less@4.2.0":
"integrity" "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/less/-/less-4.2.0.tgz"
@ -3490,11 +3343,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/lodash/-/lodash-4.17.21.tgz"
"version" "4.17.21"
"long@^5.0.0":
"integrity" "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/long/-/long-5.3.1.tgz"
"version" "5.3.1"
"lru-cache@^5.1.1":
"integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/lru-cache/-/lru-cache-5.1.1.tgz"
@ -3530,16 +3378,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/merge2/-/merge2-1.4.1.tgz"
"version" "1.4.1"
"mersenne-twister@^1.1.0":
"integrity" "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/mersenne-twister/-/mersenne-twister-1.1.0.tgz"
"version" "1.1.0"
"meshoptimizer@^0.22.0":
"integrity" "sha512-IebiK79sqIy+E4EgOr+CAw+Ke8hAspXKzBd0JdgEmPHiAwmvEj2S4h1rfvo+o/BnfEYd/jAOg5IeeIjzlzSnDg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/meshoptimizer/-/meshoptimizer-0.22.0.tgz"
"version" "0.22.0"
"micromatch@^4.0.4":
"version" "4.0.5"
dependencies:
@ -3742,11 +3580,6 @@
dependencies:
"p-limit" "^3.0.2"
"pako@^2.0.4":
"integrity" "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/pako/-/pako-2.1.0.tgz"
"version" "2.1.0"
"parent-module@^1.0.0":
"integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/parent-module/-/parent-module-1.0.1.tgz"
@ -3861,24 +3694,6 @@
"resolved" "http://172.16.32.57:8931/repository/npm-group/prettier/-/prettier-3.1.0.tgz"
"version" "3.1.0"
"protobufjs@^7.1.0":
"integrity" "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/protobufjs/-/protobufjs-7.4.0.tgz"
"version" "7.4.0"
dependencies:
"@protobufjs/aspromise" "^1.1.2"
"@protobufjs/base64" "^1.1.2"
"@protobufjs/codegen" "^2.0.4"
"@protobufjs/eventemitter" "^1.1.0"
"@protobufjs/fetch" "^1.1.0"
"@protobufjs/float" "^1.0.2"
"@protobufjs/inquire" "^1.1.0"
"@protobufjs/path" "^1.1.2"
"@protobufjs/pool" "^1.1.0"
"@protobufjs/utf8" "^1.1.0"
"@types/node" ">=13.7.0"
"long" "^5.0.0"
"proxy-from-env@^1.1.0":
"integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
@ -3930,13 +3745,6 @@
dependencies:
"quickselect" "^2.0.0"
"rbush@3.0.1":
"integrity" "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/rbush/-/rbush-3.0.1.tgz"
"version" "3.0.1"
dependencies:
"quickselect" "^2.0.0"
"readdirp@~3.6.0":
"integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/readdirp/-/readdirp-3.6.0.tgz"
@ -4193,13 +4001,6 @@
"svg-tags@^1.0.0":
"version" "1.0.0"
"sy-cesium-sdk@^2.4.1":
"integrity" "sha512-thizaU6o7WbRs095JVZf54kJS1tTahLiVzDQSyIpNcpbkMmFzGb3rroaTrUdxP7vJzrBsXxXbB1bxVYh4Fg69w=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/sy-cesium-sdk/-/sy-cesium-sdk-2.4.1.tgz"
"version" "2.4.1"
dependencies:
"@sycesium/engine" "^13.1.0"
"synckit@^0.8.6":
"version" "0.8.8"
dependencies:
@ -4226,7 +4027,7 @@
dependencies:
"is-number" "^7.0.0"
"topojson-client@^3.1.0", "topojson-client@3.x":
"topojson-client@3.x":
"integrity" "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/topojson-client/-/topojson-client-3.1.0.tgz"
"version" "3.1.0"
@ -4259,11 +4060,6 @@
"tslib@^2.6.2":
"version" "2.6.2"
"tslib@^2.8.1":
"integrity" "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/tslib/-/tslib-2.8.1.tgz"
"version" "2.8.1"
"tslib@2.3.0":
"integrity" "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/tslib/-/tslib-2.3.0.tgz"
@ -4414,11 +4210,6 @@
dependencies:
"punycode" "^2.1.0"
"urijs@^1.19.7":
"integrity" "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/urijs/-/urijs-1.19.11.tgz"
"version" "1.19.11"
"util-deprecate@^1.0.2":
"integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
"resolved" "http://172.16.32.57:8931/repository/npm-group/util-deprecate/-/util-deprecate-1.0.2.tgz"

Loading…
Cancel
Save