<template>
  <div>


    <div v-if="showMapp">
      <el-form :inline="true" :model="fence" class="demo-form-inline">

        <el-form-item label="围栏名称">
          <el-input v-model="fence.fenceName" placeholder="模糊查询围栏名称"></el-input>
        </el-form-item>


        <el-form-item label="围栏类型">
          <el-select v-model="fence.fenceType" placeholder="请选择围栏类型">
            <el-option label="驶出" value="1">驶出</el-option>
            <el-option label="驶入" value="2">驶入</el-option>
          </el-select>
        </el-form-item>

        <el-form-item label="围栏状态">
          <el-select v-model="fence.fenceState" placeholder="请选择围栏状态">
            <el-option label="正常" value="1">正常</el-option>
            <el-option label="停用" value="2">停用</el-option>
          </el-select>
        </el-form-item>

        <el-form-item>
          <el-button type="primary" @click="onSubmit" icon="el-icon-search">搜索</el-button>
        </el-form-item>
      </el-form>



      <el-button type="primary" plain icon="el-icon-plus" @click="fencadd">新增</el-button>



      <el-table :data="tableData" style="width: 100%"  ref="multipleTable" @selection-change="handleSelectionChange">


        <el-table-column
          type="selection"
          width="55">
        </el-table-column>

        <el-table-column
          label="围栏ID"
          width="180">
          <template slot-scope="scope">
            <span style="margin-left: 10px">{{ scope.row.fenceId }}</span>
          </template>
        </el-table-column>

        <el-table-column
          label="围栏名称"
          width="180">
          <template slot-scope="scope">
            <span style="margin-left: 10px">{{ scope.row.fenceName }}</span>
          </template>
        </el-table-column>

        <el-table-column
          label="围栏类型"
          width="180">
          <template slot-scope="scope">
            <span style="margin-left: 10px" v-if="scope.row.fenceType==1">驶出</span>
            <span style="margin-left: 10px" v-if="scope.row.fenceType==2">驶入</span>
          </template>
        </el-table-column>

        <el-table-column
          label="围栏状态"
          width="180">
          <template slot-scope="scope">
            <span style="margin-left: 10px" v-if="scope.row.fenceState==1"><el-tag>正常</el-tag></span>
            <span style="margin-left: 10px" v-if="scope.row.fenceState==2"><el-tag>停用</el-tag></span>
          </template>
        </el-table-column>

        <el-table-column
          label="经纬度信息"
          width="180">
          <template slot-scope="scope">
            <span style="margin-left: 10px">{{ scope.row.fenceMessage }}</span>
          </template>
        </el-table-column>


        <el-table-column label="操作">
          <template slot-scope="scope">
            <el-link type="primary" icon="el-icon-map-location" @click="handleWdit(scope.row)">编辑围栏</el-link>

            <el-link type="primary" icon="el-icon-edit" @click="handleEdit(scope.row)">编辑</el-link>

            <el-link type="primary" icon="el-icon-delete"  @click="handleDelete(scope.row.fenceId)">删除</el-link>
          </template>
        </el-table-column>
      </el-table>



      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="fence.pageNum"
        :page-sizes="[1, 3, 5, 10]"
        :page-size="fence.pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>




      <!--    围栏添加-->
      <el-dialog :title="title" :visible.sync="dialogFormVisible">

        <el-form :model="fencesw">

          <el-form-item label="围栏名称" :label-width="formLabelWidth">
            <el-input v-model="fencesw.fenceName" autocomplete="off"></el-input>
          </el-form-item>


          <el-form-item label="围栏类型" :label-width="formLabelWidth">
            <el-select v-model="fencesw.fenceType" placeholder="请选择活动区域">
              <el-option label="驶出" value="1">驶出</el-option>
              <el-option label="驶入" value="2">驶入</el-option>
            </el-select>
          </el-form-item>

          <el-form-item label="围栏状态" :label-width="formLabelWidth">
            <template>
              <el-radio v-model="fencesw.fenceState" label="1">正常</el-radio>
              <el-radio v-model="fencesw.fenceState" label="2">停用</el-radio>
            </template>
          </el-form-item>

          <el-form-item label="标识名称" :label-width="formLabelWidth">
          <el-checkbox-group v-model="fencesw.identificationId">
            <el-checkbox
              v-for="item in ident"
              :key="item.identificationId"
              :label="item.identificationId"
              :value="item.identificationId">
              {{ item.identificationLog }}
            </el-checkbox>
          </el-checkbox-group>
          </el-form-item>
        </el-form>


        <div slot="footer" class="dialog-footer">
          <el-button @click="dialogFormVisible = false">取 消</el-button>
          <el-button type="primary" @click="addAll">新增</el-button>
        </div>
      </el-dialog>


      <!--    修改电子围栏-->
      <el-dialog :title="title" :visible.sync="dialogFormVisible1">

        <el-form :model="fences">

          <el-form-item label="围栏ID" :label-width="formLabelWidth1">
            <el-input v-model="fences.fenceId" autocomplete="off"></el-input>
          </el-form-item>

          <el-form-item label="围栏名称" :label-width="formLabelWidth1">
            <el-input v-model="fences.fenceName" autocomplete="off"></el-input>
          </el-form-item>


          <el-form-item label="围栏类型" :label-width="formLabelWidth1">
            <el-select v-model="fences.fenceType" placeholder="请选择活动区域">
              <el-option label="驶出" value="1">驶出</el-option>
              <el-option label="驶入" value="2">驶入</el-option>
            </el-select>
          </el-form-item>


          <el-form-item label="围栏状态">
            <el-radio-group v-model="fences.fenceState" :label-width="formLabelWidth1">
              <el-radio :label="1">正常</el-radio>
              <el-radio :label="2">停用</el-radio>
            </el-radio-group>
          </el-form-item>



        </el-form>


        <div slot="footer" class="dialog-footer">
          <el-button @click="dialogFormVisible = false">取 消</el-button>
          <el-button type="primary" @click="updateAll">修 改</el-button>
        </div>
      </el-dialog>

    </div>


    <el-button @click="drawPolygon">绘制围栏</el-button>
    <el-button @click="saveFenceData">保存围栏</el-button>
    <el-button @click="cleanFence">清除围栏</el-button>
    <div id="container" v-if="showMap">

    </div>



  </div>

