<template>
  <div class="mapwrap">
    <el-dialog
      title="绘制厂区边界"
      :visible.sync="dialogTableVisible"
      :show-close="false"
      :close-on-click-modal="false"
      id="mapcnt"
    >
      <el-row class="lt">
        <el-button type="success" size="small" @click="starDrawBounds"
          ><i class="el-icon-edit"></i> 开始绘制</el-button
        >
        <el-button type="warning" size="small" @click="removeBounds"
          ><i class="el-icon-delete"></i> 清除绘制</el-button
        >
        <el-button type="primary" size="small" @click="confirmFun"
          >提交边界</el-button
        >
        <el-button size="small" @click="$emit('dialogcancelFunB')"
          >取消</el-button
        >
      </el-row>
      <el-row>
        <div id="mapContainerB" class="mapContainer">
          <Search :MAP="MAP" :Mutil="Mutil" v-if="mapLoadDone"></Search>
        </div>
      </el-row>
    </el-dialog>
  </div>
</template>

<script lang="ts">
import { Component, Vue, Provide, Prop } from "vue-property-decorator";
import Search from "@/components/search.vue";
import Mutil from "@/utils/mapUtil.js";

@Component({
  components: {
    Search,
  },
})
export default class DrawBounds extends Vue {
  @Provide() MAP: any;
  @Provide() Mutil: any;
  @Provide() mapLoadDone = false;

  @Prop(Boolean) dialogTableVisible!: Boolean;
  @Prop(String) boundary!: String;

  @Provide() Coordinates: any = [];
  @Provide() mapView: any = {
    center: "",
    zoom: "",
    polygoncoorArr: [],
  };
  @Provide() currSelectPolygon: any;
  starDrawBounds() {
    let that = this;
    that.Mutil.drawPloygon(null, function (feature: any, target: any) {
      //drawend 触发事件
      let currView = that.MAP.getView();
      that.mapView.center = currView.getCenter();
      that.mapView.zoom = currView.getZoom();
      let x = feature.getGeometry().getCoordinates({
        right: true,
      });
      that.mapView.polygoncoorArr.push(x);
    });
  }
  removeBounds() {
    let that = this;
    that.Mutil.removeSearchm("boundary");
    that.mapView = {
      center: "",
      zoom: "",
      polygoncoorArr: [],
    };
  }
  confirmFun() {
    let that = this;
    that
      .$confirm("确认提交厂区边界吗？", "提示", {
        type: "info",
      })
      .then(() => {
        that.$emit("drawconfirm", JSON.stringify(that.mapView));
        that.$emit("dialogcancelFunB");
      })
      .catch(() => {
        return;
      });
  }
  mounted() {
    let that = this;
    console.log( that.dialogTableVisible )
      that.$nextTick(() => {
        that.Mutil = new Mutil("mapContainerB");
        that.MAP = that.Mutil.MAP;
        that.mapLoadDone = true;
        if (that.boundary) {
          that.mapView = JSON.parse((that as any).boundary);
          that.Mutil.drawPloygon(JSON.parse((that as any).boundary));
        }
        that.Mutil.mapSelectBind((evt: any) => {
          if (evt.selected[0].getGeometryName == "Polygon") {
            that.currSelectPolygon = evt.selected[0];
          }
        });
      });
  }
}
</script>

<style lang="scss">
#mapcnt .el-dialog {
  width: 90% !important;
}

.el-cascader {
  width: 100%;
}

.lt .el-input {
  width: 180px;
  margin-right: 15px;
  display: inline-block;
}

.mapContainer {
  width: 100%;
  height: 450px;
  position: relative;
  margin-top: 10px;
  overflow: hidden;
}

.el-vue-amap-container {
  width: 100%;
  height: 100%;
}

.search-box {
  position: absolute !important;
  top: 10px;
  left: 10px;
}

#searchbar input {
  padding: 5px;
  border: 1px solid royalblue;
  border-radius: 5px;
  min-width: 150px;
}
</style>
