commit
2
Vue/IntsAdmin/.env.development
Normal file
@ -0,0 +1,2 @@
|
||||
VITE_API_URL = "http://localhost:8055"
|
||||
VITE_GEO_URL = "http://localhost:8443"
|
0
Vue/IntsAdmin/.env.prod
Normal file
30
Vue/IntsAdmin/.gitignore
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
coverage
|
||||
*.local
|
||||
|
||||
/cypress/videos/
|
||||
/cypress/screenshots/
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
|
||||
*.tsbuildinfo
|
3
Vue/IntsAdmin/.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"recommendations": ["Vue.volar"]
|
||||
}
|
33
Vue/IntsAdmin/README.md
Normal file
@ -0,0 +1,33 @@
|
||||
# IntsAdmin
|
||||
|
||||
This template should help get you started developing with Vue 3 in Vite.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
|
||||
|
||||
## Type Support for `.vue` Imports in TS
|
||||
|
||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types.
|
||||
|
||||
## Customize configuration
|
||||
|
||||
See [Vite Configuration Reference](https://vite.dev/config/).
|
||||
|
||||
## Project Setup
|
||||
|
||||
```sh
|
||||
npm install
|
||||
```
|
||||
|
||||
### Compile and Hot-Reload for Development
|
||||
|
||||
```sh
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Type-Check, Compile and Minify for Production
|
||||
|
||||
```sh
|
||||
npm run build
|
||||
```
|
1
Vue/IntsAdmin/env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="vite/client" />
|
13
Vue/IntsAdmin/index.html
Normal file
@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="dark">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="/favicon.ico">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>IntsApp</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
7416
Vue/IntsAdmin/package-lock.json
generated
Normal file
44
Vue/IntsAdmin/package.json
Normal file
@ -0,0 +1,44 @@
|
||||
{
|
||||
"name": "intsadmin",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "run-p type-check \"build-only {@}\" --",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --build --force"
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@toast-ui/editor": "^3.2.2",
|
||||
"@turf/turf": "^7.1.0",
|
||||
"axios": "^1.7.5",
|
||||
"cesium": "^1.123.0",
|
||||
"element-plus": "^2.4.11",
|
||||
"gojs": "3.0.13",
|
||||
"marked": "^15.0.2",
|
||||
"ol": "^10.2.1",
|
||||
"pdfjs-dist": "^4.7.76",
|
||||
"pinia": "^2.2.4",
|
||||
"three": "0.170.0",
|
||||
"vue": "^3.5.12",
|
||||
"vue-router": "^4.4.5",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/node": "^20.17.0",
|
||||
"@vitejs/plugin-vue": "^5.1.4",
|
||||
"@vue/tsconfig": "^0.5.1",
|
||||
"npm-run-all2": "^7.0.1",
|
||||
"sass": "^1.69.5",
|
||||
"sass-loader": "^13.3.2",
|
||||
"typescript": "~5.6.0",
|
||||
"vite": "^5.4.10",
|
||||
"vite-plugin-cesium": "^1.2.23",
|
||||
"vite-svg-loader": "^5.1.0",
|
||||
"vue-tsc": "^2.1.6"
|
||||
}
|
||||
}
|
1
Vue/IntsAdmin/public/Cesium/SiderTree/document.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1732547810221" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4305" width="200" height="200"><path d="M575 64.002V320h257l0.001 323.315c-12.118-8.876-26.99-13.982-43.21-13.982l-0.784 0.004-1.118 0.02a75.85 75.85 0 0 0-6.643 0.458l-0.667 0.078-0.183-0.2c2.605-10.282 3.969-19.844 3.969-29.929v-0.148l-0.026-1.976C781.982 532.553 728.632 480 663.291 480c-66.25 0-120.074 53.677-120.074 119.764l0.004 1.018c0.284 33.58 14.583 64.998 38.928 87.137l6.337 5.762v7.51l-0.738-0.237-0.802-0.247c-26.5-7.991-57.166-1.6-76.478 17.692-12.473 12.462-21.328 29.865-23.776 48.03-3.014 22.369 3.738 44.394 20.639 61.279l68.868 68.291L160 896c-17.673 0-32-14.327-32-32V96.929c0-17.646 14.283-31.96 31.929-32L575 64.002zM512 576H192v32h320v-32z m0-96H192v32h320v-32z m0-96H192v32h320v-32z m0-96H192v32h320v-32z m95.999-192.001L800 288H607V96l0.999-0.001zM352 192H192v32h160v-32z" fill="#1296DB" p-id="4306"></path><path d="M663.739 557.45c23.74 0 41.549 18.87 41.902 42.275l0.006 0.71v43.435c6.05-3.358 12.998-5.15 20.394-5.15 19.049 0 33.84 12.09 39.666 29.106 6.724-4.03 14.567-6.493 23.083-6.493 19.05 0 33.84 12.09 39.667 29.106 6.555-3.93 13.11-6.369 21.327-6.488l0.636-0.005h1.12c23.74 0 41.11 18.871 41.455 42.276l0.005 0.71v86.197C893 894.177 881.795 960 759.657 960c-53.338 0-78.662-10.747-100.624-28.658-2.706-1.663-5.218-3.52-7.536-5.748l-0.532-0.52-121.018-120.005c-20.618-20.597-11.205-49.703 3.138-64.032 14.2-14.185 43.774-16.74 60.673-0.497l0.508 0.497 26.22 26.195V600.436c0-23.732 19.274-42.987 43.253-42.987z m0.224 27.09c-11.313 0-20.43 8.993-20.615 20.031l-0.003 0.343v216.275l-0.031-0.03c-0.662-0.65-11.78-11.55-24.231-23.984l-0.39-0.39-37.425-37.165c-8.068-7.836-23.307-7.612-31.6 0.672-8.208 8.2-10.707 21.01-0.97 31.041l0.298 0.303 114.519 113.735c21.29 21.046 49.303 31.569 95.917 31.569 109.38 0 110.694-54.42 110.709-122.2v-2.058h0.224v-83.063c0-21.27-19.945-20.374-19.945-20.374-11.089 0-19.544 8.99-19.719 20.025l-0.003 0.35v44.777h-0.224c0.224 0.671 0.224 1.343 0.224 2.239 0 6.269-4.706 11.418-10.98 11.418-6.276 0-11.43-5.15-11.43-11.418 0-0.588 0-1.347 0.15-1.978l0.074-0.261h-0.224v-65.6c0-19.03-20.394-20.373-20.394-20.373-11.31 0-19.329 8.989-19.495 20.024l-0.002 0.35v51.942h-0.224c0.224 0.671 0.224 1.343 0.224 2.239 0 6.268-5.155 11.418-11.43 11.418-6.275 0-11.43-5.15-11.43-11.418 0-0.588 0-1.347 0.151-1.978l0.074-0.261h-0.224v-74.555c0-19.58-18.226-20.345-20.027-20.373h-0.143c-11.088 0-19.324 8.988-19.494 20.024l-0.003 0.349v56.644h-0.224c0.224 0.671 0.224 1.343 0.224 2.238 0 6.27-5.154 11.419-11.43 11.419-6.274 0-11.429-5.15-11.429-11.419 0-0.587 0-1.346 0.15-1.977l0.074-0.261h-0.224V604.914c0-11.195-7.62-20.374-19.049-20.374z m-0.672-72.54c48.407 0 87.85 39.404 88.074 87.764 0 8.284-1.345 15.896-3.362 23.508-5.379-5.373-12.774-8.955-21.066-9.179 0.896-4.702 1.569-9.403 1.569-14.329 0-36.046-29.134-65.151-65.215-65.151s-65.215 29.105-65.215 65.151a64.902 64.902 0 0 0 5.602 26.419v38.06a86.999 86.999 0 0 1-28.461-64.479c0-48.36 39.443-87.764 88.074-87.764z" fill="#66758E" p-id="4307"></path></svg>
|
After Width: | Height: | Size: 3.0 KiB |
1
Vue/IntsAdmin/public/Cesium/SiderTree/newDoc.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1732547913705" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7151" width="200" height="200"><path d="M682.666667 874.666667H170.666667A106.666667 106.666667 0 0 1 64 768V256A106.666667 106.666667 0 0 1 170.666667 149.333333h158.293333a85.333333 85.333333 0 0 1 48.213333 27.306667 219.306667 219.306667 0 0 1 37.546667 51.2c13.226667 22.186667 17.066667 28.16 33.28 28.16H597.333333v42.666667h-149.333333a75.946667 75.946667 0 0 1-69.973333-49.493334 213.333333 213.333333 0 0 0-30.293334-42.666666 117.76 117.76 0 0 0-20.906666-15.36H170.666667A64 64 0 0 0 106.666667 256v512A64 64 0 0 0 170.666667 832h512z" fill="#1296db" p-id="7152"></path><path d="M768 597.333333a213.333333 213.333333 0 1 1 213.333333-213.333333 213.333333 213.333333 0 0 1-213.333333 213.333333z m0-384a170.666667 170.666667 0 1 0 170.666667 170.666667 170.666667 170.666667 0 0 0-170.666667-170.666667z" fill="#1296db" p-id="7153"></path><path d="M704.426667 874.666667H179.626667a75.946667 75.946667 0 0 1-67.413334-31.573334 65.706667 65.706667 0 0 1 0-65.28l114.346667-230.826666A157.013333 157.013333 0 0 1 358.826667 469.333333h88.746666a88.746667 88.746667 0 0 1 81.066667 54.186667A261.12 261.12 0 0 0 768 661.333333a298.666667 298.666667 0 0 0 98.986667-16.64l13.226666-4.693333 12.373334 11.093333a23.466667 23.466667 0 0 1 3.413333 26.453334l-58.88 119.466666a157.866667 157.866667 0 0 1-132.693333 77.653334zM358.826667 512a115.2 115.2 0 0 0-94.293334 54.186667l-113.92 230.826666a25.173333 25.173333 0 0 0 0 23.466667 36.266667 36.266667 0 0 0 31.146667 11.52h524.8a114.346667 114.346667 0 0 0 94.293333-54.186667l42.666667-81.066666a360.533333 360.533333 0 0 1-75.52 7.253333 298.666667 298.666667 0 0 1-278.186667-162.56 46.506667 46.506667 0 0 0-42.666666-29.44z m522.24 172.8zM778.666667 544a21.333333 21.333333 0 0 1-21.333334-21.333333v-277.333334a21.333333 21.333333 0 0 1 42.666667 0v277.333334a21.333333 21.333333 0 0 1-21.333333 21.333333z" fill="#1296db" p-id="7154"></path><path d="M908.8 405.333333h-277.333333a21.333333 21.333333 0 0 1 0-42.666666h277.333333a21.333333 21.333333 0 0 1 0 42.666666z" fill="#1296db" p-id="7155"></path></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
Vue/IntsAdmin/public/Cesium/city.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904931432" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27494" width="200" height="200"><path d="M234.7 239.9h18.6V595h-18.6V239.9zM549.6 277" fill="#1296db" p-id="27495"></path><path d="M234.7 239.9h152.5v18.5H234.7v-18.5z m537.2 0h18.5V595h-18.5V239.9z m0 0" fill="#1296db" p-id="27496"></path><path d="M513.5 83.6l110.2 88.3V597H401.4V173l112.1-89.4m0-23.7L382.9 164.2v430.9h259.3v-432L513.5 59.9z m0 0M277.5 305.3H354v18.6h-76.5zM277.5 359.9H354v18.6h-76.5zM277.5 414.6H354v18.6h-76.5zM277.5 469.3H354v18.6h-76.5zM277.5 523.9H354v18.6h-76.5z" fill="#1296db" p-id="27497"></path><path d="M419.6 305.3h185.9v18.6H419.6zM419.6 250.6h185.9v18.6H419.6zM452.4 196h32.8v18.6h-32.8zM496.1 196h32.8v18.6h-32.8zM539.9 196h32.8v18.6h-32.8zM419.6 359.9h185.9v18.6H419.6zM419.6 414.6h185.9v18.6H419.6zM419.6 469.3h185.9v18.6H419.6zM419.6 523.9h185.9v18.6H419.6zM671.1 305.3h76.5v18.6h-76.5zM671.1 359.9h76.5v18.6h-76.5zM671.1 414.6h76.5v18.6h-76.5zM671.1 469.3h76.5v18.6h-76.5zM671.1 523.9h76.5v18.6h-76.5zM513.3 969.3c-51.7 0-101.9-9.9-149.2-29.3-45.8-18.9-87-45.9-122.3-80.4-73-71.2-113.2-166.4-113.2-268h19.6c0 197.5 163.8 358.1 365.1 358.1 200.2 0 363.1-160.7 363.1-358.1H896c0 101.7-39.8 196.9-112.2 268-71.9 70.8-168 109.7-270.5 109.7z" fill="#1296db" p-id="27498"></path><path d="M886.3 603.7H138.4c-5.4 0-9.8-4.4-9.8-9.8s4.4-9.8 9.8-9.8h747.9c5.4 0 9.8 4.4 9.8 9.8s-4.4 9.8-9.8 9.8z" fill="#1296db" p-id="27499"></path><path d="M421.3 951.9c-2.8 0-5.6-1.3-7.5-3.6-26.7-33.8-47.7-73.5-62.6-118-11.9-35.5-19.9-74.1-23.8-114.7-6.7-69.2 0.7-119.7 1-121.9 0.8-5.2 5.7-8.8 10.9-8.1 5.2 0.8 8.8 5.7 8.1 10.9-0.1 0.5-7.4 50.8-0.8 117.7 6 61.3 25.1 149.6 82.4 222.1 3.3 4.2 2.6 10.2-1.6 13.5-2 1.4-4 2.1-6.1 2.1zM607.3 951.9c-2.1 0-4.2-0.7-5.9-2.1-4.2-3.3-4.9-9.3-1.6-13.5 57.4-72.7 76.5-161.2 82.4-222.7 6.5-66.8-0.8-116.7-0.9-117.2-0.8-5.2 2.8-10.1 8.1-10.9 5.2-0.8 10.1 2.8 10.9 8.1 0.3 2.1 7.7 52.7 1 121.9-3.9 40.7-11.9 79.2-23.8 114.7-14.9 44.5-36 84.2-62.6 118-1.9 2.4-4.7 3.7-7.6 3.7zM518.6 969.1c-5.3 0-9.6-4.3-9.6-9.6 0.4-135.7 0.6-340.5-0.2-354.4-0.1-0.5-0.1-1.1-0.1-1.6 0-5.3 4.3-9.6 9.6-9.6 2.5 0 5 1 6.8 2.8 2.8 2.8 2.9 5.5 3 10.8 0.1 2.6 0.1 6.5 0.2 11.6 0.1 9.3 0.2 23 0.2 40.6 0.1 29.6 0.1 70.8 0 122.4-0.1 87.8-0.3 176.7-0.3 177.6 0 5.2-4.3 9.4-9.6 9.4zM509 605.8c0.8 3.7 4.4 7.3 9.3 7.3-4.5 0-8.3-3.1-9.3-7.3z" fill="#1296db" p-id="27500"></path><path d="M808.4 820.6c-1.3 0-2.5-0.2-3.8-0.8C642.3 751.5 492.3 755 395 770c-105.7 16.3-173.7 49.2-174.4 49.6-4.8 2.4-10.7 0.4-13.1-4.5s-0.4-10.7 4.5-13.1c2.8-1.4 70.9-34.4 179.3-51.2 63.6-9.9 127.8-12 190.9-6.4 78.9 7 156.3 26.3 229.9 57.3 5 2.1 7.3 7.8 5.2 12.8a9.58 9.58 0 0 1-8.9 6.1zM638.3 239.7h141.2v18.6H638.3z" fill="#1296db" p-id="27501"></path></svg>
|
After Width: | Height: | Size: 2.7 KiB |
1
Vue/IntsAdmin/public/Cesium/earth.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904898042" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23288" width="200" height="200"><path d="M1023.98404 512c0 282.749582-229.216418 512-511.984 512C229.234458 1024 0.00004 794.749582 0.00004 512 0.00004 229.234418 229.234458 0 512.00004 0 794.767622 0 1023.98404 229.234418 1023.98404 512z" fill="#5D9CEC" p-id="23289"></path><path d="M998.890432 353.204481c-24.031625-73.688849-65.404978-142.171779-119.718129-198.046905-54.249152-55.781128-121.438103-99.078452-194.280964-125.218044l-21.281668-7.63988-6.3759 21.71766c-2.937954 9.907845-5.155919 17.063733-6.689896 21.375666-18.999703 8.905861-39.311386 16.937735-58.967078 24.749614-62.71502 24.841612-127.544007 50.54521-172.263309 109.482289-19.455696 25.6256-21.705661 52.391181-5.859908 69.828909 8.29587 9.139857 20.375682 13.781785 35.905439 13.781784 10.123842 0 20.687677-1.90597 29.999531-3.577944 6.561897-1.187981 13.343792-2.405962 17.327729-2.405962 0.295995 0 0.561991 0.016 0.827987 0.031999 22.921642 1.639974 65.624975 9.749848 103.874377 19.717692 42.031343 10.937829 64.312995 20.187685 73.812847 25.579601-6.3759 7.593881-23.467633 19.329698-46.345276 19.329698-11.187825 0-22.061655-2.889955-32.375494-8.579866-15.781753-8.703864-55.281136-16.967735-109.718286-26.687583l-5.281917-0.953985c-2.281964-0.405994-4.889924-0.60999-7.953876-0.609991-22.875643 0-76.8288 11.077827-117.218168 53.031172-35.327448 36.671427-52.045187 87.218637-49.687224 150.217652 1.453977 38.733395 14.593772 71.608881 38.015406 95.044515 23.765629 23.813628 56.875111 36.595428 95.734504 37.063421 4.623928 0.032 9.265855 0.032 13.875783 0.032h3.093952c22.453649 0 45.655287 0 62.811019 6.467899 10.985828 4.123936 24.517617 12.249809 31.829502 38.625396 7.561882 27.437571 9.749848 55.499133 11.999813 85.216669 2.123967 27.967563 4.375932 56.905111 11.49982 85.654661 14.123779 56.93911 43.217325 71.156888 65.122983 73.064859 3.123951 0.249996 6.249902 0.375994 9.311854 0.375994 48.751238 0 81.124732-32.813487 107.594319-63.595007 6.311901-7.345885 13.217793-14.439774 20.531679-21.939657 16.125748-16.531742 32.813487-33.623475 44.689302-55.343135 13.717786-24.999609 18.623709-51.249199 23.437634-76.592803 4.49993-24.061624 8.811862-46.783269 20.249683-66.656959 1.561976-2.687958 3.375947-5.74991 5.375916-9.217856 58.095092-99.610444 72.062874-136.483867 59.783066-157.873533-5.531914-9.59385-15.655755-14.781769-27.469571-13.875783-5.623912 0.437993-11.187825 0.65599-16.499742 0.65599-34.999453 0-63.937001-9.62585-79.404759-26.407588-4.375932-4.749926-6.467899-8.843862-7.405884-11.563819 0.531992-0.032 1.123982-0.045999 1.811971-0.045999 10.24984 0 25.999594 4.203934 41.217356 8.28187 18.405712 4.937923 37.467415 10.031843 54.217153 10.031843 27.283574 0 45.033296-14.171779 48.939235-38.98539 3.875939-7.03189 22.061655-24.171622 34.375463-25.781598l25.499602-3.327948-7.967876-24.431618zM164.297473 611.750441c-16.033749-23.313636-34.391463-45.875283-50.875205-68.828924-15.35976-21.405666-75.310823-118.750145-103.094389-133.717911A514.623959 514.623959 0 0 0 0.00004 512c0 124.624053 44.533304 238.812269 118.532148 327.622881 0.061999 0.061999 0.171997 0.093999 0.327995 0.093998 4.48393 0 46.189278-30.999516 49.969219-34.217465 16.421743-13.937782 30.171529-30.967516 36.327432-51.937188 14.359776-48.811237-13.859783-102.562397-40.859361-141.811785z" fill="#A0D468" p-id="23290"></path></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
Vue/IntsAdmin/public/Cesium/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904854483" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22237" width="200" height="200"><path d="M982.528 435.883c-16.896 0-33.195 9.386-46.037 26.325L775.424 675.285c-26.667 35.286-64.555 55.51-103.936 55.51h-0.597c-39.424 0-77.312-20.224-103.936-55.51L405.888 462.208c-12.8-16.939-29.099-26.325-46.08-26.325-16.853 0-33.28 9.386-45.995 26.325L152.661 675.285c-26.453 34.987-64 55.211-102.997 55.51C131.754 903.936 307.669 1024 512 1024c282.752 0 512-229.205 512-511.957a512 512 0 0 0-3.67-58.966c-11.263-11.093-24.32-17.194-37.802-17.194M512.043 0" fill="#709C49" p-id="22238"></path><path d="M683.093 325.077a53.504 53.504 0 1 1 0-106.965 53.504 53.504 0 0 1 0 106.965M512.043 0C229.248 0 0 229.163 0 512.043c0 44.97 6.4 88.32 17.323 129.962 9.685 7.467 20.437 11.776 31.445 11.776 16.981 0 33.28-9.301 46.08-26.154L256 414.464c26.581-35.37 64.555-55.552 103.85-55.552 39.34 0 77.227 20.181 103.894 55.552l155.008 204.928 6.656 8.235c12.8 16.81 29.056 26.026 45.824 26.154 16.725-0.128 33.024-9.386 45.739-26.154l6.826-8.235 154.966-204.928c26.624-35.37 64.512-55.552 103.808-55.552 6.272 0 12.544 0.683 18.645 1.621C936.619 151.723 742.059 0 512.043 0" fill="#6DABE4" p-id="22239"></path><path d="M518.602 323.25L676.5 634.767l157.898-310.016v-1.503h-61.387l-95.583 187.69-95.181-187.672-63.645-0.018z" fill="#41B883" p-id="22240"></path><path d="M582.262 323.25l95.15 187.706 95.6-187.707h-57.583l-37.63 73.884-37.49-73.901-58.047 0.017z" fill="#35495E" p-id="22241"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
1
Vue/IntsAdmin/public/Common/gains.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730905094621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="35144" width="200" height="200"><path d="M896.8192 126.73024c23.67488 0 42.88512 19.16928 42.88512 42.84416v771.80928c0 23.67488-19.21024 42.88512-42.88512 42.88512H42.88512A42.88512 42.88512 0 0 1 0 941.38368V169.5744c0-23.67488 19.21024-42.84416 42.88512-42.84416H257.2288V83.84512a42.88512 42.88512 0 0 1 85.77024 0v42.88512h253.62432V83.84512a42.88512 42.88512 0 0 1 85.77024 0v42.88512h214.38464zM853.93408 298.1888V212.45952H85.77024v85.77024h768.16384zM338.61632 511.87712l-60.6208 60.6208 113.95072 113.99168-0.98304 1.024 60.6208 60.6208 242.56512-242.52416-60.6208-60.6208-180.92032 180.87936-113.99168-113.99168z" fill="#1296db" p-id="35145"></path></svg>
|
After Width: | Height: | Size: 781 B |
1
Vue/IntsAdmin/public/Common/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730905047260" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="33005" width="200" height="200"><path d="M855.1 108.8H730c-13.2-22.7-37.5-38.2-65.5-38.2H358.9c-28 0-52.3 15.4-65.5 38.2H167.9c-42 0-75.9 34.1-76 76v687.7c0 41.9 34.2 76 76 76h687.7c42-0.1 76-34.1 76-76V184.8c-0.2-42.1-34.5-76.1-76.5-76z m-190.7 38.6l0.2 76L359 223v-75.6l-0.2-0.4 305.6 0.4zM168.1 872.6l-0.4-687.4h114.8V223c0 42.3 34.2 76.8 76.2 76.8h305.7c42.2-0.2 76.3-34.5 76.2-76.8v-37.8l114.6-0.3 0.3 687.4-687.4 0.3z" fill="#1296db" p-id="33006"></path><path d="M317.9 394.5h-6.4c-19.9 0-36 16.1-36 36v1.1c0 19.9 16.1 36 36 36h6.4c19.9 0 36-16.1 36-36v-1.1c0-19.9-16.1-36-36-36zM688.4 394.5H449.5c-19.9 0-36 16.1-36 36v1.1c0 19.9 16.1 36 36 36h238.9c19.9 0 36-16.1 36-36v-1.1c0-19.9-16.1-36-36-36zM688.4 551.6H449.5c-19.9 0-36 16.1-36 36v1.1c0 19.9 16.1 36 36 36h238.9c19.9 0 36-16.1 36-36v-1.1c0-19.9-16.1-36-36-36zM688.4 708.4H449.5c-19.9 0-36 16.1-36 36v1.1c0 19.9 16.1 36 36 36h238.9c19.9 0 36-16.1 36-36v-1.1c0-19.9-16.1-36-36-36zM317.9 552.1h-6.4c-19.9 0-36 16.1-36 36s16.1 36 36 36h6.4c19.9 0 36-16.1 36-36s-16.1-36-36-36zM317.9 708.5h-6.4c-19.9 0-36 16.1-36 36v0.8c0 19.9 16.1 36 36 36h6.4c19.9 0 36-16.1 36-36v-0.8c0-19.9-16.1-36-36-36z" fill="#1296db" p-id="33007"></path></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
Vue/IntsAdmin/public/Common/records.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730905081846" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="34091" width="200" height="200"><path d="M158.983468 70.62069C120.00535 70.62069 88.275862 102.115222 88.275862 141.080964L88.275862 953.539725C88.275862 992.54242 119.980085 1024 158.983468 1024L865.016532 1024C903.99465 1024 935.724138 992.505468 935.724138 953.539725L935.724138 141.080964C935.724138 102.07827 904.019915 70.62069 865.016532 70.62069L759.172414 70.62069 794.482759 105.931034 794.482759 52.913081C794.482759 23.807011 770.796703 0 741.578417 0L282.421583 0C253.09101 0 229.517241 23.689781 229.517241 52.913081L229.517241 105.931034 264.827586 70.62069 158.983468 70.62069ZM300.137931 141.241379 300.137931 105.931034 300.137931 52.913081C300.137931 62.615111 292.171564 70.62069 282.421583 70.62069L741.578417 70.62069C731.713218 70.62069 723.862069 62.729446 723.862069 52.913081L723.862069 105.931034 723.862069 141.241379 759.172414 141.241379 865.016532 141.241379C865.140118 141.241379 865.103448 953.539725 865.103448 953.539725 865.103448 953.384748 158.983468 953.37931 158.983468 953.37931 158.859882 953.37931 158.896552 141.080964 158.896552 141.080964 158.896552 141.235942 264.827586 141.241379 264.827586 141.241379L300.137931 141.241379ZM723.862069 158.948988C723.862069 149.246958 731.828436 141.241379 741.578417 141.241379L282.421583 141.241379C292.286782 141.241379 300.137931 149.132623 300.137931 158.948988L300.137931 105.931034C300.137931 86.429678 284.328942 70.62069 264.827586 70.62069 245.32623 70.62069 229.517241 86.429678 229.517241 105.931034L229.517241 158.948988C229.517241 188.055058 253.203297 211.862069 282.421583 211.862069L741.578417 211.862069C770.90899 211.862069 794.482759 188.172288 794.482759 158.948988L794.482759 105.931034C794.482759 86.429678 778.67377 70.62069 759.172414 70.62069 739.671058 70.62069 723.862069 86.429678 723.862069 105.931034L723.862069 158.948988ZM723.862069 441.37931C743.363425 441.37931 759.172414 425.570322 759.172414 406.068966 759.172414 386.567609 743.363425 370.758621 723.862069 370.758621L300.137931 370.758621C280.636575 370.758621 264.827586 386.567609 264.827586 406.068966 264.827586 425.570322 280.636575 441.37931 300.137931 441.37931L723.862069 441.37931ZM300.137931 547.310345C280.636575 547.310345 264.827586 563.119334 264.827586 582.62069 264.827586 602.122046 280.636575 617.931034 300.137931 617.931034L723.862069 617.931034C743.363425 617.931034 759.172414 602.122046 759.172414 582.62069 759.172414 563.119334 743.363425 547.310345 723.862069 547.310345L300.137931 547.310345ZM300.137931 723.862069C280.636575 723.862069 264.827586 739.671058 264.827586 759.172414 264.827586 778.67377 280.636575 794.482759 300.137931 794.482759L582.62069 794.482759C602.122046 794.482759 617.931034 778.67377 617.931034 759.172414 617.931034 739.671058 602.122046 723.862069 582.62069 723.862069L300.137931 723.862069Z" fill="#389BFF" p-id="34092"></path></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
Vue/IntsAdmin/public/GoJS/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904727072" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13644" width="200" height="200"><path d="M474.656 483.68l131.776 395.296 56.416-201.376 208.384-61.728-396.576-132.16z" fill="#FFFFFF" p-id="13645"></path><path d="M449.344 458.4l475.2 158.4-248.672 73.6-68.128 243.168-158.4-475.2z m155.744 366.016l44.736-159.68 168.096-49.76-317.952-105.984 105.12 315.424z" fill="#27A2DF" p-id="13646"></path><path d="M704 216.512l17.856-4.352 7.456 31.136C349.632 334.048 162.4 508.448 162.4 767.168h-32c0-264.736 183.104-446.016 544.736-543.168H192V192h512v24.512z m85.536 8.32v-32c62.432 0 91.2-30.144 91.2-96.448h32c0 83.648-42.752 128.448-123.2 128.448z" fill="#5D6D7E" p-id="13647"></path><path d="M128 160h32a32 32 0 0 1 32 32v32a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V192a32 32 0 0 1 32-32z m0 608h32a32 32 0 0 1 32 32v32a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32v-32a32 32 0 0 1 32-32zM736 160h32a32 32 0 0 1 32 32v32a32 32 0 0 1-32 32h-32a32 32 0 0 1-32-32V192a32 32 0 0 1 32-32z" fill="#30AD98" p-id="13648"></path></svg>
|
After Width: | Height: | Size: 1.1 KiB |
1
Vue/IntsAdmin/public/GoJS/script.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904754912" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15556" width="200" height="200"><path d="M249.89 249.89H774.1V774.1H249.89V249.89z m43.69 43.69v436.84h436.84V293.58H293.58z" fill="#3D4265" p-id="15557"></path><path d="M97 97h393.16v393.16H97z" fill="#386BF3" p-id="15558"></path><path d="M533.84 533.84H927V927H533.84z" fill="#C3D2FB" p-id="15559"></path></svg>
|
After Width: | Height: | Size: 428 B |
1
Vue/IntsAdmin/public/GoJS/vis.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904826666" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21235" width="200" height="200"><path d="M145.6 0C100.8 0 64 36.8 64 81.6v860.8C64 987.2 100.8 1024 145.6 1024h732.8c44.8 0 81.6-36.8 81.6-81.6V324.8L657.6 0h-512z" fill="#496AB3" p-id="21236"></path><path d="M960 326.4v16H755.2s-100.8-20.8-99.2-108.8c0 0 4.8 92.8 97.6 92.8H960z" fill="#374FA0" p-id="21237"></path><path d="M657.6 0v233.6c0 25.6 17.6 92.8 97.6 92.8H960L657.6 0z" fill="#FFFFFF" opacity=".5" p-id="21238"></path><path d="M398.4 683.2L332.8 848c-3.2 8-11.2 12.8-19.2 12.8h-1.6c-8 0-16-4.8-19.2-12.8l-65.6-164.8c-1.6-1.6-1.6-3.2-1.6-4.8 0-6.4 6.4-12.8 12.8-12.8 4.8 0 9.6 3.2 12.8 8l62.4 160 60.8-160c1.6-4.8 6.4-8 12.8-8s12.8 6.4 12.8 12.8c0 1.6-1.6 3.2-1.6 4.8z m51.2 177.6c-8 0-12.8-4.8-12.8-11.2V676.8c0-6.4 4.8-11.2 12.8-11.2 6.4 0 11.2 4.8 11.2 11.2v172.8c0 6.4-4.8 11.2-11.2 11.2z m126.4 1.6c-28.8 0-51.2-9.6-67.2-24-3.2-1.6-4.8-4.8-4.8-8 0-6.4 4.8-12.8 11.2-12.8 3.2 0 4.8 1.6 6.4 3.2 14.4 11.2 32 20.8 54.4 20.8 35.2 0 44.8-17.6 44.8-33.6 0-49.6-113.6-22.4-113.6-89.6 0-32 28.8-54.4 67.2-54.4 24 0 44.8 8 60.8 20.8 3.2 3.2 4.8 6.4 4.8 9.6 0 4.8-4.8 11.2-11.2 11.2-3.2 0-4.8-1.6-8-3.2-14.4-11.2-32-16-49.6-16-22.4 0-38.4 11.2-38.4 30.4 0 43.2 113.6 17.6 113.6 89.6 0 28.8-19.2 56-70.4 56z" fill="#FFFFFF" p-id="21239"></path></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
Vue/IntsAdmin/public/OpenLayers/analysis.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904988281" class="icon" viewBox="0 0 1536 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="29755" width="200" height="200"><path d="M473.6 390.144c26.624 0 53.76-10.24 74.24-26.624l86.528 94.72c-20.48 20.48-32.768 49.664-32.768 80.384 0 59.904 43.008 109.056 102.912 115.2h4.096c12.288 0 24.576-10.24 24.576-22.528 2.048-14.336-8.192-26.624-22.528-28.672-32.768-4.096-57.856-30.72-57.856-64 0-34.816 28.672-66.048 66.048-66.048 34.816 0 66.048 28.672 66.048 66.048 0 12.288-4.096 22.528-10.24 32.768-8.192 12.288-4.096 28.672 8.192 34.816 12.288 8.192 28.672 4.096 34.816-8.192 10.24-18.432 16.384-38.912 16.384-59.904 0-28.672-10.24-53.76-26.624-74.24l183.296-209.92c20.48 18.432 47.616 28.672 76.288 28.672 64 0 117.248-51.712 117.248-117.248 0-53.76-36.864-98.816-88.576-113.152-14.336-4.096-26.624 4.096-30.72 18.432-4.096 14.336 4.096 26.624 18.432 30.72 28.672 8.192 49.664 32.768 49.664 64 0 34.816-28.672 66.048-66.048 66.048-34.816 0-66.048-28.672-66.048-66.048 0-18.432 6.144-34.816 20.48-47.616 10.24-10.24 10.24-26.624 0-36.864s-26.624-10.24-36.864 0c-22.528 22.528-34.816 51.712-34.816 84.48 0 26.624 10.24 51.712 24.576 72.192l-181.248 211.968c-20.48-16.384-47.616-28.672-76.288-28.672-24.576 0-49.664 8.192-68.096 22.528l-88.576-94.72c18.432-20.48 28.672-47.616 28.672-76.288 0-51.712-32.768-94.72-80.384-111.104-14.336-4.096-28.672 2.048-32.768 16.384-4.096 14.336 2.048 28.672 16.384 32.768 26.624 8.192 45.056 32.768 45.056 61.952 0 34.816-28.672 66.048-66.048 66.048-34.816 0-66.048-28.672-66.048-66.048 0-16.384 6.144-32.768 18.432-45.056 10.24-10.24 10.24-26.624 0-36.864s-26.624-10.24-36.864 0c-22.528 22.528-34.816 51.712-34.816 82.432C358.4 338.432 409.6 390.144 473.6 390.144z" fill="#1296db" p-id="29756"></path><path d="M1383.936 927.744l-285.184-382.976c-4.096-8.192-12.288-12.288-24.576-12.288h-221.696v3.584c0 18.944-4.096 37.376-11.264 53.76h220.672l56.832 77.312H413.696l60.928-77.312h117.248c-7.168-16.384-11.264-34.304-11.264-53.76v-3.584h-122.88c-8.192 0-16.384 4.096-20.48 8.192l-285.184 382.976c-16.384 20.48-4.096 49.152 20.48 49.152h1190.4c20.992 0 37.376-28.672 20.992-45.056zM397.312 687.616h737.792l36.864 49.152H360.96l36.352-49.152z m-171.008 228.352l118.272-155.136h607.232l81.408 155.136H226.304z m831.488 0l-81.408-155.136h85.504l89.6 155.136h-93.696z m118.272 0l-89.6-155.136h101.888l118.272 155.136h-130.56z" fill="#1296db" p-id="29757"></path></svg>
|
After Width: | Height: | Size: 2.4 KiB |
1
Vue/IntsAdmin/public/OpenLayers/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730904953726" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28546" width="200" height="200"><path d="M512 992c-38.4 0-76.8-12.8-108.8-38.4L44.8 665.6C19.2 640 0 608 0 569.6s19.2-70.4 51.2-96l358.4-288c57.6-51.2 153.6-51.2 217.6 0l358.4 288c19.2 25.6 38.4 64 38.4 96 0 38.4-19.2 70.4-44.8 96l-358.4 288c-32 25.6-70.4 38.4-108.8 38.4zM512 211.2c-25.6 0-51.2 6.4-70.4 25.6L83.2 524.8c-12.8 12.8-25.6 32-25.6 44.8 0 19.2 6.4 38.4 25.6 51.2l358.4 288c38.4 32 102.4 32 140.8 0l358.4-288c19.2-12.8 25.6-32 25.6-51.2 0-19.2-6.4-38.4-25.6-51.2L582.4 236.8c-19.2-19.2-44.8-25.6-70.4-25.6z" fill="#1296db" p-id="28547"></path><path d="M985.6 345.6L608 38.4c-51.2-44.8-134.4-44.8-192 0L38.4 345.6c-51.2 44.8-51.2 108.8 0 153.6l377.6 307.2c51.2 44.8 134.4 44.8 192 0l377.6-307.2c51.2-44.8 51.2-115.2 0-153.6z" fill="#1296db" p-id="28548"></path></svg>
|
After Width: | Height: | Size: 893 B |
1
Vue/IntsAdmin/public/OpenLayers/visiual.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730905025633" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="31965" width="200" height="200"><path d="M511.337273 1024a137.074277 137.074277 0 0 1-68.436072-18.336247l-323.988495-187.087474A137.247533 137.247533 0 0 1 50.390006 699.838249l0.317636-375.127855a137.276409 137.276409 0 0 1 68.37832-118.391517L443.796356 18.422875a137.103153 137.103153 0 0 1 137.103153 0l323.988495 187.087474a137.363036 137.363036 0 0 1 68.493824 118.73803l-0.28876 375.127855a137.160905 137.160905 0 0 1-68.37832 118.391517l-324.710394 187.69387a137.536292 137.536292 0 0 1-68.667081 18.538379z m1.097288-985.537195a127.285319 127.285319 0 0 0-63.527156 17.007952l-300.310191 173.717896a127.054312 127.054312 0 0 0-63.238396 109.555467l-0.28876 346.973775a127.054312 127.054312 0 0 0 63.382776 109.728724l299.674919 173.024872a126.765552 126.765552 0 0 0 126.794428 0l300.310191-173.746772a126.881056 126.881056 0 0 0 63.238396-109.555467l0.28876-346.973775a127.054312 127.054312 0 0 0-63.3539-109.728724L575.730709 55.441881a126.650048 126.650048 0 0 0-63.296148-16.979076z" fill="#2C96F3" p-id="31966"></path><path d="M524.822356 563.976764a47.385483 47.385483 0 0 0 31.763578-44.873273 39.473465 39.473465 0 0 0-1.241667-10.597485l118.997913-75.712819-149.5487 258.5844z m-61.996729-55.153122a57.982968 57.982968 0 0 0-1.241667 10.597485 47.703119 47.703119 0 0 0 31.763578 44.873273v138.604703l-159.510913-276.343128z m75.395184-26.796909a47.847499 47.847499 0 0 0-29.280244-10.279849 45.912808 45.912808 0 0 0-29.280244 10.279849l-125.235124-80.073092h309.319496z m180.041735-143.282613a47.703119 47.703119 0 0 0-44.873273 31.763578H344.809497a47.414359 47.414359 0 1 0-44.873273 62.920761h1.241668l168.86673 292.542552a48.511646 48.511646 0 0 0-8.662794 27.403305 47.356607 47.356607 0 1 0 82.238791-31.763578l166.672156-288.759799a29.106988 29.106988 0 0 0 7.478879 0.635272 47.356607 47.356607 0 0 0 0.635271-94.713215z" fill="#2C96F3" p-id="31967"></path></svg>
|
After Width: | Height: | Size: 2.0 KiB |
1
Vue/IntsAdmin/public/Three/buildModel.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730900488759" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9016" width="200" height="200"><path d="M512 128L166.4 315.392v374.784L512 896l345.6-206.208V315.392L512 128z m0 335.616L281.6 338.432 512 213.632l230.4 124.8-230.4 125.184z" fill="#1684FC" p-id="9017"></path></svg>
|
After Width: | Height: | Size: 330 B |
1
Vue/IntsAdmin/public/Three/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg t="1730900454680" class="icon" viewBox="0 0 1173 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8858" width="200" height="200"><path d="M102.86758 364.712329v198.721461l568.109589 338.995434 397.442922-236.127854V467.579909L675.652968 701.369863v198.721461h-7.013699V701.369863L102.86758 364.712329z m2.337899-7.013699l565.77169 336.657534 395.105023-236.127853-168.328767-100.529681v-119.232877l273.534246 163.652968V724.748858L670.977169 1024 0 624.219178V299.251142L502.648402 0l170.666666 100.52968v121.570777c-2.3379-2.3379-170.666667-100.52968-170.666666-100.529681l-397.442923 236.127854z m568.109589-133.260274z" fill="#00339E" p-id="8859"></path></svg>
|
After Width: | Height: | Size: 680 B |
BIN
Vue/IntsAdmin/public/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
0
Vue/IntsAdmin/public/treeValue.ts
Normal file
11
Vue/IntsAdmin/src/App.vue
Normal file
@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
import {RouterView } from 'vue-router'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<RouterView />
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
5
Vue/IntsAdmin/src/api/CesiumApi.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import {fetchData} from "@/utils/request";
|
||||
import type {ApiResponse} from "@/config/Axios_Config";
|
||||
export const getSiderTree=async ()=>{
|
||||
return await fetchData<ApiResponse<any>>('get',"/TopMenu/GetBuildTopMenu")
|
||||
}
|
12
Vue/IntsAdmin/src/assets/animation.css
Normal file
@ -0,0 +1,12 @@
|
||||
.fade-enter-active, .fade-leave-active {
|
||||
transition: transform 0.5s ease;
|
||||
}
|
||||
|
||||
.fade-enter {
|
||||
transform: translateX(100%);
|
||||
}
|
||||
|
||||
.fade-leave-to {
|
||||
transform: translateX(-100%);
|
||||
}
|
||||
|
8
Vue/IntsAdmin/src/assets/base.css
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
|
||||
body {
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
1
Vue/IntsAdmin/src/assets/element.scss
Normal file
@ -0,0 +1 @@
|
||||
|
1
Vue/IntsAdmin/src/assets/logo.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg>
|
After Width: | Height: | Size: 276 B |
6
Vue/IntsAdmin/src/assets/main.css
Normal file
@ -0,0 +1,6 @@
|
||||
@import './base.css';
|
||||
|
||||
#app {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
}
|
168
Vue/IntsAdmin/src/components/SideBar.vue
Normal file
@ -0,0 +1,168 @@
|
||||
<script setup lang="ts">
|
||||
import { useRouter } from 'vue-router';
|
||||
interface TreeNodeData {
|
||||
id: number,
|
||||
label: string,
|
||||
prop: string,
|
||||
icon?: string,
|
||||
children?: TreeNodeData[]
|
||||
}
|
||||
const router = useRouter()
|
||||
const emptyText = "暂无数据"
|
||||
const treeData = [
|
||||
{
|
||||
id: 1,
|
||||
label: '主节点',
|
||||
icon: "../public/GoJs/logo.svg",
|
||||
children:[
|
||||
{
|
||||
id: 1,
|
||||
label: 'GoJS',
|
||||
icon: "../public/GoJs/logo.svg",
|
||||
children: [
|
||||
{
|
||||
id: 9,
|
||||
icon: "../public/GoJs/vis.svg",
|
||||
prop: 'visioView',
|
||||
label: 'visio绘制',
|
||||
},
|
||||
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
label: 'Three',
|
||||
icon: "../public/Three/logo.svg",
|
||||
children: [
|
||||
{
|
||||
id: 5,
|
||||
icon: "../public/Three/buildModel.svg",
|
||||
label: '三维建模',
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
label: 'Cesium',
|
||||
icon: "../public/Cesium/logo.svg",
|
||||
children: [
|
||||
{
|
||||
id: 7,
|
||||
icon: "../public/Cesium/earth.svg",
|
||||
prop: 'ceisumView',
|
||||
label: '数字地球',
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
icon: "../public/Cesium/city.svg",
|
||||
label: '智慧园区',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
icon: "../public/OpenLayers/logo.svg",
|
||||
label: 'OpenLayers',
|
||||
children: [
|
||||
{
|
||||
id: 7,
|
||||
prop:'analysisView',
|
||||
icon: "../public/OpenLayers/analysis.svg",
|
||||
label: '空间分析',
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
icon: "../public/OpenLayers/visiual.svg",
|
||||
label: '可视化',
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
icon: "../public/GoJs/script.svg",
|
||||
label: '流程脚本',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
icon: "../public/Common/logo.svg",
|
||||
label: '日常',
|
||||
children: [
|
||||
{
|
||||
id: 7,
|
||||
icon: "../public/Common/gains.svg",
|
||||
label: '我的收获',
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
icon: "../public/Common/records.svg",
|
||||
label: '学习记录',
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
]
|
||||
const navigateView = (treeNode: TreeNodeData) => {
|
||||
router.push(treeNode.prop)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="side-bar">
|
||||
<div class="bar-top">
|
||||
<el-button type="primary" :disabled="false" @click="">三个一百天学习之路</el-button>
|
||||
</div>
|
||||
<div class="bar-bot">
|
||||
<el-tree :empty-text="emptyText" default-expand-all :data="treeData" highlight-current @node-click="navigateView" @node-contextmenu.prevent="">
|
||||
<template #default="{ node, data }">
|
||||
<span class="node-content">
|
||||
<img v-if="data.icon" :src="data.icon" alt="icon" class="node-icon" />
|
||||
{{ node.label }}
|
||||
</span>
|
||||
</template>
|
||||
</el-tree>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.side-bar {
|
||||
height: 100%;
|
||||
background-color: rgba(246, 249, 252);
|
||||
|
||||
.bar-top {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 5%;
|
||||
}
|
||||
|
||||
.bar-bot {
|
||||
height: 95%;
|
||||
padding: 0 5%;
|
||||
.el-tree {
|
||||
background: transparent;
|
||||
height: calc(95% - 0.72rem);
|
||||
font-size: 0.96rem;
|
||||
color: rgba(0, 0, 0, 0.397);
|
||||
:deep(.el-tree-node ){
|
||||
margin: 0.16rem 0;
|
||||
}
|
||||
:deep(.el-tree-node__content:hover ){
|
||||
background-color: #f3f3f3;
|
||||
}
|
||||
.node-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.node-icon {
|
||||
width: 1.44rem;
|
||||
height: 1.44rem;
|
||||
margin-right: 0.16rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
69
Vue/IntsAdmin/src/components/cesiumComponents/NavBar.vue
Normal file
@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<el-tabs class="NavBar" type="border-card" v-model="activeTab">
|
||||
<el-tab-pane label="几何绘制" name="drawPane" class="drawTab">
|
||||
<el-button type="primary" @click="handleDrawMethod('line')">线绘制</el-button>
|
||||
<el-button type="primary" @click="handleDrawMethod('polygon')">面绘制</el-button>
|
||||
<el-button type="primary" @click="handleDrawMethod('point')">点绘制</el-button>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="模型加载" name="modelPane">Config</el-tab-pane>
|
||||
<el-tab-pane label="json" name="jsonPane">
|
||||
<el-upload :action="null" show-file-list @change="handleChange">
|
||||
<el-button type="primary">上传json文件</el-button>
|
||||
</el-upload>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from "vue";
|
||||
import type{UploadFile} from "element-plus";
|
||||
const activeTab = ref('jsonPane');
|
||||
const emitDrawMethod = defineEmits(["send:DrawMethod","send:JsonData"]);
|
||||
const handleDrawMethod = (method: string) => {
|
||||
emitDrawMethod("send:DrawMethod", method);
|
||||
}
|
||||
|
||||
const handleChange = (file:UploadFile)=>{
|
||||
if (file.raw){
|
||||
const fileReader = new FileReader();
|
||||
fileReader.readAsText(file.raw);
|
||||
fileReader.onload=(e)=>{
|
||||
const jsonData = JSON.parse(e.target?.result as string);
|
||||
emitDrawMethod('send:JsonData',jsonData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.NavBar {
|
||||
z-index: 1000;
|
||||
width: 200px;
|
||||
height: 400px;
|
||||
position: absolute;
|
||||
left: 11%;
|
||||
top: 20%;
|
||||
color: aliceblue;
|
||||
|
||||
:deep(.el-tabs--border-card) {
|
||||
border: 1px solid #777477;
|
||||
}
|
||||
|
||||
:deep(.drawTab ) {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between; //
|
||||
.el-tabs__item {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.el-button {
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
95
Vue/IntsAdmin/src/components/cesiumComponents/SiderTree.vue
Normal file
@ -0,0 +1,95 @@
|
||||
<script setup lang="ts">
|
||||
import {onMounted, ref} from "vue";
|
||||
import {getSiderTree} from "@/api/CesiumApi";
|
||||
import axios from "axios";
|
||||
import type {TreeNode} from "element-plus";
|
||||
import {CesiumViewerManager} from "@/utils/cesium/initViewer";
|
||||
|
||||
const treeData = ref()
|
||||
import * as Cesium from 'cesium'
|
||||
import DynamicDrawClass from "@/utils/cesium/drawClass";
|
||||
|
||||
let drawClass: DynamicDrawClass
|
||||
const getTreeData = async () => {
|
||||
const response = await getSiderTree()
|
||||
if (response.code === 200) {
|
||||
treeData.value = response.data
|
||||
}
|
||||
}
|
||||
const drawLine = (type: TreeNode) => {
|
||||
const key = type.key;
|
||||
switch (key) {
|
||||
case 'point':
|
||||
drawClass.drawDynamicPoint();
|
||||
break;
|
||||
case 'lines':
|
||||
drawClass.drawDynamicLine()
|
||||
break;
|
||||
case 'line':
|
||||
drawClass.drawDynamicSLine()
|
||||
break;
|
||||
case 'polygon':
|
||||
drawClass.drawDynamicPolygon();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
onMounted(async () => {
|
||||
await getTreeData()
|
||||
let viewer = CesiumViewerManager.getViewer();
|
||||
if (viewer) {
|
||||
drawClass = new DynamicDrawClass(viewer)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="siderTree">
|
||||
|
||||
<el-tree default-expand-all :data="treeData" node-key="id" highlight-current
|
||||
:props="{ children: 'children', label: 'label' }" @node-click="drawLine">
|
||||
<template #default="{ node, data }">
|
||||
<span class="node-content">
|
||||
<img v-if="data.icon" :src="`../public/Cesium/SiderTree/${data.icon}.svg`" alt="icon" class="node-icon"/>
|
||||
{{ node.label }}
|
||||
</span>
|
||||
</template>
|
||||
</el-tree>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.siderTree {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
background-color: rgba(246, 249, 252);
|
||||
padding: 0.72rem;
|
||||
|
||||
.el-tree {
|
||||
font-size: 0.96rem;
|
||||
background-color: transparent;
|
||||
color: rgba(0, 0, 0, 0.397);
|
||||
|
||||
:deep(.el-tree-node) {
|
||||
margin: 0.16rem 0;
|
||||
}
|
||||
|
||||
:deep(.el-tree-node__content:hover) {
|
||||
background: #f3f3f3;
|
||||
}
|
||||
|
||||
.node-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.node-icon {
|
||||
width: 1.44rem;
|
||||
height: 1.44rem;
|
||||
margin-right: 0.16rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
</style>
|
11
Vue/IntsAdmin/src/components/cesiumComponents/TopBar.vue
Normal file
@ -0,0 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
</style>
|
9
Vue/IntsAdmin/src/config/Axios_Config.ts
Normal file
@ -0,0 +1,9 @@
|
||||
export interface ApiResponse<T> {
|
||||
code: number; // 状态码
|
||||
message: string; // 消息
|
||||
data: T; // 实际数据
|
||||
}
|
||||
export const AXIOS_CONFIG = {
|
||||
baseURL: '/dev_api',
|
||||
timeout: 1000,
|
||||
};
|
12
Vue/IntsAdmin/src/config/Cesium_Config.ts
Normal file
@ -0,0 +1,12 @@
|
||||
//cesium的默认config
|
||||
export const cesiumDefaultConfig = {
|
||||
token:"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIzMzIxM2RjNy1lNDdlLTRlY2ItYjM4NS03ZjY0OTVhODgwYjQiLCJpZCI6MjE3NzUxLCJpYXQiOjE3MTY2NDIyODd9.KawNtW8I3IsrPr4ofr6pezEUSc_N_HGRw3HKNzkxnKY",
|
||||
options:{
|
||||
infoBox: false,
|
||||
animation: false,
|
||||
timeline: false,
|
||||
depthTestAgainstTerrain:true,
|
||||
|
||||
}
|
||||
|
||||
}
|
109
Vue/IntsAdmin/src/descparted/HomeView.vue
Normal file
@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
:action="uploadUrl"
|
||||
:before-upload="beforeUpload"
|
||||
:on-success="handleSuccess"
|
||||
:on-error="handleError"
|
||||
:show-file-list="false"
|
||||
:on-progress="handleProgress"
|
||||
:data="uploadData"
|
||||
@change="handleFileChange"
|
||||
>
|
||||
<el-button type="primary">上传文件</el-button>
|
||||
</el-upload>
|
||||
<el-button type="primary" @click="downLoadFile">下载文件</el-button>
|
||||
<el-button type="primary" @click="downLoadPdfFile">下载文件</el-button>
|
||||
<el-dialog v-model="dialogVisible" title="上传进度" width="500">
|
||||
<el-progress v-if="uploadProgress > 0" :percentage="uploadProgress"></el-progress>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="dialogVisible" title="下载进度" width="500">
|
||||
<el-progress v-if="uploadProgress > 0" :percentage="uploadProgress"></el-progress>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from 'vue';
|
||||
import {ElMessage} from 'element-plus';
|
||||
import request from "@/utils/request";
|
||||
|
||||
const uploadProgress = ref(0);
|
||||
const dialogVisible = ref(false); // 控制弹框的可见性
|
||||
const uploadUrl = 'http://localhost:8088/file/uploadfile'; // 上传接口 URL
|
||||
|
||||
const downLoadFile = async () => {
|
||||
const response = await request("file/downloadfile", {
|
||||
responseType: "blob"
|
||||
});
|
||||
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.setAttribute('download', 'data.xlsx'); // 设置下载文件的默认名称
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
link.remove();
|
||||
ElMessage.success('文件下载成功');
|
||||
};
|
||||
const downLoadPdfFile = async () => {
|
||||
const response = await request("file/downloadpdf", {
|
||||
responseType: "blob",
|
||||
});
|
||||
const url = window.URL.createObjectURL(new Blob([response.data]));
|
||||
const link = document.createElement('a');
|
||||
link.href = url;
|
||||
link.setAttribute('download', 'file.pdf'); // 设置下载文件的默认名称
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
link.remove();
|
||||
ElMessage.success('文件下载成功');
|
||||
};
|
||||
|
||||
const uploadData = ref({});
|
||||
|
||||
const beforeUpload = (file) => {
|
||||
const isFileValid = true; // 在这里可以添加文件类型和大小的验证逻辑
|
||||
if (!isFileValid) {
|
||||
ElMessage.error('文件类型不符合要求');
|
||||
}
|
||||
return isFileValid;
|
||||
};
|
||||
|
||||
const handleProgress = (evt) => {
|
||||
dialogVisible.value = true;
|
||||
console.log('dialogVisible', dialogVisible.value);
|
||||
uploadProgress.value = Math.round((evt.loaded * 100) / evt.total);
|
||||
};
|
||||
|
||||
const handleSuccess = (response, file) => {
|
||||
ElMessage.success(`上传成功: ${response}`);
|
||||
dialogVisible.value = false; // 上传成功后关闭弹框
|
||||
uploadProgress.value = 0; // 重置进度
|
||||
setTimeout(() => {
|
||||
dialogVisible.value = false; // 关闭对话框
|
||||
}, 1000); // 1秒后关闭
|
||||
};
|
||||
|
||||
const handleError = (err, file) => {
|
||||
ElMessage.error(`上传失败: ${err}`);
|
||||
dialogVisible.value = false; // 上传失败后关闭弹框
|
||||
uploadProgress.value = 0; // 重置进度
|
||||
};
|
||||
|
||||
// 当文件选择变化时打开弹框
|
||||
const handleFileChange = (fileList) => {
|
||||
if (fileList.length > 0) {
|
||||
dialogVisible.value = true; // 显示进度弹框
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.upload-demo {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
427
Vue/IntsAdmin/src/descparted/drawclass.js
Normal file
@ -0,0 +1,427 @@
|
||||
class Draw {
|
||||
constructor(viewer, config) {
|
||||
/**cesium实例对象 */
|
||||
this.viewer = viewer
|
||||
/**绘制要素的相关配置
|
||||
* 默认配置
|
||||
* {
|
||||
borderColor: Cesium.Color.BLUE, 边框颜色
|
||||
borderWidth: 2, 边框宽度
|
||||
material: Cesium.Color.GREEN.withAlpha(0.5),填充材质
|
||||
}
|
||||
*/
|
||||
this.config = config || {
|
||||
borderColor: Cesium.Color.BLUE,
|
||||
borderWidth: 2,
|
||||
material: Cesium.Color.GREEN.withAlpha(0.5),
|
||||
}
|
||||
/**存贮绘制的数据 坐标 */
|
||||
this.infoDetail = { point: [], line: [], rectangle: [], circle: [], planeSelf: [] }
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
|
||||
}
|
||||
/*******
|
||||
* @function: function
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
* @description: 绘制点数据
|
||||
*/
|
||||
drawPoint() {
|
||||
this.handler.destroy()
|
||||
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
|
||||
this.handler.setInputAction((click) => {
|
||||
/**点击位置笛卡尔坐标 */
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(click.position, this.viewer.scene.globe.ellipsoid)
|
||||
/**笛卡尔转弧度坐标 */
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
/**点击位置经度 */
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
/**点击位置维度 */
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
/**实体的唯一标注 */
|
||||
let id = new Date().getTime()
|
||||
this.viewer.entities.add({
|
||||
position: Cesium.Cartesian3.fromDegrees(lng, lat, 0),
|
||||
name: 'point',
|
||||
id: id,
|
||||
point: {
|
||||
color: this.config.material,
|
||||
pixelSize: 12,
|
||||
outlineColor: this.config.borderColor,
|
||||
outlineWidth: this.config.borderWidth
|
||||
}
|
||||
})
|
||||
this.infoDetail.point.push({ id: id, position: [lng, lat] })
|
||||
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
|
||||
this.handler.setInputAction((click) => {
|
||||
this.handler.destroy();
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK)
|
||||
}
|
||||
|
||||
/*******
|
||||
* @function: function
|
||||
* @description: 绘制矩形区域
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
*/
|
||||
drawRectangle() {
|
||||
this.handler.destroy()
|
||||
/**
|
||||
* 矩形四点坐标
|
||||
*/
|
||||
let westSouthEastNorth = []
|
||||
/**实体的唯一标注 */
|
||||
let id = null
|
||||
/**地图点击对象 */
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
|
||||
this.handler.setInputAction((click) => {
|
||||
/**点击位置笛卡尔坐标 */
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(click.position, this.viewer.scene.globe.ellipsoid)
|
||||
/**笛卡尔转弧度坐标 */
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
/**点击位置经度 */
|
||||
let lng1 = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
/**点击位置维度 */
|
||||
let lat1 = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
/**边框坐标 */
|
||||
westSouthEastNorth = [lng1, lat1]
|
||||
id = new Date().getTime()
|
||||
if (westSouthEastNorth) {
|
||||
this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
}
|
||||
/**面实例对象 */
|
||||
let polygons = this.viewer.entities.add({
|
||||
name: 'rectangle',
|
||||
id: id,
|
||||
polygon: {
|
||||
hierarchy: new Cesium.CallbackProperty(function () {
|
||||
return {
|
||||
positions: Cesium.Cartesian3.fromDegreesArray(westSouthEastNorth)
|
||||
}
|
||||
}, false),
|
||||
height: 0,
|
||||
// 填充的颜色,withAlpha透明度
|
||||
material: this.config.material,
|
||||
// 是否被提供的材质填充
|
||||
fill: true,
|
||||
// 是否显示
|
||||
show: true,
|
||||
},
|
||||
polyline: {
|
||||
positions: new Cesium.CallbackProperty(function () { return Cesium.Cartesian3.fromDegreesArray(westSouthEastNorth) },false),
|
||||
material: this.config.borderColor,
|
||||
width: this.config.borderWidth,
|
||||
zIndex: 1
|
||||
}
|
||||
})
|
||||
this.handler.setInputAction((move) => {
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(move.endPosition, this.viewer.scene.globe.ellipsoid)
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
|
||||
westSouthEastNorth = [lng1, lat1, lng1, lat, lng, lat, lng, lat1, lng1, lat1]
|
||||
|
||||
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
|
||||
|
||||
this.handler.setInputAction(() => {
|
||||
this.handler.destroy();
|
||||
this.infoDetail.rectangle.push({ id: id, position: westSouthEastNorth })
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK)
|
||||
}
|
||||
/*******
|
||||
* @function: function
|
||||
* @description: 绘制圆形区域
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
*/
|
||||
drawCircle() {
|
||||
this.handler.destroy()
|
||||
/**实体的唯一标注 */
|
||||
let id = null
|
||||
|
||||
/**圆半径 */
|
||||
let radius = 0
|
||||
/**圆心 */
|
||||
let lngLat = []
|
||||
/**鼠标事件 */
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
|
||||
this.handler.setInputAction((click) => {
|
||||
id = new Date().getTime()
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(click.position, this.viewer.scene.globe.ellipsoid)
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
lngLat = [lng, lat]
|
||||
let entity = this.viewer.entities.add({
|
||||
position: new Cesium.CallbackProperty(function () { return new Cesium.Cartesian3.fromDegrees(...lngLat, 0) }, false),
|
||||
name: 'circle',
|
||||
id: id,
|
||||
ellipse: {
|
||||
height: 0,
|
||||
outline: true,
|
||||
material: this.config.material,
|
||||
outlineColor: this.config.borderColor,
|
||||
outlineWidth: this.config.borderWidth
|
||||
}
|
||||
})
|
||||
entity.ellipse.semiMajorAxis = new Cesium.CallbackProperty(function () { return radius }, false)
|
||||
entity.ellipse.semiMinorAxis = new Cesium.CallbackProperty(function () { return radius }, false)
|
||||
|
||||
if (lngLat) {
|
||||
this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
}
|
||||
this.handler.setInputAction((move) => {
|
||||
let cartesian2 = this.viewer.camera.pickEllipsoid(move.endPosition, this.viewer.scene.globe.ellipsoid)
|
||||
radius = Cesium.Cartesian3.distance(cartesian, cartesian2)
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
|
||||
this.handler.setInputAction(() => {
|
||||
|
||||
this.infoDetail.circle.push({ id: id, center: lngLat, radius: radius })
|
||||
this.handler.destroy();
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK)
|
||||
|
||||
|
||||
}
|
||||
/*******
|
||||
* @function: function
|
||||
* @description: 自定义区域绘制
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
*/
|
||||
drawPlane() {
|
||||
this.handler.destroy()
|
||||
/**实体的唯一标注 */
|
||||
let id = new Date().getTime()
|
||||
/**记录拐点坐标 */
|
||||
let positions = [],
|
||||
/**记录返回结果 */
|
||||
codeInfo = [],
|
||||
/**面的hierarchy属性 */
|
||||
polygon = new Cesium.PolygonHierarchy(),
|
||||
_polygonEntity = new Cesium.Entity(),
|
||||
/**面对象配置 */
|
||||
polyObj = null
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
|
||||
// left
|
||||
this.handler.setInputAction((movement) => {
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(movement.position, this.viewer.scene.globe.ellipsoid);
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
|
||||
|
||||
if (cartesian && cartesian.x) {
|
||||
if (positions.length == 0) {
|
||||
positions.push(cartesian.clone());
|
||||
}
|
||||
codeInfo.push([lng, lat])
|
||||
positions.push(cartesian.clone());
|
||||
polygon.positions.push(cartesian.clone())
|
||||
if (!polyObj) {
|
||||
_polygonEntity.polyline = {
|
||||
width: this.config.borderWidth,
|
||||
material: this.config.borderColor,
|
||||
clampToGround: false
|
||||
}
|
||||
_polygonEntity.polyline.positions = new Cesium.CallbackProperty(function () {
|
||||
return positions
|
||||
}, false)
|
||||
|
||||
_polygonEntity.polygon = {
|
||||
|
||||
hierarchy: new Cesium.CallbackProperty(function () {
|
||||
return polygon
|
||||
}, false),
|
||||
|
||||
material: this.config.material,
|
||||
clampToGround: false
|
||||
}
|
||||
_polygonEntity.name = 'planeSelf'
|
||||
|
||||
_polygonEntity._id = id
|
||||
polyObj = this.viewer.entities.add(_polygonEntity)
|
||||
}
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
// mouse
|
||||
this.handler.setInputAction((movement) => {
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(movement.endPosition, this.viewer.scene.globe.ellipsoid);
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
|
||||
if (positions.length >= 0) {
|
||||
if (cartesian && cartesian.x) {
|
||||
positions.pop()
|
||||
positions.push(cartesian);
|
||||
polygon.positions.pop()
|
||||
polygon.positions.push(cartesian);
|
||||
codeInfo.pop()
|
||||
codeInfo.push([lng, lat]);
|
||||
}
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
|
||||
// right
|
||||
this.handler.setInputAction((movement) => {
|
||||
this.infoDetail.planeSelf.push({ id: id, positions: codeInfo })
|
||||
|
||||
this.handler.destroy();
|
||||
positions.push(positions[0]);
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
|
||||
|
||||
}
|
||||
|
||||
/*******
|
||||
* @function: function
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
* @description: 绘制线段
|
||||
*/
|
||||
drawLine() {
|
||||
this.handler.destroy()
|
||||
/**实体的唯一标注 */
|
||||
let id = null
|
||||
/**记录拐点坐标 */
|
||||
let positions = [],
|
||||
/**记录返回结果 */
|
||||
codeInfo = [],
|
||||
/**面的hierarchy属性 */
|
||||
polygon = new Cesium.PolygonHierarchy(),
|
||||
_polygonEntity = new Cesium.Entity(),
|
||||
/**面对象配置 */
|
||||
polyObj = null
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
|
||||
// left
|
||||
this.handler.setInputAction((movement) => {
|
||||
id = new Date().getTime()
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(movement.position, this.viewer.scene.globe.ellipsoid);
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
|
||||
if (cartesian && cartesian.x) {
|
||||
if (positions.length == 0) {
|
||||
positions.push(cartesian.clone());
|
||||
}
|
||||
codeInfo.push([lng, lat])
|
||||
positions.push(cartesian.clone());
|
||||
polygon.positions.push(cartesian.clone())
|
||||
if (!polyObj) {
|
||||
_polygonEntity.polyline = {
|
||||
width: this.config.borderWidth,
|
||||
material: this.config.borderColor,
|
||||
clampToGround: false
|
||||
}
|
||||
_polygonEntity.polyline.positions = new Cesium.CallbackProperty(function () {
|
||||
return positions
|
||||
}, false)
|
||||
_polygonEntity.name = 'line'
|
||||
_polygonEntity._id = id
|
||||
|
||||
polyObj = this.viewer.entities.add(_polygonEntity)
|
||||
}
|
||||
}
|
||||
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
// mouse
|
||||
this.handler.setInputAction((movement) => {
|
||||
let cartesian = this.viewer.camera.pickEllipsoid(movement.endPosition, this.viewer.scene.globe.ellipsoid);
|
||||
let cartographic = Cesium.Cartographic.fromCartesian(cartesian, this.viewer.scene.globe.ellipsoid, new Cesium.Cartographic())
|
||||
let lng = Cesium.Math.toDegrees(cartographic.longitude)
|
||||
let lat = Cesium.Math.toDegrees(cartographic.latitude)
|
||||
|
||||
if (positions.length >= 0) {
|
||||
if (cartesian && cartesian.x) {
|
||||
positions.pop()
|
||||
positions.push(cartesian);
|
||||
codeInfo.pop()
|
||||
codeInfo.push([lng, lat]);
|
||||
}
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
|
||||
// right
|
||||
this.handler.setInputAction((movement) => {
|
||||
this.infoDetail.line.push({ id: id, positions: codeInfo })
|
||||
this.handler.destroy();
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
|
||||
}
|
||||
/*******
|
||||
* @function: function
|
||||
* @description: 移除实体对象
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
*/
|
||||
removeEntity() {
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas)
|
||||
this.handler.setInputAction((move) => {
|
||||
/**实体对象信息 {id:entities,primitive:。。} */
|
||||
let pick = this.viewer.scene.pick(move.endPosition);
|
||||
|
||||
if (pick && pick.id && pick.id.id) {
|
||||
document.body.style.cursor = "pointer";
|
||||
this.handler.setInputAction((click) => {
|
||||
let newPoint
|
||||
switch (pick.id.name) {
|
||||
|
||||
case 'point':
|
||||
/**删除某一条数据 */
|
||||
newPoint = this.infoDetail.point.filter(item => item.id != pick.id._id)
|
||||
this.infoDetail.point = newPoint
|
||||
break
|
||||
case 'line':
|
||||
/**删除某一条数据 */
|
||||
newPoint = this.infoDetail.line.filter(item => item.id != pick.id._id)
|
||||
this.infoDetail.line = newPoint
|
||||
break
|
||||
case 'rectangle':
|
||||
/**删除某一条数据 */
|
||||
newPoint = this.infoDetail.rectangle.filter(item => item.id != pick.id._id)
|
||||
this.infoDetail.rectangle = newPoint
|
||||
break
|
||||
|
||||
case 'planeSelf':
|
||||
/**删除某一条数据 */
|
||||
newPoint = this.infoDetail.planeSelf.filter(item => item.id != pick.id._id)
|
||||
this.infoDetail.planeSelf = newPoint
|
||||
break
|
||||
case 'circle':
|
||||
/**删除某一条数据 */
|
||||
newPoint = this.infoDetail.circle.filter(item => item.id != pick.id._id)
|
||||
this.infoDetail.circle = newPoint
|
||||
break
|
||||
default: break
|
||||
}
|
||||
this.viewer.entities.remove(pick.id)
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
|
||||
|
||||
} else {
|
||||
|
||||
document.body.style = "cursor: default;";
|
||||
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE)
|
||||
}
|
||||
/*******
|
||||
* @function: function
|
||||
* @return {*}
|
||||
* @author: xk
|
||||
* @description: 返回绘制数据
|
||||
*/
|
||||
backInfoDetail() {
|
||||
return this.infoDetail
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
69
Vue/IntsAdmin/src/descparted/md.vue
Normal file
@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<div class="markdown-editor">
|
||||
<!-- Markdown 编辑器 -->
|
||||
<div class="editor-container">
|
||||
<div ref="editorContainer" class="editor"></div>
|
||||
</div>
|
||||
|
||||
<!-- Markdown 渲染预览 -->
|
||||
<div class="preview-container" v-html="renderedMarkdown"></div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from "vue";
|
||||
import { Editor } from "@toast-ui/editor";
|
||||
import "tui-editor/dist/tui-editor.css";
|
||||
import "tui-editor/dist/tui-editor-contents.css";
|
||||
import marked from "marked";
|
||||
|
||||
// 定义 Editor 的 DOM 容器
|
||||
const editorContainer = ref<HTMLDivElement | null>(null);
|
||||
|
||||
// 定义 Editor 实例
|
||||
let editor: Editor | null = null;
|
||||
|
||||
// 定义 Markdown 内容
|
||||
const markdownContent = ref<string>("### Hello Markdown\n\nThis is an example of **Markdown Editor**!");
|
||||
|
||||
// 计算渲染后的 Markdown 内容
|
||||
const renderedMarkdown = computed(() => marked(markdownContent.value));
|
||||
|
||||
// 初始化 Editor
|
||||
onMounted(() => {
|
||||
if (editorContainer.value) {
|
||||
editor = new Editor({
|
||||
el: editorContainer.value,
|
||||
initialValue: markdownContent.value,
|
||||
height: "100%",
|
||||
previewStyle: "vertical",
|
||||
initialEditType: "markdown",
|
||||
events: {
|
||||
change: () => {
|
||||
if (editor) {
|
||||
markdownContent.value = editor.getMarkdown(); // 获取编辑器内容
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.markdown-editor {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
height: 100%;
|
||||
.editor-container {
|
||||
width: 50%;
|
||||
padding: 10px;
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
.preview-container {
|
||||
width: 50%;
|
||||
padding: 10px;
|
||||
overflow-y: auto;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
}
|
||||
</style>
|
18
Vue/IntsAdmin/src/main.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import './assets/main.css'
|
||||
import "./assets/animation.css"
|
||||
import "ol/ol.css";
|
||||
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
import router from './router'
|
||||
import registerPlugins from './plugins'
|
||||
import './assets/element.scss'
|
||||
const app = createApp(App)
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
import "cesium/Build/Cesium/Widgets/widgets.css"
|
||||
app.use(router)
|
||||
registerPlugins(app)
|
||||
app.mount('#app')
|
||||
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
|
||||
app.component(key, component)
|
||||
}
|
3
Vue/IntsAdmin/src/modules/go.d.ts
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
/// <reference path="./node_modules/gojs/release/go.d.ts" />
|
||||
|
||||
declare module "gojs";
|
8
Vue/IntsAdmin/src/plugins/element.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import 'element-plus/dist/index.css'
|
||||
import ElementPlus from 'element-plus'
|
||||
import type { App } from 'vue'
|
||||
import zhCn from 'element-plus/es/locale/lang/zh-cn';
|
||||
export default (app: App<Element>) => {
|
||||
app.use(ElementPlus,{ locale: zhCn }
|
||||
)
|
||||
}
|
8
Vue/IntsAdmin/src/plugins/index.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import type { App } from "vue";
|
||||
import element from "./element";
|
||||
import pinia from "./pinia";
|
||||
export default function registerPlugins(app:App<Element>){
|
||||
app
|
||||
.use(element)
|
||||
.use(pinia)
|
||||
}
|
5
Vue/IntsAdmin/src/plugins/pinia.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import { createPinia } from 'pinia'
|
||||
import type { App } from 'vue'
|
||||
export default (app: App<Element>) => {
|
||||
app.use(createPinia())
|
||||
}
|
34
Vue/IntsAdmin/src/router/index.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import { createRouter, createWebHistory } from 'vue-router'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHistory(import.meta.env.BASE_URL),
|
||||
routes: [
|
||||
{
|
||||
path: '/',
|
||||
name: 'home',
|
||||
component: ()=>import('../views/HomeView.vue'),
|
||||
children:[
|
||||
{
|
||||
name:'cesium',
|
||||
path:'ceisumView',
|
||||
component:()=>import("../views/cesiumView/CesiumHome.vue")
|
||||
},{
|
||||
name:'visio',
|
||||
path:'visioView',
|
||||
component:()=>import("../views/goJsView/VisioHome.vue")
|
||||
},{
|
||||
name:'analysis',
|
||||
path:'analysisView',
|
||||
component:()=>import("../views/olView/analysisHome.vue")
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/about',
|
||||
name: 'about',
|
||||
component: () => import('../views/AboutView.vue')
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
export default router
|
12
Vue/IntsAdmin/src/stores/counter.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { ref, computed } from 'vue'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
export const useCounterStore = defineStore('counter', () => {
|
||||
const count = ref(0)
|
||||
const doubleCount = computed(() => count.value * 2)
|
||||
function increment() {
|
||||
count.value++
|
||||
}
|
||||
|
||||
return { count, doubleCount, increment }
|
||||
})
|
335
Vue/IntsAdmin/src/utils/cesium/drawClass.ts
Normal file
@ -0,0 +1,335 @@
|
||||
import * as Cesium from "cesium";
|
||||
import {CallbackProperty, type Cartesian3, Property, ScreenSpaceEventHandler, type ScreenSpaceEventType} from "cesium";
|
||||
|
||||
export default class DynamicDrawClass {
|
||||
private readonly viewer: Cesium.Viewer;
|
||||
private entities: Map<string, Cesium.Entity>;
|
||||
private handler: Cesium.ScreenSpaceEventHandler | null = null;
|
||||
|
||||
constructor(viewer: Cesium.Viewer,) {
|
||||
this.viewer = viewer;
|
||||
this.entities = new Map();
|
||||
}
|
||||
|
||||
removeHandler() {
|
||||
if (this.handler) {
|
||||
this.handler.destroy();
|
||||
this.handler = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制动态点
|
||||
* @returns 绘制的点实体
|
||||
*/
|
||||
drawDynamicPoint(): Cesium.Entity | undefined {
|
||||
this.removeHandler(); // 清除之前的鼠标事件处理器
|
||||
if (this.viewer) {
|
||||
let activePosition: Cesium.Cartesian3 | undefined; // 当前动态位置
|
||||
let dynamicPoint: Cesium.Entity | undefined; // 动态点实体
|
||||
const canvas = this.viewer.scene.canvas;
|
||||
const globe = this.viewer.scene.globe;
|
||||
const ellipsoid = globe.ellipsoid;
|
||||
// 初始化鼠标事件处理器
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(canvas);
|
||||
// 鼠标移动时显示动态点
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.MotionEvent) => {
|
||||
const movePosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.endPosition,
|
||||
ellipsoid
|
||||
);
|
||||
if (movePosition) {
|
||||
activePosition = movePosition;
|
||||
// 如果动态点还未创建,则创建一个
|
||||
if (!dynamicPoint) {
|
||||
dynamicPoint = this.viewer.entities.add({
|
||||
position: new Cesium.CallbackProperty(() => activePosition, false), // 动态更新位置
|
||||
point: {
|
||||
color: Cesium.Color.RED, // 点的颜色
|
||||
pixelSize: 10, // 像素大小
|
||||
outlineColor: Cesium.Color.GREEN, // 边框颜色
|
||||
outlineWidth: 1.5, // 边框宽度
|
||||
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
// 鼠标左键单击时固定点的位置
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
const clickPosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.position,
|
||||
ellipsoid
|
||||
);
|
||||
if (clickPosition && dynamicPoint) {
|
||||
activePosition = clickPosition;
|
||||
dynamicPoint.position = clickPosition;
|
||||
this.removeHandler(); // 清除鼠标事件处理器,防止继续移动
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
|
||||
return dynamicPoint; // 返回动态点实体
|
||||
}
|
||||
|
||||
return undefined; // 如果 viewer 不存在,返回 undefined
|
||||
}
|
||||
|
||||
/**
|
||||
* 直线绘制
|
||||
*/
|
||||
drawDynamicSLine(): Cesium.Entity | undefined {
|
||||
this.removeHandler(); // 清除之前的鼠标事件处理器
|
||||
if (this.viewer) {
|
||||
let activePositions: Cartesian3[] = []; // 当前动态位置
|
||||
let dynamicLine: Cesium.Entity | undefined; // 动态点实体
|
||||
const canvas = this.viewer.scene.canvas;
|
||||
const globe = this.viewer.scene.globe;
|
||||
const ellipsoid = globe.ellipsoid;
|
||||
let endPoint: Cesium.Entity; // 动态端点实体
|
||||
|
||||
// 初始化鼠标事件处理器
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(canvas);
|
||||
// 鼠标移动时显示动态点
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.MotionEvent) => {
|
||||
const movePosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.endPosition,
|
||||
ellipsoid
|
||||
);
|
||||
// 动态更新线的最后一个点
|
||||
if (activePositions.length > 0 && movePosition) {
|
||||
console.log(activePositions.length)
|
||||
activePositions[activePositions.length - 1] = movePosition;
|
||||
} else if (movePosition) {
|
||||
activePositions.push(movePosition); // 第一个点
|
||||
}
|
||||
if (!endPoint) {
|
||||
endPoint = this.viewer.entities.add({
|
||||
position: new Cesium.CallbackProperty(() => {
|
||||
return activePositions[activePositions.length - 1];
|
||||
}, false),
|
||||
point: {
|
||||
pixelSize: 10,
|
||||
outlineColor: Cesium.Color.RED,
|
||||
outlineWidth: 1.5,
|
||||
color: Cesium.Color.WHITE
|
||||
}
|
||||
})
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
// 鼠标左键单击时固定点的位置
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
const clickPosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.position,
|
||||
ellipsoid
|
||||
);
|
||||
if (clickPosition && activePositions.length < 2) {
|
||||
activePositions.push(clickPosition);
|
||||
dynamicLine = this.viewer.entities.add({
|
||||
polyline: {
|
||||
positions: new Cesium.CallbackProperty(() => {
|
||||
return activePositions;
|
||||
}, false),
|
||||
width: 3,
|
||||
material: Cesium.Color.BLUE.withAlpha(0.5),
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.viewer.entities.remove(endPoint);
|
||||
this.removeHandler();
|
||||
return dynamicLine;
|
||||
}
|
||||
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
// this.handler.setInputAction((click:Cesium.ScreenSpaceEventHandler.PositionedEvent)=>{
|
||||
// this.removeHandler(); // 清除鼠标事件处理器
|
||||
// if (dynamicLine) {
|
||||
// return dynamicLine; // 返回最终的动态线实体
|
||||
// }
|
||||
// },Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
|
||||
|
||||
}
|
||||
return undefined;
|
||||
|
||||
}
|
||||
/**
|
||||
* 绘制动态线
|
||||
*/
|
||||
drawDynamicLine(): Cesium.Entity | undefined {
|
||||
this.removeHandler(); // 清除之前的鼠标事件处理器
|
||||
if (this.viewer) {
|
||||
let activePositions: Cartesian3[] = []; // 当前动态位置
|
||||
let dynamicLine: Cesium.Entity | undefined; // 动态点实体
|
||||
const canvas = this.viewer.scene.canvas;
|
||||
const globe = this.viewer.scene.globe;
|
||||
const ellipsoid = globe.ellipsoid;
|
||||
let endPoint: Cesium.Entity; // 动态端点实体
|
||||
// 初始化鼠标事件处理器
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(canvas);
|
||||
// 鼠标移动时显示动态点
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.MotionEvent) => {
|
||||
const movePosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.endPosition,
|
||||
ellipsoid
|
||||
);
|
||||
// 动态更新线的最后一个点
|
||||
if (activePositions.length > 0 && movePosition) {
|
||||
activePositions[activePositions.length - 1] = movePosition;
|
||||
} else if (movePosition) {
|
||||
activePositions.push(movePosition); // 第一个点
|
||||
}
|
||||
// 如果没有端点实体,创建一个新的端点显示
|
||||
if (!endPoint) {
|
||||
endPoint = this.viewer.entities.add({
|
||||
position: new Cesium.CallbackProperty(() => {
|
||||
return activePositions[activePositions.length - 1]; // 端点位置
|
||||
}, false),
|
||||
point: {
|
||||
color: Cesium.Color.WHITE, // 端点的颜色
|
||||
pixelSize: 10, // 点的大小
|
||||
outlineColor: Cesium.Color.RED, // 边框颜色
|
||||
outlineWidth: 2, // 边框宽度
|
||||
},
|
||||
});
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
// 鼠标左键单击时固定点的位置
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
const clickPosition = this.viewer.scene.camera.pickEllipsoid(
|
||||
event.position,
|
||||
ellipsoid
|
||||
);
|
||||
if (clickPosition) {
|
||||
activePositions.push(clickPosition);
|
||||
dynamicLine = this.viewer.entities.add({
|
||||
polyline: {
|
||||
positions: new Cesium.CallbackProperty(() => {
|
||||
return activePositions;
|
||||
}, false),
|
||||
width: 3,
|
||||
material: Cesium.Color.GREEN.withAlpha(0.5),
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
this.handler.setInputAction((clickPosition: Cesium.ScreenSpaceEventHandler.MotionEvent) => {
|
||||
activePositions.length > 1 ? activePositions.pop() : null;
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK)
|
||||
this.handler.setInputAction((click: Cesium.ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
this.removeHandler(); // 清除鼠标事件处理器
|
||||
this.viewer.entities.remove(endPoint);
|
||||
if (dynamicLine) {
|
||||
return dynamicLine; // 返回最终的动态线实体
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
|
||||
|
||||
}
|
||||
return undefined;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 绘制动态多边形
|
||||
* @returns 绘制的多边形实体
|
||||
*/
|
||||
drawDynamicPolygon(): Cesium.Entity|undefined {
|
||||
this.removeHandler();
|
||||
if (this.viewer) {
|
||||
let activePositions: Cartesian3[] = []; // 当前动态位置
|
||||
let hierarchy = new Cesium.PolygonHierarchy(); // 用于存储多边形的点
|
||||
let myPolygon: Cesium.Entity;
|
||||
let myPolyline: Cesium.Entity;
|
||||
const canvas = this.viewer.scene.canvas;
|
||||
const globe = this.viewer.scene.globe;
|
||||
const ellipsoid = globe.ellipsoid;
|
||||
// 初始化鼠标事件处理器
|
||||
this.handler = new Cesium.ScreenSpaceEventHandler(canvas);
|
||||
// 鼠标移动时更新动态点
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.MotionEvent) => {
|
||||
const movePosition = this.viewer.scene.camera.pickEllipsoid(event.endPosition, ellipsoid);
|
||||
if (movePosition) {
|
||||
// 动态更新线的最后一个点
|
||||
if (activePositions.length > 0) {
|
||||
activePositions[activePositions.length - 1] = movePosition;
|
||||
hierarchy.positions[activePositions.length - 1] = movePosition;
|
||||
}else{
|
||||
activePositions.push(movePosition);
|
||||
hierarchy.positions.push(movePosition);
|
||||
}
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
|
||||
// 鼠标左键单击时添加点
|
||||
this.handler.setInputAction((event: Cesium.ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
const clickPosition = this.viewer.scene.camera.pickEllipsoid(event.position, ellipsoid);
|
||||
if (clickPosition) {
|
||||
activePositions.push(clickPosition);
|
||||
hierarchy.positions.push(clickPosition);
|
||||
// 动态显示多边形
|
||||
myPolygon = this.viewer.entities.add({
|
||||
polygon: {
|
||||
hierarchy: new CallbackProperty(() => hierarchy, false),
|
||||
material: Cesium.Color.WHITESMOKE.withAlpha(0.5),
|
||||
outlineWidth: 2,
|
||||
}
|
||||
});
|
||||
|
||||
// 动态显示多边形的边界线
|
||||
myPolyline = this.viewer.entities.add({
|
||||
name:'123',
|
||||
polyline: {
|
||||
width: 1,
|
||||
material: Cesium.Color.RED.withAlpha(0.5),
|
||||
positions: new CallbackProperty(() => activePositions, false)
|
||||
}
|
||||
});
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
|
||||
|
||||
// 鼠标右键单击时删除最后一个点
|
||||
this.handler.setInputAction(() => {
|
||||
if (activePositions.length > 1) {
|
||||
activePositions.pop(); // 删除最后一个点
|
||||
hierarchy.positions.pop(); // 删除多边形最后一个点
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
|
||||
|
||||
// 鼠标双击时完成绘制
|
||||
this.handler.setInputAction((movement:ScreenSpaceEventHandler.PositionedEvent) => {
|
||||
this.removeHandler(); // 清除事件处理器
|
||||
activePositions.push(activePositions[0])
|
||||
// 移除辅助线(myPolyline)
|
||||
if (myPolyline) {
|
||||
let res = this.viewer.entities.remove(myPolyline);
|
||||
console.log(res)
|
||||
}
|
||||
// 移除多边形
|
||||
if (myPolygon) {
|
||||
return myPolygon; // 返回多边形实体
|
||||
}
|
||||
}, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
/**
|
||||
* 移除图形
|
||||
* @param id - 图形的唯一标识
|
||||
* @returns 是否成功移除
|
||||
*/
|
||||
remove(id: string): boolean {
|
||||
const entity = this.entities.get(id);
|
||||
if (entity) {
|
||||
this.viewer.entities.remove(entity);
|
||||
this.entities.delete(id);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除所有绘制的图形
|
||||
*/
|
||||
clearAll(): void {
|
||||
this.viewer.entities.removeAll();
|
||||
this.entities.clear();
|
||||
}
|
||||
}
|
35
Vue/IntsAdmin/src/utils/cesium/initViewer.ts
Normal file
@ -0,0 +1,35 @@
|
||||
import * as Cesium from 'cesium'
|
||||
export class CesiumViewerManager {
|
||||
private static _viewer: Cesium.Viewer | null = null;
|
||||
|
||||
/**
|
||||
* 初始化 Viewer 实例
|
||||
* @param container 容器的 DOM ID
|
||||
* @param options 可选配置参数
|
||||
* @returns 返回 Cesium.Viewer 实例
|
||||
*/
|
||||
public static initViewer(container: string, options?: object): Cesium.Viewer {
|
||||
if (!this._viewer) {
|
||||
this._viewer = new Cesium.Viewer(container, options);
|
||||
}
|
||||
return this._viewer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 Viewer 实例
|
||||
* @returns 返回 Cesium.Viewer 实例或 null
|
||||
*/
|
||||
public static getViewer(): Cesium.Viewer | null {
|
||||
return this._viewer;
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁 Viewer 实例
|
||||
*/
|
||||
public static destroyViewer(): void {
|
||||
if (this._viewer) {
|
||||
this._viewer.destroy();
|
||||
this._viewer = null;
|
||||
}
|
||||
}
|
||||
}
|
69
Vue/IntsAdmin/src/utils/request.ts
Normal file
@ -0,0 +1,69 @@
|
||||
import axios, {
|
||||
type AxiosInstance,
|
||||
type AxiosRequestConfig,
|
||||
type AxiosResponse,
|
||||
type InternalAxiosRequestConfig
|
||||
} from 'axios';
|
||||
import {type ApiResponse, AXIOS_CONFIG} from "@/config/Axios_Config";
|
||||
// 创建 Axios 实例
|
||||
const service: AxiosInstance = axios.create(AXIOS_CONFIG);
|
||||
// 请求拦截器
|
||||
service.interceptors.request.use(
|
||||
(config: InternalAxiosRequestConfig) => {
|
||||
return config;
|
||||
},
|
||||
(error) => {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(
|
||||
(response: AxiosResponse) => {
|
||||
// 直接返回响应数据
|
||||
return response.data;
|
||||
},
|
||||
(error) => {
|
||||
// 统一处理错误
|
||||
console.error('Request Error:', error);
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
// // 封装通用的 GET 请求
|
||||
// export const get = <T>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>> => {
|
||||
// return service.get(url, { params });
|
||||
// };
|
||||
//
|
||||
// // 封装通用的 POST 请求
|
||||
// export const post = <T>(url: string, data?: Record<string, any>): Promise<ApiResponse<T>> => {
|
||||
// return service.post(url, data);
|
||||
// };
|
||||
// // 封装通用的 delete 请求
|
||||
// export const del = <T>(url: string, params?: Record<string, any>): Promise<ApiResponse<T>> => {
|
||||
// return service.delete(url, { params });
|
||||
// };
|
||||
//
|
||||
// // 封装通用的 put 请求
|
||||
// export const put = <T>(url: string, data?: Record<string, any>): Promise<ApiResponse<T>> => {
|
||||
// return service.put(url, data);
|
||||
// };
|
||||
export const fetchData = async <T>(
|
||||
method: 'get' | 'post' | 'put' | 'delete',
|
||||
url: string,
|
||||
paramsOrData?: Record<string, any>
|
||||
): Promise<T> => {
|
||||
try {
|
||||
let response: AxiosResponse<T>;
|
||||
if (method === 'get' || method === 'delete') {
|
||||
response = await service[method](url, { params: paramsOrData });
|
||||
} else {
|
||||
response = await service[method](url, paramsOrData);
|
||||
}
|
||||
return response as T;
|
||||
} catch (error) {
|
||||
return Promise.reject(error); // 抛出错误让调用方处理
|
||||
}
|
||||
};
|
||||
// 导出 Axios 实例以便自定义请求
|
||||
export default service;
|
6
Vue/IntsAdmin/src/views/AboutView.vue
Normal file
@ -0,0 +1,6 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
<style scoped>
|
||||
|
||||
</style>
|
51
Vue/IntsAdmin/src/views/HomeView.vue
Normal file
@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<div class="homeView">
|
||||
<div class="siderBar">
|
||||
<side-bar />
|
||||
</div>
|
||||
<div class="contentContainer">
|
||||
<div class="componentContainer">
|
||||
<transition name="el-fade-in">
|
||||
<RouterView />
|
||||
</transition>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import SideBar from "@/components/SideBar.vue";
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.homeView {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
background-color: #f6f9fc;
|
||||
display: flex;
|
||||
padding: 0.72rem;
|
||||
.siderBar {
|
||||
width: 10vw;
|
||||
}
|
||||
.contentContainer {
|
||||
width: 90vw;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 0.2rem;
|
||||
background-color: rgba(255, 255, 255, 0.356);
|
||||
color: rgba(102, 102, 102, 0.8);
|
||||
box-shadow: 0 -0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2),
|
||||
-0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2),
|
||||
0.2rem 0 0.2rem 0 rgba(0, 0, 0, 0.2),
|
||||
0 0.2rem 0.2rem 0 rgba(0, 0, 0, 0.2);
|
||||
.componentContainer{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
64
Vue/IntsAdmin/src/views/cesiumView/CesiumHome.vue
Normal file
@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div class="mainContainer">
|
||||
<div class="navBar">
|
||||
<SiderTree/>
|
||||
</div>
|
||||
<div class="cesiumContainer">
|
||||
<div class="midCon" id ="viewContainer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import * as Cesium from "cesium"
|
||||
import {onMounted, onUnmounted, ref} from "vue";
|
||||
import DrawClass from "@/utils/cesium/drawClass";
|
||||
import SiderTree from "@/components/cesiumComponents/SiderTree.vue";
|
||||
import viewerStore from "@/stores/viewerStore";
|
||||
import { cesiumDefaultConfig } from "@/config/Cesium_Config";
|
||||
import { CesiumViewerManager } from "@/utils/cesium/initViewer";
|
||||
const viewer = ref<Cesium.Viewer | null>(null)
|
||||
function InitMainView() {
|
||||
Cesium.Ion.defaultAccessToken = cesiumDefaultConfig.token;
|
||||
const mainViewer = CesiumViewerManager.initViewer('viewContainer',cesiumDefaultConfig.options)
|
||||
viewer.value = mainViewer;
|
||||
viewer.value.selectionIndicator.destroy() // 禁用选中指示器
|
||||
}
|
||||
onMounted(() => {
|
||||
InitMainView()
|
||||
})
|
||||
onUnmounted(()=>{
|
||||
if(CesiumViewerManager.getViewer()){
|
||||
CesiumViewerManager.destroyViewer();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.mainContainer{
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.navBar{
|
||||
width: 10%;
|
||||
height: 100%;
|
||||
border-right: #c4cede 1px solid;
|
||||
}
|
||||
.cesiumContainer {
|
||||
height: 100%;
|
||||
color: #19335b;
|
||||
width: 90%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.midCon{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
*:deep(.cesium-viewer-bottom) * {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
133
Vue/IntsAdmin/src/views/goJsView/VisioHome.vue
Normal file
@ -0,0 +1,133 @@
|
||||
<template>
|
||||
<div class="goHome">
|
||||
<!-- 左侧模板容器 -->
|
||||
<div class="objContainer">
|
||||
<div
|
||||
v-for="template in templates"
|
||||
:key="template.key"
|
||||
class="template"
|
||||
draggable="true"
|
||||
@dragstart="onDragStart(template)"
|
||||
>
|
||||
{{ template.name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="drawContainer" id="drawContainer"></div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import * as go from "gojs";
|
||||
import { onMounted, reactive } from "vue";
|
||||
|
||||
// 模板数据
|
||||
const templates = reactive([
|
||||
{ key: "template1", name: "圆形", shape: "Ellipse" },
|
||||
{ key: "template2", name: "矩形", shape: "RoundedRectangle" },
|
||||
{ key: "template3", name: "三角形", shape: "Triangle" },
|
||||
]);
|
||||
|
||||
let draggedTemplate: any = null; // 当前拖动的模板
|
||||
|
||||
// 拖动开始事件
|
||||
const onDragStart = (template: any) => {
|
||||
draggedTemplate = template;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
const mygo = go.GraphObject.make;
|
||||
|
||||
// 初始化 Diagram 实例
|
||||
const myDiagram = mygo(go.Diagram, "drawContainer", {
|
||||
initialContentAlignment: go.Spot.Center,
|
||||
"undoManager.isEnabled": true,
|
||||
"grid.visible": true, // 显示网格
|
||||
"grid.gridCellSize": new go.Size(50, 50), // 网格单元格大小
|
||||
"draggingTool.isGridSnapEnabled": true, // 拖动时吸附到网格
|
||||
"resizingTool.isGridSnapEnabled": true, // 调整大小时吸附到网格
|
||||
"toolManager.hoverDelay": 0, // 快速响应
|
||||
});
|
||||
|
||||
// 定义节点模板
|
||||
myDiagram.nodeTemplate = mygo(
|
||||
go.Node,
|
||||
"Auto",
|
||||
{
|
||||
locationSpot: go.Spot.Center, // 设置拖动时的定位点
|
||||
},
|
||||
mygo(go.Shape, { fill: "lightblue", strokeWidth: 0 }, new go.Binding("figure", "shape")),
|
||||
mygo(go.TextBlock, { margin: 8, editable: true }, new go.Binding("text", "name").makeTwoWay())
|
||||
);
|
||||
// 添加辅助线逻辑
|
||||
myDiagram.addDiagramListener("SelectionMoved", (e:any) => {
|
||||
const diagram = e.diagram;
|
||||
const selectedPart = diagram.selection.first();
|
||||
if (selectedPart) {
|
||||
const selectedBounds = selectedPart.actualBounds;
|
||||
diagram.clearHighlighteds();
|
||||
diagram.nodes.each((node:any) => {
|
||||
if (node !== selectedPart) {
|
||||
const bounds = node.actualBounds;
|
||||
// 检查节点是否对齐
|
||||
const isAlignedHorizontally = Math.abs(bounds.centerY - selectedBounds.centerY) < 5;
|
||||
const isAlignedVertically = Math.abs(bounds.centerX - selectedBounds.centerX) < 5;
|
||||
if (isAlignedHorizontally || isAlignedVertically) {
|
||||
diagram.highlight(node);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 监听拖放事件
|
||||
const dropArea = document.getElementById("drawContainer");
|
||||
if (dropArea) {
|
||||
dropArea.addEventListener("dragover", (e) => e.preventDefault());
|
||||
dropArea.addEventListener("drop", (e) => {
|
||||
e.preventDefault();
|
||||
if (draggedTemplate) {
|
||||
const point = myDiagram.lastInput.documentPoint; // 获取鼠标位置
|
||||
myDiagram.startTransaction("addNode");
|
||||
myDiagram.model.addNodeData({
|
||||
key: draggedTemplate.key,
|
||||
name: draggedTemplate.name,
|
||||
shape: draggedTemplate.shape,
|
||||
loc: `${point.x} ${point.y}`, // 设置节点位置
|
||||
});
|
||||
myDiagram.commitTransaction("addNode");
|
||||
draggedTemplate = null; // 重置拖动模板
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.goHome {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #fde7c8;
|
||||
display: flex;
|
||||
.objContainer {
|
||||
width: 20%;
|
||||
border-right: #19335b 1px solid;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
.template {
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
margin: 10px 0;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
cursor: grab;
|
||||
}
|
||||
}
|
||||
.drawContainer {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
53
Vue/IntsAdmin/src/views/olView/analysisHome.vue
Normal file
@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<div id="analysisHome" class="analysisContainer">
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {onMounted, ref} from 'vue';
|
||||
import Map from 'ol/Map'
|
||||
import View from 'ol/View';
|
||||
import {fromLonLat} from 'ol/proj';
|
||||
import TileLayer from 'ol/layer/Tile'
|
||||
import {OSM, Source, XYZ} from 'ol/source';
|
||||
import {OverviewMap, ZoomSlider, defaults as defaultControls} from 'ol/control.js';
|
||||
|
||||
const olMap = ref(Map)
|
||||
const source = new XYZ({
|
||||
url:'https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}',
|
||||
wrapX: false // 禁用横向重复
|
||||
});
|
||||
const overviewMapControl = new OverviewMap({
|
||||
collapsible: true,
|
||||
collapsed: false,
|
||||
layers: [
|
||||
new TileLayer({
|
||||
source: source
|
||||
}),
|
||||
],
|
||||
});
|
||||
const zoomSliderControl = new ZoomSlider()
|
||||
onMounted(() => {
|
||||
const map = new Map({
|
||||
target: 'analysisHome',
|
||||
layers: [
|
||||
new TileLayer({
|
||||
source: source
|
||||
})
|
||||
],
|
||||
controls: defaultControls().extend([overviewMapControl]),
|
||||
view: new View({
|
||||
projection: "EPSG:4326",
|
||||
center: fromLonLat([109, 30]),
|
||||
zoom: 2,
|
||||
})
|
||||
})
|
||||
map.addControl(zoomSliderControl)
|
||||
})
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.analysisContainer {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
14
Vue/IntsAdmin/tsconfig.app.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||
"include": ["env.d.ts", "src/**/*", "src/**/*.vue", "public/config/Axios_Config.ts", "public/config/Cesium_Config.ts"],
|
||||
"exclude": ["src/**/__tests__/*"],
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
}
|
||||
}
|
11
Vue/IntsAdmin/tsconfig.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"files": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
},
|
||||
{
|
||||
"path": "./tsconfig.app.json"
|
||||
}
|
||||
]
|
||||
}
|
18
Vue/IntsAdmin/tsconfig.node.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"extends": "@tsconfig/node20/tsconfig.json",
|
||||
"include": [
|
||||
"vite.config.*",
|
||||
"vitest.config.*",
|
||||
"cypress.config.*",
|
||||
"nightwatch.conf.*",
|
||||
"playwright.config.*"
|
||||
],
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"noEmit": true,
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "Bundler",
|
||||
"types": ["node"]
|
||||
}
|
||||
}
|
34
Vue/IntsAdmin/vite.config.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import {fileURLToPath, URL} from 'node:url'
|
||||
import svgLoader from 'vite-svg-loader';
|
||||
import {defineConfig} from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import cesium from "vite-plugin-cesium";
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
vue(),
|
||||
svgLoader(),
|
||||
cesium()
|
||||
],
|
||||
base: './',
|
||||
server: {
|
||||
port: 8080,
|
||||
proxy: {
|
||||
'/geoserver': {
|
||||
target: 'http://localhost:8443',
|
||||
changeOrigin: true, // 确保Host头与目标URL匹配
|
||||
rewrite: (path) => path.replace(/^\/geoserver/, ''), // 重写路径
|
||||
},
|
||||
'/dev_api': {
|
||||
target: 'http://localhost:8055',
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/dev_api/, ''),
|
||||
}
|
||||
}
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||
}
|
||||
}
|
||||
})
|