</template>

<script>
import AMapLoader from '@amap/amap-jsapi-loader';
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）,
//例如：import 《组件名称》 from '《组件路径》,
import {fenceAdd, fenceDelete, fenceList, fenceUpdate, identificationList, saveFence} from "@/api/system/fence";
import mouseTool from "quill";
export default {
  name: "map-view",
  //生命周期 - 挂载完成（可以访问DOM元素）",
  mounted() {
    this.initAMap();
    isMapPage:false
  },
  //import引入的组件需要注入到对象中才能使用"
  components: {},
  props: {},
  data() {
    //这里存放数据"

    return {
      tableData:[],
      fence:{
        pageNum:1,
        pageSize:3,
        fenceName:'',
      },
      total:0,
      dialogFormVisible:false,
      formLabelWidth:'120px',
      fencesw:{
        fenceName:'',
        fenceType:'',
        fenceState:'',
        identificationId:[]
      },
      fences:{
      fenceId:'',
      fenceName:'',
      fenceType:'',
      fenceState:'',
      identificationId:[],
      },
      title:'',
      dialogFormVisible1:false,
      formLabelWidth1:'120px',
      mouseTool:null,
      map:null,
      Amap:null,

      //跳转地图页面
      showMap:false,
      showMapp:true,


      //保存围栏
      mapRequest:{
        fenceId:0,
        jwd: []
      },

      //标识表
      ident:[],





    };
  },
  //计算属性 类似于data概念",
  computed: {},
  //监控data中的数据变化",
  watch: {},

  unmounted(){
    this.map?.destroy()
  },
  //方法集合",
  methods: {

    //围栏列表
    list() {
      fenceList(this.fence).then(
        res => {
          this.tableData = res.data.list
          this.total = res.data.total
          console.log(this.tableData);
          console.log(res)
        }
      )
    },

    // //复选框
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },


    // 搜索框
    onSubmit() {
      this.list()
    },

    //分页查询
    handleSizeChange(val) {
      this.fence.pageSize = val
      this.list()
    },

    //分页查询
    handleCurrentChange(val) {
      this.fence.pageNum = val
      this.list()
    },


    //新增
    fencadd() {
      this.fences = {}
      this.dialogFormVisible = true
      this.title = '新增页面'
    },


    addAll() {
      fenceAdd(this.fencesw).then(
        res => {
          this.$message.success(res.msg)
          this.list()
        }
      )
      this.dialogFormVisible = false
    },


    //删除电子围栏
    handleDelete(fenceId){
      fenceDelete(fenceId,'deleted').then(
        res=>{
          this.$message.success(res.msg)
          this.list()
        }
      ).catch(error=>{
        console.error("逻辑删除失败",error);
        this.$message.success("逻辑删除失败，请重试")
      })
    },

    //修改电子围栏
    handleEdit(obj) {
      this.dialogFormVisible1 = true
      this.fences = obj
      this.title = '修改电子围栏'
    },


    updateAll() {
      fenceUpdate(this.fences).then(
        res => {
          this.$message.success(res.msg)
          this.list()
        }
      )
      this.dialogFormVisible1=false;
    },



    //编辑围栏
    handleWdit(ojb) {
      this.showMap=true
      this.showMapp=false
      this.mapRequest.fenceId=ojb.fenceId
      this.initAMap();
    },


    //初始化地图
    initAMap(){


      AMapLoader.load({

        key:"fcd296bbfa904e3bf49d7316882a11bf",
        version:"2.0",
        plugins:["AMap.Scale","AMap.MouseTool"],
      })
        .then((AMap)=>{
          this._Amap=AMap;
          this.map=new AMap.Map("container",{
            //设置地图容器ID
            viewMode:"3D",
            zoom:11,
            center: [116.397428, 39.90923],
          });
          this.mouseTool=new AMap.MouseTool(this.map);
          this.mouseTool.on('draw', this.drawReady)
        })
        .catch((e)=>{
          console.log(e);
        });
    },

    drawPolygon () {
      this.mouseTool.polygon({
        strokeColor: "#FF33FF",
        strokeOpacity: 1,
        strokeWeight: 6,
        strokeOpacity: 0.2,
        fillColor: '#1791fc',
        fillOpacity: 0.4,
        // 线样式还支持 'dashed'
        strokeStyle: "solid",
        // strokeStyle是dashed时有效
        strokeDasharray: [30,10],
      })
    },

    // 在 drawReady 方法中获取绘制的围栏的经纬度信息
    drawReady(event){
      console.log(event)
      console.log(event.obj.getPath())
      this.mapRequest.jwd=event.obj.getPath();
      console.info('覆盖物对象绘制完成')
      // 获取绘制的围栏经纬度信息
      const path =event.obj.getPath()
      // 将经纬度信息保存到 scope.row.fenceMessage 中
      this.tableData.forEach(item=>{
        if(item.fenceId === event.obj.fenceId){ // 假设 fenceId 是围栏的唯一标识符
          item.fenceMessage = path.toString();  // 这里使用 toString() 方法将路径转换为字符串形式
        }
      })
    },


    //清除围栏
    cleanFence(){
      this.mouseTool.close(true)
    },

    //保存围栏
    saveFenceData(){
      console.log(this.mapRequest.jwd)
      saveFence(this.mapRequest).then(response=>{
        this.$modal.msgSuccess("保存成功")
      })
      this.showMap=false
      this.showMapp=true
    },


    //标识列表
    identificationList(){
      identificationList().then(res=>{
        this.ident=res
        console.log(this.ident)
      })
    },




  },

  //生命周期 - 创建完成（可以访问当前this实例）",
  created() {
    this.list()
    this.identificationList();
  },
  beforeCreate() {
  }, //生命周期 - 创建之前",
  beforeMount() {
  }, //生命周期 - 挂载之前",
  beforeUpdate() {
  }, //生命周期 - 更新之前",
  updated() {
  }, //生命周期 - 更新之后",
  beforeDestroy() {
  }, //生命周期 - 销毁之前",
  destroyed() {
  }, //生命周期 - 销毁完成",
  activated() {
  } //如果页面有keep-alive缓存功能，这个函数会触发",
};
</script>
<style lang="scss" scoped>
.dashboard{
  &-container{
    margin: 30px;
  }
  &-text{
    font-size:30px;
    line-height:46px;
  }
}
#container{

  padding:0px;
  margin:0px;
  width:100%;
  height:800px;
}
</style>
