tianyabing 2 éve
szülő
commit
1e552aba3b

+ 7 - 7
public/home.js

@@ -1,43 +1,43 @@
 // 平台介绍
 var platDesc = "基于全市“数字孪生”空间中心建设部署,打造市-区融合对接的海经区数字孪生底座,为全区域各部门提供各类空间数据服务和空间应用服务,统一标准、集约建设、便捷高效。" +
     "在启动区共3.73平方公里基础上向一期24平方公里衍生;实现地形、道路、建筑、水域等城市全要素场景呈现;实现建筑实体、交通实体、设施实体、地下管网等监测管控。涉及:" +
-    "98公里供水管网/139公里排水管网/94公里燃气管网/495座燃气阀门井/1座桥梁(灵昆大桥2535米)/18公里海塘";
+    "98公里供水管网/139公里排水管网/94公里燃气管网/495座燃气阀门井/1座桥梁(灵昆大桥2535米)/18公里海塘";
 
 // 专项介绍
 var specialDesc = [
     {
         id: 1,
-        title: '支持供水专项',
+        title: '支持供水专项,解决供水问题',
         image: '/img/special/gongshui.jpg',
         desc: '旨在解决供水漏损居高不下经济损失大,地下管网隐患感知不及时,缺乏精准定位,部门联动协同不高效,处置效率低等问题,构建供水安全监测感知网,依托城运中心,围绕保供、安全、节水三个场景,建设供水安全从监测-分析-预警-处置的全过程智能感知、智能分析、智能协同应用。',
     },
     {
         id: 2,
-        title: '支持排水专项',
+        title: '支持排水专项,解决排水问题',
         image: '/img/special/paishui.jpg',
         desc: '为了解决防汛排水压力大,违规排放防控难度大等问题,构建排水安全监测感知网,依托城运中心,围绕污水监测、防汛防台等场景,建设排水从监测-预警-溯源-处置的全过程智能感知、智能分析、智能协同应用。',
     },
     {
         id: 3,
-        title: '支持燃气专项',
+        title: '支持燃气专项,解决燃气问题',
         image: '/img/special/ranqi.jpg',
         desc: '为了解决燃气管网地下隐患不清,泄露定位定位难,燃气终端防控防控难度大,入户沉降等问题,构建燃气安全监测感知网,通过燃气物联设备(阀门)等建设实现全管网的在线实时感知,智能远程启闭控制,进一步提高管线安全运行,保障安全供气。依托城运中心,围绕地下管网泄露、瓶装燃气、地面沉降导致管网风险等场景,建设燃气管网,用气终端,瓶装气从监测-预警-管理-处置的全过程智能感知、智能分析、智能协同应用。',
     },
     {
         id: 4,
-        title: '支持桥梁专项',
+        title: '支持桥梁专项,解决桥梁问题',
         image: '/img/special/qiaoliang.jpg',
         desc: '为了解决灵昆大桥健康监测缺设备,超载治理难处理,巡养防护任务重等问题,构建桥梁安全监测感知网,依托城运中心,围绕桥梁形变、桥梁老化、超载等场景,建设桥梁从监测-预警-养护-超载处置的全过程智能感知、智能分析、智能协同应用。',
     },
     {
         id: 5,
-        title: '支持海塘专项',
+        title: '支持海塘专项,解决海塘问题',
         image: '/img/special/haitang.jpg',
         desc: '为全面贯彻落实全省数字化改革整体部署和水利部智慧水利建设总体要求,保障温州海洋经济示范区人民生命和财产安全,提升人民幸福感。通过海塘安全感知设备迭代升级、海塘安全防潮风险研判建设、环岛水闸防汛调度风险研判建设、数字孪生海塘建设和多跨协同建设五个方面,实现海塘安全预报、预警、预演、预案和跨部门协作的管理能力。',
     },
     {
         id: 6,
-        title: '支持管廊专项',
+        title: '支持管廊专项,解决管廊问题',
         image: '/img/special/guanlang.jpg',
         desc: '拟实时接入现有管廊综合管理系统的管廊结构收敛监测、位移监测和视频监控数据,同步监控管廊健康状况,统筹强化城市基础设施运行风险预警,防范安全事故,统一实现事故协同处置。',
     }

+ 1 - 0
public/index.html

@@ -14,6 +14,7 @@
     <script src="./pluginFiles/plugins/add3DTiles.js" type="text/javascript"></script>
     <script src="./pluginFiles/plugins/water.js" type="text/javascript"></script>
     <script src="./pluginFiles/plugins/singleModelBindClick.js" type="text/javascript"></script>
+    <script src="./pluginFiles/plugins/loadModelBindClick.js" type="text/javascript"></script>
 </head>
 <body>
 <noscript>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 0 - 0
public/pluginFiles/plugins/loadModelBindClick.js


+ 6 - 0
src/api/data/BusinessData.js

@@ -18,9 +18,15 @@ const deleteData = (params) => {
     return request.postForm(constant.dtbserverProxy + '/baseData/deleteBaseDataById', params)
 }
 
+// 根据ID查询业务数据
+const getDataById = (params) => {
+    return request.postForm(constant.dtbserverProxy + '/baseData/getBaseById', params)
+}
+
 export default {
     getData,
     addData,
     updateData,
     deleteData,
+    getDataById,
 }

+ 25 - 4
src/components/dataManage/CategoryMenu.vue

@@ -36,6 +36,13 @@
       <el-form-item label="类别描述:" prop="content">
         <el-input v-model="formData.content" placeholder="请输入类别描述"/>
       </el-form-item>
+      <el-form-item label="地理类型:" prop="geometryType" v-if="isShowGeometryType">
+        <el-select v-model="formData.geometryType" placeholder="请选择地理信息类型">
+          <el-option label="点数据" value="Point"></el-option>
+          <el-option label="线数据" value="LineString"></el-option>
+          <el-option label="面数据" value="Polygon"></el-option>
+        </el-select>
+      </el-form-item>
     </el-form>
     <template #footer>
       <el-button type="primary" @click="addMenu">保存</el-button>
@@ -45,6 +52,7 @@
 
 <script>
 import menuApi from "@/api/data/MenuData";
+import { getCurrentInstance } from "vue";
 
 export default {
   data() {
@@ -62,27 +70,40 @@ export default {
         "content": [
           {required: true, message: '请输入描述', trigger: 'blur'},
           {required: true, message: '请输入描述', trigger: 'change'}
-        ]
-      }
+        ],
+        "geometryType": [
+          {required: true, message: '请选择地理类型', trigger: 'blur'},
+          {required: true, message: '请选择地理类型', trigger: 'change'}
+        ],
+      },
+      isShowGeometryType: false,
     }
   },
   props: {
     type: String,
-    currVal: String,
+    currVal: Object,
   },
   watch: {
   },
   emits: ["update:currVal"],
   setup(props, context) {
+    let app = getCurrentInstance();
     const methods = {
       currChange(index) {
-        context.emit('update:currVal', index)
+        let item = app.data.list.find(i=>i.id==index)
+        if (item) {
+          context.emit('update:currVal', item)
+        }
       },
     }
     return methods;
   },
   created() {
     this.getMenu();
+    let menuId = this.$constant.menuIds[this.type];
+    if ([1,3].indexOf(Number(menuId))>-1) {
+      this.isShowGeometryType = true;
+    }
   },
   mounted() {
   },

