Преглед изворни кода

修改申勤项目数据读取重新替换新接口

mork пре 1 недеља
родитељ
комит
1e0a36a3d5

+ 7 - 2
README.md

@@ -1,4 +1,4 @@
-# data_demo
+# sq_dataview
 
 ## 安装依赖
 ```
@@ -66,4 +66,9 @@ npm run build
 3、 优化项目信息显示效果
 
 - **2026-09-02**
-1、 优化外部链接自动登陆功能,添加根据token自动登陆验证功能
+1、 优化外部链接自动登陆功能,添加根据token自动登陆验证功能
+
+- **2026-09-08**
+1、 申勤项目数据读取重新替换新接口
+2、 读取出来的项目数据,处理成上图展示需要的格式
+3、 优化按新项目数据来修改项目信息的功能

+ 63 - 5
package-lock.json

@@ -25,6 +25,7 @@
         "vue3-carousel": "^0.15.1",
         "vuex": "^4.0.0",
         "vuex-persistedstate": "^4.1.0",
+        "wellknown": "^0.5.0",
         "xlsx": "^0.18.5"
       },
       "devDependencies": {
@@ -5571,6 +5572,46 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/concat-stream": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
+      "integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==",
+      "engines": [
+        "node >= 0.8"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "~2.0.1",
+        "readable-stream": "~2.0.0",
+        "typedarray": "~0.0.5"
+      }
+    },
+    "node_modules/concat-stream/node_modules/process-nextick-args": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+      "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==",
+      "license": "MIT"
+    },
+    "node_modules/concat-stream/node_modules/readable-stream": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+      "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==",
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~1.0.6",
+        "string_decoder": "~0.10.x",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/concat-stream/node_modules/string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+      "license": "MIT"
+    },
     "node_modules/concaveman": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/concaveman/-/concaveman-1.2.1.tgz",
@@ -5762,7 +5803,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
       "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/cosmiconfig": {
@@ -7886,7 +7926,6 @@
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true,
       "license": "ISC"
     },
     "node_modules/ipaddr.js": {
@@ -8102,7 +8141,6 @@
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/isexe": {
@@ -9013,7 +9051,6 @@
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
       "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true,
       "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -12032,6 +12069,15 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/typedarray": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.7.tgz",
+      "integrity": "sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/undici-types": {
       "version": "7.18.2",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
@@ -12104,7 +12150,6 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/utila": {
@@ -12795,6 +12840,19 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/wellknown": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/wellknown/-/wellknown-0.5.0.tgz",
+      "integrity": "sha512-za5vTLuPF9nmrVOovYQwNEWE/PwJCM+yHMAj4xN1WWUvtq9OElsvKiPL0CR9rO8xhrYqL7NpI7IknqR8r6eYOg==",
+      "license": "BSD",
+      "dependencies": {
+        "concat-stream": "~1.5.0",
+        "minimist": "~1.2.0"
+      },
+      "bin": {
+        "wellknown": "cli.js"
+      }
+    },
     "node_modules/wgs84": {
       "version": "0.0.0",
       "resolved": "https://registry.npmjs.org/wgs84/-/wgs84-0.0.0.tgz",

+ 2 - 1
package.json

@@ -13,9 +13,9 @@
     "axios": "^0.27.2",
     "echarts": "^5.6.0",
     "element-plus": "^2.9.10",
-    "moment": "^2.30.1",
     "json-editor-vue": "^0.18.1",
     "mapbox-gl": "^3.21.0",
+    "moment": "^2.30.1",
     "vue": "^3.2.13",
     "vue-carousel-3d": "^1.0.1",
     "vue-clipboard3": "^2.0.0",
@@ -24,6 +24,7 @@
     "vue3-carousel": "^0.15.1",
     "vuex": "^4.0.0",
     "vuex-persistedstate": "^4.1.0",
+    "wellknown": "^0.5.0",
     "xlsx": "^0.18.5"
   },
   "devDependencies": {

+ 12 - 0
public/static/config/config.js

@@ -23,4 +23,16 @@ var webConfig = {
     MAPBOX_TILES_BLUE: "https://service-api.onemap.sh.gov.cn/data-service-manage-service/MapProxyApi/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBsaWNhdGlvbl9pZCI6NjEsImFwcGxpY2F0aW9uX25hbWUiOiLpnZLmtabkuozkuInnu7TmnI3liqHns7vnu58iLCJleHAiOjIwNDY2Nzg0MDN9.IKUMdjUX4U1jncIUNren-iotL7duXI90aLECMjpvUX8/shmap_blue_web/MapServer/tile/{z}/{y}/{x}",
     MAPBOX_TILES_YXT:"https://t6.tianditu.gov.cn/img_w/wmts?tilematrix={z}&layer=img&style=default&tilerow={y}&tilecol={x}&tilematrixset=w&format=tiles&service=WMTS&version=1.0.0&request=GetTile&tk=f74e6c0cc247c42af05f7053e0b5fb9b",
     CITY_CODE_LIST: ['青浦区', '黄浦区', '徐汇区', '静安区', '长宁区', '普陀区', '虹口区', '杨浦区', '闵行区','宝山区', '浦东新区', '嘉定区', '松江区', '金山区', '奉贤区', '崇明区'],
+   // 过滤字段
+    FILTER_PARAM: [
+        {"name":"项目名称","value":"c_xmmc"},
+        {"name":"项目地址","value":"c_xmdz"},
+        {"name":"省份","value":"c_sfzxs"},
+        {"name":"市辖区","value":"c_sq"},
+        {"name":"项目员工人数","value":"c_xmygrs"},
+        {"name":"管理区域","value":"c_glqynbkj"},
+        {"name":"汇总业态","value":"c_hzyt"},
+        {"name":"dms_id","value":"id"},
+        {"name":"guid","value":"c_guid"},
+      ],
 }

+ 10 - 2
public/static/plugins/mapDraw.js

@@ -602,7 +602,11 @@
               that.selectedFeature = JSON.parse(JSON.stringify(sourceData));
             }else{
               sourceData.features.forEach(item => {
-                if(item.properties.dms_id === feature.properties.dms_id){
+                // if(item.properties.dms_id === feature.properties.dms_id){
+                //   that.selectedFeature = JSON.parse(JSON.stringify(item));
+                //   return;
+                // }
+                if(item.properties.id === feature.properties.id){
                   that.selectedFeature = JSON.parse(JSON.stringify(item));
                   return;
                 }
@@ -660,7 +664,11 @@
           that.selectedFeature = JSON.parse(JSON.stringify(sourceData));
         }else{
           sourceData.features.forEach(item => {
-            if(item.properties.dms_id === feature.properties.dms_id){
+            // if(item.properties.dms_id === feature.properties.dms_id){
+            //   that.selectedFeature = JSON.parse(JSON.stringify(item));
+            //   return;
+            // }
+            if(item.properties.id === feature.properties.id){
               that.selectedFeature = JSON.parse(JSON.stringify(item));
               return;
             }

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
public/static/plugins/mapDraw.min.js


+ 0 - 2
src/components/DrawMap.vue

@@ -39,12 +39,10 @@ export default {
             // that.mapDraw = new MapDraw.init(window.mapboxMap, {
               // 编辑完成 → 自动接收最新图形
               // onEditComplete: (data) => {
-              //   console.log("返回数据:", data);
               //   // 你可以在这里提交后端接口,将数据保存到数据库
               //   that.updateContent(data);
               // },
             // });
-            // console.log("mapDraw:", that.mapDraw);
             that.mapDraw = window.mapEditDraw;
         })
     },

+ 0 - 3
src/components/Header.vue

@@ -97,15 +97,12 @@ export default {
       // 创建一个数组,将数字映射到星期几的名称
       const daysOfWeek = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
 
-
-
       const year = date.getFullYear().toString().padStart(4, "0");
       const month = (date.getMonth() + 1).toString().padStart(2, "0");
       const day = date.getDate().toString().padStart(2, "0");
       const hour = date.getHours().toString().padStart(2, "0");
       const minute = date.getMinutes().toString().padStart(2, "0");
       const second = date.getSeconds().toString().padStart(2, "0");
-      // console.log(`${year}-${month}-${day}-${hour}-${minute}-${second}`);
       this.time = `${daysOfWeek[dayOfWeek]} ${hour}:${minute}:${second} ${year}-${month}-${day}`
     },
     handmeasureDistance(){

+ 0 - 6
src/components/JsonEditor.vue

@@ -36,7 +36,6 @@
     watch: {
       editDataList: {
         handler(newVal, oldVal) {
-          // console.log("======editDataList======="+newVal);
           if (!newVal?.geometry?.coordinates) {
             this.localData = {};
             return;
@@ -63,17 +62,14 @@
     },
     methods: {
       onJsonChange (value) {
-        // console.log('更改value:', value);
         const json = JSON.parse(value);
         this.onJsonSave(json)
       },
       onJsonSave (value) {
-        // console.log('保存value:', value);
         this.localData = value
         this.hasJsonFlag = true
       },
       onError(value) {
-        // console.log("数据格式错误:", value);
         this.hasJsonFlag = false
       },
       copyJson(){
@@ -100,7 +96,6 @@
       // 检查json
       saveJson(){
         if (this.hasJsonFlag == false){
-          // console.log("json验证失败")
           ElMessage({
             message: "数据格式验证失败",
             type: "error",
@@ -108,7 +103,6 @@
           });
           return false
         } else {
-          // console.log("json验证成功")
           // this.$message.success("json验证成功")
           // alert("json验证成功")
           // ElMessage({

+ 32 - 19
src/components/LeftMenu.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="container" ref="myContainer" :style="{ marginTop: loginType == 'AUTO' ? '10px' : '70px' }">
-    <div class="left-menu" :style="{ height: loginType == 'AUTO' ? 'calc(100vh - 88px)' : 'calc(100vh - 150px)' }">
+    <div class="left-menu" :style="{ height: loginType == 'AUTO' ? 'calc(100vh - 80px)' : 'calc(100vh - 140px)' }">
         <div class="search-box" v-if="isOpen">
             <el-autocomplete
             v-model="state"
@@ -26,12 +26,15 @@
               </el-collapse> -->
 
               <el-collapse expand-icon-position="left" v-model="activeNames" @change="handleChange">
-                <el-collapse-item :title="list+'('+restaurants.filter(item => list.includes(item['市(区)'])).length+')'" :name="i" v-for="(list,i) in CITY_CODE_LIST" :key="list" >
-                      <div :name="i2" v-for="(tree,i2) in treeFilter" :key="tree">
+                <!-- <el-collapse-item :title="list+'('+restaurants.filter(item => list.includes(item['市(区)'])).length+')'" :name="i" v-for="(list,i) in CITY_CODE_LIST" :key="list" > -->
+                <el-collapse-item :title="list+'('+restaurants.filter(item => list.includes(item.c_sq)).length+')'" :name="i" v-for="(list,i) in CITY_CODE_LIST" :key="list" >
+                  <div :name="i2" v-for="(tree,i2) in treeFilter" :key="tree">
                         <div v-if="list.includes(tree.lable)">
                           <el-collapse class="inner-collapse" expand-icon-position="left" v-model="activeChildrenNames" @change="handleChange">
-                            <el-collapse-item :title="tree.value+'('+restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item['管理区域(内部口径)'] && tree.lable.includes(item['市(区)'])).length+')'"  >
-                              <div v-for="(item2) in restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item['管理区域(内部口径)'] && tree.lable.includes(item['市(区)']))" :key="item2" class="menu-item" :class="{'active':item2.checkItem==checkItem}"  @click="selectItem(item2)">
+                            <!-- <el-collapse-item :title="tree.value+'('+restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item['管理区域(内部口径)'] && tree.lable.includes(item['市(区)'])).length+')'"  >
+                              <div v-for="(item2) in restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item['管理区域(内部口径)'] && tree.lable.includes(item['市(区)']))" :key="item2" class="menu-item" :class="{'active':item2.checkItem==checkItem}"  @click="selectItem(item2)"> -->
+                            <el-collapse-item :title="tree.value+'('+restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item.c_glqynbkj && tree.lable.includes(item.c_sq)).length+')'"  >
+                              <div v-for="(item2) in restaurants.filter(item => (tree.value=='未知'?'':tree.value) == item.c_glqynbkj && tree.lable.includes(item.c_sq))" :key="item2" class="menu-item" :class="{'active':item2.checkItem==checkItem}"  @click="selectItem(item2)">
                                   <p style="color: #fff;">{{item2.value}}</p>
                                   <p style="font-size:12px;color:#d8ecff;">{{item2.address}}</p>
                               </div>
@@ -39,8 +42,9 @@
                           </el-collapse>
                         </div>
                       </div>
-                      <div v-for="(item3) in restaurants.filter(item => list.includes(item['市(区)']) && (item['管理区域(内部口径)'].includes(list) || item['管理区域(内部口径)'].includes('中心区')))" :key="item3" class="menu-item" :class="{'active':item3.checkItem==checkItem}"  @click="selectItem(item3)">
-                          <p style="color: #fff;">{{item3.value}}</p>
+                      <!-- <div v-for="(item3) in restaurants.filter(item => list.includes(item['市(区)']) && (item['管理区域(内部口径)'].includes(list) || item['管理区域(内部口径)'].includes('中心区')))" :key="item3" class="menu-item" :class="{'active':item3.checkItem==checkItem}"  @click="selectItem(item3)"> -->
+                      <div v-for="(item3) in restaurants.filter(item => list.includes(item.c_sq) && (item.c_glqynbkj.includes(list) || item.c_glqynbkj.includes('中心区')))" :key="item3" class="menu-item" :class="{'active':item3.checkItem==checkItem}"  @click="selectItem(item3)">
+                        <p style="color: #fff;">{{item3.value}}</p>
                           <p style="font-size:12px;color:#d8ecff;">{{item3.address}}</p>
                       </div>
                 </el-collapse-item>
@@ -73,7 +77,8 @@ export default {
         isOpenText: "<",
         activeNames: [],
         activeChildrenNames: [],
-        arrParam: ["补查查询串","补查相似度","补查原因","补查匹配地址","补查点坐标","补查匹配名称","补查buffer_m","补查状态"], //过滤字段
+        // arrParam: ["补查查询串","补查相似度","补查原因","补查匹配地址","补查点坐标","补查匹配名称","补查buffer_m","补查状态"], //过滤字段
+        arrParam: webConfig.FILTER_PARAM, //过滤字段 
         treeFilter: [],
         loginType: sessionStorage.getItem("gisLoginType") || '',
     };
@@ -100,9 +105,13 @@ export default {
           if(that.$props.dataList.features){
             if(that.$props.dataList.features.length>0){
                 that.$props.dataList.features.forEach(item => {
-                    item.properties.value = item.properties['项目名称']
-                    item.properties.address = item.properties['项目地址']
-                    that.treeFilter.push({value:item.properties['管理区域(内部口径)']==""?"未知":item.properties['管理区域(内部口径)'],lable:item.properties['市(区)']});
+                    // item.properties.value = item.properties['项目名称']
+                    // item.properties.address = item.properties['项目地址']
+                    // that.treeFilter.push({value:item.properties['管理区域(内部口径)']==""?"未知":item.properties['管理区域(内部口径)'],lable:item.properties['市(区)']});
+                    
+                    item.properties.value = item.properties.c_xmmc
+                    item.properties.address = item.properties.c_xmdz
+                    that.treeFilter.push({value:item.properties.c_glqynbkj==""?"未知":item.properties.c_glqynbkj,lable:item.properties.c_sq});
                     const center = turf.centerOfMass(item.geometry)
                     item.properties.center = center.geometry.coordinates;
                     that.restaurants.push(item.properties);
@@ -120,7 +129,6 @@ export default {
                 })
                 that.treeFilter =  that.treeFilter.filter(item => !item.value.includes("中心区"));
 
-                // console.log("===========",that.treeFilter);
             }
           }
         }, 500);
@@ -141,13 +149,16 @@ export default {
 
         let str = ""
           for (var item in param) {
-            if (UTIL.isChinese(item) && !that.arrParam.includes(item)) {
-              str += `<p style="margin:2px 0;">${item}:${param[item]}</p>`;
+            // if (UTIL.isChinese(item) && !that.arrParam.includes(item)) {
+            //   str += `<p style="margin:2px 0;">${item}:${param[item]}</p>`;
+            // }
+            if (that.arrParam.map(ev => ev.value).includes(item)) {
+              str += `<p style="margin:2px 0;">${that.arrParam.find(et => et.value == item).name}:${param[item]}</p>`;
             }
           }
           const popupContent = `
           <div style="font-size:14px;line-height:1.6;padding:10px;">
