Bläddra i källkod

高级选项,元数据关联

tianyabing 2 år sedan
förälder
incheckning
f85fc5fc9f

+ 5 - 0
src/api/data/MetaData.js

@@ -21,6 +21,10 @@ const updateData = (params) => {
 const deleteData = (params) => {
     return request.postForm(constant.dtbserverProxy + '/metadata/deleteMetadataData', params)
 }
+// 模糊检索其他类型关联数据
+const queryRelateData = (params) => {
+    return request.postForm(constant.dtbserverProxy + '/metadata/selectMetadataRelevancyData', params)
+}
 
 export default {
     getData,
@@ -28,4 +32,5 @@ export default {
     addData,
     updateData,
     deleteData,
+    queryRelateData,
 }

+ 6 - 0
src/components/dataManage/dataDetail/BusinessDataDetail.vue

@@ -47,6 +47,7 @@
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView" />
         </el-form-item>
       </el-form>
+      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -75,6 +76,7 @@ import OlMap from "@/components/map/OlMap";
 import JsonDataView from "@/components/json/JsonDataView";
 import api from "@/api/data/BusinessData";
 import menuApi from "@/api/data/MenuData";
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
 
 export default {
   data() {
@@ -121,8 +123,12 @@ export default {
   components: {
     OlMap,
     JsonDataView,
+    HighOptionData,
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     handleMapShow(flag) {
       if (flag) {
         if (this.formData.menuId) {

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

@@ -0,0 +1,81 @@
+<template>
+  <el-link style="float: right" @click="highOptionShow=!highOptionShow">高级选项
+    <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-column prop="key" label="key" >
+      <template #default="scope" >
+        <el-input v-model="scope.row.key" placeholder="请输入字段名" @blur="handleDataChange" />
+      </template>
+    </el-table-column>
+    <el-table-column prop="value" label="值" >
+      <template #default="scope" >
+        <el-input v-model="scope.row.value" placeholder="请输入值" @blur="handleDataChange" />
+      </template>
+    </el-table-column>
+    <el-table-column align="center" width="100">
+      <template #header>
+        <el-button @click="addOptions"><el-icon><ElIconPlus /></el-icon></el-button>
+      </template>
+      <template #default="scope">
+        <el-button @click="removeOptions(scope.$index)"><el-icon><ElIconMinus /></el-icon></el-button>
+      </template>
+    </el-table-column>
+  </el-table>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      highOptionShow: false,
+      highOptionTableData: [{
+        key: '',
+        value: ''
+      }],
+      properties: {}
+    }
+  },
+  props: {
+    initData: {},
+    callBack: Function,
+  },
+  created() {
+  },
+  mounted() {
+  },
+  watch: {
+
+  },
+  methods: {
+    addOptions() {
+      this.highOptionTableData.push({key:'',value:''});
+      // this.handleDataChange()
+    },
+    removeOptions(index) {
+      this.highOptionTableData.splice(index,1);
+      this.handleDataChange()
+    },
+    handleDataChange() {
+      this.covertProperties();
+      this.callBack(JSON.stringify(this.properties));
+    },
+    covertProperties() {
+      let app = this;
+      app.properties = {};
+      this.highOptionTableData.forEach(i=>{
+        if (!(i.key && i.key!=='')) {
+          return;
+        }
+        app.properties[i.key] = i.value;
+      })
+      return app.properties;
+    }
+  }
+}
+</script>
+
+<style>
+
+</style>

+ 6 - 0
src/components/dataManage/dataDetail/IotDataDetail.vue

@@ -53,6 +53,7 @@
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
         </el-form-item>
       </el-form>
+      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -73,6 +74,7 @@
 import OlMap from "@/components/map/OlMap";
 import api from "@/api/data/ModelData";
 import menuApi from "@/api/data/MenuData";
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
 
 export default {
   data() {
@@ -135,8 +137,12 @@ export default {
   },
   components: {
     OlMap,
+    HighOptionData,
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     handleLonlatSelect(flag) {
       if (flag) {
         this.formData.geometryStr = JSON.stringify(this.covertToGeometry())

+ 61 - 37
src/components/dataManage/dataDetail/MetaDataDetail.vue

@@ -9,16 +9,17 @@
     <div id="addData">
       <el-form ref="form" :model="formData" :rules="formDataRules" style="margin: 0 15px" :label-width="110">
         <el-form-item label="ID:" v-show="false">
-          <el-input v-model="formData.id" />
+          <el-input v-model="formData.id"/>
         </el-form-item>
-        <el-form-item label="标题:" prop="title" >
-          <el-input v-model="formData.title" placeholder="请输入标题" :disabled="formData.isDataView" />
+        <el-form-item label="标题:" prop="title">
+          <el-input v-model="formData.title" placeholder="请输入标题" :disabled="formData.isDataView"/>
         </el-form-item>
         <el-form-item label="描述:" prop="content">
-          <el-input v-model="formData.content" placeholder="请输入描述" :disabled="formData.isDataView" />
+          <el-input v-model="formData.content" placeholder="请输入描述" :disabled="formData.isDataView"/>
         </el-form-item>
         <el-form-item label="类别:" prop="menuId">
-          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect" :disabled="formData.isDataView" >
+          <el-select v-model="formData.menuId" placeholder="请选择类别" @change="handleMenuIdSelect"
+                     :disabled="formData.isDataView">
             <el-option
                 v-for="item in category"
                 :key="item.value"
@@ -28,8 +29,8 @@
           </el-select>
         </el-form-item>
         <el-form-item label="数据类型:" prop="dataType">
-          <el-select v-model="formData.dataType" placeholder="请选择数据类型" :disabled="formData.isDataView" >
-            <el-option v-for="item in dataType" :key="item.value" :label="item.label" :value="item.value" ></el-option>
+          <el-select v-model="formData.dataType" placeholder="请选择数据类型" :disabled="formData.isDataView">
+            <el-option v-for="item in dataType" :key="item.value" :label="item.label" :value="item.value"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="数据ID:" prop="dataId" v-if="formData.dataType && formData.dataType !== ''">
@@ -39,16 +40,20 @@
                      :remote-method="searchForDataId"
                      :remote-show-suffix="true"
                      :loading="searchDataLoading"
-                     :disabled="formData.isDataView" >
+                     :disabled="formData.isDataView">
             <el-option v-for="item in dataList" :key="item.id" :label="item.title" :value="item.id">
-
+              <span style="float: left">{{ item.title }}</span>
+              <span style="float: right;color: var(--el-text-color-secondary);font-size: 10px;">
+                {{ item.content }}
+              </span>
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="地名地址库:" prop="address" >
-          <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView" />
+        <el-form-item label="地名地址库:" prop="address">
+          <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
         </el-form-item>
       </el-form>
+      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -60,8 +65,9 @@
 <script>
 import OlMap from "@/components/map/OlMap";
 import JsonDataView from "@/components/json/JsonDataView";
-import api from "@/api/data/BusinessData";
+import api from "@/api/data/MetaData";
 import menuApi from "@/api/data/MenuData";
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
 
 export default {
   data() {
@@ -70,24 +76,24 @@ export default {
       oriFormData: {},
       formDataRules: {
         title: [
-          { required: true, message: '请输入标题', trigger: 'change' },
+          {required: true, message: '请输入标题', trigger: 'change'},
         ],
         content: [
-          { required: true, message: '请输入描述', trigger: 'change' },
+          {required: true, message: '请输入描述', trigger: 'change'},
         ],
         menuId: [
-          { required: true, message: '请选择类别', trigger: 'change' },
+          {required: true, message: '请选择类别', trigger: 'change'},
         ],
         geometryStr: [
-          { required: true, message: '请输入Geojson数据', trigger: 'blur' },
+          {required: true, message: '请输入Geojson数据', trigger: 'blur'},
         ],
         dataType: [
-          { required: true, message: '请选择数据类型', trigger: 'blur' },
-          { required: true, message: '请选择数据类型', trigger: 'change' },
+          {required: true, message: '请选择数据类型', trigger: 'blur'},
+          {required: true, message: '请选择数据类型', trigger: 'change'},
         ],
         dataId: [
-          { required: true, message: '请输入数据Id', trigger: 'blur' },
-          { required: true, message: '请输入数据Id', trigger: 'change' },
+          {required: true, message: '请输入数据Id', trigger: 'blur'},
+          {required: true, message: '请输入数据Id', trigger: 'change'},
         ]
         // address: [
         //   { required: true, message: '请输入地名地址库名称', trigger: 'change' },
@@ -99,16 +105,16 @@ export default {
           value: 1
         }, {
           label: '三维数据',
-          value: 2
-        },{
+          value: 4
+        }, {
           label: '业务数据',
           value: 3
-        },{
+        }, {
           label: '模型数据',
-          value: 4
-        },{
+          value: 5
+        }, {
           label: '物联感知数据',
-          value: 6
+          value: 2
         },
       ],
       dataList: [],
@@ -126,7 +132,9 @@ export default {
     close: Function
   },
   watch: {
-
+    "formData.dataType": function () {
+      this.formData.dataId = '';
+    }
   },
   mounted() {
     this.getMenuData()
@@ -134,16 +142,20 @@ export default {
     this.oriFormData = JSON.parse(JSON.stringify(this.formData))
   },
   components: {
+    HighOptionData
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     getMenuData() {
       let app = this;
       let params = {
         type: "1",
         parentId: "3",
       }
-      menuApi.getMenuData(params).then(res=>{
-        if (res.code===200) {
+      menuApi.getMenuData(params).then(res => {
+        if (res.code === 200) {
           app.category = res.content
         }
       })
@@ -153,9 +165,9 @@ export default {
     },
     submit() {
       let app = this;
-      app.$refs.form.validate(valid=>{
+      app.$refs.form.validate(valid => {
         if (valid) {
-          if (app.formData.isEdit){
+          if (app.formData.isEdit) {
             app.updateData();
           } else {
             app.addData();
@@ -166,10 +178,22 @@ export default {
       })
     },
     searchForDataId(val) {
+      let app = this;
       this.searchDataLoading = true;
       if (val && val !== '') {
-        this.dataList = []
-        this.searchDataLoading = false;
+        let params = {
+          classId: this.formData.dataType,
+          data: '' + val,
+        }
+        api.queryRelateData(params).then(res => {
+          if (res.code === 200) {
+            app.dataList = res.content
+          }
+          app.searchDataLoading = false;
+        }).catch(() => {
+          app.searchDataLoading = false;
+        })
+
       } else {
         this.dataList = []
         this.searchDataLoading = false;
@@ -181,8 +205,8 @@ export default {
       let params = JSON.parse(JSON.stringify(app.formData));
       params['menuNameOne'] = '二维数据'
       params['userName'] = app.$store.state.userInfo.username;
-      api.addData(params).then(res=>{
-        if (res.code===200) {
+      api.addData(params).then(res => {
+        if (res.code === 200) {
           app.$message({message: '录入成功', type: 'success'})
           app.close(true);
         }
@@ -195,8 +219,8 @@ export default {
       delete params.createDate;
       delete params.updateDate;
       params['userName'] = app.$store.state.userInfo.username;
-      api.updateData(params).then(res=>{
-        if (res.code===200) {
+      api.updateData(params).then(res => {
+        if (res.code === 200) {
           app.$message({message: '修改成功', type: 'success'})
           app.close(true);
         }

+ 6 - 0
src/components/dataManage/dataDetail/ModelDataDetail.vue

@@ -59,6 +59,7 @@
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
         </el-form-item>
       </el-form>
+      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -94,6 +95,7 @@ import OlMap from "@/components/map/OlMap";
 import JsonDataView from "@/components/json/JsonDataView";
 import api from "@/api/data/ModelData";
 import menuApi from "@/api/data/MenuData";
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData"
 
 export default {
   data() {
@@ -161,8 +163,12 @@ export default {
     CesiumMap,
     OlMap,
     JsonDataView,
+    HighOptionData,
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     handleMapShow(flag) {
       if (flag) {
         if (this.formData.url && this.formData.url !== '') {

+ 6 - 0
src/components/dataManage/dataDetail/ThreeDimensionalDataDetail.vue

@@ -59,6 +59,7 @@
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView"/>
         </el-form-item>
       </el-form>
+      <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
     </div>
     <template #footer>
       <el-button type="primary" @click="submit" v-show="!formData.isDataView">保存</el-button>
@@ -94,6 +95,7 @@ import OlMap from "@/components/map/OlMap";
 import JsonDataView from "@/components/json/JsonDataView";
 import api from "@/api/data/ThreeDimensionalData";
 import menuApi from "@/api/data/MenuData";
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData";
 
 export default {
   data() {
@@ -160,8 +162,12 @@ export default {
     CesiumMap,
     OlMap,
     JsonDataView,
+    HighOptionData,
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     handleMapShow(flag) {
       if (flag) {
         if (this.formData.url && this.formData.url !== '') {

+ 6 - 30
src/components/dataManage/dataDetail/TwoDimensionalDataDetail.vue

@@ -46,30 +46,7 @@
         <el-form-item label="地名地址库:" prop="address" >
           <el-input v-model="formData.address" placeholder="请输入地名地址库名称" :disabled="formData.isDataView" />
         </el-form-item>
-        <el-link style="float: right" @click="highOptionShow=!highOptionShow">高级选项
-          <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-column prop="key" label="key" >
-            <template #default="scope" >
-              <el-input v-model="scope.row.key" placeholder="请输入字段名" />
-            </template>
-          </el-table-column>
-          <el-table-column prop="value" label="值" >
-            <template #default="scope" >
-              <el-input v-model="scope.row.value" placeholder="请输入值" />
-            </template>
-          </el-table-column>
-          <el-table-column align="center" width="100">
-            <template #header>
-              <el-button @click="highOptionTableData.push({key:'',value:''})"><el-icon><ElIconPlus /></el-icon></el-button>
-            </template>
-            <template #default="scope">
-              <el-button @click="highOptionTableData.splice(scope.$index,1)"><el-icon><ElIconMinus /></el-icon></el-button>
-            </template>
-          </el-table-column>
-        </el-table>
+        <HighOptionData :init-data="[]" :call-back="setProperties"></HighOptionData>
       </el-form>
     </div>
     <template #footer>
@@ -95,6 +72,7 @@
 </template>
 
 <script>
+import HighOptionData from "@/components/dataManage/dataDetail/HighOptionData"
 import OlMap from "@/components/map/OlMap";
 import JsonDataView from "@/components/json/JsonDataView";
 import api from "@/api/data/TwoDimensionalData";
@@ -127,12 +105,6 @@ export default {
 
       isJsonDataView: false,
 
-      highOptionShow: false,
-      highOptionTableData: [{
-        key: '',
-        value: ''
-      }],
-
     }
   },
   props: {
@@ -150,8 +122,12 @@ export default {
   components: {
     OlMap,
     JsonDataView,
+    HighOptionData,
   },
   methods: {
+    setProperties(item) {
+      this.formData['properties'] = item;
+    },
     handleMapShow(flag) {
       if (flag) {
         if (this.formData.menuId) {

+ 2 - 2
src/views/HomeView.vue

@@ -74,8 +74,8 @@ export default {
       contentHeight: '',
       isLogin: false,
       loginForm: {
-        userName: 'user001',
-        password: '1234567890',
+        userName: '',
+        password: '',
         clientId: this.$constant.serviceId,
       },
       pageShow: {