+ 8 - 4
src/components/dataManage/dataDetail/BusinessDataDetail.vue

@@ -18,7 +18,7 @@
           <el-input v-model="formData.content" placeholder="请输入描述" :disabled="formData.isDataView" />
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView" >
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="true" >
             <el-option
                 v-for="item in category"
                 :key="item.id"
@@ -30,14 +30,14 @@
         <el-form-item label="地理信息:" prop="geometryStr" >
           <el-input v-model="formData.geometryStr" placeholder="请设置地理信息" :disabled="true" >
             <template #prepend>
-              <el-button @click="handleMapShow(true)">
+              <el-button @click="handleMapShow(true)" class="inputButtonStyle">
                 <span v-if="formData.isDataView">查看</span>
                 <span v-else>设置</span>
                 地理信息
               </el-button>
             </template>
             <template #append>
-              <el-button @click="handleJsonDataView(true)">
+              <el-button @click="handleJsonDataView(true)" class="inputButtonStyle">
                 查看GeoJson
               </el-button>
             </template>
@@ -56,7 +56,7 @@
   <OlMap v-if="isMapShow"
          :is-show="isMapShow"
          :is-view="formData.isDataView"
-         :menuId="formData.menuId"
+         :type="currCategory.geometryType"
          :geometryStr="formData.geometryStr"
          :callback="setMapData"
          :close="handleMapShow">
