@ -0,0 +1,2 @@ |
|||
node_modules |
|||
dist |
@ -0,0 +1,8 @@ |
|||
# Default ignored files |
|||
/shelf/ |
|||
/workspace.xml |
|||
# Editor-based HTTP Client requests |
|||
/httpRequests/ |
|||
# Datasource local storage ignored files |
|||
/dataSources/ |
|||
/dataSources.local.xml |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<module type="WEB_MODULE" version="4"> |
|||
<component name="NewModuleRootManager"> |
|||
<content url="file://$MODULE_DIR$"> |
|||
<excludeFolder url="file://$MODULE_DIR$/.tmp" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/temp" /> |
|||
<excludeFolder url="file://$MODULE_DIR$/tmp" /> |
|||
</content> |
|||
<orderEntry type="inheritedJdk" /> |
|||
<orderEntry type="sourceFolder" forTests="false" /> |
|||
</component> |
|||
</module> |
@ -0,0 +1,6 @@ |
|||
<component name="InspectionProjectProfileManager"> |
|||
<profile version="1.0"> |
|||
<option name="myName" value="Project Default" /> |
|||
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" /> |
|||
</profile> |
|||
</component> |
@ -0,0 +1,8 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="ProjectModuleManager"> |
|||
<modules> |
|||
<module fileurl="file://$PROJECT_DIR$/.idea/data-board-2025.iml" filepath="$PROJECT_DIR$/.idea/data-board-2025.iml" /> |
|||
</modules> |
|||
</component> |
|||
</project> |
@ -0,0 +1,6 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project version="4"> |
|||
<component name="VcsDirectoryMappings"> |
|||
<mapping directory="" vcs="Git" /> |
|||
</component> |
|||
</project> |
@ -0,0 +1,7 @@ |
|||
# data-board |
|||
|
|||
## 1.0.0 (2024-03-07) |
|||
|
|||
### Patch Changes |
|||
|
|||
- 项目初始化 |
@ -0,0 +1,9 @@ |
|||
/* eslint-disable */ |
|||
/* prettier-ignore */ |
|||
// @ts-nocheck
|
|||
// noinspection JSUnusedGlobalSymbols
|
|||
// Generated by unplugin-auto-import
|
|||
export {} |
|||
declare global { |
|||
|
|||
} |
@ -0,0 +1,13 @@ |
|||
/* eslint-disable */ |
|||
/* prettier-ignore */ |
|||
// @ts-nocheck
|
|||
// Generated by unplugin-vue-components
|
|||
// Read more: https://github.com/vuejs/core/pull/3399
|
|||
export {} |
|||
|
|||
declare module 'vue' { |
|||
export interface GlobalComponents { |
|||
RouterLink: typeof import('vue-router')['RouterLink'] |
|||
RouterView: typeof import('vue-router')['RouterView'] |
|||
} |
|||
} |
@ -0,0 +1,15 @@ |
|||
# 标题 |
|||
VITE_APP_TITLE = 水利工程 |
|||
|
|||
# 打包路径 |
|||
VITE_BASE_URL= /sgcyy-slgcyxgl/sy-water-data-board-ui |
|||
|
|||
# 接口请求基础地址 |
|||
VITE_GLOB_API_URL= /api |
|||
|
|||
# VR标签跳转路径 |
|||
VITE_VR_APPLICATION_NAME="/vr-manager-ui" |
|||
|
|||
|
|||
# sycim基础地址 |
|||
VITE_GLOB_SYCIM_BASEURL=/sgcyy-slgcyxgl/resources/ |
@ -0,0 +1,15 @@ |
|||
# 标题 |
|||
VITE_APP_TITLE = 水利工程 |
|||
|
|||
SERVICE_NAME = sgcyy-slgcyxgl/sy-water-data-board-ui |
|||
# 打包路径 |
|||
VITE_BASE_URL= /${SERVICE_NAME} |
|||
|
|||
# 接口请求基础地址 |
|||
VITE_GLOB_API_URL= /sgcyy-slgcyxgl/api |
|||
|
|||
# VR标签跳转路径 |
|||
VITE_VR_APPLICATION_NAME="/vr-manager-ui" |
|||
|
|||
# sycim基础地址 |
|||
VITE_GLOB_SYCIM_BASEURL=/sgcyy-slgcyxgl/resources/ |
@ -0,0 +1,21 @@ |
|||
<!doctype html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<link rel="icon" href="/favicon.ico" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<title>水利工程</title> |
|||
</head> |
|||
<body> |
|||
<div id="viewer-container" class="viewer-container"></div> |
|||
<div id="viewer-container-right" class="viewer-container"></div> |
|||
<div id="app"></div> |
|||
<script src="/icons_29287_360.1953ee44cbba89dfe274d4094cd9fb21.es5.js"></script> |
|||
<script type="module" src="/src/main.ts"></script> |
|||
<script type="module"> |
|||
import * as SyCim from "sy-cesium-sdk"; |
|||
window.Cesium = SyCim.Cesium; |
|||
</script> |
|||
<script src="/lib/SuperMap3D/SuperMap3D.js" defer></script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,70 @@ |
|||
{ |
|||
"name": "data-board", |
|||
"private": true, |
|||
"version": "1.0.0", |
|||
"scripts": { |
|||
"dev": "vite", |
|||
"build": "vue-tsc --noEmit --skipLibCheck && vite build", |
|||
"preview": "vite preview", |
|||
"lint": "eslint --ext .tsx,.ts,.vue .", |
|||
"format": "prettier --write \"src/**/*.{js,tsx,ts,vue}\"" |
|||
}, |
|||
"husky": { |
|||
"hooks": { |
|||
"commit-msg": "node .husky/commit-msg" |
|||
} |
|||
}, |
|||
"dependencies": { |
|||
"@element-plus/icons-vue": "2.0.6", |
|||
"@techstark/opencv-js": "4.9.0-release.2", |
|||
"@turf/turf": "^6.5.0", |
|||
"axios": "1.2.0", |
|||
"crypto-js": "4.1.1", |
|||
"dayjs": "^1.11.13", |
|||
"echarts": "5.3.3", |
|||
"echarts-liquidfill": "^3.1.0", |
|||
"element-plus": "2.3.5", |
|||
"js-base64": "3.7.4", |
|||
"leader-line-vue": "^2.1.1", |
|||
"lodash-es": "4.17.21", |
|||
"moment": "^2.30.1", |
|||
"pinia": "2.0.28", |
|||
"qs": "6.11.0", |
|||
"spark-md5": "^3.0.2", |
|||
"sy-cesium-sdk": "^2.4.1", |
|||
"vue": "3.3.7", |
|||
"vue-router": "4.0.16", |
|||
"vuedraggable": "^4.1.0" |
|||
}, |
|||
"devDependencies": { |
|||
"@eslint/create-config": "^0.4.6", |
|||
"@types/crypto-js": "4.2.1", |
|||
"@types/lodash-es": "4.17.12", |
|||
"@types/node": "^20.11.19", |
|||
"@types/qs": "^6.9.11", |
|||
"@typescript-eslint/eslint-plugin": "^6.21.0", |
|||
"@typescript-eslint/parser": "^6.21.0", |
|||
"@vitejs/plugin-vue": "4.1.0", |
|||
"@vitejs/plugin-vue-jsx": "^3.1.0", |
|||
"eslint": "^8.56.0", |
|||
"eslint-config-prettier": "^9.1.0", |
|||
"eslint-config-standard-with-typescript": "^42.0.0", |
|||
"eslint-plugin-import": "^2.29.1", |
|||
"eslint-plugin-n": "^16.6.2", |
|||
"eslint-plugin-prettier": "^5.1.3", |
|||
"eslint-plugin-promise": "^6.1.1", |
|||
"eslint-plugin-vue": "^9.21.1", |
|||
"husky": "8.0.3", |
|||
"less": "4.2.0", |
|||
"prettier": "3.1.0", |
|||
"rollup-plugin-gzip": "^3.1.1", |
|||
"sass": "1.62.1", |
|||
"typescript": "5.1.3", |
|||
"unplugin-auto-import": "0.16.7", |
|||
"unplugin-vue-components": "0.25.2", |
|||
"vite": "4.3.9", |
|||
"vite-plugin-eslint": "1.8.1", |
|||
"vite-plugin-static-copy": "0.17.0", |
|||
"vue-tsc": "1.4.2" |
|||
} |
|||
} |
@ -0,0 +1,6 @@ |
|||
{ |
|||
"code": 200, |
|||
"msg": "操作成功", |
|||
"data": "{\"id\":\"1762734018315460608\",\"name\":\"默认视点\",\"layerId\":[\"7a93276a-ba8f-4a15-8528-65b46ca32aff\",\"eda6f7fa-a749-4406-9a50-770c74f08ea1\"],\"cameraPosture\":{\"heading\":6.283185246894561,\"roll\":6.283170676184285,\"pitch\":-0.5490687672993575,\"position\":{\"x\":-2783886.3859734335,\"y\":4756504.815955485,\"z\":3200847.257443784}},\"updateTime\":\"2024-02-28 14:58:35\"}", |
|||
"success": true |
|||
} |
@ -0,0 +1,701 @@ |
|||
{ |
|||
"code": 200, |
|||
"msg": null, |
|||
"data": [ |
|||
{ |
|||
"id": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"name": "融合引擎功能菜单", |
|||
"code": "sy-mixengine-menus", |
|||
"type": "modu", |
|||
"orderNm": 8, |
|||
"childrenList": [ |
|||
{ |
|||
"id": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"name": "通用工具", |
|||
"code": "sy-mixengine-common-tools", |
|||
"type": "modu", |
|||
"orderNm": 1, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "c1822aa5-8842-49ca-b54d-0a0fabf47cb7", |
|||
"name": "视点", |
|||
"code": "sycim-ViewPointManage", |
|||
"iconClass": "veiwpoint-green", |
|||
"type": "func", |
|||
"orderNm": 0, |
|||
"widgetType": "views", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"funcInvokeUrl": "ViewPointManage", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "74e65bfe-c4f0-424d-bfd3-a1802c469e6b", |
|||
"name": "漫游", |
|||
"code": "sycim-BasicRoam", |
|||
"iconClass": "roam-green", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "views", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"funcInvokeUrl": "BasicRoam", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "49196dc5-d2af-4ca4-b4ec-7bb35b836160", |
|||
"name": "剖切盒子", |
|||
"code": "sycim-SectionBox", |
|||
"iconClass": "section-box", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "views", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"smallImgPath": "http://minio:9000/images/剖切.svg", |
|||
"funcInvokeUrl": "SectionBox", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "5e8fcd2e-00ad-40be-b698-b874362e9491", |
|||
"name": "测量", |
|||
"code": "sycim-MeasuringTool", |
|||
"iconClass": "measuring", |
|||
"type": "func", |
|||
"orderNm": 4, |
|||
"widgetType": "views", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"smallImgPath": "http://minio:9000/images/测量工具.svg", |
|||
"funcInvokeUrl": "MeasuringTool", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "227012eb-5b4f-4486-8df5-b3c27a1f35c3", |
|||
"name": "位置调整", |
|||
"code": "sycim-ModelAdjustment", |
|||
"iconClass": "location-transform", |
|||
"type": "func", |
|||
"orderNm": 6, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"funcInvokeUrl": "ModelAdjustment", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "bb24109b-1c26-4a9a-b7a6-7a688dfcf850", |
|||
"name": "标绘", |
|||
"code": "sycim-MarkerTool", |
|||
"iconClass": "marker-green", |
|||
"type": "func", |
|||
"orderNm": 10, |
|||
"widgetType": "views", |
|||
"parentFuncId": "a1b4e0f1-a883-4eac-8d31-e9d22f2874e5", |
|||
"funcInvokeUrl": "MarkerTool", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"name": "视频分析", |
|||
"code": "sy-mixengine-video-tools", |
|||
"type": "modu", |
|||
"orderNm": 2, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "fe6296eb-d097-46d6-a132-51dacefbec25", |
|||
"name": "轨迹刻画", |
|||
"code": "sycim-TrackPortray", |
|||
"iconClass": "track-roam", |
|||
"type": "func", |
|||
"orderNm": 9, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"funcInvokeUrl": "TrackPortray", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "7cc1a388-2e0a-4ee7-ba33-b30de488526b", |
|||
"name": "视频调阅", |
|||
"code": "sycim-VideoCall", |
|||
"iconClass": "video-call", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"smallImgPath": "http://minio:9000/images/视频调阅1.svg", |
|||
"funcInvokeUrl": "VideoCall", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "af086be9-098d-42af-a214-7cb2c26ab7c5", |
|||
"name": "视频可视域", |
|||
"code": "sycim-VideoVisualField", |
|||
"iconClass": "video-viewshed", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"smallImgPath": "http://minio:9000/images/视频可视域1.svg", |
|||
"funcInvokeUrl": "VideoVisualField", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "865bea4e-a78b-4552-8859-036c1a9293f6", |
|||
"name": "视频融合", |
|||
"code": "sycim-VideoMerge", |
|||
"iconClass": "video-fusion", |
|||
"type": "func", |
|||
"orderNm": 5, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"smallImgPath": "http://minio:9000/images/视频融合1.svg", |
|||
"funcInvokeUrl": "VideoMerge", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "267bafd2-eb53-4c65-b4dc-283a7cc40616", |
|||
"name": "无人机巡检", |
|||
"code": "sycim-DroneInspection", |
|||
"iconClass": "drone-dynamic-video-fusion", |
|||
"type": "func", |
|||
"orderNm": 8, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "71a122b4-85ce-45ef-a856-a4750b0d039f", |
|||
"funcInvokeUrl": "DroneInspection", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "85a0e512-73e4-41f5-8ec8-9fd15d0f76d9", |
|||
"name": "场景设计", |
|||
"code": "sy-mixengine-scene-design-tools", |
|||
"type": "modu", |
|||
"orderNm": 4, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "c4cf29be-06d7-4532-b336-c8a4140cecda", |
|||
"name": "场景设计", |
|||
"code": "sycim-SceneDesign", |
|||
"iconClass": "scene-design", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "85a0e512-73e4-41f5-8ec8-9fd15d0f76d9", |
|||
"smallImgPath": "http://minio:9000/images/场景设计.svg", |
|||
"funcInvokeUrl": "SceneDesign", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "40d32637-0e77-4fce-8f66-06fd73da83d7", |
|||
"name": "地形开挖", |
|||
"code": "sycim-TerrainExcavation", |
|||
"iconClass": "terrain-excavation", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "85a0e512-73e4-41f5-8ec8-9fd15d0f76d9", |
|||
"smallImgPath": "http://minio:9000/images/场地开挖.svg", |
|||
"funcInvokeUrl": "TerrainExcavation", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "e2077b99-9a62-48a1-85ef-16cfc6d674d5", |
|||
"name": "地形平整", |
|||
"code": "sycim-TerrainFlatten", |
|||
"iconClass": "terrain-flatten", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "85a0e512-73e4-41f5-8ec8-9fd15d0f76d9", |
|||
"smallImgPath": "http://minio:9000/images/地形平整.svg", |
|||
"funcInvokeUrl": "TerrainFlatten", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "d5f0b7b4-b734-41dd-ab29-1d3424273e6b", |
|||
"name": "场景传递", |
|||
"code": "sy-mixengine-scene-transfer", |
|||
"type": "modu", |
|||
"orderNm": 5, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "19ccd2d6-7e69-4e31-9ee1-c69865ea0628", |
|||
"name": "场景列表", |
|||
"code": "sycim-SceneTransmitList", |
|||
"iconClass": "scene-list", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "d5f0b7b4-b734-41dd-ab29-1d3424273e6b", |
|||
"smallImgPath": "http://minio:9000/images/场景列表1.svg", |
|||
"funcInvokeUrl": "SceneTransmitList", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "a0d10b15-3777-45b2-b1d1-64cbef10b5eb", |
|||
"name": "BIM应用", |
|||
"code": "sy-mixengine-bim-tools", |
|||
"type": "modu", |
|||
"orderNm": 6, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "36d235ce-960a-47c6-a12a-eb6fec593620", |
|||
"name": "BIM列表", |
|||
"code": "sycim-BIMList", |
|||
"iconClass": "bim-list", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "a0d10b15-3777-45b2-b1d1-64cbef10b5eb", |
|||
"smallImgPath": "http://minio:9000/images/BIM列表.svg", |
|||
"funcInvokeUrl": "BIMList", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "588fad9d-738a-404b-945e-e0b7e4be52e7", |
|||
"name": "BIM图层树", |
|||
"code": "sycim-BIMLayerTree", |
|||
"iconClass": "bim-layer-tree", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "a0d10b15-3777-45b2-b1d1-64cbef10b5eb", |
|||
"smallImgPath": "http://minio:9000/images/BIM图层树.svg", |
|||
"funcInvokeUrl": "BIMLayerTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "ef2d41eb-b64d-4afe-bc79-dc57c97b1c90", |
|||
"name": "BIM爆炸", |
|||
"code": "sycim-BIMExpode", |
|||
"iconClass": "bim-expode", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "a0d10b15-3777-45b2-b1d1-64cbef10b5eb", |
|||
"smallImgPath": "http://minio:9000/images/BIM爆炸.svg", |
|||
"funcInvokeUrl": "BIMExpode", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "b643a96a-84a5-4581-a5f3-224e3dfc3dac", |
|||
"name": "BIM分层浏览", |
|||
"code": "sycim-BIMLevelExplorer", |
|||
"iconClass": "bim-level-browse", |
|||
"type": "func", |
|||
"orderNm": 4, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "a0d10b15-3777-45b2-b1d1-64cbef10b5eb", |
|||
"smallImgPath": "http://minio:9000/images/分层查看.svg", |
|||
"funcInvokeUrl": "BIMLevelExplorer", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"name": "空间分析", |
|||
"code": "sy-mixengine-spatialAnalysis", |
|||
"type": "modu", |
|||
"orderNm": 7, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "4d02809c-e08a-484b-9016-134eefd1f97a", |
|||
"name": "空间查询", |
|||
"code": "sycim-spatialQuery", |
|||
"iconClass": "spatial-analysis", |
|||
"type": "func", |
|||
"orderNm": 11, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "SpatialQuery", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "4ef9b560-3da2-4e47-93e5-d6823f28eff6", |
|||
"name": "开敞度分析", |
|||
"code": "sycim-OpenSpaceAnalysis", |
|||
"iconClass": "scene-list", |
|||
"type": "func", |
|||
"orderNm": 12, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "OpenSpaceAnalysis", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "6a962651-8de0-48f1-9ae8-bc68107b34b7", |
|||
"name": "分层分户", |
|||
"code": "sycim-Stratification", |
|||
"iconClass": "stratified-housing-analysis", |
|||
"type": "func", |
|||
"orderNm": 10, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "Stratification", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "233023c0-aa9c-4ba0-ab42-3af877eafd66", |
|||
"name": "可视域分析", |
|||
"code": "sycim-SpaceVisibilityAnalysis", |
|||
"iconClass": "field-of-view-analysis", |
|||
"type": "func", |
|||
"orderNm": 8, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "SpaceVisibilityAnalysis", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "c5b3e0d2-6d6f-49a6-8e66-d48a38ef81af", |
|||
"name": "土方量量测", |
|||
"code": "sycim-CutFill", |
|||
"iconClass": "earthwork-volume-analysis", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "CutFill", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "7b1e0bbe-7e25-4c98-9bbf-694328f43e7d", |
|||
"name": "剖面分析", |
|||
"code": "sycim-ProfileAnalysis", |
|||
"iconClass": "profile-analysis", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "ProfileAnalysis", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "ed5d0d60-2b34-40fe-b76f-75549fcfd385", |
|||
"name": "淹没分析", |
|||
"code": "sycim-SubmergingAnalysis", |
|||
"iconClass": "flood-analysis", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "SubmergingAnalysis", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "867f6ccc-03f4-48b9-b4e3-842f37af0444", |
|||
"name": "通视分析", |
|||
"code": "sycim-SightVisibilityAnalysis", |
|||
"iconClass": "visibility-analysis", |
|||
"type": "func", |
|||
"orderNm": 4, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "SightVisibilityAnalysis", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "4fe10605-ce8c-4d43-9f15-070d7cd72031", |
|||
"name": "交通模拟", |
|||
"code": "sycim-TrafficSimulation", |
|||
"iconClass": "traffic-simulation", |
|||
"type": "func", |
|||
"orderNm": 5, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "eb14ef6c-4a61-4f84-b60a-cdd4ec36e58b", |
|||
"funcInvokeUrl": "DrivingSimulation", |
|||
"funcMemo": "TrafficSimulation", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "2b6b380a-522c-42af-96ff-99cc4ae50c9d", |
|||
"name": "技术预研", |
|||
"code": "sy-mixengine-pre-survey", |
|||
"type": "modu", |
|||
"orderNm": 10, |
|||
"parentFuncId": "ff101de4-2850-4fb3-ad9c-05951103df0d", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "96e23749-3f2b-43e0-91a0-4a88c64b121a", |
|||
"name": "标签同步", |
|||
"code": "sycim-LabelSync", |
|||
"iconClass": "marker", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "2b6b380a-522c-42af-96ff-99cc4ae50c9d", |
|||
"funcInvokeUrl": "LabelSync", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "9d9d375c-caec-4e1a-9a5d-ca180fcc5ee7", |
|||
"name": "视频半自动融合", |
|||
"code": "sycim-VideoAutoFusion", |
|||
"iconClass": "video-fusion", |
|||
"type": "func", |
|||
"orderNm": 7, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "2b6b380a-522c-42af-96ff-99cc4ae50c9d", |
|||
"funcInvokeUrl": "VideoAutoFusion", |
|||
"funcMemo": "此融合方式为预研型贴图融合", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"name": "融合引擎地图工具", |
|||
"code": "sy-mixengine-tools", |
|||
"type": "modu", |
|||
"orderNm": 10, |
|||
"childrenList": [ |
|||
{ |
|||
"id": "40145854-e28a-4718-8664-06b5a92fa2d1", |
|||
"name": "行政区导航", |
|||
"code": "sycim-RegionLocation", |
|||
"type": "func", |
|||
"orderNm": 5, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"funcInvokeUrl": "RegionLocation", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"name": "图层管理", |
|||
"code": "sycim-LayerManager", |
|||
"iconClass": "layer", |
|||
"type": "func", |
|||
"orderNm": 7, |
|||
"widgetType": "views", |
|||
"parentFuncId": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"childrenList": [ |
|||
{ |
|||
"id": "f3836142-e695-4a1a-bcc6-6981d919c441", |
|||
"name": "标签管理", |
|||
"code": "sycim-MarkerTree", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "MarkerTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "38a322e3-0934-49db-9886-3d8a80081a4c", |
|||
"name": "图层管理", |
|||
"code": "sycim-LayerTree", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "views", |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "LayerTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "f6503494-f401-4fe3-bc87-4f0e9f92f879", |
|||
"name": "POI管理", |
|||
"code": "sycim-PoiTree", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "views", |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "PoiTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "532d603c-a841-4e14-bd8f-a097be83774e", |
|||
"name": "视频融合", |
|||
"code": "sycim-VideoFusionTree", |
|||
"type": "func", |
|||
"orderNm": 4, |
|||
"widgetType": "views", |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "VideoFusionTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "09690b00-4259-49ac-919d-b2c12a6a1826", |
|||
"name": "底图管理", |
|||
"code": "sycim-BaseLayerSwitcher", |
|||
"type": "func", |
|||
"orderNm": 5, |
|||
"widgetType": "views", |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "BaseLayerSwitcher", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "0abe4c7b-0eb2-4fd1-a7c0-ae5a4185b3f1", |
|||
"name": "地形管理", |
|||
"code": "sycim-TerrainSwitcher", |
|||
"type": "func", |
|||
"orderNm": 6, |
|||
"widgetType": "views", |
|||
"parentFuncId": "95b5252c-86be-4d11-b6cc-771c86d1078c", |
|||
"funcInvokeUrl": "TerrainSwitcher", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"funcInvokeUrl": "LayerTree", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "683e8fbd-50b4-4f26-8cda-f9c7bbaf7102", |
|||
"name": "鹰眼地图", |
|||
"code": "sycim-EagleEyeMap", |
|||
"iconClass": "eagle-eye-map", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "views", |
|||
"parentFuncId": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"funcInvokeUrl": "EagleEyeMap", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "0a4346ce-4c61-4b7d-baa6-2efacd561aab", |
|||
"name": "属性查询", |
|||
"code": "sycim-AttributeQuery", |
|||
"iconClass": "attribute-query", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "views", |
|||
"parentFuncId": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"funcInvokeUrl": "AttributeQuery", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "7a88d27b-18af-44a6-88bb-13219a57e941", |
|||
"name": "框选查看", |
|||
"code": "sycim-RectagleZoom", |
|||
"iconClass": "rectagle-zoom", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "views", |
|||
"parentFuncId": "6969d968-2056-47af-930f-58c613f2cd3c", |
|||
"smallImgPath": "http://minio:9000/images/鹰眼.svg", |
|||
"funcInvokeUrl": "RectagleZoom", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "53ad4537-6324-4499-a917-0f129e636641", |
|||
"name": "融合引擎右下角工具", |
|||
"code": "sy-mixengine-bottom-right-tools", |
|||
"type": "modu", |
|||
"orderNm": 11, |
|||
"childrenList": [ |
|||
{ |
|||
"id": "2ed27860-aad2-446e-aa3c-ee956baaa0f9", |
|||
"name": "默认视点", |
|||
"code": "sycim-DefaultPov", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "views", |
|||
"parentFuncId": "53ad4537-6324-4499-a917-0f129e636641", |
|||
"funcInvokeUrl": "DefaultPov", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "0ec15622-5664-4065-824c-fd7134e671b1", |
|||
"name": "罗盘", |
|||
"code": "sycim-Compass", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "views", |
|||
"parentFuncId": "53ad4537-6324-4499-a917-0f129e636641", |
|||
"funcInvokeUrl": "CompassNorth", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "cfeab8e4-2dd6-4f1c-9506-529f3660c6c5", |
|||
"name": "场景模式", |
|||
"code": "sycim-SceneMode", |
|||
"type": "func", |
|||
"orderNm": 3, |
|||
"widgetType": "views", |
|||
"parentFuncId": "53ad4537-6324-4499-a917-0f129e636641", |
|||
"funcInvokeUrl": "SceneMode", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "32e04233-2208-40f1-9fb5-69f7c7480260", |
|||
"name": "放大缩小", |
|||
"code": "sycim-ZoominZoomout", |
|||
"type": "func", |
|||
"orderNm": 4, |
|||
"widgetType": "views", |
|||
"parentFuncId": "53ad4537-6324-4499-a917-0f129e636641", |
|||
"funcInvokeUrl": "ZoominZoomout", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "d9da8082-5f78-4ca2-8073-efffb3364d6c", |
|||
"name": "融合引擎左下角工具", |
|||
"code": "sy-mixengine-bottom-left-tools", |
|||
"type": "modu", |
|||
"orderNm": 12, |
|||
"childrenList": [ |
|||
{ |
|||
"id": "2b7f7a36-07a9-465a-9507-59dd4b272194", |
|||
"name": "时间", |
|||
"code": "sycim-Timer", |
|||
"type": "func", |
|||
"orderNm": 1, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "d9da8082-5f78-4ca2-8073-efffb3364d6c", |
|||
"funcInvokeUrl": "Timer", |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "aecdb8d5-b326-4dff-9429-cf0690c6b029", |
|||
"name": "天气管理", |
|||
"code": "sycim-Weather", |
|||
"type": "func", |
|||
"orderNm": 2, |
|||
"widgetType": "widgets", |
|||
"parentFuncId": "d9da8082-5f78-4ca2-8073-efffb3364d6c", |
|||
"funcInvokeUrl": "Weather", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"menuVisible": true |
|||
}, |
|||
{ |
|||
"id": "4ac5f814-315f-43e8-a0ee-6d4aaf95c2b6", |
|||
"name": "状态栏", |
|||
"code": "sycim-CesiumNavigation", |
|||
"type": "func", |
|||
"orderNm": 13, |
|||
"funcInvokeUrl": "CesiumNavigation", |
|||
"menuVisible": true |
|||
} |
|||
], |
|||
"success": true |
|||
} |
@ -0,0 +1,33 @@ |
|||
{ |
|||
"code": 200, |
|||
"msg": null, |
|||
"data": [ |
|||
{ |
|||
"xpath": "/目录管理/服务图层", |
|||
"param": { |
|||
"id": "1631584542169022466", |
|||
"extent": "112.94868679598922,22.54645010714909,114.06049679598922,23.94001510714909", |
|||
"origin": "-180,90", |
|||
"tileOrigin": "-180,90", |
|||
"zoom": 9, |
|||
"center": "113.50459179598923,23.24323260714909", |
|||
"scales": "2.958293554545655E8,1.4791467772728276E8,7.395733886364138E7,3.697866943182069E7,1.8489334715910345E7,9244667.357955173,4622333.678977586,2311166.839488793,1155583.4197443966,577791.7098721983,288895.85493609915,144447.92746804957,72223.96373402479,36111.98186701239,18055.990933506197,9027.995466753098,4513.997733376549,2256.9988666882746,1128.4994333441373,564.2497166720686,282.1248583360343,141.06242916801716", |
|||
"resolutions": "0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,0.0006866455078125,0.0003433227539062,0.0001716613769531,0.0000858306884766,0.0000429153442383,0.0000214576721191,0.0000107288360596,0.0000053644180298,0.0000026822090149,0.0000013411045074,0.0000006705522537,0.0000003352761269", |
|||
"reference": "wgs84全球坐标系(epsg:4326)", |
|||
"name": "geoserver瓦片(wgs84)", |
|||
"minZoom": null, |
|||
"maxZoom": null, |
|||
"roadPathId": null, |
|||
"busChangeId": null, |
|||
"isDefault": null |
|||
}, |
|||
"name": "服务图层", |
|||
"id": "df5daca5-5ed0-475d-a973-eb20db0fe330", |
|||
"projectOrder": 1, |
|||
"value": "服务图层", |
|||
"parentId": "root", |
|||
"mapParamId": "1631584542169022466" |
|||
} |
|||
], |
|||
"success": true |
|||
} |
@ -0,0 +1,372 @@ |
|||
{ |
|||
"code": 200, |
|||
"msg": "操作成功", |
|||
"data": [ |
|||
{ |
|||
"code": "440000", |
|||
"parentCode": "0", |
|||
"name": "广东省", |
|||
"orderNum": 1, |
|||
"id": "d3ad5e5dbec83e9aabbd8b2ce704672a", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_sheng", |
|||
"field": "adcode", |
|||
"children": [ |
|||
{ |
|||
"code": "441900", |
|||
"parentCode": "440000", |
|||
"name": "东莞市", |
|||
"orderNum": 1, |
|||
"id": "c45f712c4e19998c9cf2de86a4e613cc", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441800", |
|||
"parentCode": "440000", |
|||
"name": "清远市", |
|||
"orderNum": 1, |
|||
"id": "adb67f26d0a71067887ae7eceed5dc29", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441700", |
|||
"parentCode": "440000", |
|||
"name": "阳江市", |
|||
"orderNum": 1, |
|||
"id": "e7031b69c7968313dfcda737b55f8145", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441600", |
|||
"parentCode": "440000", |
|||
"name": "河源市", |
|||
"orderNum": 1, |
|||
"id": "73e70da62880174426ad0fa9aef41a8a", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441500", |
|||
"parentCode": "440000", |
|||
"name": "汕尾市", |
|||
"orderNum": 1, |
|||
"id": "213b3eed7077e90ef956a66b0160e67b", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441400", |
|||
"parentCode": "440000", |
|||
"name": "梅州市", |
|||
"orderNum": 1, |
|||
"id": "8754d3d581487a5cbfff23b257f6b485", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441300", |
|||
"parentCode": "440000", |
|||
"name": "惠州市", |
|||
"orderNum": 1, |
|||
"id": "b785b55f1365872f3a569bd393df8f49", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "442000", |
|||
"parentCode": "440000", |
|||
"name": "中山市", |
|||
"orderNum": 1, |
|||
"id": "25d2e55dac65de1dde00e30ea0d4d8d9", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "441200", |
|||
"parentCode": "440000", |
|||
"name": "肇庆市", |
|||
"orderNum": 1, |
|||
"id": "ccb3b0f6b36da5e396c94c7646285f15", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440900", |
|||
"parentCode": "440000", |
|||
"name": "茂名市", |
|||
"orderNum": 1, |
|||
"id": "3c8de8ff830a11d8fb3f595a8ffbe042", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440800", |
|||
"parentCode": "440000", |
|||
"name": "湛江市", |
|||
"orderNum": 1, |
|||
"id": "19a316be41e20d38dc4c08112298f3ea", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440700", |
|||
"parentCode": "440000", |
|||
"name": "江门市", |
|||
"orderNum": 1, |
|||
"id": "1c89b772da65045df5b31485628dad14", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440600", |
|||
"parentCode": "440000", |
|||
"name": "佛山市", |
|||
"orderNum": 1, |
|||
"id": "ad2555b457fd807d72e82a2991d107c3", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440500", |
|||
"parentCode": "440000", |
|||
"name": "汕头市", |
|||
"orderNum": 1, |
|||
"id": "b05a7b1d1ad376f10d10e2a0435a67c3", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440400", |
|||
"parentCode": "440000", |
|||
"name": "珠海市", |
|||
"orderNum": 1, |
|||
"id": "4eef3fbbb0cd7638fa40b7fcc57b4b92", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "445200", |
|||
"parentCode": "440000", |
|||
"name": "揭阳市", |
|||
"orderNum": 1, |
|||
"id": "3dff46756700d3e3db2349891cb54493", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440300", |
|||
"parentCode": "440000", |
|||
"name": "深圳市", |
|||
"orderNum": 1, |
|||
"id": "fb56831063f1051787a1e9e22e2e4234", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "445100", |
|||
"parentCode": "440000", |
|||
"name": "潮州市", |
|||
"orderNum": 1, |
|||
"id": "3e7e5a5fad638f89c0830435397dbadc", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440200", |
|||
"parentCode": "440000", |
|||
"name": "韶关市", |
|||
"orderNum": 1, |
|||
"id": "c5a42e1868770edddd9ebf9f740b4300", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440100", |
|||
"parentCode": "440000", |
|||
"name": "广州市", |
|||
"orderNum": 1, |
|||
"id": "29946f1b893b208c6124699a935c4612", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [ |
|||
{ |
|||
"code": "440118", |
|||
"parentCode": "440100", |
|||
"name": "增城区", |
|||
"orderNum": 1, |
|||
"id": "ded8f077dabe4dc63c774ad58a5c2a10", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440117", |
|||
"parentCode": "440100", |
|||
"name": "从化区", |
|||
"orderNum": 1, |
|||
"id": "86c2e947c41b0638de835edde04c2c5d", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440115", |
|||
"parentCode": "440100", |
|||
"name": "南沙区", |
|||
"orderNum": 1, |
|||
"id": "36138ff7f7ebbc7f89cf0027606ec243", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440114", |
|||
"parentCode": "440100", |
|||
"name": "花都区", |
|||
"orderNum": 1, |
|||
"id": "1a857a710ae8629e200e9d120b450d3d", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440113", |
|||
"parentCode": "440100", |
|||
"name": "番禺区", |
|||
"orderNum": 1, |
|||
"id": "b7802e0cf9884629c539ae1ca82e001a", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440112", |
|||
"parentCode": "440100", |
|||
"name": "黄埔区", |
|||
"orderNum": 1, |
|||
"id": "0c26e7524f46b2e03af7e8de9e8454c0", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440111", |
|||
"parentCode": "440100", |
|||
"name": "白云区", |
|||
"orderNum": 1, |
|||
"id": "4eb36dfdc0c8f02b8e5069d0f546ecbd", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440106", |
|||
"parentCode": "440100", |
|||
"name": "天河区", |
|||
"orderNum": 1, |
|||
"id": "4068f7d91a3e4b8b0c54ae596a9657ff", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440105", |
|||
"parentCode": "440100", |
|||
"name": "海珠区", |
|||
"orderNum": 1, |
|||
"id": "39224ef8724828db2a397a387bdf61fc", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440104", |
|||
"parentCode": "440100", |
|||
"name": "越秀区", |
|||
"orderNum": 1, |
|||
"id": "159dccc4b1ae55111bd571a86634c16b", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
}, |
|||
{ |
|||
"code": "440103", |
|||
"parentCode": "440100", |
|||
"name": "荔湾区", |
|||
"orderNum": 1, |
|||
"id": "118759109037d200b15874736e708d71", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gz_qu", |
|||
"field": "adcode", |
|||
"children": [] |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
"code": "445300", |
|||
"parentCode": "440000", |
|||
"name": "云浮市", |
|||
"orderNum": 1, |
|||
"id": "9c2d0666c2dd18437fd4bba9d04c6ba5", |
|||
"url": "/geoserver/ows", |
|||
"serviceIndex": "shuyuan:xzqconfig_gd_shi", |
|||
"field": "adcode", |
|||
"children": [] |
|||
} |
|||
] |
|||
} |
|||
], |
|||
"success": true |
|||
} |
After Width: | Height: | Size: 239 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 196 B |
After Width: | Height: | Size: 373 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 330 B |
After Width: | Height: | Size: 327 B |
After Width: | Height: | Size: 469 B |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 388 B |
After Width: | Height: | Size: 410 B |
@ -0,0 +1,526 @@ |
|||
<script setup lang="ts"> |
|||
import zhCn from "element-plus/dist/locale/zh-cn.mjs"; |
|||
const locale = zhCn as any; |
|||
</script> |
|||
|
|||
<template> |
|||
<el-config-provider namespace="sy" :locale="locale"> |
|||
<router-view></router-view> |
|||
</el-config-provider> |
|||
</template> |
|||
|
|||
<style> |
|||
html, |
|||
body { |
|||
height: 100%; |
|||
width: 100%; |
|||
margin: 0; |
|||
padding: 0; |
|||
border: none; |
|||
overflow: hidden; |
|||
font-family: "Helvetica Neue", Helvetica, Tahoma, Arial, "Microsoft Yahei", "Hiragino Sans GB", "WenQuanYi Micro Hei", |
|||
sans-serif; |
|||
font-size: 14px; |
|||
/* color: #ffffff; */ |
|||
background: #000; |
|||
-webkit-overflow-scrolling: touch; |
|||
} |
|||
|
|||
body { |
|||
position: relative; |
|||
overflow-x: hidden; |
|||
overflow-y: hidden; |
|||
} |
|||
|
|||
/**************** 一个黑色面板,指向左下角黄色连线start ****************/ |
|||
.div-icon { |
|||
position: absolute; |
|||
left: 0; |
|||
top: 0; |
|||
pointer-events: none; |
|||
--text-font-size: 15px; |
|||
--boder-width: 162px; |
|||
--clip-width-1: 177px; |
|||
--clip-width-2: 175px; |
|||
--boder-height: 30px; |
|||
--clip-height-1: 40px; |
|||
--clip-height-2: 38px; |
|||
--text-color: #ccc; |
|||
--border-color: #15d1f2; |
|||
--box-shadow-color: rgba(21, 209, 242, 0.5); |
|||
} |
|||
|
|||
.blackPanel { |
|||
min-width: 90px; |
|||
min-height: 35px; |
|||
position: absolute; |
|||
left: 16px; |
|||
bottom: 31px; |
|||
cursor: default; |
|||
border-radius: 4px; |
|||
opacity: 0.96; |
|||
border: 1px solid #14171c; |
|||
box-shadow: 0px 2px 21px 0px rgba(33, 34, 39, 0.55); |
|||
border-radius: 4px; |
|||
box-sizing: border-box; |
|||
background: linear-gradient(0deg, #1e202a 0%, #0d1013 100%); |
|||
} |
|||
|
|||
.blackPanel::before { |
|||
content: ""; |
|||
width: calc(100% + 22px); |
|||
height: 39px; |
|||
position: absolute; |
|||
bottom: -39px; |
|||
left: -22px; |
|||
background: url("/img/popupLbl.png") 0px 0px no-repeat; |
|||
background-position: 0px 0px; |
|||
} |
|||
|
|||
.blackPanel-text { |
|||
width: 100%; |
|||
height: 100%; |
|||
min-height: 33px; |
|||
text-align: center; |
|||
padding: 5px; |
|||
margin: 0; |
|||
font-size: 14px; |
|||
font-weight: 400; |
|||
color: #ffffff; |
|||
border: 1px solid #ffffff4f; |
|||
-webkit-box-sizing: border-box; |
|||
box-sizing: border-box; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.animation-spaceInDown { |
|||
animation-duration: 1s; |
|||
animation-fill-mode: both; |
|||
animation-name: spaceInDown; |
|||
} |
|||
|
|||
@keyframes spaceInDown { |
|||
0% { |
|||
opacity: 0; |
|||
transform-origin: 0% 100%; |
|||
transform: scale(0.2) translate(0, 200%); |
|||
} |
|||
|
|||
100% { |
|||
opacity: 1; |
|||
transform-origin: 0% 100%; |
|||
transform: scale(1) translate(0, 0); |
|||
} |
|||
} |
|||
|
|||
@keyframes rise { |
|||
0% { |
|||
opacity: 0.1; |
|||
transform: translate(0, 100%); |
|||
} |
|||
|
|||
5% { |
|||
opacity: 0.3; |
|||
transform: translate(0, 95%); |
|||
} |
|||
|
|||
10% { |
|||
opacity: 0.6; |
|||
transform: translate(0, 90%); |
|||
} |
|||
|
|||
15% { |
|||
opacity: 1; |
|||
transform: translate(0, 85%); |
|||
} |
|||
|
|||
75% { |
|||
opacity: 1; |
|||
transform: translate(0, 25%); |
|||
} |
|||
|
|||
80% { |
|||
opacity: 0.7; |
|||
transform: translate(0, 20%); |
|||
} |
|||
|
|||
90% { |
|||
opacity: 0.3; |
|||
transform: translate(0, 10%); |
|||
} |
|||
|
|||
95% { |
|||
opacity: 0.2; |
|||
transform: translate(0, 5%); |
|||
} |
|||
|
|||
100% { |
|||
opacity: 0.1; |
|||
transform: translate(0, 0); |
|||
} |
|||
} |
|||
|
|||
/**************** 一个黑色面板,指向左下角黄色连线end ****************/ |
|||
|
|||
@keyframes divBoderLabel-animation { |
|||
0%, |
|||
100% { |
|||
clip: rect(0px, var(--clip-width-1), 2px, 0px); |
|||
} |
|||
|
|||
25% { |
|||
clip: rect(0px, 2px, var(--clip-height-1), 0px); |
|||
} |
|||
|
|||
50% { |
|||
clip: rect(var(--clip-height-2), var(--clip-width-1), var(--clip-width-1), 0px); |
|||
} |
|||
|
|||
75% { |
|||
clip: rect(0px, var(--clip-width-1), var(--clip-height-1), var(--clip-width-2)); |
|||
} |
|||
} |
|||
|
|||
.divBoderLabel-boder { |
|||
width: var(--boder-width); |
|||
height: var(--boder-height); |
|||
margin: auto; |
|||
color: var(--border-color); |
|||
box-shadow: inset 0 0 0 1px var(--box-shadow-color); |
|||
} |
|||
|
|||
.divBoderLabel-text { |
|||
color: var(--text-color); |
|||
font-size: var(--text-font-size); |
|||
display: flex; |
|||
width: 100%; |
|||
height: 100%; |
|||
align-items: center; |
|||
justify-content: center; |
|||
font-weight: bolder; |
|||
user-select: none; |
|||
cursor: pointer; |
|||
font-family: 微软雅黑; |
|||
} |
|||
|
|||
.divBoderLabel-boder, |
|||
.divBoderLabel-boder::before, |
|||
.divBoderLabel-boder::after { |
|||
position: absolute; |
|||
top: 0; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
} |
|||
|
|||
.divBoderLabel-boder::before, |
|||
.divBoderLabel-boder::after { |
|||
content: ""; |
|||
margin: -5%; |
|||
box-shadow: inset 0 0 0 2px; |
|||
animation: divBoderLabel-animation 8s linear infinite; |
|||
} |
|||
|
|||
.divBoderLabel-boder::before { |
|||
animation-delay: -4s; |
|||
} |
|||
|
|||
/**************** 一个渐变的文本面板,中间竖直连线start ****************/ |
|||
.blueGradientPnl { |
|||
text-align: center; |
|||
padding: 5px 30px; |
|||
margin: 0; |
|||
color: #fff; |
|||
background: linear-gradient(rgb(7 10 203 / 75%), rgb(16 238 220)); |
|||
-webkit-border-radius: 5px; |
|||
-moz-border-radius: 5px; |
|||
border-radius: 5px; |
|||
max-height: 130px; |
|||
-webkit-user-select: none; |
|||
-moz-user-select: none; |
|||
-ms-user-select: none; |
|||
user-select: none; |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
.blueGradientPnl:after { |
|||
content: ""; |
|||
position: absolute; |
|||
bottom: -60px; |
|||
left: calc(50% - 3px); |
|||
display: block; |
|||
width: 3px; |
|||
height: 60px; |
|||
border-right: 3px solid #2bcdbb; |
|||
} |
|||
|
|||
.blueGradientPnl-highlight { |
|||
border: 2px solid yellow; |
|||
} |
|||
|
|||
.blueGradientPnl-highlight:after { |
|||
border-right: 3px solid yellow; |
|||
} |
|||
|
|||
/**************** 一个渐变的文本面板,中间竖直连线end ****************/ |
|||
|
|||
/********** 面板:倾斜指向左下角的面板样式start ***********/ |
|||
.tiltPanel-wrap { |
|||
position: relative; |
|||
padding: 30px; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.tiltPanel .area { |
|||
position: relative; |
|||
min-width: 180px; |
|||
} |
|||
|
|||
.tiltPanel .b-t { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 44px; |
|||
right: 0; |
|||
height: 1px; |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .b-r { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
bottom: 44px; |
|||
width: 1px; |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .b-b { |
|||
position: absolute; |
|||
left: 0; |
|||
right: 44px; |
|||
bottom: 0; |
|||
height: 1px; |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .b-l { |
|||
position: absolute; |
|||
top: 44px; |
|||
left: 0; |
|||
bottom: 0; |
|||
width: 1px; |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .b-t-l { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
width: 1px; |
|||
height: 62px; |
|||
transform: rotate(45deg) translate(52px, -22px); |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .b-b-r { |
|||
position: absolute; |
|||
bottom: 0; |
|||
right: 0; |
|||
width: 1px; |
|||
height: 62px; |
|||
transform: rotate(45deg) translate(-52px, 22px); |
|||
z-index: 10; |
|||
} |
|||
|
|||
.tiltPanel .label-wrap { |
|||
padding-left: 12px; |
|||
color: #fff; |
|||
font-size: 16px; |
|||
white-space: nowrap; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
.tiltPanel .title { |
|||
margin-top: 20px; |
|||
padding: 0 12px 0 30px; |
|||
height: 36px; |
|||
line-height: 36px; |
|||
position: relative; |
|||
} |
|||
|
|||
.tiltPanel .title::before { |
|||
content: ""; |
|||
position: absolute; |
|||
bottom: -4px; |
|||
left: 0; |
|||
right: 0; |
|||
z-index: 10; |
|||
height: 2px; |
|||
} |
|||
|
|||
.tiltPanel .label-content { |
|||
padding: 15px 0; |
|||
} |
|||
|
|||
.tiltPanel .data-li { |
|||
padding: 4px 45px 4px 0; |
|||
} |
|||
|
|||
.tiltPanel .data-label, |
|||
.data-value { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.tiltPanel .data-value { |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.tiltPanel .label-num { |
|||
margin-right: 3px; |
|||
color: #f09e28; |
|||
font-weight: 600; |
|||
} |
|||
|
|||
.tiltPanel .label-tag { |
|||
display: inline-block; |
|||
position: relative; |
|||
margin-right: 6px; |
|||
padding: 0 6px; |
|||
font-weight: 600; |
|||
cursor: pointer; |
|||
background-color: #909399; |
|||
border-radius: 4px; |
|||
} |
|||
|
|||
.tiltPanel .label-tag::after { |
|||
content: attr(alt); |
|||
display: inline-block; |
|||
position: absolute; |
|||
bottom: -22px; |
|||
right: -35px; |
|||
z-index: -1; |
|||
padding: 2px 4px; |
|||
color: #fff; |
|||
font-size: 14px; |
|||
background-color: #333; |
|||
border-radius: 3px; |
|||
opacity: 0; |
|||
transition: all 0.3s ease-in; |
|||
} |
|||
|
|||
.tiltPanel .label-tag:hover::after { |
|||
opacity: 1; |
|||
z-index: 11; |
|||
} |
|||
|
|||
.tiltPanel .data-value-status-0 { |
|||
background-color: #f0285c; |
|||
} |
|||
|
|||
.tiltPanel .data-value-status-1 { |
|||
background-color: #35b15b; |
|||
} |
|||
|
|||
.tiltPanel .data-value-status-2 { |
|||
background-color: #f09e28; |
|||
} |
|||
|
|||
.tiltPanel .arrow { |
|||
position: absolute; |
|||
bottom: 0; |
|||
left: 0; |
|||
width: 45px; |
|||
height: 2px; |
|||
transform: rotate(-45deg) translate(5px, -15px); |
|||
} |
|||
|
|||
/* 蓝色主题 */ |
|||
|
|||
.tiltPanel-theme-blue .b-t, |
|||
.tiltPanel-theme-blue .b-r, |
|||
.tiltPanel-theme-blue .b-b, |
|||
.tiltPanel-theme-blue .b-l, |
|||
.tiltPanel-theme-blue .b-t-l, |
|||
.tiltPanel-theme-blue .b-b-r { |
|||
background-color: #29baf1; |
|||
box-shadow: 0 0 10px 2px #29baf1; |
|||
} |
|||
|
|||
.tiltPanel-theme-blue .area { |
|||
background-image: linear-gradient(135deg, transparent 30px, #28bbf06c 30px, #28bbf06c 50%, transparent 50%), |
|||
linear-gradient(-45deg, transparent 30px, #28bbf06c 30px, #28bbf06c 50.1%, transparent 50%); |
|||
} |
|||
|
|||
.tiltPanel-theme-blue .title { |
|||
background-image: linear-gradient(135deg, transparent 25px, #29baf1 25px); |
|||
} |
|||
|
|||
.tiltPanel-theme-blue .arrow, |
|||
.tiltPanel-theme-blue .title::before { |
|||
background-color: #28bbf0; |
|||
} |
|||
|
|||
/********** 面板:倾斜指向左下角的面板样式end ***********/ |
|||
|
|||
/**************** 一个简洁文本面板,中间竖直连线start ****************/ |
|||
.greenGradientPnl { |
|||
width: 100px; |
|||
text-align: center; |
|||
background-image: linear-gradient(to right, #565d39, #00ffc3); |
|||
position: relative; |
|||
left: -1px; |
|||
bottom: 29px; |
|||
cursor: default; |
|||
padding: 5px; |
|||
border: 1px solid #9c9944e8; |
|||
} |
|||
|
|||
.greenGradientPnl:hover { |
|||
border: 1px solid rgb(9, 255, 0); |
|||
} |
|||
|
|||
.greenGradientPnl::before { |
|||
position: absolute; |
|||
content: ""; |
|||
left: 50%; |
|||
bottom: -30px; |
|||
height: 30px; |
|||
border-left: 2px dashed #c5e22770; |
|||
} |
|||
|
|||
.greenGradientPnl-highlight { |
|||
border: 2px solid yellow; |
|||
} |
|||
|
|||
.greenGradientPnl-highlight::before { |
|||
border-left: 2px dashed yellow !important; |
|||
} |
|||
|
|||
/**************** 一个简洁文本面板,中间竖直连线end ****************/ |
|||
|
|||
.sy-four-color { |
|||
width: 100%; |
|||
position: relative; |
|||
top: -68px; |
|||
left: -60px; |
|||
padding: 5px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.sy-four-color .four-color_bg { |
|||
position: absolute; |
|||
} |
|||
|
|||
.sy-four-color .four-color_name { |
|||
width: 150px; |
|||
position: absolute; |
|||
top: 14px; |
|||
left: 25px; |
|||
text-align: left; |
|||
} |
|||
|
|||
.sy-animation { |
|||
animation: cameraMove 1s linear infinite alternate; |
|||
-webkit-animation: cameraMove 1s linear infinite alternate; |
|||
} |
|||
</style> |
@ -0,0 +1,199 @@ |
|||
/* eslint-disable @typescript-eslint/indent */ |
|||
import type { AxiosRequestConfig, AxiosInstance, AxiosResponse, AxiosError, AxiosProgressEvent } from 'axios'; |
|||
import type { RequestOptions, Result, UploadFileParams } from '@/types/axios'; |
|||
import type { CreateAxiosOptions } from './axiosTransform'; |
|||
import axios from 'axios'; |
|||
import qs from 'qs'; |
|||
import { AxiosCanceler } from './axiosCancel'; |
|||
import { isFunction } from '@/utils/is'; |
|||
import { cloneDeep } from 'lodash-es'; |
|||
import { ContentTypeEnum, RequestEnum } from '@/enums/httpEnum'; |
|||
|
|||
// export * from "./axiosTransform";
|
|||
|
|||
/** |
|||
* @description: axios module |
|||
*/ |
|||
export class VAxios { |
|||
private readonly axiosInstance: AxiosInstance; |
|||
private readonly options: CreateAxiosOptions; |
|||
|
|||
constructor(options: CreateAxiosOptions) { |
|||
this.options = options; |
|||
this.axiosInstance = axios.create(options); |
|||
this.setupInterceptors(); |
|||
} |
|||
|
|||
/** |
|||
* @说明: 获取配置 |
|||
*/ |
|||
private getTransform() { |
|||
const { transform } = this.options; |
|||
return transform; |
|||
} |
|||
|
|||
/** |
|||
* @说明: 拦截器配置 |
|||
*/ |
|||
private setupInterceptors() { |
|||
const transform = this.getTransform(); |
|||
if (!transform) { |
|||
return; |
|||
} |
|||
const { requestInterceptors, requestInterceptorsCatch, responseInterceptors, responseInterceptorsCatch } = |
|||
transform; |
|||
const axiosCanceler = new AxiosCanceler(); |
|||
// 禁止重复请求
|
|||
this.axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => { |
|||
axiosCanceler.addPending(config); |
|||
if (requestInterceptors && isFunction(requestInterceptors)) { |
|||
config = requestInterceptors(config, this.options); |
|||
} |
|||
return config; |
|||
}, undefined); |
|||
|
|||
// 请求拦截器错误捕获
|
|||
requestInterceptorsCatch && |
|||
isFunction(requestInterceptorsCatch) && |
|||
this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch); |
|||
|
|||
// 响应拦截器处理
|
|||
this.axiosInstance.interceptors.response.use((res: AxiosResponse<any>) => { |
|||
res && axiosCanceler.removePending(res.config); |
|||
if (responseInterceptors && isFunction(responseInterceptors)) { |
|||
res = responseInterceptors(res); |
|||
} |
|||
return res; |
|||
}, undefined); |
|||
|
|||
// 响应拦截器错误捕获
|
|||
responseInterceptorsCatch && |
|||
isFunction(responseInterceptorsCatch) && |
|||
this.axiosInstance.interceptors.response.use(undefined, responseInterceptorsCatch); |
|||
} |
|||
|
|||
/** |
|||
* @description: File Upload |
|||
*/ |
|||
async uploadFile<T = any>( |
|||
config: AxiosRequestConfig, |
|||
params: UploadFileParams, |
|||
onUploadProgress: (progressEvent: AxiosProgressEvent) => void, |
|||
options?: RequestOptions |
|||
) { |
|||
const formData = new FormData(); |
|||
const { requestOptions } = this.options; |
|||
// 合并默认配置与传入配置
|
|||
const opt: RequestOptions = Object.assign({}, requestOptions, options); |
|||
for (const key in params) { |
|||
formData.append(key, params[key]); |
|||
} |
|||
// 获取伪类方法
|
|||
const transform = this.getTransform(); |
|||
const { transformRequestHook } = transform ?? {}; |
|||
return await new Promise((resolve, reject) => { |
|||
this.axiosInstance |
|||
.request<T>({ |
|||
...config, |
|||
method: 'POST', |
|||
data: formData, |
|||
onUploadProgress |
|||
}) |
|||
.then((res: any) => { |
|||
if (transformRequestHook && isFunction(transformRequestHook)) { |
|||
try { |
|||
const ret = transformRequestHook(res, opt); |
|||
resolve(ret); |
|||
} catch (err) { |
|||
reject(err || new Error('request error!')); |
|||
} |
|||
return; |
|||
} |
|||
resolve(res as unknown as Promise<T>); |
|||
}) |
|||
.catch((e: Error | AxiosError) => { |
|||
reject(e); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
// support form-data
|
|||
supportFormData(config: AxiosRequestConfig) { |
|||
const headers = config.headers ?? this.options.headers; |
|||
const contentType = headers?.['Content-Type'] ?? headers?.['content-type']; |
|||
|
|||
if ( |
|||
contentType !== ContentTypeEnum.FORM_URLENCODED || |
|||
!Reflect.has(config, 'data') || |
|||
config.method?.toUpperCase() === RequestEnum.GET |
|||
) { |
|||
return config; |
|||
} |
|||
return { |
|||
...config, |
|||
data: qs.stringify(config.data, { arrayFormat: 'brackets' }) |
|||
}; |
|||
} |
|||
|
|||
async get<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { |
|||
return await this.request({ ...config, method: 'GET' }, options); |
|||
} |
|||
|
|||
async post<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { |
|||
return await this.request({ ...config, method: 'POST' }, options); |
|||
} |
|||
|
|||
async put<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { |
|||
return await this.request({ ...config, method: 'PUT' }, options); |
|||
} |
|||
|
|||
async delete<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { |
|||
return await this.request({ ...config, method: 'DELETE' }, options); |
|||
} |
|||
|
|||
async request<T = any>(config: AxiosRequestConfig, options?: RequestOptions): Promise<T> { |
|||
let conf: CreateAxiosOptions = cloneDeep(config); |
|||
// 获取伪类方法
|
|||
const transform = this.getTransform(); |
|||
const { requestOptions } = this.options; |
|||
// 合并默认配置与传入配置
|
|||
const opt: RequestOptions = Object.assign({}, requestOptions, options); |
|||
|
|||
const { beforeRequestHook, transformRequestHook } = transform ?? {}; |
|||
// 获取路由配置
|
|||
if (beforeRequestHook && isFunction(beforeRequestHook)) { |
|||
conf = beforeRequestHook(conf, opt); |
|||
} |
|||
conf.requestOptions = opt; |
|||
// 配置请求头
|
|||
conf = this.supportFormData(conf); |
|||
return await new Promise((resolve, reject) => { |
|||
this.axiosInstance |
|||
.request<any, AxiosResponse<Result>>(conf) |
|||
.then(async (res: AxiosResponse<Result>) => { |
|||
if (transformRequestHook && isFunction(transformRequestHook)) { |
|||
try { |
|||
const ret = transformRequestHook(res, opt); |
|||
if (ret instanceof Promise) { |
|||
try { |
|||
const data = await ret; |
|||
resolve(data); |
|||
} catch (error) { |
|||
console.error('reponse error:结构体错误!' + config.url); |
|||
reject(error); |
|||
} |
|||
} |
|||
resolve(ret); |
|||
} catch (err) { |
|||
reject(err || new Error('request error!')); |
|||
} |
|||
return; |
|||
} |
|||
resolve(res as unknown as Promise<T>); |
|||
}) |
|||
.catch((e: Error | AxiosError) => { |
|||
reject(e); |
|||
}); |
|||
}); |
|||
} |
|||
} |
@ -0,0 +1,70 @@ |
|||
import type { AxiosRequestConfig, Canceler } from 'axios'; |
|||
import axios from 'axios'; |
|||
import { isFunction } from '@/utils/is'; |
|||
|
|||
// 用于储存接口标识与中断接口
|
|||
|
|||
// 新建一个集合便于储存接口标识
|
|||
let pendingMap = new Map<string, Canceler>(); |
|||
|
|||
export const getPendingUrl = (config: AxiosRequestConfig) => |
|||
[config.method, config.url].join('&'); |
|||
|
|||
export class AxiosCanceler { |
|||
/** |
|||
* 添加请求 |
|||
* @param {Object} 接口config |
|||
*/ |
|||
addPending(config: AxiosRequestConfig) { |
|||
this.removePending(config); |
|||
const url = getPendingUrl(config); |
|||
if (url.indexOf('cameras/previewURLs') > 0) return; // 忽略 重复请求获取预览取流地址
|
|||
if (url.indexOf('preview/capture') > 0) return; // 忽略 重复请求获取预览取流地址
|
|||
if (url.indexOf('/sy-engine-backer/cameraInfo/') > 0) return; // 忽略 重复请求获取预览取流地址
|
|||
if (url.indexOf('/run/statistic/chart') > 0) return; |
|||
if (url.indexOf('/monitor/chart') > 0) return; |
|||
|
|||
// 上传接口忽略重复请求
|
|||
if (!url.includes('oss')) { |
|||
config.cancelToken = |
|||
config.cancelToken ?? |
|||
new axios.CancelToken((cancel) => { |
|||
// 如果队列没有这个请求就添加进去
|
|||
if (!pendingMap.has(url)) { |
|||
pendingMap.set(url, cancel); |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* @说明: 中断所有标识接口 |
|||
*/ |
|||
removeAllPending() { |
|||
pendingMap.forEach((cancel) => { |
|||
cancel && isFunction(cancel) && cancel(); |
|||
}); |
|||
pendingMap.clear(); |
|||
} |
|||
|
|||
/** |
|||
* 删除标识接口 |
|||
* @param {Object} config |
|||
*/ |
|||
removePending(config: AxiosRequestConfig) { |
|||
const url = getPendingUrl(config); |
|||
|
|||
if (pendingMap.has(url)) { |
|||
const cancel = pendingMap.get(url); |
|||
cancel && cancel(url); |
|||
pendingMap.delete(url); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* @说明: 重置接口标识队列 |
|||
*/ |
|||
reset(): void { |
|||
pendingMap = new Map<string, Canceler>(); |
|||
} |
|||
} |
@ -0,0 +1,56 @@ |
|||
/** |
|||
* 数据处理类,可根据情况配置 |
|||
*/ |
|||
import type { AxiosRequestConfig, AxiosResponse } from 'axios'; |
|||
import type { RequestOptions, Result } from '@/types/axios'; |
|||
|
|||
export interface CreateAxiosOptions extends AxiosRequestConfig { |
|||
transform?: AxiosTransform; |
|||
requestOptions?: RequestOptions; |
|||
} |
|||
|
|||
export abstract class AxiosTransform { |
|||
/** |
|||
* @说明: 请求之前的流程配置 |
|||
*/ |
|||
beforeRequestHook?: ( |
|||
config: AxiosRequestConfig, |
|||
options: RequestOptions, |
|||
) => AxiosRequestConfig; |
|||
|
|||
/** |
|||
* @说明: 请求处理成功 |
|||
*/ |
|||
transformRequestHook?: ( |
|||
res: AxiosResponse<Result>, |
|||
options: RequestOptions, |
|||
) => any; |
|||
|
|||
/** |
|||
* @说明: 请求失败处理 |
|||
*/ |
|||
requestCatchHook?: (e: Error, options: RequestOptions) => Promise<any>; |
|||
|
|||
/** |
|||
* @说明: 请求数据拦截器 |
|||
*/ |
|||
requestInterceptors?: ( |
|||
config: AxiosRequestConfig, |
|||
options: CreateAxiosOptions, |
|||
) => AxiosRequestConfig; |
|||
|
|||
/** |
|||
* @说明: 响应数据拦截器 |
|||
*/ |
|||
responseInterceptors?: (res: AxiosResponse<any>) => AxiosResponse<any>; |
|||
|
|||
/** |
|||
* @说明: 请求数据失败处理 |
|||
*/ |
|||
requestInterceptorsCatch?: (error: Error) => void; |
|||
|
|||
/** |
|||
* @说明: 响应数据失败处理 |
|||
*/ |
|||
responseInterceptorsCatch?: (error: Error) => void; |
|||
} |
@ -0,0 +1,75 @@ |
|||
import { useMessage } from '@/hooks/web/useMessage'; |
|||
import { isEmpty } from '@/utils/is'; |
|||
// import { useUserStore } from '@/store/modules/user';
|
|||
|
|||
const { createMessage, notification } = useMessage(); |
|||
|
|||
export function checkStatus(status: number, msg: string, errorMessageMode: any, customMessage: any, data: any): void { |
|||
let errMessage = ''; |
|||
switch (status) { |
|||
case 400: |
|||
errMessage = `${msg}`; |
|||
break; |
|||
// 401: 无接口权限
|
|||
case 401: |
|||
errMessage = msg || '没有权限访问'; |
|||
break; |
|||
// 424 一般为token过期出现
|
|||
// 如果未登录,则跳转到登录页面,并携带当前页面的路径
|
|||
// 登录成功后,将返回到当前页面
|
|||
case 424: |
|||
errMessage = msg || '登录凭证过期,请重新登录'; |
|||
/* eslint-disable-next-line */ |
|||
// const { logout } = useUserStore();
|
|||
// logout();
|
|||
break; |
|||
// 404请求不存在
|
|||
case 404: |
|||
errMessage = '网络请求错误,未找到该资源!'; |
|||
break; |
|||
case 405: |
|||
errMessage = '网络请求错误,请求方法未允许!'; |
|||
break; |
|||
case 408: |
|||
errMessage = '网络请求超时!'; |
|||
break; |
|||
case 500: |
|||
errMessage = '服务器错误,请联系管理员!'; |
|||
break; |
|||
case 501: |
|||
errMessage = '网络未实现!'; |
|||
break; |
|||
case 502: |
|||
errMessage = '网络错误!'; |
|||
break; |
|||
case 503: |
|||
errMessage = '服务不可用,服务器暂时过载或维护!'; |
|||
break; |
|||
case 504: |
|||
errMessage = '网络超时!'; |
|||
break; |
|||
case 505: |
|||
errMessage = 'http版本不支持该请求!'; |
|||
break; |
|||
default: |
|||
} |
|||
if (!isEmpty(customMessage)) { |
|||
errMessage = customMessage[status]; |
|||
} |
|||
if (errMessage === '') { |
|||
errMessage = data?.error; |
|||
} |
|||
// 报错信息框类型
|
|||
if (errorMessageMode === 'message') { |
|||
createMessage({ |
|||
message: errMessage, |
|||
grouping: true, |
|||
type: 'error' |
|||
}); |
|||
} else if (errorMessageMode === 'notification') { |
|||
notification.error({ |
|||
title: '接口异常', |
|||
message: `${errMessage}` |
|||
}); |
|||
} |
|||
} |
@ -0,0 +1,50 @@ |
|||
import { isObject, isString } from '@/utils/is'; |
|||
|
|||
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm'; |
|||
|
|||
export function joinTimestamp<T extends boolean>( |
|||
join: boolean, |
|||
restful: T, |
|||
): T extends true ? string : object; |
|||
|
|||
export function joinTimestamp(join: boolean, restful = false): string | object { |
|||
if (!join) { |
|||
return restful ? '' : {}; |
|||
} |
|||
const now = new Date().getTime(); |
|||
if (restful) { |
|||
return `?_t=${now}`; |
|||
} |
|||
return { _t: now }; |
|||
} |
|||
|
|||
/** |
|||
* @说明: 格式化请求参数时间 |
|||
*/ |
|||
export function formatRequestDate(params: Recordable) { |
|||
// params不是对象直接返回
|
|||
if (!isObject(params)) { |
|||
return; |
|||
} |
|||
|
|||
for (const key in params) { |
|||
// 时间戳处理
|
|||
if (params[key]?._isAMomentObject) { |
|||
params[key] = params[key].format(DATE_TIME_FORMAT); |
|||
} |
|||
// 字符串去空格
|
|||
if (isString(key)) { |
|||
const value = params[key]; |
|||
if (value) { |
|||
try { |
|||
params[key] = isString(value) ? value.trim() : value; |
|||
} catch (error: any) { |
|||
throw new Error(error); |
|||
} |
|||
} |
|||
} |
|||
if (isObject(params[key])) { |
|||
formatRequestDate(params[key]); |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,215 @@ |
|||
// axios配置 可自行根据项目进行更改,只需更改该文件即可,其他文件可以不动
|
|||
|
|||
import type { AxiosResponse } from 'axios'; |
|||
import type { RequestOptions, Result } from '@/types/axios'; |
|||
import type { AxiosTransform, CreateAxiosOptions } from './axiosTransform'; |
|||
import { VAxios } from './Axios'; |
|||
import { useMessage } from '@/hooks/web/useMessage'; |
|||
import { RequestEnum } from '@/enums/httpEnum'; |
|||
import { isString, isEmpty } from '@/utils/is'; |
|||
import { setObjToUrlParams, deepMerge } from '@/utils/index'; |
|||
import { getAppEnvConfig } from '@/utils/env'; |
|||
import { joinTimestamp, formatRequestDate } from './helper'; |
|||
import { checkStatus } from './checkStatus'; |
|||
// import { useUserStore } from '@/store/modules/user';
|
|||
const whitelist = ['/cameras/previewURLs', '/cameras/preview/capture']; |
|||
const { notification, createMessage } = useMessage(); |
|||
const { VITE_GLOB_API_URL } = getAppEnvConfig(); |
|||
|
|||
/** |
|||
* @description: 数据处理,方便区分多种处理方式 |
|||
*/ |
|||
const transform: AxiosTransform = { |
|||
/** |
|||
* @description: 处理请求数据。如果数据不是预期格式,可直接抛出错误 |
|||
*/ |
|||
transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => { |
|||
const { isTransformResponse, isReturnNativeResponse } = options; |
|||
const { |
|||
data, |
|||
config: { url }, |
|||
status |
|||
} = res; |
|||
|
|||
const errorMessageMode = options?.errorMessageMode; |
|||
const customMessage = options?.customMessage; |
|||
let msg: string; |
|||
// 自定义报错信息
|
|||
if (!isEmpty(customMessage)) { |
|||
msg = customMessage[status] ? customMessage[status] : data?.msg ?? ''; |
|||
} else { |
|||
msg = data?.msg ?? ''; |
|||
} |
|||
// 是否返回原生响应头 比如:需要获取响应头时使用该属性
|
|||
if (isReturnNativeResponse) { |
|||
return res; |
|||
} |
|||
// 不进行任何处理,直接返回
|
|||
// 用于页面代码可能需要直接获取code,data,message这些信息时开启
|
|||
if (status === 200) { |
|||
if (isTransformResponse) { |
|||
// 过滤 oauth2 接口返回内容
|
|||
|
|||
if (data.code === 200 || url?.includes('oauth2')) { |
|||
return data; |
|||
} else { |
|||
// 报错信息框类型
|
|||
if (errorMessageMode === 'message') { |
|||
createMessage.error(msg); |
|||
return Promise.reject(res); |
|||
} else if ((errorMessageMode as string) === 'notification') { |
|||
notification.error({ |
|||
title: '接口异常', |
|||
message: `${msg}` |
|||
}); |
|||
return Promise.reject(res); |
|||
} |
|||
} |
|||
} |
|||
|
|||
if (data.code === 200) { |
|||
return data.data || data; |
|||
} else { |
|||
// 报错信息框类型
|
|||
if (errorMessageMode === 'message') { |
|||
createMessage.error(msg); |
|||
return Promise.reject(res); |
|||
} else if ((errorMessageMode as string) === 'notification') { |
|||
notification.error({ |
|||
title: '接口异常', |
|||
message: `${msg}` |
|||
}); |
|||
return Promise.reject(res); |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
|
|||
// 请求之前处理config
|
|||
beforeRequestHook: (config, options) => { |
|||
const { joinParamsToUrl, formatDate, joinTime = true } = options; |
|||
const params = config.params || {}; |
|||
const data = config.data || false; |
|||
formatDate && data && !isString(data) && formatRequestDate(data); |
|||
if (config.method?.toUpperCase() === RequestEnum.GET) { |
|||
if (!isString(params)) { |
|||
// 给 get 请求加上时间戳参数,避免从缓存中拿数据。
|
|||
config.params = Object.assign(params || {}, joinTimestamp(joinTime, false)); |
|||
} else { |
|||
// 兼容restful风格
|
|||
config.url = config.url + params + `${joinTimestamp(joinTime, true)}`; |
|||
config.params = undefined; |
|||
} |
|||
} else { |
|||
if (!isString(params)) { |
|||
formatDate && formatRequestDate(params); |
|||
if (Reflect.has(config, 'data') && config.data && Object.keys(config.data).length > 0) { |
|||
config.data = data; |
|||
config.params = params; |
|||
} else { |
|||
// 非GET请求如果没有提供data,则将params视为data
|
|||
config.data = isEmpty(params) ? undefined : params; |
|||
config.params = undefined; |
|||
} |
|||
if (joinParamsToUrl) { |
|||
config.url = setObjToUrlParams(config.url!, Object.assign({}, config.params, config.data)); |
|||
config.data = undefined; |
|||
} |
|||
} else { |
|||
// 兼容restful风格
|
|||
config.url = config.url + params; |
|||
config.params = undefined; |
|||
} |
|||
} |
|||
return config; |
|||
}, |
|||
|
|||
/** |
|||
* @description: 请求拦截器处理 |
|||
*/ |
|||
requestInterceptors: (config) => { |
|||
// const { getUserInfo } = useUserStore();
|
|||
if ( |
|||
(config as Recordable)?.requestOptions?.withToken !== false && |
|||
(config as Recordable).headers.Authorization === undefined |
|||
) { |
|||
// (config as Recordable).headers.Authorization =
|
|||
// `Bearer ${getUserInfo?.access_token}`;
|
|||
} |
|||
return config; |
|||
}, |
|||
|
|||
/** |
|||
* @description: 响应拦截器处理 |
|||
*/ |
|||
responseInterceptors: (res: AxiosResponse<any>) => { |
|||
return res; |
|||
}, |
|||
|
|||
/** |
|||
* @description: 响应错误处理 |
|||
*/ |
|||
/* eslint-disable-next-line */ |
|||
responseInterceptorsCatch: (error: any) => { |
|||
if (!error.response) { |
|||
return Promise.reject(error); |
|||
} |
|||
const { response, config } = error || {}; |
|||
const { data, status } = response; |
|||
const errorMessageMode = config?.requestOptions?.errorMessageMode; |
|||
const customMessage = config?.requestOptions?.customMessage; |
|||
const msg: string = data?.msg ?? ''; |
|||
// 过滤视频获取地址和截图报错
|
|||
if (whitelist.every((item) => config.url.indexOf(item) === -1)) { |
|||
checkStatus(status, msg, errorMessageMode, customMessage, data); |
|||
} |
|||
return Promise.reject(error); |
|||
} |
|||
}; |
|||
function getCookie(name: string): string | null { |
|||
const value = `; ${document.cookie}`; |
|||
const parts = value.split(`; ${name}=`); |
|||
if (parts.length === 2) return parts.pop()?.split(";").shift() || null; |
|||
return null; |
|||
} |
|||
function createAxios(opt?: Partial<CreateAxiosOptions>) { |
|||
return new VAxios( |
|||
deepMerge( |
|||
{ |
|||
timeout: 300 * 1000, |
|||
// 基础接口地址
|
|||
baseURL: VITE_GLOB_API_URL, |
|||
|
|||
headers: { |
|||
'Content-Type': 'application/json', |
|||
'shuili': 'water ' + getCookie('Admin-Token') |
|||
}, |
|||
// 数据处理方式
|
|||
transform, |
|||
// 配置项,下面的选项都可以在独立的接口请求中覆盖
|
|||
requestOptions: { |
|||
// 是否返回原生响应头 比如:(下载文件可以需要选为true)
|
|||
isReturnNativeResponse: false, |
|||
// 需要对返回数据进行处理 (拦截器已经做了处理,如果后端code不等于200会报错,如果想自己处理选为true)
|
|||
isTransformResponse: false, |
|||
// post请求的时候添加参数到url (post接口做了处理,如果data和params都有就正常,如果只有一个默认变成data,这个参数是把data变成params)
|
|||
joinParamsToUrl: false, |
|||
// 格式化提交参数时间 (去空格还有时间戳格式变化,不需要可以为false)
|
|||
formatDate: true, |
|||
// 消息提示类型 (可选message,notification)
|
|||
errorMessageMode: 'message', |
|||
// 自定义信息 (可以改变响应status错误信息,如:{404: ‘报错404’})
|
|||
customMessage: {}, |
|||
// 是否加入时间戳 (如地址图片可避免链接重复)
|
|||
joinTime: false, |
|||
// 是否携带token
|
|||
withToken: true |
|||
} |
|||
}, |
|||
opt ?? {} |
|||
) |
|||
); |
|||
} |
|||
const http = createAxios(); |
|||
export default http; |
|||
export const request = async (config: any, options?: any) => await http.request(config, options); |
@ -0,0 +1,14 @@ |
|||
import { request } from '../axios'; |
|||
import { getCookie } from '@/utils'; |
|||
// 获取cookie
|
|||
const shuili = getCookie('Admin-Token'); |
|||
// 获取字典列表
|
|||
export function getDicts(dictType: string) { |
|||
return request({ |
|||
url: `/system/dict/data/type/${dictType}`, |
|||
method: "get", |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
@ -0,0 +1,111 @@ |
|||
import { request } from '../axios'; |
|||
import { getCookie } from '@/utils'; |
|||
// 获取cookie
|
|||
const shuili = getCookie('Admin-Token'); |
|||
|
|||
// 获取堤防基础列表
|
|||
|
|||
// 水库特征信息详情
|
|||
export const getReservoirRsppDetailData = (id: string | number) => { |
|||
return request({ |
|||
url: `/sk/rspp/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取水闸
|
|||
// 查询水闸安全管理基本信息详细
|
|||
export function getJbxx(id: any) { |
|||
return request({ |
|||
url: '/df/jbxx/' + id, |
|||
method: 'get', |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 查询水文特征列表
|
|||
export function listSwtz(query: any) { |
|||
return request({ |
|||
url: '/df/swtz/list', |
|||
method: 'post', |
|||
data: query, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 查询水文特征详细
|
|||
export function getSwtz(id: any) { |
|||
return request({ |
|||
url: '/df/swtz/' + id, |
|||
method: 'get', |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 新增水文特征
|
|||
export function addSwtz(data: any) { |
|||
return request({ |
|||
url: '/df/swtz', |
|||
method: 'post', |
|||
data: data, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 修改水文特征
|
|||
export function updateSwtz(data: any) { |
|||
return request({ |
|||
url: '/df/swtz', |
|||
method: 'put', |
|||
data: data, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 删除水文特征
|
|||
export function delSwtz(id: any) { |
|||
return request({ |
|||
url: '/df/swtz/' + id, |
|||
method: 'delete', |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 导出水文特征
|
|||
export function exportSwtz(query: any) { |
|||
return request({ |
|||
url: '/df/swtz/export', |
|||
method: 'get', |
|||
params: query, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 获取巡查统计分析数据/run/statistic/chart
|
|||
export function getV2PatrolStatisticChart(data: any) { |
|||
return request({ |
|||
url: `/run/statistic/chart`, |
|||
method: "post", |
|||
data, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
@ -0,0 +1,94 @@ |
|||
import { request } from "../axios"; |
|||
import axios from "axios"; |
|||
|
|||
// 获取场景列表
|
|||
export const getSceneListData = async (data: any) => { |
|||
return request({ |
|||
url: `/map/scene/sceneList`, |
|||
method: "post", |
|||
data: { |
|||
pageNum: 1, |
|||
pageSize: 10, |
|||
data: { |
|||
id: "", |
|||
name: data.name, |
|||
}, |
|||
params: { |
|||
order: "asc", |
|||
orderBy: "pub_date", |
|||
}, |
|||
}, |
|||
}); |
|||
}; |
|||
|
|||
export const getLayerLegend = async (url: string) => { |
|||
return axios.get(url); |
|||
}; |
|||
|
|||
// 获取图形的
|
|||
export const getLayerData = async (url: string, params: any) => { |
|||
return request({ |
|||
url, |
|||
method: "post", |
|||
data: params, |
|||
headers: { |
|||
"Content-Type": "multipart/form-data", |
|||
}, |
|||
}); |
|||
}; |
|||
//从水库-水库点图层中,根据水库名称/水平编码,从geojson中查询水库列表
|
|||
export const getReservoirList = async (layerData: any, searchName: string) => { |
|||
const { serviceToken, text } = layerData; |
|||
if (!text) return; |
|||
let filter = "1=1"; |
|||
switch (layerData.nameCn) { |
|||
case "水库点": |
|||
filter = searchName |
|||
? `RES_NAME LIKE '%${searchName}%' OR RES_CODE LIKE '%${searchName}%'` |
|||
: "1=1"; |
|||
break; |
|||
case "水闸": |
|||
filter = searchName |
|||
? `WAGA_NAME LIKE '%${searchName}%' OR WAGA_CODE LIKE '%${searchName}%'` |
|||
: "1=1"; |
|||
break; |
|||
case "堤防": |
|||
filter = searchName |
|||
? `DIKE_NAME LIKE '%${searchName}%' OR DIKE_CODE LIKE '%${searchName}%'` |
|||
: "1=1"; |
|||
break; |
|||
} |
|||
const queryArr = text.split(";"); |
|||
let dataUrl = queryArr[0]; |
|||
const datasourceName = queryArr[1]; |
|||
let params: any = { |
|||
getFeatureMode: "SQL", |
|||
datasetNames: [datasourceName], |
|||
maxFeatures: 100, |
|||
queryParameter: { |
|||
attributeFilter: filter, |
|||
}, |
|||
}; |
|||
let queryUrl = `${dataUrl}/data/featureResults.geojson?returnContent=true`; |
|||
|
|||
if (serviceToken) { |
|||
queryUrl += `&k=${serviceToken}`; |
|||
} |
|||
|
|||
const result = await axios.post( |
|||
queryUrl, |
|||
JSON.stringify(params), |
|||
{ |
|||
headers: { |
|||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", |
|||
}, |
|||
} |
|||
); |
|||
if (result?.data?.features?.length > 0) { |
|||
return result.data; |
|||
} |
|||
return { |
|||
type: "FeatureCollection", |
|||
features: [], |
|||
}; |
|||
}; |
@ -0,0 +1,94 @@ |
|||
import axios from "axios"; |
|||
import { request } from "../axios"; |
|||
const url = "/sy-map-admin"; |
|||
|
|||
export const getProjectList = async (params: any) => { |
|||
const res = await request({ |
|||
url: url + "/water/project.json", |
|||
method: "get", |
|||
params, |
|||
}); |
|||
return res; |
|||
}; |
|||
export const getLayerTree = async (params: any) => { |
|||
return await request({ |
|||
url: url + "/water/layerTree.json", |
|||
method: "get", |
|||
params, |
|||
}); |
|||
}; |
|||
// 默认视点
|
|||
export const getDefaultViewPoint = async () => { |
|||
return await request({ |
|||
url: url + "/water/defaultViewPoint.json", |
|||
method: "get", |
|||
}); |
|||
}; |
|||
// 行政区划树
|
|||
export const getRegionTree = async () => { |
|||
return await request({ |
|||
url: url + "/water/regionTree.json", |
|||
method: "get", |
|||
}); |
|||
}; |
|||
export const getLayerStyle = async (id: string) => { |
|||
return await request({ |
|||
url: url + "/layer/style/" + id, |
|||
method: "get", |
|||
}); |
|||
}; |
|||
|
|||
// 默认查询配置的第一个场景的信息
|
|||
export const getFirstScene = async () => { |
|||
return request({ |
|||
url: `/map/scene/sceneList`, |
|||
method: "post", |
|||
data: { |
|||
pageNum: 1, |
|||
pageSize: 1, |
|||
data: { |
|||
id: "", |
|||
name: "", |
|||
}, |
|||
params: { |
|||
order: "asc", |
|||
orderBy: "pub_date", |
|||
}, |
|||
}, |
|||
}); |
|||
}; |
|||
|
|||
export const getLayerData = async (sceneId: string) => { |
|||
return request({ |
|||
url: `/map/scene/getLayerTree/${sceneId}`, |
|||
method: "get", |
|||
}); |
|||
}; |
|||
|
|||
export const getLayerLegend = async (url: string) => { |
|||
return axios.get(url); |
|||
}; |
|||
|
|||
/** |
|||
* 查询图层信息 |
|||
* @param type 图层的业务类型 |
|||
* @param code 图层的查询编码 |
|||
* @returns |
|||
*/ |
|||
export const identifyLayerInfo = async ( |
|||
type: string | number, |
|||
code: string | number |
|||
) => { |
|||
return request({ |
|||
url: `/run/api/object/info/${type}/${code}`, |
|||
method: "get", |
|||
}); |
|||
}; |
|||
|
|||
// 获取场景配置
|
|||
export function getSceneConfig(sceneId: string | number) { |
|||
return request({ |
|||
url: `/map/scene/config/findConfigBySceneId/${sceneId}`, |
|||
method: "get", |
|||
}); |
|||
} |
@ -0,0 +1,255 @@ |
|||
import { request } from '../axios'; |
|||
import { getCookie } from '@/utils'; |
|||
// 获取cookie
|
|||
const shuili = getCookie('Admin-Token'); |
|||
|
|||
// 获取水库基础列表
|
|||
export const getReservoirBaseListData = (data: any) => { |
|||
return request({ |
|||
url: `/sk/base/list`, |
|||
method: 'post', |
|||
data: data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取水库测站基础列表
|
|||
export const getReservoirCZListData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/base/list`, |
|||
method: 'post', |
|||
data: data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取测点列表 /cd/base/list
|
|||
export const getReservoirCDListData = (data: any) => { |
|||
return request({ |
|||
url: `/cd/base/list`, |
|||
method: 'post', |
|||
data: data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
|
|||
// 获取水库测站提交告警详情
|
|||
export const getReservoirCZAlarmDetailsData = (id: string | number) => { |
|||
return request({ |
|||
url: `/cz/base/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 水库基础信息详情
|
|||
export const getReservoirBaseDetailData = (id: string | number) => { |
|||
return request({ |
|||
url: `/sk/base/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
// 获取水库代表站信息详情
|
|||
export const getReservoirFlagCZData = (id: string | number) => { |
|||
return request({ |
|||
url: `/sk/base/stcd/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
// 水库特征信息详情
|
|||
export const getReservoirRsppDetailData = (id: string | number) => { |
|||
return request({ |
|||
url: `/sk/rspp/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 水库测站详情
|
|||
export const getReservoirCZDetailData = (id: string | number) => { |
|||
return request({ |
|||
url: `/cz/base/${id}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 测站要素详情
|
|||
export const getReservoirCZElementDetailData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/water`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取测站测点指标 /cz/monitor/index
|
|||
export const getReservoirMonitorIndexData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/index`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 测站树结构
|
|||
export const getReservoirTreeDetailData = (data: any) => { |
|||
return request({ |
|||
url: `/cd/base/tree`, |
|||
method: 'get', |
|||
params: data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取测点列表
|
|||
export const getReservoirCZPointListData = (data: any) => { |
|||
return request({ |
|||
url: `/cd/base/list`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取水库测站echarts数据
|
|||
export const getReservoirCZEchartsData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/chart`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 分页获取监测告警信息/cz/alarm/page
|
|||
export const getReservoirCZAlarmPageData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/alarm/page`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 保存监测预警表单信息 /cz/monitor/config
|
|||
export const saveReservoirCZMonitorConfigData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/config`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取监测预警表单信息 /cz/monitor/config/list/{stcd}
|
|||
export const getReservoirCZMonitorConfigData = (stcd: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/config/list/${stcd}`, |
|||
method: 'get', |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取echart数据 /cz/monitor/chart
|
|||
export const getReservoirCZMonitorEchartsData = (data: any) => { |
|||
return request({ |
|||
url: `/cz/monitor/chart`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
// 获取视频列表/safe/operation/Play
|
|||
export const getOperationPlay = (data: any) => { |
|||
return request({ |
|||
url: `/safe/operation/play`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
export const getVideoDataList = (data: any) => { |
|||
return request({ |
|||
url: `/safe/operation/reservoirList`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
// 'Admin-Token': shuili,
|
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
export const getResStatisticsViewData = (data: any) => { |
|||
return request({ |
|||
url: `/run/sk/statistics/view`, |
|||
method: 'post', |
|||
data, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
}; |
|||
|
@ -0,0 +1,99 @@ |
|||
// import axios from 'axios';
|
|||
import { request } from '../axios'; |
|||
|
|||
// 预警统计
|
|||
export const getWarningStatistic = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/warning/statistic", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
|
|||
// 预警列表
|
|||
export const getWarningList = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/warning/list", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
|
|||
// 查询行政区划数据
|
|||
export const getAreasData = () => { |
|||
return request({ |
|||
url: "/run/api/common/xzgh/getGuangDong", |
|||
method: "get", |
|||
}); |
|||
}; |
|||
|
|||
// 根据字典类型查询字典数据信息
|
|||
export function getDicts(dictType: any) { |
|||
return request({ |
|||
url: "/run/api/common/dict/type/" + dictType, |
|||
method: "get", |
|||
}); |
|||
} |
|||
|
|||
// 通过类型和编码查询对象详细信息
|
|||
export const getObjectInfo = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/object/info/" + params.type + "/" + params.code, |
|||
method: "get", |
|||
}); |
|||
}; |
|||
|
|||
// 视频图像
|
|||
export const getVideoWarningList = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/video/warning/list", // /run/api/video/warning/list
|
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
// 运行指标列表
|
|||
export const getIndicatorList = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/indicator/list", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
|
|||
// 按小时统计运行坐标
|
|||
export const getIndicatorHour = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/indicator/hour", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
// 最大最小平均值
|
|||
export const getIndicatorStatistic = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/indicator/statistic", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
|
|||
// 水利对象统计
|
|||
export const getObjectStatistic = (params: any) => { |
|||
return request({ |
|||
url: "/run/api/object/statistic", |
|||
method: "post", |
|||
params, |
|||
}); |
|||
}; |
|||
export function getlStatisticChart(data: any) { |
|||
return request( |
|||
{ |
|||
url: `/run/statistic/chart`, |
|||
method: "post", |
|||
data, |
|||
}, |
|||
{ |
|||
isReturnNativeResponse: true, |
|||
} |
|||
); |
|||
} |
@ -0,0 +1,28 @@ |
|||
import { request } from '../axios'; |
|||
import { getCookie } from '@/utils'; |
|||
// 获取cookie
|
|||
const shuili = getCookie('Admin-Token'); |
|||
|
|||
// 获取水闸
|
|||
// 查询水闸安全管理基本信息详细
|
|||
export function getJbxx(id: any) { |
|||
return request({ |
|||
url: '/yg/jbxx/' + id, |
|||
method: 'get', |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
|||
|
|||
// 查询水文特征列表
|
|||
export function listSwtz(query: any) { |
|||
return request({ |
|||
url: '/yg/swtz/list', |
|||
method: 'post', |
|||
data: query, |
|||
headers: { |
|||
shuili: 'water ' + shuili |
|||
} |
|||
}); |
|||
} |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 3.3 MiB |
After Width: | Height: | Size: 2.8 MiB |
After Width: | Height: | Size: 108 KiB |
After Width: | Height: | Size: 702 KiB |
After Width: | Height: | Size: 879 B |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 491 B |
After Width: | Height: | Size: 354 B |
After Width: | Height: | Size: 683 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 163 B |
After Width: | Height: | Size: 142 B |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 509 B |
After Width: | Height: | Size: 243 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 855 B |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 183 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 980 B |
After Width: | Height: | Size: 89 KiB |
After Width: | Height: | Size: 188 B |