tianyabing 2 жил өмнө
parent
commit
f0fd7bff2b
36 өөрчлөгдсөн 1942 нэмэгдсэн , 369 устгасан
  1. 1 0
      .eslintrc.js
  2. 4 0
      public/config.js
  3. 12 1
      src/api/data/AuthInfo.js
  4. 28 6
      src/api/data/ImportData.js
  5. 7 0
      src/api/data/MenuData.js
  6. 1 1
      src/api/data/SystemInfo.js
  7. 1 1
      src/api/data/ThreeDimensionalData.js
  8. 63 1
      src/components/dataManage/CategoryMenu.vue
  9. 86 63
      src/components/dataManage/ImportData.vue
  10. 3 3
      src/components/dataManage/dataDetail/BusinessDataDetail.vue
  11. 15 5
      src/components/dataManage/dataDetail/HighOptionData.vue
  12. 37 16
      src/components/dataManage/dataDetail/ThreeDimensionalDataDetail.vue
  13. 1 1
      src/components/dataManage/dataDetail/TwoDimensionalDataDetail.vue
  14. 12 21
      src/components/dataManage/dataShow/BusinessData.vue
  15. 12 21
      src/components/dataManage/dataShow/IotData.vue
  16. 11 10
      src/components/dataManage/dataShow/MetaData.vue
  17. 11 10
      src/components/dataManage/dataShow/ModelData.vue
  18. 25 21
      src/components/dataManage/dataShow/ThreeDimensionalData.vue
  19. 13 20
      src/components/dataManage/dataShow/TwoDimensionalData.vue
  20. 151 64
      src/components/dataPublish/PublishDetail.vue
  21. 20 13
      src/components/home/DataManage.vue
  22. 8 3
      src/components/home/DataPublish.vue
  23. 16 12
      src/components/home/SystemManage.vue
  24. 6 1
      src/components/json/JsonDataView.vue
  25. 24 4
      src/components/map/CesiumMap.vue
  26. 5 1
      src/components/systemManage/AuthManage.vue
  27. 40 0
      src/components/systemManage/InterfaceAuth.vue
  28. 35 0
      src/components/systemManage/InterfaceMonitor.vue
  29. 7 6
      src/components/systemManage/SystemLogs.vue
  30. 94 6
      src/components/systemManage/UserManage.vue
  31. 1147 27
      src/static/datas/ServiceData.json
  32. 1 0
      src/store/state.js
  33. 2 2
      src/utils/constant.js
  34. 1 1
      src/utils/request.js
  35. 28 14
      src/views/HomeView.vue
  36. 14 14
      vue.config.js

+ 1 - 0
.eslintrc.js

@@ -16,5 +16,6 @@ module.exports = {
     "no-unused-vars": 'off',
     "vue/no-unused-components": "off",
     "no-undef": "off",
+    "no-empty": "off",
   }
 }

+ 4 - 0
public/config.js

@@ -1,4 +1,8 @@
 var systemConfig = {
     // 天地图tk
     tdt_tk: 'b57488e37657af2abde80438a911a635',
+    // dtbServer 服务地址
+    base_url: 'http://121.43.55.7:10091/dtbservice',
+    // oauth 服务地址
+    oauth_url: 'http://121.43.55.7:8888/oauth',
 }

+ 12 - 1
src/api/data/AuthInfo.js

@@ -3,24 +3,35 @@ import constant from "@/utils/constant";
 
 // 查询所有用户信息
 const getUserList = (params) => {
+    params['serviceId'] = constant.serviceId;
     return request.postForm(constant.oauthProxy + '/user/getAllUser', params)
 }
 // 查询当前系统普通角色
 const getRoleList = (params) => {
+    params['serviceId'] = constant.serviceId;
     return request.postForm(constant.oauthProxy + '/role/getRoleByServiceId', params);
 }
 // 查询当前系统所有权限
 const getAuthList = (params) => {
+    params['serviceId'] = constant.serviceId;
     return request.postForm(constant.oauthProxy + '/permission/getPermissionTreeByServiceId', params);
 }
 // 更新当前角色权限