-            <h4 style="margin:0 0 6px 0;color:#222;"><span>内容信息</span><span class="more" id="popup-more-btn">员工信息>></span></h4>
+            <h4 style="margin:0 0 6px 0;color:#222;"><span>内容信息</span><span style="display: ${param.c_xmygrs>0 ? 'block' : 'none'};" class="more" id="popup-more-btn">员工信息>></span></h4>
             ${str}
           </div>
         `;
@@ -169,7 +180,7 @@ export default {
           if (moreBtn) {
             moreBtn.addEventListener('click', () => {
               let pro = {properties:param}
-              that.$parent.handleMoreClick(pro.properties.GUID,"",0);
+              that.$parent.handleMoreClick(pro.properties.c_guid,"",0);
             });
           }
         }, 0);
@@ -217,12 +228,14 @@ export default {
             var results = item.value ? restaurants.filter(that.createStateFilter(item.value)) : restaurants;
             results.forEach(element => {
                 that.CITY_CODE_LIST.forEach((item,index) => {
-                  if(item.includes(element['市(区)'])){
+                  // if(item.includes(element['市(区)'])){
+                  if(item.includes(element.c_sq)){
                     that.activeNames.push(index)
                   }
                 })
                 that.treeFilter.forEach((item,index) => {
-                  if(item.value.includes(element['管理区域(内部口径)'])){
+                  // if(item.value.includes(element['管理区域(内部口径)'])){
+                  if(item.value.includes(element.c_glqynbkj)){
                     that.activeChildrenNames.push(index)
                   }
                 })
@@ -320,7 +333,7 @@ export default {
     z-index: 2;
 }
 .left-menu {
-  height: calc(100vh - 150px);
+  height: calc(100vh - 140px);
 }
 .search-box{
     margin: 20px;

+ 84 - 45
src/components/Map.vue

@@ -33,7 +33,7 @@
   <div class="map-center-crosshair" v-if="btn_Aim_show"></div>
 
   <div class="tips">
-    <div id="tipsText" @click="copyDivText('#tipsText')">位置信息:{{mouseCenter}}</div>
+    <span id="tipsText" @click="copyDivText('#tipsText')">位置信息:{{mouseCenter}}</span>
   </div>
 
   <div class="select-item" v-if="btn_data_show">
@@ -83,6 +83,7 @@ import { ElMessage } from "element-plus";
 import LeftMenu from "@/components/LeftMenu.vue";
 import VueJsonEditor from '@/components/JsonEditor.vue';
 import Table from '@/components/Table.vue';
+import * as wellknown from 'wellknown';
 import UTIL from '@/utils/util'
 import commonAPI from '@/api/common'
 import api from '@/api/content'
@@ -124,7 +125,8 @@ export default {
       },
       contentItem: {},
 
-      arrParam: ["补查查询串","补查相似度","补查原因","补查匹配地址","补查点坐标","补查匹配名称","补查buffer_m","补查状态"], //过滤字段
+      // arrParam: ["补查查询串","补查相似度","补查原因","补查匹配地址","补查点坐标","补查匹配名称","补查buffer_m","补查状态"], //过滤字段
+      arrParam: webConfig.FILTER_PARAM,
       selectText: [],
       options: [],
       fontText:["concat"],// "concat", ["get", "GUID"], "\n", ["get", "match_status"],"\n", ["get", "range_shape"]
@@ -140,26 +142,35 @@ export default {
   },
   methods: {
     saveFeature(data){
-      if(!data.properties.dms_id){
+      if(!data.properties.id){
         ElMessage.error("请选择正确数据进行保存");
         return;
       }
       let content = {};
-      content["id"] = data.properties.dms_id;
+      // content["id"] = data.properties.dms_id;
+      // content["c_polygon"] = UTIL.geojsonToWkt(data.geometry);
+      // content["c_properties"] = data.properties;
+      // let params = {
+      //   content: JSON.stringify(content),
+      //   columnId: 1719,
+      //   modelId: 1753,
+      // };
+      
+      content = data.properties;
       content["c_polygon"] = UTIL.geojsonToWkt(data.geometry);
-      content["c_properties"] = data.properties;
       let params = {
         content: JSON.stringify(content),
-        columnId: 1719,
-        modelId: 1753,
+        columnId: 1743, // 保存到申勤项目数据的栏目ID
+        modelId: 1794,  // 保存到申勤项目数据的模型ID
       };
-      console.log(params);
       commonAPI.updateContent(params).then(res => {
         if(res.code == 200){
           ElMessage.success("保存成功");
-          this.getVectorData();
+          // this.getVectorData();
+          this.getDmsData();
           // 清空绘制工具
-          this.mapEditDraw.clearAll();
+          // this.mapEditDraw.clearAll();
+          this.closeJsonEditor();
         }else{
           ElMessage.error(res.msg);
         }
@@ -244,8 +255,6 @@ export default {
         modelId: webConfig.columnArr[0].mid, // 申勤员工ID
       };
       api.getColumnModel(requestParams).then((res) => {
-        // console.log(res);
-        
         if (res.code === 200) {
           that.columnModel = res.content;
           that.columnModel.modelId = webConfig.columnArr[0].mid;
@@ -261,7 +270,6 @@ export default {
         columnId: item.column_id,
         contentId: item.id,
       };
-      // console.log(item);
       api.getContentById(requestParams).then((data) => {
         if (data.code === 200) {
           that.contentItem = data.content;
@@ -274,13 +282,11 @@ export default {
     //关闭编辑弹窗
     handleEditClose(flag) {
       const that = this;
-      // console.log("关闭编辑弹窗",flag);
       that.contentItem = {};
       that.isContentShow = false;
       that.isContentView = false;
       if(flag){
         let guid = sessionStorage.getItem('guid');
-        // console.log("关闭编辑弹窗",guid);
         that.handleMoreClick(guid,this.tableSearchText,this.page);
         that.$parent.getDmsDataList();
       }
@@ -343,19 +349,23 @@ export default {
         that.mapEditDraw = new MapDraw.init(window.mapboxMap, {
           // 编辑完成 → 自动接收最新图形
           onEditComplete: (data) => {
-            // console.log("===mapEditDraw返回数据===:", data);
-            if(data.properties.dms_id){// 对dms_id进行判断
+            // if(data.properties.dms_id){// 对dms_id进行判断
+            if(data.properties.id){
               that.editDataList = data;
+              delete that.editDataList.properties.center
+              delete that.editDataList.properties.checkItem
+              delete that.editDataList.properties.value
+              delete that.editDataList.properties.address
             }
             // 你可以在这里提交后端接口,将数据保存到数据库
           }
         });
         window.mapEditDraw = that.mapEditDraw;
-        // console.log("mapEditDraw:", that.mapEditDraw);
 
       })
       that.drawAreaFeature();
-      this.getVectorData();
+      // this.getVectorData();
+      this.getDmsData();
     },
 
     initBaseMap(type){
@@ -448,17 +458,14 @@ export default {
       });
       // window.mapboxMap.on('click', function(e) {
       //   // that.editDataList = fet;
-      //   console.log("仅获取 click 的要素:", e);
       //   if (that.editFlag) return;
       //   // 关键:只查询 data-fill-layer,过滤掉所有其他图层
       //   const features = window.mapboxMap.queryRenderedFeatures(e.point, {
       //     layers: ['data-fill-layer'] // 只取这个图层
       //   });
-      //   // console.log("仅获取e的要素:", e);
       //   if (!features.length) return;
       //   //  现在最多只有 1 个要素 → 绝对不会乱
       //   const feature = features[0];
-      //   console.log("仅获取 feature 的要素:", feature);
       //   //  深拷贝 Geometry:绝对避免引用错乱
       //   const fet = {
       //     type: "Feature",
@@ -466,7 +473,6 @@ export default {
       //     properties: { ...feature.properties }
       //   };
         
-      //   // console.log("仅获取 data-fill-layer 的要素:", fet);
       //   // 以下弹窗(注意要使用 fet.properties)
       //   let str = "";
       //   for (let item in fet.properties) {
@@ -497,7 +503,6 @@ export default {
     mapClickValue(e){
         let that = this;
       // that.editDataList = fet;
-        // console.log("仅获取 click 的要素:", e);
         // 关键:只查询 data-fill-layer,过滤掉所有其他图层
         const features = window.mapboxMap.queryRenderedFeatures(e.point, {
           layers: ['data-fill-layer'] // 只取这个图层
@@ -511,11 +516,9 @@ export default {
           }
           return;
         };
-        // console.log("仅获取e的要素:", e);
         if (!features.length) return;
         //  现在最多只有 1 个要素 → 绝对不会乱
         const feature = features[0];
-        // console.log("仅获取 feature 的要素:", feature);
         //  深拷贝 Geometry:绝对避免引用错乱
         const fet = {
           type: "Feature",
@@ -523,20 +526,21 @@ export default {
           properties: { ...feature.properties }
         };
         
-        // console.log("仅获取 data-fill-layer 的要素:", fet);
         // 以下弹窗(注意要使用 fet.properties)
         
         let str = "";
         for (let item in fet.properties) {
-          // console.log(item);
-          if (UTIL.isChinese(item) && !that.arrParam.includes(item)) {
-            str += `<p style="margin:2px 0;">${item}:${fet.properties[item]}</p>`;
+          // if (UTIL.isChinese(item) && !that.arrParam.includes(item)) {
+          //   str += `<p style="margin:2px 0;">${item}:${fet.properties[item]}</p>`;
+          // }
+          if (that.arrParam.map(ev => ev.value).includes(item)) {
+            str += `<p style="margin:2px 0;">${that.arrParam.find(et => et.value == item).name}:${fet.properties[item]}</p>`;
           }
         }
 
         const popupContent = `
         <div style="font-size:14px;line-height:1.6;padding:10px;">
