From bcb6af1fa7973001a43bb08a2d7a8f96e81bc5e5 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Fri, 02 Sep 2022 17:53:22 +0800
Subject: [PATCH] 地块添加修改显示天地图

---
 src/store/modules/user.js          |    3 
 src/components/map/mainInThere.vue |   29 +++
 src/views/wel/land.vue             |  129 ++++++++++++++----
 src/views/land/landAdd.vue         |  137 +++++++++++++++---
 src/views/farmplant/farmplant.vue  |    2 
 src/store/getters.js               |    1 
 src/views/land/landUpdate.vue      |  116 +++++++++++----
 7 files changed, 320 insertions(+), 97 deletions(-)

diff --git a/src/components/map/mainInThere.vue b/src/components/map/mainInThere.vue
index 05a9d69..5c4b791 100644
--- a/src/components/map/mainInThere.vue
+++ b/src/components/map/mainInThere.vue
@@ -113,7 +113,12 @@
         //面实例
         zIndex: 22,
         source: new VectorSource()
-      })
+      }),
+      urls:[
+        "http://t{0-7}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=e9533f5acb2ac470b07f406a4d24b4f0",
+        "http://t{0-7}.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=e9533f5acb2ac470b07f406a4d24b4f0"
+      ],
+      imgSrc:''
     };
   },
   computed: {
@@ -134,9 +139,21 @@
         new OlLayerTile({
           zIndex: 4,
           title: "影像",
-          source: new XYZ({
-            url:
-              "https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal" // 行政区划
+          source: 
+          new XYZ({
+            // url:
+            //   "https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal" // 行政区划
+            url:this.urls[0]
+          })
+        }),
+        new OlLayerTile({
+          zIndex: 5,
+          title: "区划",
+          source: 
+          new XYZ({
+            // url:
+            //   "https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal" // 行政区划
+            url:this.urls[1],
           })
         })
       ],
@@ -155,8 +172,8 @@
 
     var view = ol2d.getView();
     this.source = new VectorSource({ wrapX: false });
-    view.setCenter([115.9032747077233, 28.67433116990186]);
-
+    // view.setCenter([115.9032747077233, 28.67433116990186]);
+    view.setCenter([116.56705776, 27.42386903]);
     this.view = view;
   },
   methods: {
diff --git a/src/store/getters.js b/src/store/getters.js
index 834a8ab..36f6173 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -22,6 +22,7 @@
     menu: state => state.user.menu,
     menuId: state => state.user.menuId,
     menuAll: state => state.user.menuAll,
+    drawMapUrlBase: state => state.user.drawMapUrlBase,
     logsList: state => state.logs.logsList,
     logsLen: state => state.logs.logsList.length || 0,
     logsFlag: (state, getters) => getters.logsLen === 0,
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 2fdc3b8..b0bdaa0 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -51,7 +51,8 @@
     menuAll: getStore({name: 'menuAll'}) || [],
     token: getStore({name: 'token'}) || '',
     refreshToken: getStore({name: 'refreshToken'}) || '',
-    $farmId: 0
+    $farmId: 0,
+    drawMapUrlBase: 'http://127.0.0.1:8080'
   },
   actions: {
     loginInfoByToken({commit}) {
diff --git a/src/views/farmplant/farmplant.vue b/src/views/farmplant/farmplant.vue
index 16db0fa..37761d1 100644
--- a/src/views/farmplant/farmplant.vue
+++ b/src/views/farmplant/farmplant.vue
@@ -30,7 +30,7 @@
                 >删 除</el-button>
             </template>
             <template slot-scope="{ type, size, row }" slot="menu">
-              <el-button icon="el-icon-check" :size="size" :type="type" @click="recovery(row)">采 收</el-button>
+              <el-button :disabled="row.plantingWay == 2" icon="el-icon-check" :size="size" :type="type" @click="recovery(row)">采 收</el-button>
               <!-- <el-button icon="el-icon-error" :size="size" :type="type" @click="over(row.id)">结 束</el-button> -->
               <el-button icon="el-icon-error" :size="size" :type="type" @click="getData(row)">结 束</el-button>
 
diff --git a/src/views/land/landAdd.vue b/src/views/land/landAdd.vue
index cf861a7..d8f1a47 100644
--- a/src/views/land/landAdd.vue
+++ b/src/views/land/landAdd.vue
@@ -4,15 +4,21 @@
         :modal-append-to-body="false"
         :append-to-body="true"
         :close-on-click-modal="false"
-        width="60%"
+        width="80%"
         :visible.sync="visible"
+        top="10vh"
     >
         <avue-form ref="form" v-model="form" :option="option" @submit="submit">
             <!-- 地图插入 -->
             <template slot-scope="{ type, disabled }" slot="line">
-                <getMapDataInThere ref="getMapData" id="getMapData" @setMapData="setMapData"></getMapDataInThere>
+                <!-- <getMapDataInThere ref="getMapData" id="getMapData" @setMapData="setMapData"></getMapDataInThere> -->
+                
             </template>
         </avue-form>
+        <div class="map">
+            <iframe :src="url" frameborder="0" width="100%" height="100%"  ></iframe>
+        </div>
+
     </el-dialog>
 </template>
 
@@ -23,7 +29,10 @@
 import { getDeptTree } from "@/api/system/dept"
 import { add } from "@/api/land/land"
 import website from '@/config/website'
+import domtoimage from 'dom-to-image'
+import h2 from 'html2canvas'
 import getMapDataInThere from "./getMapDataInThere.vue"
+// import canvas2Image from 'canvas2Image'
 
 export default {
     components: {
@@ -36,6 +45,7 @@
             option: {
                 emptyBtn: false,
                 submitText: "保存",
+                submitBtn:false,
                 gutter: 30,
                 column: [
                     {
@@ -99,26 +109,49 @@
                         dataType: "number",
                         span: 6,
                     },
-                    {
-                        label: "地块展示",
-                        labelWidth: "0",
-                        prop: "line",
-                        className: "mapClass",
-                        span: 24,
-                        formslot: true,
-                    }
+                    // {
+                    //     label: "地块展示",
+                    //     labelWidth: "0",
+                    //     prop: "line",
+                    //     className: "mapClass",
+                    //     span: 24,
+                    //     formslot: true,
+                    // }
                 ],
             },
+            url:"",
+            landUrl:"",
+            polygon:[],
+            area:"",
             visible: false,
         }
     },
+    created() {
+        this.url = this.drawMapUrlBase + "/base?type=1&lng=112&lat=24&status=manage"
+    },
     computed: {
-        ...mapGetters(["userInfo", "permission", "polygons","$farmId"]),
+        ...mapGetters(["userInfo", "permission", "polygons","$farmId", "drawMapUrlBase"]),
+    },
+    watch:{
+        "landUrl":{
+            handler(newVal,oldVal){
+                this.$refs.form.submit()
+            }
+        }
     },
     mounted () {
         this.initData(this.userInfo.tenant_id)
+        window.addEventListener('message', this.handleMessage)
     },
     methods: {
+        handleMessage(event) {
+            if(event.type){
+                var obj = event.data
+                this.polygon = obj.polygons
+                this.landUrl =  obj.url
+                this.area = obj.area.toFixed(2) 
+            }
+        },
         initData (tenantId) {
             getFarmList().then(res => {
                 const column = this.findObject(this.option.column, "farmId")
@@ -135,17 +168,32 @@
         },
         // 表单提交
         submit (row, done) {
+            console.log(row)
             row['deptId'] = this.userInfo.dept_id
             // row.farmId = this.farm.id
+
+
             var that = this
-            if (this.polygons.length == 0) {
+            var poly = []
+            if(this.polygon.length !=0 ){
+                this.polygon.forEach((e)=>{
+                    poly.push({
+                        lng:e[0],
+                        lat:e[1]
+                    })
+                })
+                this.polygon = poly
+            }
+
+
+            if (this.polygon.length == 0) {
                 //没有面的数据
                 // this.$refs.getMapData.isCheck = true
                 // loading()
             } else {
                 //如果有值,空间坐标转换
-                let pol = this.polygons
-                let polLength = this.polygons.length - 1
+                let pol = this.polygon
+                let polLength = this.polygon.length - 1
                 let usePolygons = ""
                 for (let k in pol) {
                     usePolygons += pol[k].lng + "," + pol[k].lat
@@ -156,26 +204,59 @@
                 //设置坐标点
                 row.userId = this.userInfo.user_id
                 row.landRange = usePolygons
+
             }
+
+            // if (this.polygons.length == 0) {
+            //     //没有面的数据
+            //     // this.$refs.getMapData.isCheck = true
+            //     // loading()
+            // } else {
+            //     //如果有值,空间坐标转换
+            //     let pol = this.polygons
+            //     let polLength = this.polygons.length - 1
+            //     let usePolygons = ""
+            //     for (let k in pol) {
+            //         usePolygons += pol[k].lng + "," + pol[k].lat
+            //         if (k != polLength) {
+            //             usePolygons += ";"
+            //         }
+            //     }
+            //     //设置坐标点
+            //     row.userId = this.userInfo.user_id
+            //     row.landRange = usePolygons
+            //     console.log(row.landRange)
+            // }
+            
+
+
+            row['url'] = this.landUrl
+            row['landArea'] = this.area
             add(row).then(() => {
-                that.$emit("refreshOnLoad")
-                that.$refs.form.resetFields()
-                that.form.landUnit = "0"
-                that.visible = false
-                this.$message({
-                    type: "success",
-                    message: "操作成功!"
+                    that.$emit("refreshOnLoad")
+                    that.$refs.form.resetFields()
+                    that.form.landUnit = "0"
+                    that.visible = false
+                    this.$message({
+                        type: "success",
+                        message: "操作成功!"
+                    })
+                    done()
+                }, error => {
+                    // loading()
+                    window.console.log(error)
                 })
-                done()
-            }, error => {
-                // loading()
-                window.console.log(error)
-            })
+            
         },
+        
         setMapData (val) {
             this.LineData = val[0]
             this.PointData = val[1]
         },
+
+        showMap(){
+            this.mapVisible = true
+        }
     },
 };
 </script>
@@ -191,4 +272,8 @@
     top: 10px;
     left: 90px;
 }
+
+.map{
+    height: 450px;
+}
 </style>
diff --git a/src/views/land/landUpdate.vue b/src/views/land/landUpdate.vue
index 57029e4..488f21c 100644
--- a/src/views/land/landUpdate.vue
+++ b/src/views/land/landUpdate.vue
@@ -4,15 +4,20 @@
         :modal-append-to-body="false"
         :append-to-body="true"
         :close-on-click-modal="false"
-        width="60%"
+        width="80%"
+        top="10vh"
         :visible.sync="visible"
     >
         <avue-form ref="form" v-model="form" :option="option" @submit="submit">
             <!-- 地图插入 -->
             <template slot-scope="{ type, disabled }" slot="line">
-                <getMapDataInThere :currentPolygons="form.landRange" ref="getMapData" id="getMapData" @setMapData="setMapData"></getMapDataInThere>
+                <!-- <getMapDataInThere :currentPolygons="form.landRange" ref="getMapData" id="getMapData" @setMapData="setMapData"></getMapDataInThere> -->
+                
             </template>
         </avue-form>
+        <div class="map">
+            <iframe :src="url" frameborder="0" width="100%" height="100%"  ></iframe>
+        </div>
     </el-dialog>
 </template>
 
@@ -37,6 +42,7 @@
             option: {
                 emptyBtn: false,
                 submitText: "保存",
+                submitBtn:false,
                 gutter: 30,
                 farmName:'',
                 column: [
@@ -98,27 +104,49 @@
                         dataType: "number",
                         span: 6,
                     },
-                    {
-                        label: "地块展示",
-                        labelWidth: "0",
-                        prop: "line",
-                        className: "mapClass",
-                        span: 24,
-                        formslot: true,
-                    }
+                    // {
+                    //     label: "地块展示",
+                    //     labelWidth: "0",
+                    //     prop: "line",
+                    //     className: "mapClass",
+                    //     span: 24,
+                    //     formslot: true,
+                    // }
                 ],
             },
+            url:"",
+            landUrl:"",
+            polygon:[],
+            area:"",
             visible: false,
         }
     },
+    watch:{
+        "landUrl":{
+            handler(newVal,oldVal){
+                this.$refs.form.submit()
+            }
+        }
+    },
     computed: {
-        ...mapGetters(["userInfo", "permission", "polygons"]),
+        ...mapGetters(["userInfo", "permission", "polygons","drawMapUrlBase"]),
     },
     mounted () {
         this.initData(this.userInfo.tenant_id)
+        window.addEventListener('message', this.handleMessage)
     },
     methods: {
+        handleMessage(event) {
+            if(event.type){
+                var obj = event.data
+                this.polygon = obj.polygons
+                this.landUrl =  obj.url
+                this.area = obj.area.toFixed(2) 
+
+            }
+        },
         initData (tenantId) {
+            
             const data = {
                 deptId: this.userInfo.dept_id
             }
@@ -129,6 +157,7 @@
         },
         //初始化
         init () {
+            this.url = this.drawMapUrlBase+"/revamp?type=1&status=manage&position="+this.$route.query.landRange
             //清空面的数据
             this.$store.commit('clear_polygon')
             //计算当前时间
@@ -145,22 +174,35 @@
 
             this.form.landRange = this.form.landRange.replace(/POLYGON\(\(/g, '')
             this.form.landRange = this.form.landRange.replace(/\)\)/g, '')
-            this.form.landRange = this.form.landRange.split(',')
+            // this.form.landRange = this.form.landRange.split(',')
+            this.form.landRange = this.form.landRange.replaceAll(',',';')
+            this.form.landRange = this.form.landRange.replaceAll(' ',',')
+
+
+
 
         },
         // 表单提交
         submit (row, loading) {
             row['deptId'] = this.userInfo.dept_id
             var that = this
-            if (this.polygons.length == 0) {
-                //没有面的数据
-                this.$refs.getMapData.isCheck = true
-                loading()
-                return
-            } else {
+
+
+            var poly = []
+            if(this.polygon.length !=0 ){
+                this.polygon.forEach((e)=>{
+                    poly.push({
+                        lng:e[0],
+                        lat:e[1]
+                    })
+                })
+                this.polygon = poly
+            }
+
+            if (this.polygon.length != 0) {
                 //如果有值,空间坐标转换
-                let pol = this.polygons
-                let polLength = this.polygons.length - 1
+                let pol = this.polygon
+                let polLength = this.polygon.length - 1
                 let usePolygons = ""
                 for (let k in pol) {
                     usePolygons += pol[k].lng + "," + pol[k].lat
@@ -171,8 +213,11 @@
                 //设置坐标点
                 row.userId = this.userInfo.user_id
                 row.landRange = usePolygons
-            }
 
+                row['url'] = this.landUrl
+                row['landArea'] = this.area
+
+            }
             update(row).then(() => {
                 that.$emit("refreshOnLoad")
                 that.$refs.form.validate((vaild,done)=>{
@@ -183,19 +228,21 @@
                           message: "操作成功!"
                         })
                       done()
-                      this.form.landRange = this.$route.query.landRange
-                      this.form.dica = row.$landUnit
-                      this.form.dic = row.$landType
-                      this.form.deptname = row.$farmId
 
-                      var arr = [];
-                      this.$store.state.tags.tagList.forEach((item) => {
-                        if (item.label != "地块详情") {
-                          arr.push(item);
-                        }
-                      });
-                      this.$store.state.tags.tagList = arr;
-                      this.$router.replace({  path: `/LandDetail`, query: this.form  });
+                    //   this.form.landRange = this.$route.query.landRange
+                    //   this.form.dica = row.$landUnit
+                    //   this.form.dic = row.$landType
+                    //   this.form.deptname = row.$farmId
+
+                    //   var arr = [];
+                    //   this.$store.state.tags.tagList.forEach((item) => {
+                    //     if (item.label != "地块详情") {
+                    //       arr.push(item);
+                    //     }
+                    //   });
+                    //   this.$store.state.tags.tagList = arr;
+                    //   this.$router.replace({  path: `/land`, query: this.form  });
+                    this.$router.go(-1)
                     }
 
                 })
@@ -224,4 +271,7 @@
     top: 10px;
     left: 90px;
 }
+.map{
+    height: 450px;
+}
 </style>
diff --git a/src/views/wel/land.vue b/src/views/wel/land.vue
index 1f26d0a..49bc3e8 100644
--- a/src/views/wel/land.vue
+++ b/src/views/wel/land.vue
@@ -4,19 +4,25 @@
     :modal-append-to-body="false"
     :append-to-body="true"
     :close-on-click-modal="false"
-    width="60%"
+    width="80%"
+    top="10vh"
     :visible.sync="visible"
   >
     <avue-form ref="form" v-model="form" :option="option" @submit="submit">
       <!-- 地图插入 -->
       <template slot-scope="{ type, disabled }" slot="line">
-        <getMapDataInThere
+        <!-- <getMapDataInThere
           ref="getMapData"
           id="getMapData"
           @setMapData="setMapData"
-        ></getMapDataInThere>
+        ></getMapDataInThere> -->
+        
       </template>
     </avue-form>
+
+    <div class="map">
+      <iframe :src="url" frameborder="0" width="100%" height="100%"  ></iframe>
+    </div>
   </el-dialog>
 </template>
 
@@ -39,6 +45,7 @@
       option: {
         emptyBtn: false,
         submitText: "保存",
+        submitBtn:false,
         gutter: 30,
         column: [
           {
@@ -96,26 +103,49 @@
             dataType: "number",
             span: 6,
           },
-          {
-            label: "地块展示",
-            labelWidth: "0",
-            prop: "line",
-            className: "mapClass",
-            span: 24,
-            formslot: true,
-          }
+          // {
+          //   label: "地块展示",
+          //   labelWidth: "0",
+          //   prop: "line",
+          //   className: "mapClass",
+          //   span: 24,
+          //   formslot: true,
+          // }
         ],
       },
+      url:"",
+      landUrl:"",
+      polygon:[],
+      area:"",
       visible: false,
     };
   },
+  created(){
+    this.url = this.drawMapUrlBase + "/base?type=1&lng=112&lat=24&status=manage"
+  },
+  watch:{
+      "landUrl":{
+          handler(newVal,oldVal){
+              this.$refs.form.submit()
+          }
+      }
+  },
   computed: {
-    ...mapGetters(["userInfo", "permission", "polygons","$farmId"]),
+    ...mapGetters(["userInfo", "permission", "polygons","$farmId","drawMapUrlBase"]),
   },
   mounted() {
     this.initData(this.userInfo.tenant_id);
+    window.addEventListener('message', this.handleMessage)
   },
   methods: {
+    handleMessage(event) {
+      if(event.type){
+          var obj = event.data
+          this.polygon = obj.polygons
+          this.landUrl =  obj.url
+          this.area = obj.area.toFixed(2) 
+      }
+    },
     initData(tenantId) {
       const data = {
         deptId:this.userInfo.dept_id
@@ -134,27 +164,63 @@
     // 表单提交
     submit(row,done) {
       var that = this;
-      if (this.polygons.length == 0) {
-        //没有面的数据
-        this.$refs.getMapData.isCheck = true;
-        done();
-      } else {
-        //如果有值,空间坐标转换
-        let pol = this.polygons;
-        let polLength = this.polygons.length - 1;
-        let usePolygons = "";
-        for (let k in pol) {
-          usePolygons += pol[k].lng + "," + pol[k].lat;
-          if (k != polLength) {
-            usePolygons += ";";
-          }
-        }
-        //设置坐标点
-        row.userId = this.userInfo.user_id;
-        row.landRange = usePolygons;
+
+
+      // if (this.polygons.length == 0) {
+      //   //没有面的数据
+      //   this.$refs.getMapData.isCheck = true;
+      //   done();
+      // } else {
+      //   //如果有值,空间坐标转换
+      //   let pol = this.polygons;
+      //   let polLength = this.polygons.length - 1;
+      //   let usePolygons = "";
+      //   for (let k in pol) {
+      //     usePolygons += pol[k].lng + "," + pol[k].lat;
+      //     if (k != polLength) {
+      //       usePolygons += ";";
+      //     }
+      //   }
+      //   //设置坐标点
+      //   row.userId = this.userInfo.user_id;
+      //   row.landRange = usePolygons;
+      // }
+      var poly = []
+      if(this.polygon.length !=0 ){
+          this.polygon.forEach((e)=>{
+              poly.push({
+                  lng:e[0],
+                  lat:e[1]
+              })
+          })
+          this.polygon = poly
       }
+
+
+      if (this.polygon.length == 0) {
+          //没有面的数据
+          // this.$refs.getMapData.isCheck = true
+          // loading()
+      } else {
+          //如果有值,空间坐标转换
+          let pol = this.polygon
+          let polLength = this.polygon.length - 1
+          let usePolygons = ""
+          for (let k in pol) {
+              usePolygons += pol[k].lng + "," + pol[k].lat
+              if (k != polLength) {
+                  usePolygons += ";"
+              }
+          }
+          //设置坐标点
+          row.userId = this.userInfo.user_id
+          row.landRange = usePolygons
+      }
+
       row['tenantId'] = this.userInfo.tenant_id;
       row['deptId'] = this.userInfo.dept_id;
+      row['url'] = this.landUrl
+      row['landArea'] = this.area
       add(row).then(() => {
         that.$refs.form.resetFields();
         this.form.landUnit = "0"
@@ -189,4 +255,7 @@
   top: 10px;
   left: 90px;
 }
+.map{
+    height: 450px;
+}
 </style>

--
Gitblit v1.9.3