-const updateRoleAuth = (params) =>{
+const updateRoleAuth = (params) => {
+    params['serviceId'] = constant.serviceId;
     return request.postForm(constant.oauthProxy + '/role/updateRolePermission', params);
 }
 
+// 修改用户角色
+const updateUserRole = (params) => {
+    params['serviceId'] = constant.serviceId;
+    return request.postForm(constant.oauthProxy + '/user/updateUserRoles', params);
+}
+
 export default {
     getUserList,
     getRoleList,
     getAuthList,
     updateRoleAuth,
+    updateUserRole,
 }

+ 28 - 6
src/api/data/ImportData.js

@@ -2,15 +2,37 @@ import request from "@/utils/request";
 import constant from "@/utils/constant";
 import {ElMessage} from "element-plus";
 
-// 导入二维数据-Shape
-const importTwoDData = (params, type) => {
-    if (type==='Shape') {
-        return request.postWithFile(constant.dtbserverProxy + '/latlon/addDataForShapeZip', params)
+// 导入数据
+const importData = (params, type) => {
+    if (type === 'Excel') {
+        return importExcel(params);
+    } else if (type === 'Shape') {
+        return importShape(params);
+    } else if (type === 'GeoJson') {
+        return importGeoJson(params);
     } else {
-        return request.postWithFile(constant.dtbserverProxy + '/latlon/addDataForShapeZip', params)
+        return new Promise((resolve, reject) => {reject()})
     }
 }
 
+// 导入Excel数据
+const importExcel = (params) => {
+    return request.postWithFile(constant.dtbserverProxy + '/file/addDataForExcel', params)
+}
+
+// 导入SHAPE数据
+const importShape = (params) => {
+    return request.postWithFile(constant.dtbserverProxy + '/file/addDataForShapeZip', params)
+}
+
+// 导入GeoJson数据
+const importGeoJson = (params) => {
+    return request.postWithFile(constant.dtbserverProxy + '/file/addDataForGeojson', params)
+}
+
 export default {
-    importTwoDData,
+    importData,
+    // importExcel,
+    // importGeoJson,
+    // importShape
 }

+ 7 - 0
src/api/data/MenuData.js

@@ -1,6 +1,7 @@
 import request from "@/utils/request";
 import constant from "@/utils/constant";
 
+// 获取目录数据
 const getMenuData = (params) => {
     if (!params.parentId) {
         return new Promise((resolve, reject) => {resolve({})});
@@ -8,6 +9,12 @@ const getMenuData = (params) => {
     return request.postForm(constant.dtbserverProxy + '/menu/getMenuDataList', params)
 }
 
+// 新增类别
+const addMenuData = (params) => {
+    return request.postForm(constant.dtbserverProxy + '/menu/addMenuData', params)
+}
+
 export default {
     getMenuData,
+    addMenuData,
 }

+ 1 - 1
src/api/data/SystemInfo.js

@@ -3,7 +3,7 @@ import constant from "@/utils/constant";
 
 // 分页查询系统日志
 const getLogData = (params) => {
-    return request.postForm(constant.oauthProxy + '/record/getRecord', params);
+    return request.postForm(constant.oauthProxy + '/record/getRecordByServiceId', params);
 }
 
 export default {

+ 1 - 1
src/api/data/ThreeDimensionalData.js

@@ -19,7 +19,7 @@ const updateData = (params) => {
 }
 // 删除三维数据
 const deleteData = (params) => {
-    return request.postForm(constant.dtbserverProxy + '/threeD/deleteThreeDData/', params)
+    return request.postForm(constant.dtbserverProxy + '/threeD/deleteThreeDData', params)
 }
 
 export default {

+ 63 - 1
src/components/dataManage/CategoryMenu.vue

@@ -1,6 +1,13 @@
 <template>
   <div id="CategoryMenu" v-loading="loading">
-    <div style="margin: 0 auto;margin-bottom: 5px">数据类别:</div>
+    <div style="margin: 0 auto;margin-bottom: 5px">
+      <span>数据类别:</span>
+      <span style="float: right;margin-right: 10px;cursor: pointer" title="添加类别" @click="handleAddShow">
+        <el-icon>
+          <ElIconPlus />
+        </el-icon>
+      </span>
+    </div>
     <el-menu :default-active="firstOption" class="Category-menu" @select="currChange">
       <el-menu-item v-for="item in list" :key=item.id :index="item.id+''" >
         <el-icon>
@@ -15,6 +22,25 @@
     </el-menu>
     <el-empty v-if="!list || list.length<1" :description="'无类别'" ></el-empty>
   </div>
+  <el-dialog v-if="isAddShow"
+             :model-value="isAddShow"
+             title="添加类别"
+             :width="600"
+             :close-on-click-modal="false"
+             :before-close="handleAddClose"
+  >
+    <el-form :model="formData" :rules="formDataRules" ref="formData" style="width: 80%;margin: 30px auto 0 auto;">
+      <el-form-item label="类别名称:" prop="title">
+        <el-input v-model="formData.title" placeholder="请输入类别名称"/>
+      </el-form-item>
+      <el-form-item label="类别描述:" prop="content">
+        <el-input v-model="formData.content" placeholder="请输入类别描述"/>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button type="primary" @click="addMenu">保存</el-button>
+    </template>
+  </el-dialog>
 </template>
 
 <script>
@@ -26,6 +52,18 @@ export default {
       firstOption: '',
       list: [],
       loading: false,
+      isAddShow: false,
+      formData: {},
+      formDataRules: {
+        "title": [
+          {required: true, message: '请输入标题', trigger: 'blur'},
+          {required: true, message: '请输入标题', trigger: 'change'}
+        ],
+        "content": [
+          {required: true, message: '请输入描述', trigger: 'blur'},
+          {required: true, message: '请输入描述', trigger: 'change'}
+        ]
+      }
     }
   },
   props: {
@@ -49,6 +87,30 @@ export default {
   mounted() {
   },
   methods: {
+    handleAddShow() {
+      this.isAddShow = true;
+    },
+    handleAddClose() {
+      this.isAddShow = false;
+    },
+    addMenu() {
+      let app = this;
+      let params = {};
+      Object.assign(params, this.formData);
+      params['type'] = app.$constant.menuIds[app.type];
+      params['parentId'] = app.$constant.menuIds[app.type];
+      this.$refs.formData.validate(valid=>{
+        if (valid) {
+          menuApi.addMenuData(params).then(res=>{
+            if (res.code===200) {
+              app.$message({message: '添加成功', type: 'success'});
+              app.getMenu();
+              app.handleAddClose();
+            }
+          })
+        }
+      })
+    },
     getMenu() {
       let app = this;
       app.loading = true;

+ 86 - 63
src/components/dataManage/ImportData.vue

@@ -4,19 +4,24 @@
     <el-divider></el-divider>
     <el-form v-if="auth" :model="importForm" ref="importForm" :rules="importFormRules" :label-width="120">
       <el-form-item label="数据类型:" prop="dataType">
-        <el-select v-model="importForm.dataType" placeholder="请选择要导入的数据类型">
-          <el-option v-for="item in dataTypes" :key="item.value" :label="item.label" :value="item.value"/>
+        <el-select v-model="importForm.dataType" placeholder="请选择要导入的数据类型" clearable>
+          <el-option v-for="(item,key) in dataTypes" :key="key" :label="item.label" :value="key"/>
         </el-select>
       </el-form-item>
       <el-form-item label="导入类型:" prop="importType">
-        <el-select v-model="importForm.importType" placeholder="请选择导入的文件类型">
-          <el-option v-for="item in currImportTypes" :key="item.value" :value="item.value" :label="item.label"/>
+        <el-select v-model="importForm.importType" placeholder="请选择导入的文件类型" :disabled="!importForm.dataType"
+                   clearable>
+          <template v-for="(item,key) in importTypes">
+            <el-option :key="key" :value="item.value" :label="item.label"
+                       v-if="currDataType.importTypes && currDataType.importTypes.indexOf(item.id)>-1"/>
+          </template>
         </el-select>
       </el-form-item>
       <el-form-item label="文件选择:" prop="file">
-        <el-upload ref="upload"
+        <el-upload ref="import-upload" :disabled="!importForm.importType"
                    v-model:file-list="importForm['fileList']"
                    :limit="1"
+                   :accept="currImportType.accept"
                    :auto-upload="false"
                    :on-exceed="handleUploadExceed"
                    :on-change="handleUploadChange"
@@ -24,13 +29,14 @@
                    style="min-width: 50%"
         >
           <el-input v-model="importForm.file" :disabled="true" type="hidden"/>
-          <el-button type="default" size="small">选择文件</el-button>
+          <el-button type="default" size="small" :disabled="!importForm.importType">选择文件</el-button>
         </el-upload>
       </el-form-item>
 
-      <el-form-item label="字段映射:" v-if="importForm.dataType">
+      <el-form-item label="字段映射:" v-if="importForm.file">
         <el-table :data="importForm.tableData" border stripe max-height="220">
           <el-table-column prop="fieldName" label="字段名称"/>
+          <el-table-column prop="title" label="字段说明"/>
           <el-table-column prop="newFieldName" label="文件中字段名称">
             <template #default="scope">
               <el-form-item :prop="scope.row.fieldName==='数据类型'?'menuId':scope.row.fieldName">
@@ -38,7 +44,7 @@
                            v-if="scope.row.fieldName==='数据类型'">
                   <el-option v-for="item in category" :key="item.id" :label="item.title" :value="item.id"/>
                 </el-select>
-                <el-input v-model="importForm[scope.row.fieldName]" placeholder="请输入文件中对应字段的名字" v-else/>
+                <el-input v-else v-model="importForm[scope.row.fieldName]" placeholder="请输入文件中对应字段的名字"/>
               </el-form-item>
             </template>
           </el-table-column>
@@ -49,7 +55,7 @@
         <el-button type="primary" @click="submit">确认导入</el-button>
       </el-form-item>
     </el-form>
-    <el-empty v-if="!auth" description="无权限" ></el-empty>
+    <el-empty v-if="!auth" description="无权限"></el-empty>
   </div>
 </template>
 
@@ -57,6 +63,7 @@
 import {genFileId} from "element-plus";
 import menuApi from "@/api/data/MenuData";
 import api from "@/api/data/ImportData"
+import importData from "@/api/data/ImportData";
 
 export default {
   data() {
@@ -84,50 +91,45 @@ export default {
           {required: true, message: '字段不能为空', trigger: 'blur'},
           {required: true, message: '字段不能为空', trigger: 'change'},
         ],
-        thirdId: [
-          {required: true, message: '字段不能为空', trigger: 'blur'},
-          {required: true, message: '字段不能为空', trigger: 'change'},
-        ],
-        address: [
-          {required: true, message: '字段不能为空', trigger: 'blur'},
-          {required: true, message: '字段不能为空', trigger: 'change'},
-        ],
         menuId: [
           {required: true, message: '字段不能为空', trigger: 'blur'},
           {required: true, message: '字段不能为空', trigger: 'change'},
         ],
-
-
       },
-      dataTypes: [
-        {label: '二维数据', value: 1},
-        // {label: '三维数据', value: 2},
-        // {label: '业务数据', value: 3},
-        // {label: '模型数据', value: 4},
-        // {label: '元数据', value: 5},
-        // {label: '物联感知数据', value: 6},
-      ],
-      currImportTypes: [],
+      dataTypes: {
+        1: {label: '二维数据', value: 1, importTypes: [1, 2, 3], importId: 1},
+        2: {label: '三维数据', value: 2, importTypes: [1, 2], importId: 4},
+        3: {label: '业务数据', value: 3, importTypes: [1, 2, 3], importId: 3},
+        4: {label: '模型数据', value: 4, importTypes: [1], importId: 5},
+        // 5: {label: '元数据', value: 5, importTypes: [1], importId: 6},
+        6: {label: '物联感知数据', value: 6, importTypes: [1, 2, 3], importId: 2},
+      },
+      currDataType: {},
+      currImportType: {},
       importTypes: {
-        1: [
-          {label: 'Shape', value: 'Shape'}
-        ],
-        2: [],
-        3: [],
-        4: [],
-        5: [],
-        6: [],
+        'Excel': {id: 1, label: 'Excel', value: 'Excel', accept: '.xls,.xlsx'},
+        'GeoJson': {id: 2, label: 'GeoJson', value: 'GeoJson', accept: '.json,.geojson'},
+        'Shape': {id: 3, label: 'Shape', value: 'Shape', accept: '.zip'},
       },
-      fieldTableData: {
-        1: [
-          {fieldName: 'title', newFieldName: ''},
-          {fieldName: 'content', newFieldName: ''},
-          {fieldName: 'thirdId', newFieldName: ''},
-          // {fieldName: 'addId', newFieldName: ''},
-          {fieldName: 'address', newFieldName: ''},
-          {fieldName: '数据类型', newFieldName: ''},
-        ],
+      uploadType: {
+        Excel: ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
+        GeoJson: ['application/json', 'application/geojson', ''],
+        Shape: ['application/x-zip-compressed'],
       },
+      fieldTableData: [
+        {title: '标题', fieldName: 'title', newFieldName: 'title', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: '描述', fieldName: 'content', newFieldName: 'content', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: '类别', fieldName: '数据类型', newFieldName: '', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: 'url地址', fieldName: 'url', newFieldName: 'url', dataType: [4,6], importType: [1,2,3]},
+        {title: '纬度', fieldName: 'latStr', newFieldName: '', dataType: [1,2,3,4,6], importType: [1]},
+        {title: '经度', fieldName: 'lonStr', newFieldName: '', dataType: [1,2,3,4,6], importType: [1]},
+        {title: '高程', fieldName: 'height', newFieldName: '', dataType: [2,4], importType: [1]},
+        {title: '地名地址库', fieldName: 'address', newFieldName: 'address', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: '地名地址库ID', fieldName: 'addId', newFieldName: 'addId', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: '第三方id', fieldName: 'thirdId', newFieldName: 'thirdId', dataType: [1,2,3,4,6], importType: [1,2,3]},
+        {title: '海拔', fieldName: 'elevation', newFieldName: '', dataType: [4], importType: [1,2,3]},
+        {title: '是否移动', fieldName: 'isMove', newFieldName: '', dataType: [4], importType: [1,2,3]},
+      ],
       category: []
     }
   },
@@ -135,16 +137,33 @@ export default {
   watch: {
     "importForm.dataType": function (newVal, oldVal) {
       if (newVal) {
-        this.currImportTypes = this.importTypes[newVal];
-        this.importForm.tableData = this.fieldTableData[newVal];
-        this.getMenuData(newVal)
+        newVal = Number(newVal)
+        this.currDataType = this.dataTypes[newVal];
+        this.importForm.importType = '';
+        this.importForm.file = null;
+        this.importForm['fileList'] = [];
+      } else {
+        this.currDataType = {};
+        this.importForm = {};
+      }
+    },
+    "importForm.importType": function (newVal, oldVal) {
+      if (newVal) {
+        let dataType = Number(this.importForm.dataType);
+        this.getMenuData(dataType)
+        this.currImportType = this.importTypes[newVal]
+        this.importForm.tableData = this.fieldTableData.filter(i=> i.dataType.indexOf(dataType)>-1 && i.importType.indexOf(this.currImportType.id)>-1);
+      } else {
+        this.currImportType = {};
+        this.importForm.file = null;
+        this.importForm['fileList'] = [];
       }
     }
   },
   created() {
     let userInfo = this.$store.state.userInfo;
-    if (userInfo.userLevel<2
-        || (userInfo.userLevel===2) && userInfo.serviceId.split(',').indexOf(this.$constant.serviceId)>-1 ) {
+    if (userInfo.userLevel < 2
+        || (userInfo.userLevel === 2) && userInfo.serviceId.split(',').indexOf(this.$constant.serviceId) > -1) {
       this.auth = true;
     }
   },
@@ -153,14 +172,14 @@ export default {
   methods: {
     handleUploadChange(file) {
       let fileObj = file.raw;
-      // if (this.uploadType[this.importForm.fileType].indexOf(fileObj.type)<0) {
-      //   this.$message({message: '不支持的文件类型', type: 'warning'})
-      //   this.$refs.upload.clearFiles();
-      //   this.importForm.file=null;
-      //   return;
-      // }
+      if (this.uploadType[this.importForm.importType].indexOf(fileObj.type) < 0) {
+        this.$message({message: '不支持的文件类型', type: 'warning'})
+        this.$refs['import-upload'].clearFiles();
+        this.importForm['fileList'] = []
+        this.importForm.file = null;
+        return;
+      }
       this.importForm.file = file.raw;
-
     },
     getMenuData(type) {
       let app = this;
@@ -170,7 +189,10 @@ export default {
       }
       menuApi.getMenuData(params).then(res => {
         if (res.code === 200) {
-          app.category = res.content
+          app.category = res.content;
+          if (app.importForm.dataType==1 && app.importForm.importType=='Excel') {
+            app.category = app.category.filter(i=>i.geometryType=='Point')
+          }
         }
       })
     },
@@ -184,10 +206,10 @@ export default {
       }
     },
     handleUploadExceed(file) {
-      this.$refs.upload.clearFiles();
+      this.$refs['import-upload'].clearFiles();
       file = file[0];
       file.uid = genFileId()
-      this.$refs.upload.handleStart(file);
+      this.$refs['import-upload'].handleStart(file);
     },
     handleUploadRemove(val) {
       this.importForm.file = null;
@@ -204,14 +226,15 @@ export default {
           params['userName'] = app.$store.state.userInfo.username;
           params['file'] = app.importForm.file;
           params['menuNameOne'] = '二维数据'
+          params['importType'] = app.currDataType.importId;
           app.$util.loading.handleLoading(true);
-          api.importTwoDData(params, app.importForm.importType).then(res=>{
+          api.importData(params, app.importForm.importType).then(res => {
             res = res.data;
-            if (res.code===200) {
+            if (res.code === 200) {
               app.$message({message: '导入成功', type: 'success'})
             }
             app.$util.loading.handleLoading(false);
-          }).catch(err=>{
+          }).catch(err => {
             app.$util.loading.handleLoading(false);
             app.$message({message: err.message, type: 'error'})
           })

+ 3 - 3
src/components/dataManage/dataDetail/BusinessDataDetail.vue

@@ -21,9 +21,9 @@
           <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView" >
             <el-option
                 v-for="item in category"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
+                :key="item.id"
+                :label="item.title"
+                :value="item.id"
             />
           </el-select>
         </el-form-item>

+ 15 - 5
src/components/dataManage/dataDetail/HighOptionData.vue

@@ -3,7 +3,7 @@
     <span v-if="highOptionShow"><el-icon><ElIconCaretTop /></el-icon></span>
     <span v-else><el-icon><ElIconCaretBottom /></el-icon></span>
   </el-link>
-  <el-table :data="highOptionTableData" v-if="highOptionShow" >
+  <el-table :data="highOptionTableData" v-if="highOptionShow" max-height="350" >
     <el-table-column prop="key" label="key" >
       <template #default="scope" >
         <el-input v-model="scope.row.key" placeholder="请输入字段名" @blur="handleDataChange" />
@@ -30,10 +30,7 @@ export default {
   data() {
     return {
       highOptionShow: false,
-      highOptionTableData: [{
-        key: '',
-        value: ''
-      }],
+      highOptionTableData: [],
       properties: {}
     }
   },
@@ -42,6 +39,19 @@ export default {
     callBack: Function,
   },
   created() {
+    let obj = {};
+    if (this.initData) {
+      obj = typeof this.initData == 'string'
+          ? JSON.parse(this.initData) : this.initData
+    }
+    if (Object.keys(obj).length>0) {
+      for (let key in obj) {
+        let data = {};
+        data['key'] = key;
+        data['value'] = obj[key];
+        this.highOptionTableData.push(data);
+      }
+    }
   },
   mounted() {
   },

+ 37 - 16
src/components/dataManage/dataDetail/ThreeDimensionalDataDetail.vue

@@ -32,12 +32,16 @@
           </el-select>
         </el-form-item>
         <br/>
-        <el-form-item label="经度:" style="width: 40%" prop="lon">
-          <el-input :model-value="formData.lon" placeholder="经度" :disabled="formData.isDataView">
+        <el-form-item label="经度:" style="width: 30%" >
+          <el-input v-model="formData.lon" placeholder="经度" :disabled="formData.isDataView">
           </el-input>
         </el-form-item>
-        <el-form-item label="纬度:" style="width: 35%" :label-width="70" prop="lat">
-          <el-input :model-value="formData.lat" placeholder="纬度" :disabled="formData.isDataView">
+        <el-form-item label="纬度:" style="width: 20%" :label-width="70">
+          <el-input v-model="formData.lat" placeholder="纬度" :disabled="formData.isDataView">
+          </el-input>
+        </el-form-item>
+        <el-form-item label="高程:" style="width: 20%" :label-width="70">
+          <el-input v-model="formData.height" placeholder="高程" :disabled="formData.isDataView">
           </el-input>
         </el-form-item>
         <el-form-item>
@@ -46,20 +50,28 @@
           </el-button>
         </el-form-item>
         <br/>
-        <el-form-item label="模型数据:" prop="url" style="width: 100%">
-          <el-input v-model="formData.url" placeholder="请设置模型地址" :disabled="formData.isDataView">
+        <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>
+            </template>
             <template #append>
               <el-button @click="handleMapShow(true)">
-                查看模型
+                预览
               </el-button>
             </template>
           </el-input>
         </el-form-item>
+        <el-form-item style="width: 10%;margin: 0;padding: 0;padding-bottom: 15px;">
+          <el-link style="color: grey" :underline="false" @click="showExampleJson" >示例数据</el-link>
+        </el-form-item>
         <el-form-item label="地名地址库:" prop="address" style="width: 100%">
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
         </el-form-item>
       </el-form>
-      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
+      <HighOptionData :init-data="formData.properties" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -68,6 +80,7 @@
   <CesiumMap v-if="isMapShow"
              :is-show="isMapShow"
              :item="formData"
+             :is-geo-json="true"
              :close="handleMapShow">
   </CesiumMap>
 
@@ -83,7 +96,7 @@
   <JsonDataView v-if="isJsonDataView"
                 :is-show="isJsonDataView"
                 :title="'地理数据预览'"
-                :data="formData.geometryStr"
+                :data="geojsonViewStr"
                 :close="handleJsonDataView"
   >
   </JsonDataView>
@@ -122,18 +135,18 @@ export default {
         geometryStr: [
           {required: true, message: '请输入Geojson数据', trigger: 'blur'},
         ],
-        url: [
+        lon: [
           {required: true, message: '该字段不能为空', trigger: 'blur'},
           {required: true, message: '该字段不能为空', trigger: 'change'},
         ],
-        lon: [
+        lat: [
           {required: true, message: '该字段不能为空', trigger: 'blur'},
           {required: true, message: '该字段不能为空', trigger: 'change'},
         ],
-        lat: [
+        height: [
           {required: true, message: '该字段不能为空', trigger: 'blur'},
           {required: true, message: '该字段不能为空', trigger: 'change'},
-        ]
+        ],
         // address: [
         //   { required: true, message: '请输入地名地址库名称', trigger: 'change' },
         // ]
@@ -144,6 +157,8 @@ export default {
 
       isJsonDataView: false,
 
+      geojsonViewStr: '',
+
     }
   },
   props: {
@@ -170,15 +185,20 @@ export default {
     },
     handleMapShow(flag) {
       if (flag) {
-        if (this.formData.url && this.formData.url !== '') {
+        if (this.formData.geometryStr && this.formData.geometryStr !== '') {
           this.isMapShow = true
         } else {
-          this.$message({message: '请输入模型地址', type: 'warning'})
+          this.$message({message: '请输入地理信息', type: 'warning'})
         }
       } else {
         this.isMapShow = false
       }
     },
+    showExampleJson() {
+      let str = "{\"type\":\"LineString\",\"coordinates\":[[22.59323,44.71464,233.6],[22.59274,44.71425,231.8],[22.59264,44.71405,230.7]]}";
+      this.handleJsonDataView(true, str);
+
+    },
     handleLonlatSelect(flag) {
       if (flag) {
         this.formData.geometryStr = JSON.stringify(this.covertToGeometry())
@@ -265,7 +285,8 @@ export default {
         }
       })
     },
-    handleJsonDataView(flag) {
+    handleJsonDataView(flag, val) {
+      this.geojsonViewStr = val;
       this.isJsonDataView = flag;
     },
     handleMenuIdSelect(val) {

+ 1 - 1
src/components/dataManage/dataDetail/TwoDimensionalDataDetail.vue

@@ -46,7 +46,7 @@
         <el-form-item label="地名地址库:" prop="address" >
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView" />
         </el-form-item>
-        <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
+        <HighOptionData :init-data="formData.properties" :call-back="setProperties"></HighOptionData>
       </el-form>
     </div>
     <template #footer>

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

@@ -6,16 +6,16 @@
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
@@ -28,7 +28,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true">
@@ -42,12 +42,12 @@
         <el-table-column prop="importType" label="导入类型" width="150"/>
         <el-table-column prop="address" label="地名地址库" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -170,6 +170,7 @@ export default {
       if (!(app.currCategory && app.currCategory!=='')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -215,17 +216,7 @@ export default {
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
-      let params = {
-        latlonDataId: ids
-      }
-      this.$msgbox.confirm('确定要删除吗?').then(()=>{
-        api.deleteData(params).then(res=>{
-          if (res.code===200) {
-            app.getData();
-            app.$message({message: '删除成功', type: 'success'})
-          }
-        })
-      })
+      this.deleteData({id:ids})
     },
     // 查看详情
     viewData(item) {
@@ -282,7 +273,7 @@ export default {
     deleteData(item) {
       let app = this;
       app.$msgbox.confirm('确认要删除此条数据吗?').then(()=>{
-        api.deleteData({latlonDataId: item.id}).then(res=>{
+        api.deleteData({baseDataId: item.id}).then(res=>{
           if (res.code === 200) {
             app.getData();
             app.$message({message: '删除成功', type: 'success'});

+ 12 - 21
src/components/dataManage/dataShow/IotData.vue

@@ -6,16 +6,16 @@
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
@@ -28,7 +28,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true">
@@ -53,12 +53,12 @@
         <el-table-column prop="importType" label="导入类型" width="150"/>
         <el-table-column prop="address" label="地名地址库" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -181,6 +181,7 @@ export default {
       if (!(app.currCategory && app.currCategory!=='')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -226,17 +227,7 @@ export default {
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
-      let params = {
-        latlonDataId: ids
-      }
-      this.$msgbox.confirm('确定要删除吗?').then(()=>{
-        api.deleteData(params).then(res=>{
-          if (res.code===200) {
-            app.getData();
-            app.$message({message: '删除成功', type: 'success'})
-          }
-        })
-      })
+      this.deleteData({id:ids})
     },
     // 查看详情
     viewData(item) {
@@ -293,7 +284,7 @@ export default {
     deleteData(item) {
       let app = this;
       app.$msgbox.confirm('确认要删除此条数据吗?').then(()=>{
-        api.deleteData({latlonDataId: item.id}).then(res=>{
+        api.deleteData({iotDataId: item.id}).then(res=>{
           if (res.code === 200) {
             app.getData();
             app.$message({message: '删除成功', type: 'success'});

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

@@ -6,16 +6,16 @@
     <el-button v-if="auth"  type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
@@ -28,7 +28,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true">
@@ -41,13 +41,12 @@
         <el-table-column prop="menuNameTwo" label="类别" width="80"/>
         <el-table-column prop="importType" label="导入类型" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="creator" label="创建人"/>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -170,6 +169,7 @@ export default {
       if (!(app.currCategory && app.currCategory!=='')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -214,6 +214,7 @@ export default {
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
+      this.deleteData({id:ids})
     },
     // 查看详情
     viewData(item) {

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

@@ -6,16 +6,16 @@
     <el-button v-if="auth"  type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
@@ -28,7 +28,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true">
@@ -51,13 +51,12 @@
         </el-table-column>
         <el-table-column prop="address" label="地名地址库" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="creator" label="创建人"/>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -180,6 +179,7 @@ export default {
       if (!(app.currCategory && app.currCategory!=='')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -224,6 +224,7 @@ export default {
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
+      this.deleteData({id:ids})
     },
     // 查看详情
     viewData(item) {

+ 25 - 21
src/components/dataManage/dataShow/ThreeDimensionalData.vue

@@ -3,20 +3,20 @@
   <CategoryMenu :type="'threeD'" v-model:currVal="currCategory"></CategoryMenu>
 
   <div class="data" v-if="currCategory && currCategory!==''">
-    <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" type="primary" @click="addDataClick">录入三维数据</el-button>
+    <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
@@ -29,7 +29,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true">
@@ -52,13 +52,12 @@
         </el-table-column>
         <el-table-column prop="address" label="地名地址库" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="creator" label="创建人"/>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -73,7 +72,7 @@
               </el-button>
             </el-tooltip>
 
-            <el-tooltip v-if="auth"  class="box-item" effect="dark" content="编辑" placement="top-start">
+            <el-tooltip v-if="auth" class="box-item" effect="dark" content="编辑" placement="top-start">
               <el-button type="primary" @click="editData(scope.row)" circle>
                 <el-icon>
                   <ElIconEdit/>
@@ -81,7 +80,7 @@
               </el-button>
             </el-tooltip>
 
-            <el-tooltip v-if="auth"  class="box-item" effect="dark" content="删除" placement="top-start">
+            <el-tooltip v-if="auth" class="box-item" effect="dark" content="删除" placement="top-start">
               <el-button type="danger" @click="deleteData(scope.row)" circle>
                 <el-icon>
                   <ElIconDelete/>
@@ -98,7 +97,8 @@
     </div>
   </div>
 
-  <ThreeDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow" :close="handleDetailShow"></ThreeDimensionalDataDetail>
+  <ThreeDimensionalDataDetail v-if="isDetailShow" :is-show="isDetailShow" :item="currRow"
+                              :close="handleDetailShow"></ThreeDimensionalDataDetail>
 </template>
 
 <script>
@@ -132,8 +132,8 @@ export default {
   },
   created() {
     let userInfo = this.$store.state.userInfo;
-    if (userInfo.userLevel<2
-        || (userInfo.userLevel===2) && userInfo.serviceId.split(',').indexOf(this.$constant.serviceId)>-1 ) {
+    if (userInfo.userLevel < 2
+        || (userInfo.userLevel === 2) && userInfo.serviceId.split(',').indexOf(this.$constant.serviceId) > -1) {
       this.auth = true;
     }
   },
@@ -178,9 +178,10 @@ export default {
     },
     getData() {
       let app = this;
-      if (!(app.currCategory && app.currCategory!=='')) {
+      if (!(app.currCategory && app.currCategory !== '')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -224,7 +225,10 @@ export default {
       if (!this.selectedRows) {
         return;
       }
-      let ids = this.selectedRows.map(i=> {return i.id}).join(',');
+      let ids = this.selectedRows.map(i => {
+        return i.id
+      }).join(',');
+      this.deleteData({id: ids})
     },
     // 查看详情
     viewData(item) {
@@ -249,8 +253,8 @@ export default {
     // 删除数据
     deleteData(item) {
       let app = this;
-      app.$msgbox.confirm('确认要删除此条数据吗?').then(()=>{
-        api.deleteData({modelId	: item.id}).then(res=>{
+      app.$msgbox.confirm('确认要删除此条数据吗?').then(() => {
+        api.deleteData({threeDId: item.id}).then(res => {
           if (res.code === 200) {
             app.getData();
             app.$message({message: '删除成功', type: 'success'});

+ 13 - 20
src/components/dataManage/dataShow/TwoDimensionalData.vue

@@ -7,19 +7,21 @@
     <el-button v-if="auth" type="warning" @click="batchDelete">批量删除</el-button><br>
     <div class="operation">
       <el-form :model="filterForm" :inline="true">
-        <el-form-item label="标题:" style="width: 15%">
+        <el-form-item label="标题:" style="width: 22%">
           <el-input v-model="filterForm.title" placeholder="请输入标题"></el-input>
         </el-form-item>
-        <el-form-item label="描述:" style="width: 17%">
+        <el-form-item label="描述:" style="width: 22%">
           <el-input v-model="filterForm.content" placeholder="请输入描述"></el-input>
         </el-form-item>
-        <el-form-item label="地名地址库:" style="width: 20%">
-          <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>
-        </el-form-item>
-        <el-form-item label="导入类型:" style="width: 20%">
+        <!--<el-form-item label="地名地址库:" style="width: 20%">-->
+        <!--  <el-input v-model="filterForm.address" placeholder="请输入名称"></el-input>-->
+        <!--</el-form-item>-->
+        <el-form-item label="导入类型:" style="width: 28%">
           <el-select v-model="filterForm.importType" placeholder="请选择类型">
             <el-option value="单条数据录入">单条数据录入</el-option>
             <el-option value="Shape文件导入">Shape文件导入</el-option>
+            <el-option value="Excel文件导入">Excel文件导入</el-option>
+            <el-option value="Geojson文件导入">Geojson文件导入</el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
@@ -29,7 +31,7 @@
     </div>
     <div class="list">
       <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-                :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;"
+                :border="true" :stripe="true" :height="$store.state.tableHeight" style="width: 100%;margin-bottom: 15px;"
                 @selection-change="handleTableSelect">
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="id" label="ID" width="100" :show-overflow-tooltip="true" style="direction: rtl">
@@ -43,12 +45,12 @@
         <el-table-column prop="importType" label="导入类型" width="150"/>
         <el-table-column prop="address" label="地名地址库" width="150"/>
         <el-table-column prop="userName" label="修改人"/>
-        <el-table-column prop="updateDate" label="修改时间" width="160">
+        <el-table-column prop="updateDate" label="修改时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.updateDate) }}
           </template>
         </el-table-column>
-        <el-table-column prop="createDate" label="创建时间" width="160">
+        <el-table-column prop="createDate" label="创建时间" width="170">
           <template #default="scope">
             {{ $util.datetime.format(scope.row.createDate) }}
           </template>
@@ -172,6 +174,7 @@ export default {
       if (!(app.currCategory && app.currCategory!=='')) {
         return;
       }
+      app.tableData = [];
       let params = {
         menuId: app.currCategory,
         page: app.pageInfo.page,
@@ -217,17 +220,7 @@ export default {
         return;
       }
       let ids = this.selectedRows.map(i=> {return i.id}).join(',');
-      let params = {
-        latlonDataId: ids
-      }
-      this.$msgbox.confirm('确定要删除吗?').then(()=>{
-        api.deleteData(params).then(res=>{
-          if (res.code===200) {
-            app.getData();
-            app.$message({message: '删除成功', type: 'success'})
-          }
-        })
-      })
+      this.deleteData({id:ids})
     },
     // 查看详情
     viewData(item) {

+ 151 - 64
src/components/dataPublish/PublishDetail.vue

@@ -1,93 +1,180 @@
 <template>
-    <div id="PublishDetail">
-        <h2>{{ data.serviceName }}</h2>
-        <el-divider />
-        <div class="itemList">
-            <el-table :data="tableData" style="width: 100%" :show-header="false">
-                <el-table-column prop="title" label="标题" width="120" className="vertical-align-top">
-                    <template #default="scope">
-                        <span class="title">{{ scope.row.title }}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="content" label="内容" />
-            </el-table>
-        </div>
+  <div id="PublishDetail">
+    <h2>{{ data.serviceName }}</h2>
+    <el-divider/>
+    <div class="itemList">
+      <el-table :data="tableData" style="width: 100%" :show-header="false">
+        <el-table-column prop="title" label="标题" width="120" className="vertical-align-top">
+          <template #default="scope">
+            <span class="title">{{ scope.row.title }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="content" label="内容">
+          <template #default="scope">
+            <ul v-if="scope.row.key==='interfaces'" style="margin-left: 2%">
+              <li v-for="(item,key) in scope.row.content" :key="key" >
+                <span style="font-size: 16px">{{ key }}</span>
+                <el-link @click="handleDetailShow(item)" style="color: #6566f4; font-size: 13px;margin-left: 15px">接口详情</el-link>
+              </li>
+            </ul>
+            <pre v-else>{{ scope.row.content }}</pre>
+          </template>
+        </el-table-column>
+      </el-table>
     </div>
+  </div>
+
+  <el-dialog v-if="isDetailShow"
+             :model-value="isDetailShow"
+             title="接口详情"
+             :width="700"
+             :close-on-click-modal="false"
+             :before-close="handleDetailClose"
+  >
+    <el-scrollbar :max-height="500">
+      <el-row class="item-row">
+        <el-col :span="3">接口地址:</el-col>
+        <el-col :span="21">{{ item.path }}</el-col>
+      </el-row>
+      <el-row class="item-row">
+        <el-col :span="3">接口描述:</el-col>
+        <el-col :span="21">
+          <pre>{{ item.desc }}</pre>
+        </el-col>
+      </el-row>
+      <el-row class="item-row">
+        <el-col :span="3">请求方式:</el-col>
+        <el-col :span="21">{{ item.method }}</el-col>
+      </el-row>
+      <el-row class="item-row">
+        <el-col :span="3">请求头:</el-col>
+        <el-col :span="21">
+          <el-table :data="item.headers" stripe border v-if="item.headers && item.headers.length>0">
+            <el-table-column prop="name" label="字段名称" width="110"/>
+            <el-table-column prop="desc" label="说明" width="130"/>
+            <el-table-column prop="require" label="必填" width="60"/>
+            <el-table-column prop="type" label="字段类型" width="100"/>
+            <el-table-column prop="value" label="值"/>
+          </el-table>
+          <span v-else>无</span>
+        </el-col>
+      </el-row>
+      <el-row class="item-row">
+        <el-col :span="3">请求参数:</el-col>
+        <el-col :span="21">
+          <el-table :data="item.params" stripe border v-if="item.params && item.params.length>0">
+            <el-table-column prop="name" label="字段名称" width="110"/>
+            <el-table-column prop="desc" label="说明" width="130"/>
+            <el-table-column prop="require" label="必填" width="60"/>
+            <el-table-column prop="type" label="字段类型" width="100"/>
+            <el-table-column prop="value" label="值"/>
+          </el-table>
+          <span v-else>无</span>
+        </el-col>
+      </el-row>
+      <el-row class="item-row">
+        <el-col :span="3">返回结果:</el-col>
+        <el-col :span="21">
+          <el-table :data="item.response" stripe border v-if="item.response && item.response.length>0">
+            <el-table-column prop="name" label="字段名称" width="130"/>
+            <el-table-column prop="desc" label="说明" width="150"/>
+            <el-table-column prop="type" label="字段类型" width="130"/>
+            <el-table-column prop="value" label="值"/>
+          </el-table>
+          <span v-else>无</span>
+        </el-col>
+      </el-row>
+    </el-scrollbar>
+  </el-dialog>
 </template>
 
 <script>
 
 
 export default {
-    data() {
-        return {
-            tableData: []
-        }
-    },
-    props: {
-        data: Number
-    },
-    watch: {
-        "data": function (params) {
-            this.renderTable();
-        }
-    },
-    created() {
-
+  data() {
+    return {
+      tableData: [],
+      isDetailShow: false,
+      item: {},
+    }
+  },
+  props: {
+    data: Object
+  },
+  watch: {
+    "data": function (params) {
+      this.renderTable();
+    }
+  },
+  created() {
+  },
+  mounted() {
+    let app = this;
+    this.renderTable();
+  },
+  methods: {
+    renderTable() {
+      this.tableData = []
+      let url = {
+        title: '服务地址:',
+        key: 'url',
+        content: this.data.url
+      }
+      let desc = {
+        title: '服务描述:',
+        key: 'desc',
+        content: this.data.desc
+      }
+      let interfaces = {
+        title: '服务接口:',
+        key: 'interfaces',
+        content: this.data.interfaces
+      }
+      this.tableData.push(url)
+      this.tableData.push(desc)
+      this.tableData.push(interfaces)
     },
-    mounted() {
-        let app = this;
-        this.renderTable();
+    handleDetailShow(item) {
+      this.item = item;
+      this.isDetailShow = true;
     },
-    methods: {
-        renderTable() {
-            this.tableData = []
-            let url = {
-                title: '服务地址:',
-                content: this.data.url
-            }
-            let type = {
-                title: '服务类型:',
-                content: this.data.type
-            }
-            let desc = {
-                title: '服务描述:',
-                content: this.data.desc
-            }
-            let standard = {
-                title: '服务规范:',
-                content: this.data.standard
-            }
-            this.tableData.push(url)
-            this.tableData.push(type)
-            this.tableData.push(desc)
-            this.tableData.push(standard)
-        }
+    handleDetailClose() {
+      this.isDetailShow = false;
     }
+  }
 }
 </script>
 
 <style scoped>
 #PublishDetail {
-    width: 100%;
-    height: 100%;
-    padding-left: 1%;
+  width: 100%;
+  height: 100%;
+  padding-left: 1%;
 }
 
 #PublishDetail .itemList {
-    width: 100%;
+  width: 100%;
 }
 
 #PublishDetail .itemList .title {
-    display: inline-block;
-    margin-left: 10px;
-    font-size: 15px;
-    font-weight: bold;
+  display: inline-block;
+  margin-left: 10px;
+  font-size: 15px;
+  font-weight: bold;
+}
+.item-row {
+  font-size: 15px;
+  margin-top: 10px;
+  margin-bottom: 15px;
 }
 </style>
 
 <style>
 .vertical-align-top {
-    vertical-align: top !important;
+  vertical-align: top !important;
+}
+.el-dialog__body {
+  padding-top: 0px;
 }
 </style>

+ 20 - 13
src/components/home/DataManage.vue

@@ -62,15 +62,15 @@
       </el-menu>
     </div>
     <div class="content">
-      <TwoDimensionalData v-if="activeName==='1-1'"/>
-      <ThreeDimensionalData v-if="activeName==='1-2'"/>
-      <BusinessData v-if="activeName==='1-3'"/>
-      <ModelData v-if="activeName==='1-4'"/>
-      <MetaData v-if="activeName==='1-5'"/>
-      <IotData v-if="activeName==='1-6'"/>
+      <TwoDimensionalData  v-if="pageShow['DTB-DATAMANAGE-TWOD'] && activeName==='1-1'"/>
+      <ThreeDimensionalData  v-if="pageShow['DTB-DATAMANAGE-THREED'] && activeName==='1-2'"/>
+      <BusinessData  v-if="pageShow['DTB-DATAMANAGE-BASEDATA'] && activeName==='1-3'"/>
+      <ModelData  v-if="pageShow['DTB-DATAMANAGE-MODEL'] && activeName==='1-4'"/>
+      <MetaData  v-if="pageShow['DTB-DATAMANAGE-METADATA'] && activeName==='1-5'"/>
+      <IotData  v-if="pageShow['DTB-DATAMANAGE-IOTDATA'] && activeName==='1-6'"/>
 
-      <ImportData v-if="activeName==='2'"/>
-      <SyncInterface v-if="activeName==='3'"/>
+      <ImportData v-if="auth && activeName==='2'" />
+      <!--<SyncInterface v-if="activeName==='3'"/>-->
     </div>
   </div>
 </template>
@@ -82,6 +82,8 @@ export default {
   data() {
     return {
       activeName: '1-1',
+      pageShow: {},
+      tableHeight: 200,
     }
   },
   components: {
@@ -93,13 +95,18 @@ export default {
     IotData: defineAsyncComponent(() => import("@/components/dataManage/dataShow/IotData.vue")),
 
     ImportData: defineAsyncComponent(() => import("@/components/dataManage/ImportData.vue")),
-    SyncInterface: defineAsyncComponent(() => import("@/components/dataManage/SyncInterface.vue")),
+    // SyncInterface: defineAsyncComponent(() => import("@/components/dataManage/SyncInterface.vue")),
   },
   created() {
-
+    let userInfo = this.$store.state.userInfo;
+    if (userInfo.userLevel < 2
+        || (userInfo.userLevel === 2) && userInfo.serviceId.split(',').indexOf(this.$constant.serviceId) > -1) {
+      this.auth = true;
+    }
   },
   mounted() {
-
+    let app = this;
+    this.pageShow = this.$store.state.pageShow;
   },
   methods: {
     handleMenuSelect(val) {
@@ -120,12 +127,12 @@ export default {
 }
 
 #dataManage .left {
-  width: 14%;
+  width: 16%;
   display: inline-block;
 }
 
 #dataManage .content {
-  width: 83%;
+  width: 80%;
   height: 100%;
   display: inline-block;
   vertical-align: top;

+ 8 - 3
src/components/home/DataPublish.vue

@@ -4,18 +4,19 @@
     <div class="left">
       <el-scrollbar :max-height="menuHeight">
         <el-menu default-active="0" class="dataPublish-menu" @select="handleServiceSelect">
-          <el-menu-item v-for="(item,index) of serviceList" :key="index" :index="index+''">
+          <el-menu-item v-for="(item,index) of serviceList" :key="index" :index="index+''" >
             <el-icon>
               <IconPark-server/>
             </el-icon>
             <span>{{ item.serviceName }}</span>
           </el-menu-item>
         </el-menu>
+        <el-empty description="无服务/权限" v-if="!serviceList || serviceList.length<1"></el-empty>
       </el-scrollbar>
 
     </div>
     <div class="content">
-      <PublishDetail :data="currService"/>
+      <PublishDetail :data="currService" v-if="currService.serviceName"/>
     </div>
   </div>
 </template>
@@ -29,7 +30,8 @@ export default {
     return {
       menuHeight: '',
       serviceList: [],
-      currService: {}
+      currService: {},
+      pageShow: {},
     }
   },
   props: {
@@ -39,8 +41,11 @@ export default {
     PublishDetail
   },
   created() {
+    let app = this;
+    this.pageShow = this.$store.state.pageShow;
     this.menuHeight = this.height * 0.7;
     this.serviceList = JSON.parse(JSON.stringify(ServiceData))
+    this.serviceList = this.serviceList.filter(item=>app.pageShow[item.authKey])
     if (this.serviceList.length > 0) {
       this.currService = this.serviceList[0]
     }

+ 16 - 12
src/components/home/SystemManage.vue

@@ -22,18 +22,18 @@
             </el-icon>
             <span>系统日志</span>
           </el-menu-item>
-          <el-menu-item index="4">
-            <el-icon>
-              <IconPark-log />
-            </el-icon>
-            <span>接口授权</span>
-          </el-menu-item>
-          <el-menu-item index="5">
-            <el-icon>
-              <IconPark-log />
-            </el-icon>
-            <span>接口监控</span>
-          </el-menu-item>
+          <!--<el-menu-item index="4">-->
+          <!--  <el-icon>-->
+          <!--    <ElIconLock />-->
+          <!--  </el-icon>-->
+          <!--  <span>接口授权</span>-->
+          <!--</el-menu-item>-->
+          <!--<el-menu-item index="5">-->
+          <!--  <el-icon>-->
+          <!--    <IconPark-chart-histogram/>-->
+          <!--  </el-icon>-->
+          <!--  <span>接口监控</span>-->
+          <!--</el-menu-item>-->
         </el-menu>
       </el-scrollbar>
     </div>
@@ -42,6 +42,8 @@
       <UserManage v-if="activeIndex=='1'" />
       <AuthManage v-if="activeIndex=='2'" />
       <SystemLogs v-if="activeIndex=='3'" />
+      <!--<InterfaceAuth v-if="activeIndex=='4'" />-->
+      <!--<InterfaceMonitor v-if="activeIndex=='5'" />-->
     </div>
 
     <el-empty v-if="!auth" description="您不是管理员,暂无权限查看"></el-empty>
@@ -62,6 +64,8 @@ export default {
     UserManage: defineAsyncComponent(() => import("@/components/systemManage/UserManage")),
     AuthManage: defineAsyncComponent(() => import("@/components/systemManage/AuthManage")),
     SystemLogs: defineAsyncComponent(() => import("@/components/systemManage/SystemLogs")),
+    InterfaceAuth: defineAsyncComponent(() => import("@/components/systemManage/InterfaceAuth")),
+    InterfaceMonitor: defineAsyncComponent(() => import("@/components/systemManage/InterfaceMonitor")),
   },
   created() {
     let userInfo = this.$store.state.userInfo;

+ 6 - 1
src/components/json/JsonDataView.vue

@@ -31,7 +31,12 @@ export default {
   },
   mounted() {
     if (this.data) {
-      this.jsonData = JSON.parse(this.data)
+      try {
+        this.jsonData = JSON.parse(this.data)
+      } catch (e) {
+        this.$message({message: '数据格式错误', type: 'error'})
+        this.handleClose()
+      }
     } else {
       this.$message({message: '数据为空, 不支持预览', type: 'warning'})
       this.handleClose()

+ 24 - 4
src/components/map/CesiumMap.vue

@@ -71,6 +71,7 @@ export default {
   props: {
     isShow: Boolean,
     item: Object,
+    isGeoJson: Boolean,
     close: Function
   },
   watch: {
@@ -120,11 +121,30 @@ export default {
               maximumLevel: 20,
             })
         );
-        // 加载模型
-        if (app.item.url && app.item.url!=='') {
-          app.add3DTiles(app.viewer, app.item.url)
+        // 加载GeoJson
+        if (app.isGeoJson) {
+          let geojson = {"type": "Feature", "geometry": JSON.parse(app.item.geometryStr), "properties": {}}
+          let res = Cesium.GeoJsonDataSource.load(geojson,{
+            stroke: Cesium.Color.fromCssColorString('#ff0000'),
+            fill: Cesium.Color.RED.withAlpha(0.3),
+            strokeWidth: 5,
+            clampToGround:true,
+          })
+          app.viewer.dataSources.add(res);
+          res.then(()=>{
+            app.$util.loading.handleLoading(false)
+            app.viewer.zoomTo(res, {heading: 2.718565, pitch: -0.415366, roll: 0.0,});
+          }).catch(()=>{
+            app.$message({message:'加载失败', type: 'error'})
+            app.$util.loading.handleLoading(false)
+          })
         } else {
-          app.$util.loading.handleLoading(false)
+          // 加载模型
+          if (app.item.url && app.item.url!=='') {
+            app.add3DTiles(app.viewer, app.item.url)
+          } else {
+            app.$util.loading.handleLoading(false)
+          }
         }
       });
     },

+ 5 - 1
src/components/systemManage/AuthManage.vue

@@ -9,6 +9,7 @@
         </div>
       </template>
       <div v-for="role in roleList" :key="role.id" class="roleItem" :style="currRole.id===role.id?checkRoleStyle:''" @click="handleRoleSelect(role)">{{ role.noteStr }}</div>
+      <div v-if="!roleList || roleList.length<1" >无数据</div>
     </el-card>
 
     <div class="authDetails" v-show="currRole.id">
@@ -92,11 +93,14 @@ export default {
     },
     submit() {
       let app = this;
+      let permissionKeys = [];
+      permissionKeys = permissionKeys.concat(this.$refs.authTree.getCheckedKeys())
+      permissionKeys = permissionKeys.concat(this.$refs.authTree.getHalfCheckedKeys())
       let params = {
         serviceId: this.$constant.serviceId,
         type: app.$constant.authType,
         roleId: this.currRole.id,
-        permissionId: this.$refs.authTree.getCheckedKeys().join(','),
+        permissionId: permissionKeys.join(','),
       }
       app.$util.loading.handleLoading(true);
       api.updateRoleAuth(params).then(res=>{

+ 40 - 0
src/components/systemManage/InterfaceAuth.vue

@@ -0,0 +1,40 @@
+<template>
+  <div id="InterfaceAuth">
+    <h3>接口授权</h3>
+    <el-divider></el-divider>
+    <el-table>
+      <el-table-column prop="name" label="接口名称" />
+      <el-table-column prop="name" label="接口描述" />
+      <el-table-column prop="name" label="操作" />
+    </el-table>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  created() {
+  },
+  mounted() {
+  },
+  methods: {
+
+  }
+}
+</script>
+
+<style scoped>
+#InterfaceAuth {
+  width: 100%;
+  height: 100%;
+  margin-left: 2%;
+}
+</style>
+
+<style>
+
+</style>

+ 35 - 0
src/components/systemManage/InterfaceMonitor.vue

@@ -0,0 +1,35 @@
+<template>
+  <div id="InterfaceMonitor">
+    <h3>接口监控</h3>
+    <el-divider></el-divider>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  created() {
+  },
+  mounted() {
+  },
+  methods: {
+
+  }
+}
+</script>
+
+<style scoped>
+#InterfaceMonitor {
+  width: 100%;
+  height: 100%;
+  margin-left: 2%;
+}
+</style>
+
+<style>
+
+</style>

+ 7 - 6
src/components/systemManage/SystemLogs.vue

@@ -13,15 +13,16 @@
     </div>
     <el-divider/>
     <el-table :data="tableData" v-loading="loading" element-loading-text="正在加载,请稍后..."
-              :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;">
-      <el-table-column prop="userName" label="用户名"/>
-      <el-table-column prop="loginIp" label="访问ip"/>
-      <el-table-column prop="createTime" label="访问时间">
+              :border="true" :stripe="true" :height="$store.state.windowsHeight*0.67" style="width: 100%;margin-bottom: 15px;">
+      <el-table-column prop="userName" label="用户名" width="140"/>
+      <el-table-column prop="loginIp" label="访问ip" width="100"/>
+      <el-table-column prop="createTime" label="访问时间" width="170">
         <template #default="scope">
           {{ $util.datetime.format(scope.row.createTime) }}
         </template>
       </el-table-column>
-      <el-table-column prop="requestUrl" label="访问接口"/>
+      <el-table-column prop="requestUrl" label="访问接口" width="270" />
+      <el-table-column prop="content" label="内容"/>
     </el-table>
     <el-pagination style="float:right" background layout="sizes, prev, pager, next, jumper, total"
                    v-model:current-page="pageInfo.page" v-model:page-size="pageInfo.pageSize"
@@ -77,7 +78,7 @@ export default {
     getData() {
       let app = this;
       let end = app.$util.datetime.nowTimestamp();
-      let start = app.$util.datetime.now().subtract(7, 'day').valueOf();
+      let start = app.$util.datetime.now().subtract(30, 'day').valueOf();
       let params = {
         page: app.pageInfo.page-1,
         pageSize: app.pageInfo.pageSize,

+ 94 - 6
src/components/systemManage/UserManage.vue

@@ -3,12 +3,12 @@
     <h3>用户信息列表</h3>
     <el-divider></el-divider>
     <el-table ref="dataTable" v-loading="loading" element-loading-text="正在加载,请稍后..." :data="tableData"
-              :border="true" :stripe="true" :height="440" style="width: 100%;margin-bottom: 15px;">
+              :border="true" :stripe="true" :height="$store.state.windowsHeight*0.67" style="width: 100%;margin-bottom: 15px;">
       <el-table-column type="index" label="序号" width="60" align="center" />
-      <el-table-column prop="username" label="用户名" />
-      <el-table-column prop="email" label="邮箱" />
-      <el-table-column prop="phone" label="手机号" />
-      <el-table-column prop="userLevel" label="用户级别" >
+      <el-table-column prop="username" label="用户名" width="130"/>
+      <el-table-column prop="email" label="邮箱" width="200"/>
+      <el-table-column prop="phone" label="手机号" width="130"/>
+      <el-table-column prop="userLevel" label="用户级别" width="100">
         <template #default="scope">
           <span v-if="scope.row.userLevel==0">管理员</span>
           <span v-else-if="scope.row.userLevel==1">管理员</span>
@@ -19,26 +19,61 @@
           <span v-else>普通用户</span>
         </template>
       </el-table-column>
-      <el-table-column prop="failureTime" label="过期时间" >
+      <el-table-column prop="failureTime" label="过期时间" width="180">
         <template #default="scope">
           <span v-if="scope.row.failureTime">{{ $util.datetime.format(scope.row.failureTime) }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="操作" width="100" min-width="120">
+        <template #default="scope">
+          <el-button size="small" @click="handleManageRole(scope.row)">管理角色</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column prop="id" label="用户角色" >
+        <template #default="scope">
+          <span v-if="!scope.row.roles || scope.row.roles.length<1">无</span>
+          <el-tag v-for="role in scope.row.roles" :key="role.id" v-show="role.id>2">{{ role.noteStr }}</el-tag>
+        </template>
+      </el-table-column>
     </el-table>
     <el-pagination style="float:right" background layout="sizes, prev, pager, next, jumper, total"
                    v-model:current-page="pageInfo.page" v-model:page-size="pageInfo.pageSize"
                    v-model:total="pageInfo.total"/>
   </div>
+
+  <el-dialog v-if="userRolesShow"
+             :model-value="userRolesShow"
+             title="分配角色"
+             width="650px"
+             :close-on-click-modal="false"
+             :before-close="handleManageRoleClose"
+  >
+    <el-table ref="roleListTbl" :data="roleList" row-key="id" max-height="300" v-loading="roleListLoading" >
+      <el-table-column type="selection" width="80"/>
+      <el-table-column prop="id" label="ID" width="100"/>
+      <el-table-column prop="roleName" label="角色名称" min-width="150" />
+      <el-table-column prop="noteStr" label="角色描述" min-width="180" />
+    </el-table>
+    <template #footer>
+      <!--<el-button >重置</el-button>-->
+      <el-button type="primary" @click="updateUserRole">保存</el-button>
+    </template>
+  </el-dialog>
 </template>
 
 <script>
 import api from "@/api/data/AuthInfo";
+import loading from "@/utils/loading";
 
 export default {
   data() {
     return {
       loading: false,
       tableData: [],
+      roleList: [],
+      userRolesShow: false,
+      roleListLoading: false,
+      currRow: {},
       pageInfo: {
         page: 1,
         pageSize: 10,
@@ -64,6 +99,7 @@ export default {
     this.getData()
   },
   mounted() {
+    this.getRoleList();
   },
   methods: {
     getData() {
@@ -82,6 +118,58 @@ export default {
       }).catch(()=>{
         app.loading = false;
       })
+    },
+    getRoleList() {
+      let app = this;
+      let params = {
+        serviceId: this.$constant.serviceId,
+      }
+      api.getRoleList(params).then(res=>{
+        if (res.code===200) {
+          app.roleList = [];
+          res.content.list.forEach(item => {
+            if (item.id>2) {
+              app.roleList.push(item);
+            }
+          })
+        }
+      })
+    },
+    handleManageRole(row) {
+      let app = this;
+      this.userRolesShow = true;
+      this.roleListLoading = true;
+      this.currRow = row;
+      let authRoleIds = [];
+      if (app.currRow.roleId) {
+        authRoleIds = app.currRow.roleId.split(',')
+      }
+      this.$nextTick(()=>{
+        this.$refs.roleListTbl.clearSelection();
+        app.roleList.forEach(i=>{
+          app.$refs.roleListTbl.toggleRowSelection(i, authRoleIds.indexOf(i.id+'')>-1)
+        });
+        setTimeout(function () {
+          app.roleListLoading = false;
+        },200)
+      })
+    },
+    handleManageRoleClose() {
+      this.userRolesShow = false;
+    },
+    updateUserRole() {
+      let app = this;
+      let roleIds = this.$refs.roleListTbl.getSelectionRows().map(i=>i.id).join(',')
+      let params = {
+        userId: this.currRow.id,
+        roleIds: roleIds,
+      }
+      api.updateUserRole(params).then(res=>{
+        if (res.code===200) {
+          app.$message({message:'修改成功', type: 'success'});
+          app.handleManageRoleClose();
+        }
+      })
     }
   }
 }

+ 1147 - 27
src/static/datas/ServiceData.json

@@ -1,30 +1,1150 @@
 [
-    {
-        "serviceName": "业务数据对外服务",
-        "url": "http://localhost:8080",
-        "type": "对外",
-        "desc": "服务描述1234",
-        "standard": "测试1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
-    },
-    {
-        "serviceName": "空间数据对外服务",
-        "url": "",
-        "type": "",
-        "desc": "",
-        "standard": ""
-    },
-    {
-        "serviceName": "模型数据对外服务",
-        "url": "",
-        "type": "",
-        "desc": "",
-        "standard": ""
-    },
-    {
-        "serviceName": "地名地址服务",
-        "url": "",
-        "type": "",
-        "desc": "",
-        "standard": ""
+  {
+    "serviceName": "二维数据服务",
+    "authKey": "DTB-DATAPUBLISH-TWOD",
+    "url": "http://localhost:8080",
+    "desc": "提供二维数据相关管理接口",
+    "interfaces": {
+      "查询二维数据": {
+        "path": "/latlon/getLatlonData",
+        "desc": "分页查询二维数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "featureType",
+            "desc": "数据类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "properties",
+            "desc": "自定义属性",
+            "type": "Json",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "thirdId",
+            "desc": "第三方ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
     }
+  },
+  {
+    "serviceName": "三维数据服务",
+    "authKey": "DTB-DATAPUBLISH-THREED",
+    "url": "http://localhost:8080",
+    "desc": "提供三维数据相关管理接口",
+    "interfaces": {
+      "查询三维数据": {
+        "path": "/threeD/getThreeDData",
+        "desc": "分页查询三维数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "featureType",
+            "desc": "数据类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "thirdId",
+            "desc": "第三方ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  },
+  {
+    "serviceName": "业务数据服务",
+    "authKey": "DTB-DATAPUBLISH-BASEDATA",
+    "url": "http://localhost:8080",
+    "desc": "提供业务数据相关管理接口",
+    "interfaces": {
+      "查询业务数据": {
+        "path": "/baseData/getBasedata",
+        "desc": "分页查询业务数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "featureType",
+            "desc": "数据类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "thirdId",
+            "desc": "第三方ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  },
+  {
+    "serviceName": "模型数据服务",
+    "authKey": "DTB-DATAPUBLISH-MODEL",
+    "url": "http://localhost:8080",
+    "desc": "提供模型数据相关管理接口",
+    "interfaces": {
+      "查询模型数据": {
+        "path": "/model/getModelData",
+        "desc": "分页查询模型数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "elevation",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "isMove",
+            "desc": "",
+            "type": "Boolean",
+            "value": ""
+          },
+          {
+            "name": "lon",
+            "desc": "中心点经度",
+            "type": "Double",
+            "value": ""
+          },
+          {
+            "name": "lat",
+            "desc": "中心点纬度",
+            "type": "Double",
+            "value": ""
+          },
+          {
+            "name": "url",
+            "desc": "3DTiles地址",
+            "type": "Double",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  },
+  {
+    "serviceName": "元数据服务",
+    "authKey": "DTB-DATAPUBLISH-METADATA",
+    "url": "http://localhost:8080",
+    "desc": "提供元数据相关管理接口",
+    "interfaces": {
+      "查询元数据": {
+        "path": "/metadata/selectMetadtaDataPage",
+        "desc": "分页查询元数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "featureType",
+            "desc": "数据类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "thirdId",
+            "desc": "第三方ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  },
+  {
+    "serviceName": "物联感知数据服务",
+    "authKey": "DTB-DATAPUBLISH-IOTDATA",
+    "url": "http://localhost:8080",
+    "desc": "提供物联感知数据相关管理接口",
+    "interfaces": {
+      "查询物联感知数据": {
+        "path": "/iotData/selectIOTDataData",
+        "desc": "分页查询物联感知数据",
+        "method": "POST",
+        "headers": [
+          {
+            "name": "token",
+            "desc": "身份认证",
+            "require": "是",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "params": [
+          {
+            "name": "page",
+            "desc": "页码",
+            "require": "是",
+            "type": "String",
+            "value": "1"
+          },
+          {
+            "name": "pageSize",
+            "desc": "每页数量",
+            "require": "是",
+            "type": "String",
+            "value": "10"
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "require": "否",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "response": [
+          {
+            "name": "id",
+            "desc": "ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "title",
+            "desc": "标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "content",
+            "desc": "描述",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "addId",
+            "desc": "地名地址库标识",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "address",
+            "desc": "地名地址库标题",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "featureType",
+            "desc": "数据类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "importType",
+            "desc": "导入类型",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuId",
+            "desc": "类别ID",
+            "type": "Number",
+            "value": ""
+          },
+          {
+            "name": "menuNameOne",
+            "desc": "数据分类",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "menuNameTwo",
+            "desc": "类别名称",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "thirdId",
+            "desc": "第三方ID",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "createDate",
+            "desc": "创建时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "updateDate",
+            "desc": "更新时间",
+            "type": "13位时间戳",
+            "value": ""
+          },
+          {
+            "name": "userName",
+            "desc": "最后更新人",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  },
+  {
+    "serviceName": "地名地址服务",
+    "authKey": "DTB-DATAPUBLISH-ADDRESS",
+    "url": "http://121.43.55.7:8889",
+    "desc": "提供地名地址库查询相关接口",
+    "interfaces": {
+      "模糊查询": {
+        "path": "/geoserver/wfs",
+        "desc": "提供模糊查询\n注:发送请求时地址一定要用encodeURI编码",
+        "method": "GET",
+        "header": [
+        ],
+        "params": [
+          {
+            "name": "service",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "wfs"
+          },
+          {
+            "name": "version",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "1.0.0"
+          },
+          {
+            "name": "request",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "GetFeature"
+          },
+          {
+            "name": "typeName",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "oujiangkou:MENZHI"
+          },
+          {
+            "name": "outputFormat",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "application/json"
+          },
+          {
+            "name": "CQL_FILTER",
+            "desc": "模糊查询参数",
+            "require": "是",
+            "type": "String",
+            "value": "DOOR_ADD_2 like '%关键字%'"
+          }
+        ],
+        "response": [
+          {
+            "name": "crs",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "features",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "totalFeatures",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "FeatureCollection",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      },
+      "周边查询": {
+        "path": "/geoserver/wfs",
+        "desc": "提供模糊查询\n注:发送请求时地址一定要用encodeURI编码",
+        "method": "GET",
+        "header": [
+        ],
+        "params": [
+          {
+            "name": "service",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "wfs"
+          },
+          {
+            "name": "version",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "1.0.0"
+          },
+          {
+            "name": "request",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "GetFeature"
+          },
+          {
+            "name": "typeName",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "oujiangkou:MENZHI"
+          },
+          {
+            "name": "outputFormat",
+            "desc": "固定值",
+            "require": "是",
+            "type": "String",
+            "value": "application/json"
+          },
+          {
+            "name": "CQL_FILTER",
+            "desc": "模糊查询参数",
+            "require": "是",
+            "type": "String",
+            "value": "DWITHIN(the_geom,Point(经度 纬度),度,kilometers)"
+          }
+        ],
+        "response": [
+          {
+            "name": "crs",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "features",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "totalFeatures",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          },
+          {
+            "name": "FeatureCollection",
+            "desc": "",
+            "type": "String",
+            "value": ""
+          }
+        ],
+        "example": {}
+      }
+    }
+  }
 ]

+ 1 - 0
src/store/state.js

@@ -1,4 +1,5 @@
 export default {
     userInfo: {},
     token: '',
+    pageShow: {}
 }

+ 2 - 2
src/utils/constant.js

@@ -11,6 +11,6 @@ export default {
         'meta': '5',
         'iot': '6',
     },
-    oauthProxy: '/proxy_oauth', // oauth 代理地址前缀
-    dtbserverProxy: '/proxy_dtbserver' // dtbserver 代理地址前缀
+    oauthProxy: systemConfig.oauth_url, // oauth 地址
+    dtbserverProxy: systemConfig.base_url // dtbserver 地址
 }

+ 1 - 1
src/utils/request.js

@@ -5,7 +5,7 @@ import context from '@/main'
 import store from '@/store/index'
 
 // 服务接口地址
-// axios.defaults.baseURL = process.env.VUE_APP_BASEURL
+axios.defaults.baseURL = systemConfig.base_url
 // 携带 cookie
 axios.defaults.withCredentials = true
 

+ 28 - 14
src/views/HomeView.vue

@@ -30,7 +30,7 @@
             active-text-color="#ffc01c"
             @select="handleMenuClick"
         >
-          <el-menu-item index="1" >综合展示</el-menu-item>
+          <el-menu-item index="1">综合展示</el-menu-item>
           <el-menu-item index="2" v-if="isLogin && pageShow['DTB-DATAMANAGE']">数据管理</el-menu-item>
           <el-menu-item index="3" v-if="isLogin && pageShow['DTB-DATAPUBLISH']">数据发布</el-menu-item>
           <el-menu-item index="4" v-if="isLogin && pageShow['DTB-PLUGINMANAGE']">插件管理</el-menu-item>
@@ -38,7 +38,6 @@
         </el-menu>
       </div>
       <div class="content">
-        <!--<HomeIndex :auth="pageShow['DTB-HOMEINDEX']" v-if="activeIndex==1"/>-->
         <HomeIndex :auth="true" v-if="activeIndex==1"/>
         <DataManage v-if="activeIndex==2"/>
         <DataPublish v-if="activeIndex==3"/>
@@ -91,13 +90,23 @@ export default {
     this.$root.$.appContext.config.globalProperties.judgeLogin = this.judgeLogin;
   },
   mounted() {
-    this.judgeLogin();
+    let app = this;
+    app.judgeLogin();
+    app.calHeight(document.body.clientHeight)
+    window.addEventListener('resize', () => {
+      app.calHeight(document.body.clientHeight)
+    })
   },
   methods: {
+    calHeight(height) {
+      let h = height * 0.75;
+      this.$store.state.windowsHeight = h < 200 ? 200 : h;
+      this.$store.state.tableHeight = this.$store.state.windowsHeight*0.67;
+    },
     judgeLogin() {
       let token = this.$store.getters.getToken;
       this.isLogin = token && token !== '';
-      this.activeIndex = 1;
+      this.activeIndex = '1';
       if (this.isLogin) {
         this.updateAuth();
       }
@@ -108,14 +117,14 @@ export default {
         serviceId: this.$constant.serviceId,
         type: app.$constant.authType
       }
-      let keys = Object.keys(app.pageShow);
-      loginApi.getUserPermissions(params).then(res=>{
+      app.pageShow = {};
+      app.$store.state.pageShow = {};
+      loginApi.getUserPermissions(params).then(res => {
         if (res.code === 200) {
           res.content.forEach(item => {
-            if (keys.indexOf(item.permissionName)>-1) {
-              app.pageShow[item.permissionName] = true;
-            }
+            app.pageShow[item.permissionName] = true;
           })
+          app.$store.state.pageShow = app.pageShow;
         }
       })
     },
@@ -124,18 +133,20 @@ export default {
     },
     login() {
       let app = this;
-      if (!app.loginForm.userName || app.loginForm.userName==='') {
+      if (!app.loginForm.userName || app.loginForm.userName === '') {
         app.$message({message: '请输入用户名', type: 'warning'});
         return;
-      } else if (!app.loginForm.password || app.loginForm.password==='') {
+      } else if (!app.loginForm.password || app.loginForm.password === '') {
         app.$message({message: '请输入密码', type: 'warning'});
         return;
       }
       app.$util.loading.handleLoading(true)
       loginApi.userLogin(app.loginForm).then(res => {
-        app.$store.state.token = res.message
-        app.$store.commit('setUserInfo', res.content);
-        app.$store.commit('setToken', res.message);
+        if (res.code === 200) {
+          app.$store.state.token = res.message
+          app.$store.commit('setUserInfo', res.content);
+          app.$store.commit('setToken', res.message);
+        }
         app.$util.loading.handleLoading(false);
         app.judgeLogin()
       }).catch(err => {
@@ -148,6 +159,8 @@ export default {
       this.$util.loading.handleLoading(true);
       this.$store.state.token = '';
       this.$store.state.userInfo = {};
+      this.$store.state.pageShow = {};
+      this.pageShow = {};
       this.loginForm = {
         userName: '',
         password: '',
@@ -285,6 +298,7 @@ export default {
 .el-dialog__body {
   padding-top: 10px;
 }
+
 .el-menu .is-active {
   color: #6566f4 !important;
 }

+ 14 - 14
vue.config.js

@@ -68,20 +68,20 @@ module.exports = defineConfig({
     devServer: {
         port: 8080,
         proxy: {
-            '/proxy_oauth/': {
-                target: process.env.VUE_APP_OAUTHURL,
-                changeOrigin: true,
-                pathRewrite: {
-                    '^/proxy_oauth': ''
-                }
-            },
-            '/proxy_dtbserver/': {
-                target: process.env.VUE_APP_BASEURL,
-                changeOrigin: true,
-                pathRewrite: {
-                    '^/proxy_dtbserver': ''
-                }
-            },
+            // '/proxy_oauth/': {
+            //     target: process.env.VUE_APP_OAUTHURL,
+            //     changeOrigin: true,
+            //     pathRewrite: {
+            //         '^/proxy_oauth': ''
+            //     }
+            // },
+            // '/proxy_dtbserver/': {
+            //     target: process.env.VUE_APP_BASEURL,
+            //     changeOrigin: true,
+            //     pathRewrite: {
+            //         '^/proxy_dtbserver': ''
+            //     }
+            // },
         }
     }
 })