-          <h4 style="margin:0 0 6px 0;color:#222;"><span>内容信息</span><span class="more" id="popup-more-btn">员工信息>></span></h4>
+          <h4 style="margin:0 0 6px 0;color:#222;"><span>内容信息</span><span style="display: ${fet.properties.c_xmygrs>0 ? 'block' : 'none'};" class="more" id="popup-more-btn">员工信息>></span></h4>
           ${str}
         </div>
         `;
@@ -557,8 +561,8 @@ export default {
             moreBtn.addEventListener('click', () => {
               // that.tableShow = false;
               this.tableSearchText = "";
-              sessionStorage.setItem('guid', fet.properties.GUID);
-              that.handleMoreClick(fet.properties.GUID,"",0);
+              sessionStorage.setItem('guid', fet.properties.c_guid);
+              that.handleMoreClick(fet.properties.c_guid,"",0);
             });
           }
         }, 0);
@@ -584,8 +588,6 @@ export default {
         pageSize: that.pageSize,
         page: that.page,
       };
-      // console.log("guid:", guid);
-      // console.log("text:", text); 
       let arr = [...(requestParams.search ? JSON.parse(requestParams.search) : [])];
       if(guid){
         arr.push({
@@ -621,7 +623,6 @@ export default {
             }
             return newItem;
           })
-          // console.log("data:", data);
           that.tableData = data;
           that.tableData.sort((a, b) => a.c_xm.localeCompare(b.c_xm, 'zh-CN'))
           
@@ -649,7 +650,6 @@ export default {
         that.tableSearchText = text;
         that.handlePageChange(0,that.pageSize,that.tableSearchText);
       });
-      // console.log("that.tableSearchText:", that.tableSearchText);
     },
     // 复制指定元素内的文本
     copyDivText(selector) {
@@ -661,7 +661,8 @@ export default {
                 });;
 
       // 创建临时文本域
-      const text = el.innerText.trim();
+      let text = el.innerText.trim();
+      text = text.replace('位置信息:', '');
       this.$copyText(text);
       // navigator.clipboard.writeText(text).then(() => {
       //   ElMessage({
@@ -680,7 +681,6 @@ export default {
     toggleEditMode(isEdit){
       let that = this;
       that.editFlag = isEdit;
-      // console.log("isEdit:", isEdit);
       // if(isEdit){
       //    this.editWinFlag = true;
       //    window.mapboxMap.off('click', that.mapClickValue)
@@ -868,23 +868,62 @@ export default {
               that.$message.success('token过期,请重新登录');
               that.$router.push({ path: '/' });
             }else{
-              that.createVectorLayer(response.data);
+              // that.createVectorLayer(response.data);
             }
         })
         .catch(function (error) {
             console.log(error);
         });
-
+    },
+    getDmsData() {
+      let that = this;
+       let param = {
+        "columnId": 1743,
+        "orderBy": JSON.stringify([{"field":"update_time","orderByType":2}]),
+        "states": '0,1,2,3',
+        "pageSize": 99999,
+        "page": 0
+      }
+      let feat = {
+        type: "FeatureCollection",
+        features: [],
+      }
+      commonAPI.getDmsDataList(param).then((res) => {
+        if(res.message == '无效token'){
+          that.$message.success('token过期,请重新登录');
+          that.$router.push({ path: '/' });
+        }else{
+          if (res.code == 200){
+            const ret = res.content.data || [];
+            ret.forEach(item => {
+              const prop = Object.fromEntries(
+                Object.entries(item).filter(([key]) => that.arrParam.find(et => et.value == key))
+              )
+              let feature = {
+                type: "Feature",
+                geometry: wellknown.parse(item.c_polygon.value) || {},
+                properties: prop || {},
+              }
+              feat.features.push(feature);
+            });
+            that.createVectorLayer(feat);
+          }
+        }
+        
+      }).catch((error)=>{
+      })
     },
     createVectorLayer(vectorData) {
       let that = this;
-      // console.log(vectorData);
       that.options = [];
       for (let o in vectorData.features[0].properties) {
+        if (that.arrParam.map(ev => ev.value).includes(o)) {
           that.options.push({
-            value: o,
-            label: o,
-          })
+              value: o,
+              label: o,
+            })
+        }
+          
         }
       that.dataList = vectorData;
       if(window.mapboxMap.getSource('vector-data')){

+ 0 - 2
src/components/Table.vue

@@ -80,7 +80,6 @@ export default {
     watch: {
         tableData: {
             handler: function (newVal, oldVal) {
-                // console.log("newVal:", newVal);
                 this.updateTableData();
             },
             deep: true
@@ -113,7 +112,6 @@ export default {
             }
             that.modelFieldList.push(obj);
         }
-        // console.log("that.modelFieldList:", that.modelFieldList);
         this.modelFieldList.sort((a, b) => {
             return a.index > b.index ? 1 : -1;
         });

+ 1 - 10
src/components/editManage.vue

@@ -9,9 +9,8 @@
       :close-on-click-modal="false"
       :before-close="dialogBeforeClose"
       draggable
-      style="overflow: auto; height: 700px"
     >
-      <el-form :model="dataForm" :rules="dataFormRules" label-width="150px" ref="dataForm">
+      <el-form :model="dataForm" :rules="dataFormRules" label-width="150px" ref="dataForm" style="overflow: auto; height: 500px">
         <el-form-item :label="'ID(内置)'" v-show="false">
           <el-input v-model="dataForm.id" />
         </el-form-item>
@@ -554,7 +553,6 @@ export default {
       } else if (["select", "multiple_select"].indexOf(obj.frontType) > -1) {
         this.getCheckItems(obj, 2);
       }
-      // console.log("==========" + obj);
       obj.itemType = obj.name;
       this.modelFieldList.push(obj);
     }
@@ -570,8 +568,6 @@ export default {
     //   } else if (["select", "multiple_select"].indexOf(obj.frontType) > -1) {
     //     this.getCheckItems(obj, 2);
     //   }
-    //   debugger
-    //   console.log(1111);
 
     //   this.modelFieldList.push(obj);
     // }
@@ -667,7 +663,6 @@ export default {
       });
     }
     this.dataForm = this.item;
-    // console.log(this.dataForm)
   },
   mounted() {
     this.isMapShow = false;
@@ -1134,8 +1129,6 @@ export default {
           //定位到矩形
           that.map.fitBounds(bounds);
 
-          // console.log(t)
-
           for (let i = 0; i < geojsons.length; i++) {
             let layer = that.$L
               .geoJSON(geojsons[i], {
@@ -1325,7 +1318,6 @@ export default {
       let that = this;
       this.$refs.dataForm.validate((valid) => {
         if (valid) {
-          // console.log("[ eeeee ] >");
           let content = {};
           content["id"] = that.dataForm["id"];
           content["title"] = that.dataForm["title"];
@@ -1391,7 +1383,6 @@ export default {
     },
     getCheckItems(item, type) {
       let that = this;
-      // console.log("[ eee ] >");
       if (type === 1) {
         api.getCheckDetail({ sName: item.extendId }).then((res) => {
           if (res.code == 200) {

+ 3 - 0
src/env.d.ts

@@ -0,0 +1,3 @@
+declare module 'wellknown' {
+  export function parse(wkt: string): GeoJSON.Geometry;
+}

+ 0 - 1
src/main.js

@@ -20,7 +20,6 @@ for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
 
 // 添加自定义方法,得到用户类型【1:游客;2:普通用户;3:管理员】
 const getUserType = () => {
-  // console.log("=====userInfo==="+JSON.stringify(store.state.userInfo));
   if (store.state.userInfo && store.state.userInfo.id != null) {
     // 得到用户id
     let userId = store.state.userInfo.id;

+ 0 - 3
src/views/AutoLogin.vue

@@ -27,7 +27,6 @@ export default {
     let that = this;
     // 监听父页面发来的消息
     window.addEventListener('message', async (e) => {
-      // console.log("校验发送来源:", e.origin);
       // 校验发送来源,防止恶意页面跨域发送消息
       if(!e.origin.includes("localhost") && !e.origin.includes("121.43.55.7")) {
         ElMessage({
@@ -62,7 +61,6 @@ export default {
     },
 
     getUserByToken(param){
-      // console.log(param,"getUserByToken");
       let that = this;
       sessionStorage.setItem("gisLoginType", "AUTO");//自动登录类型
       // that.loginLoad.close();
@@ -74,7 +72,6 @@ export default {
         token: param
       }
       commonAPI.getUserByToken(params).then((res) => {
-        //  console.log(res,"==================");
         that.$store.state.user = res.content;
         // that.$router.push("/index");
       }).catch((err) => {

+ 0 - 2
src/views/IndexView.vue

@@ -106,7 +106,6 @@ export default {
             }
             return newItem;
           })
-          // console.log("data:", data);
           that.ygDataList = data;
         }else{
           // that.$message({ message: '无员工数据', type: 'info' })
@@ -231,7 +230,6 @@ export default {
             }
           }
         }else{
-          // console.log('[ setItem(guid) ] >');
           sessionStorage.setItem('guid', "");
           that.$refs.childRef.setTableShow(that.searchText)
         }

+ 0 - 1
src/views/Login.vue

@@ -83,7 +83,6 @@ export default {
         if (valid) {
           that.loginLoad = true;
           encrypt‌(that.ruleForm).then((res) => {
-              // console.log(res);
                 sessionStorage.setItem("gisLoginType", "MANUAL");
                 that.loginLoad = false;
                 that.$store.state.login = true;

Неке датотеке нису приказане због велике количине промена