@@ -110,6 +110,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -118,6 +119,9 @@ export default {
   mounted() {
     this.getMenuData()
     this.formData = this.item;
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {

+ 1 - 0
src/components/dataManage/dataDetail/HighOptionData.vue

@@ -54,6 +54,7 @@ export default {
     }
   },
   mounted() {
+    this.callBack(JSON.stringify(this.covertProperties()));
   },
   watch: {
 

+ 7 - 3
src/components/dataManage/dataDetail/IotDataDetail.vue

@@ -25,14 +25,14 @@
         <el-form-item label="媒体地址:" prop="url" style="width: 100%">
           <el-input v-model="formData.modelUrl" placeholder="请输入媒体地址" :disabled="formData.isDataView">
             <template #append>
-              <el-button @click="handleMapShow(true)">
+              <el-button @click="handleMapShow(true)" class="inputButtonStyle">
                 预览
               </el-button>
             </template>
           </el-input>
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView">
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="true">
             <el-option
                 v-for="item in category"
                 :key="item.id"
@@ -83,7 +83,7 @@
          :is-show="isLonLatShow"
          :is-view="formData.isDataView"
          :geometry-str="formData.geometryStr"
-         :menuId="1"
+         :type="'Point'"
          :callback="setLonLatData"
          :close="handleLonlatSelect">
   </OlMap>
@@ -157,6 +157,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -165,6 +166,9 @@ export default {
   mounted() {
     this.getMenuData();
     this.formData = this.item;
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {

+ 5 - 3
src/components/dataManage/dataDetail/MetaDataDetail.vue

@@ -19,7 +19,7 @@
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
           <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect"
-                     :disabled="formData.isDataView">
+                     :disabled="true">
             <el-option
                 v-for="item in category"
                 :key="item.value"
@@ -63,8 +63,6 @@
 </template>
 
 <script>
-import OlMap from "@/components/map/OlMap";
-import JsonDataView from "@/components/json/JsonDataView";
 import api from "@/api/data/MetaData";
 import menuApi from "@/api/data/MenuData";
 import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
@@ -129,6 +127,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -139,6 +138,9 @@ export default {
   mounted() {
     this.getMenuData()
     this.formData = this.item;
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {

+ 7 - 3
src/components/dataManage/dataDetail/ModelDataDetail.vue

@@ -22,7 +22,7 @@
           <el-input v-model="formData.modelType" placeholder="请输入类型" :disabled="formData.isDataView"/>
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView">
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="true">
             <el-option
                 v-for="item in category"
                 :key="item.id"
@@ -49,7 +49,7 @@
         <el-form-item label="模型数据:" prop="url" style="width: 100%">
           <el-input v-model="formData.url" placeholder="请设置模型地址" :disabled="formData.isDataView">
             <template #append>
-              <el-button @click="handleMapShow(true)">
+              <el-button @click="handleMapShow(true)" class="inputButtonStyle">
                 查看模型
               </el-button>
             </template>
@@ -76,7 +76,7 @@
          :is-show="isLonLatShow"
          :is-view="formData.isDataView"
          :geometry-str="formData.geometryStr"
-         :menuId="1"
+         :type="'Point'"
          :callback="setLonLatData"
          :close="handleLonlatSelect">
   </OlMap>
@@ -151,6 +151,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -159,6 +160,9 @@ export default {
   mounted() {
     this.getMenuData();
     this.formData = this.item;
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {

+ 10 - 4
src/components/dataManage/dataDetail/ThreeDimensionalDataDetail.vue

@@ -22,7 +22,7 @@
           <el-input v-model="formData.modelType" placeholder="请输入类型" :disabled="formData.isDataView"/>
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView">
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="true">
             <el-option
                 v-for="item in category"
                 :key="item.id"
@@ -53,12 +53,12 @@
         <el-form-item label="地理信息:" prop="geometryStr" style="width: 83%">
           <el-input v-model="formData.geometryStr" placeholder="请输入geometry" :disabled="formData.isDataView">
             <template #prepend>
-              <el-button @click="handleJsonDataView(true, formData.geometryStr)">
+              <el-button @click="handleJsonDataView(true, formData.geometryStr)" class="inputButtonStyle">
                 格式化
               </el-button>
             </template>
             <template #append>
-              <el-button @click="handleMapShow(true)">
+              <el-button @click="handleMapShow(true)" class="inputButtonStyle">
                 预览
               </el-button>
             </template>
@@ -88,7 +88,7 @@
          :is-show="isLonLatShow"
          :is-view="formData.isDataView"
          :geometry-str="formData.geometryStr"
-         :menuId="1"
+         :type="'Point'"
          :callback="setLonLatData"
          :close="handleLonlatSelect">
   </OlMap>
@@ -164,6 +164,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -174,6 +175,9 @@ export default {
     if (this.formData.geometry && this.formData.geometry!='') {
       this.formData.geometryStr = JSON.stringify(this.formData.geometry)
     }
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {
@@ -267,6 +271,7 @@ export default {
       let params = JSON.parse(JSON.stringify(app.formData));
       params['menuNameOne'] = '模型数据'
       params['userName'] = app.$store.state.userInfo.username;
+      delete params.geometry;
       api.addData(params).then(res => {
         if (res.code === 200) {
           app.$message({message: '录入成功', type: 'success'})
@@ -280,6 +285,7 @@ export default {
       let params = JSON.parse(JSON.stringify(app.formData));
       delete params.createDate;
       delete params.updateDate;
+      delete params.geometry;
       params['userName'] = app.$store.state.userInfo.username;
       api.updateData(params).then(res => {
         if (res.code === 200) {

+ 9 - 4
src/components/dataManage/dataDetail/TwoDimensionalDataDetail.vue

@@ -18,7 +18,7 @@
           <el-input v-model="formData.content" placeholder="请输入描述" :disabled="formData.isDataView" />
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView" >
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="true" >
             <el-option
                 v-for="item in category"
                 :key="item.id"
@@ -30,14 +30,14 @@
         <el-form-item label="地理信息:" prop="geometryStr" >
           <el-input v-model="formData.geometryStr" placeholder="请设置地理信息" :disabled="true" >
             <template #prepend>
-              <el-button @click="handleMapShow(true)">
+              <el-button @click="handleMapShow(true)" type="primary" class="inputButtonStyle">
                 <span v-if="formData.isDataView">查看</span>
                 <span v-else>设置</span>
                 地理信息
               </el-button>
             </template>
             <template #append>
-              <el-button @click="handleJsonDataView(true)">
+              <el-button @click="handleJsonDataView(true)" class="inputButtonStyle">
                 查看GeoJson
               </el-button>
             </template>
@@ -56,7 +56,7 @@
     <OlMap v-if="isMapShow"
            :is-show="isMapShow"
            :is-view="formData.isDataView"
-           :menuId="formData.menuId"
+           :type="currCategory.geometryType"
            :geometryStr="formData.geometryStr"
            :callback="setMapData"
            :close="handleMapShow">
@@ -110,6 +110,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    currCategory: Object,
     close: Function
   },
   watch: {
@@ -117,6 +118,10 @@ export default {
   mounted() {
     this.getMenuData()
     this.formData = this.item;
+    if (!this.formData.menuId || this.formData.menuId == '') {
+      this.formData.menuId = this.currCategory.id
+    }
+    this.formData.menuId = this.currCategory.id
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {

+ 12 - 9
src/components/dataManage/dataShow/BusinessData.vue

@@ -1,7 +1,7 @@
 <!-- 业务数据 -->
 <template>
   <CategoryMenu :type="'business'" v-model:currVal="currCategory"></CategoryMenu>
-  <div v-if="currCategory && currCategory!==''" class="data">
+  <div v-if="currCategory.id && currCategory.id !== ''" class="data">
     <el-button v-if="auth" type="primary" @click="addDataClick">录入业务数据</el-button>
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
@@ -89,7 +89,7 @@
     </div>
   </div>
 
-  <BusinessDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></BusinessDataDetail>
+  <BusinessDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory" :close="handleDetailShow"></BusinessDataDetail>
 </template>
 
 <script>
@@ -112,7 +112,9 @@ export default {
         total: 0,
       },
 
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
     }
@@ -144,7 +146,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -169,12 +171,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -214,7 +216,8 @@ export default {
     // 批量删除数据
     batchDelete() {
       let app = this;
-      if (!this.selectedRows) {
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
@@ -224,7 +227,7 @@ export default {
     viewData(item) {
       let app = this;
       let params = {
-        latlonDataId: item.id
+        baseId: item.id
       }
       app.$util.loading.handleLoading(true);
       api.getDataById(params).then(res=>{
@@ -249,7 +252,7 @@ export default {
     editData(item) {
       let app = this;
       let params = {
-        latlonDataId: item.id
+        baseId: item.id
       }
       app.$util.loading.handleLoading(true);
       api.getDataById(params).then(res=>{

+ 36 - 9
src/components/dataManage/dataShow/IotData.vue

@@ -1,9 +1,10 @@
 <!-- 物联感知数据 -->
 <template>
   <CategoryMenu :type="'iot'" v-model:currVal="currCategory"></CategoryMenu>
-  <div class="data" v-if="currCategory && currCategory!==''">
+  <div class="data" v-if="currCategory.id && currCategory.id!==''">
     <el-button v-if="auth" type="primary" @click="addDataClick">录入物联感知数据</el-button>
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
+    <el-button v-if="auth && isAllView" type="info" @click="handleAllGltfView">全部预览</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
         <el-form-item label="标题:" style="width: 22%">
@@ -42,7 +43,7 @@
         <el-table-column prop="content" label="描述" width="250"/>
         <el-table-column prop="menuNameTwo" label="类别" width="80"/>
         <el-table-column prop="mediaType" label="媒体类型" width="120"/>
-        <el-table-column prop="url" label="媒体路径" width="120"/>
+        <el-table-column prop="modelUrl" label="媒体路径" width="230"/>
         <el-table-column prop="lon" label="位置" width="180">
           <template #default="scope">
             [
@@ -103,13 +104,22 @@
     </div>
   </div>
 
-  <IotDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></IotDataDetail>
+  <IotDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory" :close="handleDetailShow"></IotDataDetail>
+
+  <CesiumMap v-if="isMapShow"
+             :is-show="isMapShow"
+             :item="mapUrl"
+             :extra-params="extraParams"
+             :type="mapType"
+             :close="()=>{this.isMapShow=false}">
+  </CesiumMap>
 </template>
 
 <script>
 import api from '@/api/data/IotData'
 import IotDataDetail from "@/components/dataManage/dataDetail/IotDataDetail";
 import CategoryMenu from "@/components/dataManage/CategoryMenu";
+import CesiumMap from "@/components/map/CesiumMap.vue";
 
 export default {
   data() {
@@ -126,14 +136,23 @@ export default {
         total: 0,
       },
 
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
+
+      isAllView: false,
+      isMapShow: false,
+      mapUrl: '',
+      extraParams: {},
+      mapType: 33,
     }
   },
   components: {
     IotDataDetail,
     CategoryMenu,
+    CesiumMap,
   },
   created() {
     let userInfo = this.$store.state.userInfo;
@@ -158,7 +177,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -183,12 +202,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -198,6 +217,7 @@ export default {
         if (res.code === 200) {
           app.pageInfo.total = res.total;
           app.tableData = res.content
+          app.isAllView = res.total>0 && res.content[0].menuNameTwo==='视频点位';
         }
         app.handleLoading(false)
       }).catch(err => {
@@ -228,7 +248,8 @@ export default {
     // 批量删除数据
     batchDelete() {
       let app = this;
-      if (!this.selectedRows) {
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
@@ -263,7 +284,7 @@ export default {
     editData(item) {
       let app = this;
       let params = {
-        latlonDataId: item.id
+        IOTDataId: item.id
       }
       app.$util.loading.handleLoading(true);
       api.getDataById(params).then(res=>{
@@ -297,6 +318,12 @@ export default {
         })
       })
     },
+    handleAllGltfView() {
+      this.mapUrl = this.$constant.dtbserverProxy+'/iotData/selectIOTDataData?page=0&pageSize=9999&menuId='+this.currCategory.id;
+      this.extraParams.lon = this.tableData[0].lon
+      this.extraParams.lat = this.tableData[0].lat
+      this.isMapShow = true;
+    }
   }
 }
 </script>

+ 11 - 7
src/components/dataManage/dataShow/MetaData.vue

@@ -1,7 +1,7 @@
 <!-- 业务数据 -->
 <template>
   <CategoryMenu :type="'meta'" v-model:currVal="currCategory"></CategoryMenu>
-  <div class="data" v-if="currCategory && currCategory!==''">
+  <div class="data" v-if="currCategory.id && currCategory.id!==''">
     <el-button v-if="auth"  type="primary" @click="addDataClick">录入元数据</el-button>
     <el-button v-if="auth"  type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
@@ -88,7 +88,7 @@
     </div>
   </div>
 
-  <MetaDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></MetaDataDetail>
+  <MetaDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory" :close="handleDetailShow"></MetaDataDetail>
 </template>
 
 <script>
@@ -111,7 +111,9 @@ export default {
         pageSize: 10,
         total: 0,
       },
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
     }
@@ -143,7 +145,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -168,12 +170,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -212,7 +214,9 @@ export default {
     },
     // 批量删除数据
     batchDelete() {
-      if (!this.selectedRows) {
+      let app = this;
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');

+ 11 - 7
src/components/dataManage/dataShow/ModelData.vue

@@ -1,7 +1,7 @@
 <!-- 模型数据 -->
 <template>
   <CategoryMenu :type="'model'" v-model:currVal="currCategory"></CategoryMenu>
-  <div class="data" v-if="currCategory && currCategory!==''">
+  <div class="data" v-if="currCategory.id && currCategory.id!==''">
     <el-button v-if="auth"  type="primary" @click="addDataClick">录入模型数据</el-button>
     <el-button v-if="auth"  type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
@@ -98,7 +98,7 @@
     </div>
   </div>
 
-  <ModelDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></ModelDataDetail>
+  <ModelDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory" :close="handleDetailShow"></ModelDataDetail>
 </template>
 
 <script>
@@ -121,7 +121,9 @@ export default {
         total: 0,
       },
 
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
     }
@@ -153,7 +155,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -178,12 +180,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -222,7 +224,9 @@ export default {
     },
     // 批量删除数据
     batchDelete() {
-      if (!this.selectedRows) {
+      let app = this;
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');

+ 11 - 7
src/components/dataManage/dataShow/ThreeDimensionalData.vue

@@ -2,7 +2,7 @@
 <template>
   <CategoryMenu :type="'threeD'" v-model:currVal="currCategory"></CategoryMenu>
 
-  <div class="data" v-if="currCategory && currCategory!==''">
+  <div class="data" v-if="currCategory.id && currCategory.id!==''">
     <el-button v-if="auth" type="primary" @click="addDataClick">录入三维数据</el-button>
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
@@ -99,7 +99,7 @@
     </div>
   </div>
 
-  <ThreeDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow"
+  <ThreeDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory"
                               :close="handleDetailShow"></ThreeDimensionalDataDetail>
 </template>
 
@@ -123,7 +123,9 @@ export default {
         total: 0,
       },
 
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
     }
@@ -155,7 +157,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -180,12 +182,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory !== '')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -224,7 +226,9 @@ export default {
     },
     // 批量删除数据
     batchDelete() {
-      if (!this.selectedRows) {
+      let app = this;
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i => {

+ 10 - 7
src/components/dataManage/dataShow/TwoDimensionalData.vue

@@ -2,7 +2,7 @@
 <template>
   <CategoryMenu :type="'twoD'" v-model:currVal="currCategory" ></CategoryMenu>
 
-  <div v-if="currCategory && currCategory!==''" class="data">
+  <div v-if="currCategory.id && currCategory.id!==''" class="data">
     <el-button v-if="auth" type="primary" @click="addDataClick">录入二维数据</el-button>
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button><br>
     <div class="operation">
@@ -90,7 +90,7 @@
     </div>
   </div>
 
-  <TwoDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></TwoDimensionalDataDetail>
+  <TwoDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :curr-category="currCategory" :close="handleDetailShow"></TwoDimensionalDataDetail>
 </template>
 
 <script>
@@ -114,7 +114,9 @@ export default {
         total: 0,
       },
 
-      currCategory: '',
+      currCategory: {
+        id: ''
+      },
 
       isDetailShow: false,
     }
@@ -146,7 +148,7 @@ export default {
         app.pageInfo.page = 1;
       }, 50)
     },
-    "currCategory": function () {
+    "currCategory.id": function () {
       this.resetCategory();
       this.getData();
     }
@@ -171,12 +173,12 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (app.currCategory && (!app.currCategory.id || app.currCategory.id==='')) {
         return;
       }
       app.tableData = [];
       let params = {
-        menuId: app.currCategory,
+        menuId: app.currCategory.id,
         page: app.pageInfo.page,
         pageSize: app.pageInfo.pageSize,
       }
@@ -216,7 +218,8 @@ export default {
     // 批量删除数据
     batchDelete() {
       let app = this;
-      if (!this.selectedRows) {
+      if (!this.selectedRows || this.selectedRows.length===0) {
+        app.$message({message:'请选择数据', type: 'warning'})
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');

+ 22 - 8
src/components/home/HomeIndex.vue

@@ -14,7 +14,7 @@
             </div>
           </template>
           <div>
-            <el-scrollbar :style="cardBodyStyle">
+            <el-scrollbar :style="cardBodyStyle" style="padding-right: 5px">
               &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
               {{ platDesc }}
             </el-scrollbar>
@@ -43,7 +43,12 @@
             </div>
             <el-scrollbar :style="cardBodyStyle" style="display: inline-block; width: 55%;padding: 0px 2%">
               <div class="specialIntroduceRight">
-                <el-link @click="showSpecialDetail(item)" v-for="(item, index) in specialDesc" :key="index">{{item.title}}</el-link><br/>
+                <el-link style="display: block;font-size: 16px;margin-left: 10%;margin-bottom: 1%"
+                         @click="showSpecialDetail(item)"
+                         v-for="(item, index) in specialDesc" :key="index"
+                         :underline="false">
+                  {{item.title}}
+                </el-link>
               </div>
             </el-scrollbar>
           </div>
@@ -115,7 +120,7 @@
             </div>
           </template>
           <div>
-            <div id="system-overview-data-percent" style="width: 100%;height: 100%;"></div>
+            <div id="system-overview-data-percent" style="width: 100%;" :style="{height: cardBodyStyle.height}" ></div>
           </div>
         </el-card>
       </el-col>
@@ -166,7 +171,7 @@ export default {
         'padding-bottom': '15px'
       },
       cardBodyStyle: {
-        height: ''
+        height: '100px'
       },
       systemOverviewOptions: {
         dataDetail: {
@@ -218,15 +223,24 @@ export default {
     }
     this.cardStyle.height = height+'px';
     this.cardBodyStyle.height = height*0.6 + 'px';
-    this.mycharts = this.$echarts.init(document.getElementById('system-overview-data-percent'))
-    this.mycharts.setOption(this.systemOverviewOptions.dataDetail)
-    this.getDataSum();
+    // this.mycharts = this.$echarts.init(document.getElementById('system-overview-data-percent'))
+    // this.mycharts.setOption(this.systemOverviewOptions.dataDetail)
     this.currTime = this.$util.datetime.format(this.$util.datetime.nowTimestamp())
     let app = this;
     this.timer = setInterval(() => {
       app.currTime = app.$util.datetime.format(app.$util.datetime.nowTimestamp())
     }, 1000)
   },
+  watch: {
+    "cardBodyStyle.height": function () {
+      let app = this;
+      setTimeout(function () {
+        app.mycharts = app.$echarts.init(document.getElementById('system-overview-data-percent'))
+        app.getDataSum();
+      },100)
+
+    }
+  },
   methods: {
     showSpecialDetail(item) {
       this.currSpecial = item;
@@ -344,7 +358,7 @@ export default {
   display: inline-block;
 }
 .specialIntroduceRight {
-  width: 50%;
+  width: 90%;
   display: inline-block;
   vertical-align: top;
 }

+ 21 - 1
src/components/map/CesiumMap.vue

@@ -74,7 +74,7 @@ export default {
     isShow: Boolean,
     item: String,
     extraParams: Object,
-    type: Number, // 1-GeoJson、2-3DTiles、3-Gltf、4-水面、5-glb
+    type: Number, // 1-GeoJson、2-3DTiles、3-Gltf、33-Gltf、4-水面
     close: Function
   },
   watch: {
@@ -120,6 +120,10 @@ export default {
       if (type === 3) {
         app.addGltf(app.item)
       }
+      // 批量加载gltf
+      if (type === 33) {
+        app.addGltfs(app.item)
+      }
       // 加载水面
       if (type === 4) {
         app.addWater(app.item)
@@ -204,6 +208,22 @@ export default {
         app.isMessageShow = true
       })
     },
+    addGltfs(url) {
+      let app = this;
+      let modelObj = new SkyScenery.loadModelBindClick(viewer, {
+        url: url,
+        token: app.$store.state.token
+      })
+      let origin = SkyScenery.Cartesian3.fromDegrees(this.extraParams.lon, this.extraParams.lat, 2);
+      viewer.camera.flyTo({
+        destination: origin,
+        orientation: {
+          heading: SkyScenery.Math.toRadians(0), // 方向
+          pitch: SkyScenery.Math.toRadians(-90), // 倾斜角度
+          roll: SkyScenery.Math.toRadians(0),
+        },
+      });
+    },
     // 添加水面
     addWater(url) {
       let water = SkyScenery.WaterFromRequest(url, {

+ 12 - 17
src/components/map/OlMap.vue

@@ -39,16 +39,9 @@ export default {
   data() {
     return {
       map: null,
-      type: '',
+      drawType: '',
       geometry: {},
-      category: {
-        1: 'Point',
-        2: 'LineString',
-        3: 'Polygon',
-        7: 'MultiPoint',
-        8: 'MultiLineString',
-        9: 'MultiPolygon'
-      },
+      category: '',
       drawStyle: new Style.Style({
         // 将点设置成圆形样式
         image: new Style.Circle({
@@ -74,7 +67,7 @@ export default {
   },
   props: {
     isShow: Boolean,
-    menuId: Number,
+    type: String,
     geometryStr: String,
     isView: Boolean,
     callback: Function,
@@ -95,8 +88,10 @@ export default {
     if (app.geometryStr) {
       app.geometry = JSON.parse(app.geometryStr)
     }
-    if (app.menuId) {
-      app.type = app.category[app.menuId]
+    if (!app.isView && app.type && app.type!=='') {
+      app.drawType = app.type;
+    } else {
+      app.drawType = 'Point'
     }
   },
   methods: {
@@ -135,8 +130,8 @@ export default {
         source: new Source.Vector()
       });
       app.map.addLayer(app.markerLayer)
-      if (!app.isView && app.type && app.type!=='') {
-        app.draw(app.type);
+      if (!app.isView && app.drawType && app.drawType!=='') {
+        app.draw(app.drawType);
       }
       if (app.geometry && app.geometry.type) {
         let feature = new GeoJSON().readFeature(app.geometry);
@@ -160,9 +155,9 @@ export default {
       })
       app.map.addInteraction(app.draw)
       app.draw.on('drawend', e=>{
-        if (app.menuId<7) {
-          app.clearMapDraw();
-        }
+        // if (app.type.indexOf('Multi')!=0) {
+        //   app.clearMapDraw();
+        // }
         e.feature.setStyle(app.drawStyle);
       })
     },

+ 2 - 2
src/components/systemManage/SystemLogs.vue

@@ -42,8 +42,8 @@
       <el-table-column prop="content" label="内容"/>
       <el-table-column prop="state" label="状态">
         <template #default="scope">
-          <span v-if="scope.row.state===1">成功</span>
-          <span v-else-if="scope.row.state===2">失败</span>
+          <span v-if="scope.row.state==1">成功</span>
+          <span v-else-if="scope.row.state==2">失败</span>
           <span v-else></span>
         </template>
       </el-table-column>

+ 6 - 6
src/static/datas/ServiceData.json

@@ -2,7 +2,7 @@
   {
     "serviceName": "二维数据服务",
     "authKey": "DTB-DATAPUBLISH-TWOD",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供二维数据相关管理接口",
     "interfaces": {
       "查询二维数据": {
@@ -290,7 +290,7 @@
   {
     "serviceName": "三维数据服务",
     "authKey": "DTB-DATAPUBLISH-THREED",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供三维数据相关管理接口",
     "interfaces": {
       "查询三维数据": {
@@ -560,7 +560,7 @@
   {
     "serviceName": "业务数据服务",
     "authKey": "DTB-DATAPUBLISH-BASEDATA",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供业务数据相关管理接口",
     "interfaces": {
       "查询业务数据": {
@@ -836,7 +836,7 @@
   {
     "serviceName": "模型数据服务",
     "authKey": "DTB-DATAPUBLISH-MODEL",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供模型数据相关管理接口",
     "interfaces": {
       "查询模型数据": {
@@ -1142,7 +1142,7 @@
   {
     "serviceName": "元数据服务",
     "authKey": "DTB-DATAPUBLISH-METADATA",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供元数据相关管理接口",
     "interfaces": {
       "查询元数据": {
@@ -1412,7 +1412,7 @@
   {
     "serviceName": "物联感知数据服务",
     "authKey": "DTB-DATAPUBLISH-IOTDATA",
-    "url": "http://localhost:8080",
+    "url": "http://122.228.28.40:10091/dtb",
     "desc": "提供物联感知数据相关管理接口",
     "interfaces": {
       "查询物联感知数据": {

+ 5 - 1
src/utils/request.js

@@ -32,7 +32,11 @@ service.interceptors.response.use(response => {
     } else if (code && userFailCodes.indexOf(code) > -1) {
         context.config.globalProperties.$message({ message: '用户状态失效,请联系管理员', type: 'error' })
     } else if (code && noDataCodes.indexOf(code) > -1) {
-        context.config.globalProperties.$message({ message: '未查询到相关数据', type: 'warning' })
+        let msg = '未查询到相关数据'
+        if (response.data.message && response.data.message!=='') {
+            msg = response.data.message
+        }
+        context.config.globalProperties.$message({ message: msg, type: 'warning' })
     } else if (code && code !== 200) {
         context.config.globalProperties.$message({ message: response.data.content || '请求出错', type: 'error' })
     }

+ 22 - 15
src/views/HomeView.vue

@@ -8,10 +8,10 @@
       </div>
       <div class="loginForm" v-else>
         <span class="formLabel">用户名:</span>
-        <input class="formInput" type="text" v-model="loginForm.userName" placeholder="请输入用户名"/>
+        <el-input class="formInput" :input-style="{'letter-spacing':'2px'}" size="small" type="text" v-model="loginForm.userName" placeholder="请输入用户名"/>
         &nbsp;&nbsp;
         <span class="formLabel">密&nbsp;&nbsp;码:</span>
-        <input class="formInput" type="password" v-model="loginForm.password" placeholder="请输入密码"/>
+        <el-input class="formInput" :input-style="{'letter-spacing':'2px'}" size="small" type="password" v-model="loginForm.password" placeholder="请输入密码" show-password/>
         &nbsp;&nbsp;
         <el-button type="warning" @click="login" size="small">登录</el-button>
       </div>
@@ -228,22 +228,24 @@ export default {
 }
 
 .loginForm .formInput {
-  margin-right: 5px;
-  border-color: transparent;
-  border-radius: 3px;
-  height: 20px;
-  color: white;
-  padding-left: 6px;
-  background: rgba(255, 255, 255, 0.3);
+  display: inline-block;
+  width: 30%;
+  /*margin-right: 5px;*/
+  /*border-color: transparent;*/
+  /*border-radius: 3px;*/
+  /*height: 20px;*/
+  /*color: white;*/
+  /*padding-left: 6px;*/
+  /*background: rgba(255, 255, 255, 0.3);*/
 }
 
-.loginForm .formInput:hover {
-  background-color: rgba(255, 255, 255, 0.6);
-}
+/*.loginForm .formInput:hover {*/
+/*  background-color: rgba(255, 255, 255, 0.6);*/
+/*}*/
 
-.loginForm .formInput:focus {
-  outline: 1px solid rgba(255, 255, 255, 0.6);
-}
+/*.loginForm .formInput:focus {*/
+/*  outline: 1px solid rgba(255, 255, 255, 0.6);*/
+/*}*/
 
 
 .logout {
@@ -302,4 +304,9 @@ export default {
 .el-menu .is-active {
   color: #6566f4 !important;
 }
+.inputButtonStyle {
+  border: 1px solid #6566F480 !important;
+  background-color: white !important;
+  color: #6566f4 !important;
+}
 </style>

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott