
import GisUtils from '@/utils/gis.js';
import { treeselect, getDept, listDeptExcludeChild } from "@/api/system/dept";
import { getInfo } from "@/api/login";
import { getConfigKey } from "@/api/system/config";
import { getPermanentListByDeptId, listPermanent, getPermanentListNew } from "@/api/asset/permanent.js";
import { getResourceListByDeptId, listResource } from "@/api/asset/resource.js";

let gis = null;
import { treeselectByDeptId } from "@/api/system/dept";
import Legend from '@/components/legend/index.vue';
import { mapGetters } from 'vuex';
import {
  fromLonLat
} from 'ol/proj'
const iconMap = {
  '1': require('./icon/组 4665@2x(1).png'), // 自用
  '2': require('./icon/组 4665@2x(3).png'), // 闲置
  '3': require('./icon/组 4665@2x.png'), // 出租或出借
  '4': require('./icon/1.png') // 其他
}
import AssetDetails from './asset-details/index.vue';
export default {
  components: {
    AssetDetails,
    Legend
  },
  data () {
    return {
      showPermanentDetail: {
        show: false,
        id: ''
      },
      deptLayer: "",                  // 坐标点图层
      countyBorderLayerName: "",      // 区县边界图层名称
      townBorderLayerName: "",        // 乡镇边界图层名称
      groupBorderLayerName: "",       // 组边界图层名称
      LegendData: [
        {
          icon: require('./icon/组 4665@2x(1).png'),
          name: '自用'
        },
        {
          icon: require('./icon/组 4665@2x(3).png'),
          name: '闲置'
        },
        {
          icon: require('./icon/组 4665@2x.png'),
          name: '出租'
        },
        {
          icon: require('./icon/1.png'),
          name: '其他'
        }
      ],
      dialogImageUrl: '',
      dialogVisible: false,
      showInfoDetail: false,
      addrOptions: [],
      addrText: [100,],
      deptTreeProps: {
        checkStrictly: true,
      },
      yellowIcon: require('./icon/yellow.png'),
      mapGeoServerUrl: "",
      villageBorderLayerName: "",
      headerTitle: '',
      assetTypeOptions: [],
      unitOptions: [],
      resourceTypeOptions: [],

      //三务公开请求参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        title: null,
        openType: '1',
        detailedCategoriesType: null,
        villageType: null,
        openItems: null,
        meetingOpenType: null,
        deptId: null,
        isWechat: null,
        status: null,
        translate_dict: 1,
      },

      //零工公开请求参数
      tempWorkerOpenQueryParams: {
        // 分页
        pageNum: 1,
        pageSize: 10,
        // 查询排序
        //orderByColumn: "id",
        //isAsc: "desc",
        bookId: null,
        deptId: null,
        deptName: null,
        openNy: null,
        openYear: null,
        openName: null,
        openFile: null,
        openPic: null,
        remark: null,
        translate_dict: 1,
      },

      //重大事项公开请求参数
      majorEventOpenQueryParams: {
        // 分页
        pageNum: 1,
        pageSize: 10,
        // 查询排序
        //orderByColumn: "id",
        //isAsc: "desc",
        bookId: null,
        deptId: null,
        deptName: null,
        openNy: null,
        openYear: null,
        openDate: null,
        openName: null,
        openFile: null,
        openPic: null,
        content: null,
        remark: null,
        translate_dict: 1,
      },

      //补贴资金管理请求参数
      subsidyFundsQueryParams: {
        // 分页
        pageNum: 1,
        pageSize: 10,
        // 查询排序
        orderByColumn: "id",
        isAsc: "desc",
        year: null,
        areaName: null,
        name: null,
        idCard: null,
        itemName: null,
        releaseDate: null,
        translate_dict: 1,
      },

      //固定资产请求参数
      permanentQueryParams: {
        pageNum: 1,
        pageSize: 10,
        code: null,
        name: null,
        assetType: null,
        operationType: null,
        addType: null,
        useType: null,
        assetStatus: '1',
        translate_dict: 1,
      },

      //资源资产请求参数
      resourceListQueryParams: {
        pageNum: 1,
        pageSize: 10,
        bookId: null,
        deptId: null,
        code: null,
        name: null,
        resourceType: null,
        /*farmingResourceType: null,
        buildResourceType: null,
        unusedResourceType: null,*/
        resourceSort: null,
        totalArea: null,
        location: null,
        east: null,
        west: null,
        south: null,
        north: null,
        sumArea: null,
        groupArea: null,
        groupValue: null,
        rentArea: null,
        rentValue: null,
        rentLessee: null,
        rentStartTime: null,
        rentEndTime: null,
        otherArea: null,
        otherValue: null,
        farmerArea: null,
        circulationArea: null,
        circulationValue: null,
        investmentArea: null,
        investmentValue: null,
        investmentLessee: null,
        investmentStartTime: null,
        investmentEndTime: null,
        status: null,
        translate_dict: 1,
      },
      //固定资产详情数据
      permanentDetail: [],
      //合同信息请求参数
      contractionByPermanentQueryParams: {
        pageNum: 1,
        pageSize: 10,
        bookId: null,
        deptId: null,
        code: null,
        name: null,
        assetType: null,
        firstParty: null,
        secondParty: null,
        collectionPay: null,
        contractionSource: null,
        totalAmount: null,
        receivedAmount: null,
        settledAmount: null,
        buildingTime: null,
        startTime: null,
        endTime: null,
        num: null,
        unit: null,
        price: null,
        contractionStatus: null,
        translate_dict: 1,
      },
    };
  },
  computed: {
    ...mapGetters(['year', 'deptId'])
  },
  watch: {
    'queryParams.deptId': {
      handler: function () {
        this.commitDept(this.queryParams.deptId);
      },
      immediate: true, // 立即执行

    },
    deptLength: {
      handler: function () {
        //console.log(this.deptLength);
        this.commitDeptLength(this.deptLength);
      },
      immediate: true, // 立即执行
    }
  },
  created () {
    // 获取geoserver的地址
    this.getGeoServerUrl();
  },
  mounted () {
    treeselect().then((resp) => this.addrOptions = resp.data);
    this.getDicts("asset_type").then((response) => {
      this.assetTypeOptions = response.data;
    });
    this.getDicts("fixed_assets_unit").then((response) => {
      this.unitOptions = response.data;
    });
    this.getDicts("resource_type").then(response => {
      this.resourceTypeOptions = response.data;
    });
    getInfo().then(res => {
      treeselectByDeptId({ deptId: res.user.deptId }).then((resp) => {
        this.addrOptions = resp.data;
        this.headerTitle = res.user.deptName + '阳光村务一张图';
        // listDeptExcludeChild(res.user.loginDeptId).then((resp) => {
        //   let deptOptions = [res.user.loginDeptId];
        //   resp.data.map(resm => {
        //     if (res.user.parentDeptName == resm.deptName) {
        //       deptOptions.unshift(resm.deptId)
        //       deptOptions.unshift(resm.parentId)
        //     }
        //   })
        //   this.addrText = [100,...deptOptions];
        // });
        this.queryParams.deptId = res.user.deptId;
        this.tempWorkerOpenQueryParams.deptId = res.user.deptId;
        this.majorEventOpenQueryParams.deptId = res.user.deptId;
        this.subsidyFundsQueryParams.deptId = res.user.deptId;
        this.permanentQueryParams.deptId = res.user.deptId;
        this.resourceListQueryParams.deptId = res.user.deptId;
        this.contractionByPermanentQueryParams.deptId = res.user.deptId;
        //列表请求
        this.getAllList();
        // 加载地图
        this.initMap(res.user.deptId);

        // 获取村边界的图层名称
        this.getVillageBorderLayerName();
      });

    })
  },
  methods: {
    commitDept (deptId) {
      this.$store.commit('SET_DEPTID', deptId);
    },
    commitDeptLength (length) {
      this.$store.commit('SET_DEPTIDLENGTH', length);
    },
    commitYear (year) {
      this.$store.commit('SET_YEAR', year);
    },
    openImage (url) {
      console.log(url)
      this.dialogImageUrl = url;
      this.dialogVisible = true;
    },
    // 绘制地图
    drawMap (node, isLocated) {    // isLocated 控制地图是否跳转
      const dept = node.data;
      gis.getMapContainer().removeLayer(this.mapBorder);
      this.mapBorder = '';
      gis.getMapContainer().removeLayer(this.deptLayer);
      this.deptLayer = '';
      if (dept.deptLevel === '5') {
        this.cityId = dept.id;
        this.currentDeptLevel = '5';
        if (dept.children && dept.children.length > 0) {
          // 添加区县边界
          this.addCountyBorder(dept.children.map(item => item.id));
          // 添加坐标点图层
          this.addDeptLayer(dept.children, 'yellow.png');
        }
        if (isLocated) {
          gis.getMapContainer().getView().setZoom(9);
          gis.getMapContainer().getView().setCenter(fromLonLat([dept.lng, dept.lat]));
        }
      } else if (dept.deptLevel === '4') {
        this.countyId = dept.id;
        this.currentDeptLevel = '4';
        if (dept.children && dept.children.length > 0) {
          // 添加乡镇边界
          this.addTownBorder(dept.children.map(item => item.id));
          // 添加坐标点图层
          this.addDeptLayer(dept.children, 'yellow.png');
        }
        if (isLocated) {
          gis.getMapContainer().getView().setZoom(11);
          gis.getMapContainer().getView().setCenter(fromLonLat([dept.lng, dept.lat]));
        }
        // this.villageIds = this.findLeafNodeIds(dept);
      } else if (dept.deptLevel === '3') {
        this.townId = dept.id;
        this.countyId = node.path.slice(-2)[0];
        this.currentDeptLevel = '3';
        if (dept.children && dept.children.length > 0) {
          // 添加村边界
          this.addVillageBorder(dept.children.map(item => item.id));
          // 添加坐标点图层
          this.addDeptLayer(dept.children, 'yellow.png');
        }
        if (isLocated) {
          gis.getMapContainer().getView().setZoom(13);
          gis.getMapContainer().getView().setCenter(fromLonLat([dept.lng, dept.lat]));
        }
        // this.villageIds = this.findLeafNodeIds(dept);
      } else if (dept.deptLevel === '2') {
        this.ruralId = dept.id;
        this.townId = node.path.slice(-2)[0];
        this.countyId = node.path.slice(-3)[0];
        this.currentDeptLevel = '2';
        if (dept.children && dept.children.length > 0) {
          const groupIds = dept.children.map(item => item.id);
          // 添加组边界
          this.addGroupBorder(groupIds);
          // 添加组的坐标点图层，并且跳转到图层的中心点位置
          this.addGroupPointLayer(groupIds, isLocated);
        } else {
          // 添加村边界
          this.addVillageBorder(dept.id);
          // 添加坐标点图层
          let deptList = [];
          deptList.push(dept);
          // this.addDeptLayer(deptList, 'yellow.png');
          if (isLocated) {
            gis.getMapContainer().getView().setCenter(fromLonLat([dept.lng, dept.lat]));
          }
        }
        if (isLocated) {
          gis.getMapContainer().getView().setZoom(15);
        }
        // this.villageIds = this.findLeafNodeIds(dept);
      } else if (dept.deptLevel === '1') {
        this.ruralId = node.path.slice(-2)[0];
        this.townId = node.path.slice(-3)[0];
        this.countyId = node.path.slice(-4)[0];
        this.currentDeptLevel = '1';
        // 添加组边界
        this.addGroupBorder(dept.id);
        // 添加组的坐标点图层，并且跳转到图层的中心点位置
        this.addGroupPointLayer(dept.id, isLocated);
        if (isLocated) {
          gis.getMapContainer().getView().setZoom(17);
        }
        // this.villageIds = this.findLeafNodeIds(dept);
      }
      // this.changeLayerByDept();
    },
    selectAddress (value, isLocated = true) {
      const deptId = value[value.length - 1];
      this.queryParams.deptId = deptId;
      this.tempWorkerOpenQueryParams.deptId = deptId;
      this.majorEventOpenQueryParams.deptId = deptId;
      this.subsidyFundsQueryParams.deptId = deptId;
      this.permanentQueryParams.deptId = deptId;
      this.resourceListQueryParams.deptId = deptId;
      this.contractionByPermanentQueryParams.deptId = deptId;
      this.infoTotal = undefined;
      this.resourceTotal = undefined;
      this.permanentTotal = undefined;
      this.subsidyFundsTotal = undefined;
      this.majorEventOpenTotal = undefined;
      this.tempWorkerOpenTotal = undefined;
      this.affairsTotal = undefined;
      this.affairsList = [];
      this.tempWorkerOpenList = [];
      this.majorEventOpenList = [];
      this.subsidyFundsList = [];
      this.permanentList = [];
      this.resourceList = [];
      this.infoList = [];
      this.getAllList();

      gis.getMapContainer().removeLayer(this.villageBorder);
      this.villageBorder = '';
      // 添加村边界
      this.addVillageBorder(deptId);
      gis.getMapContainer().removeLayer(this.permanentLayer);
      this.permanentLayer = '';
      // 获取资产列表
      this.getPermanentList(deptId);
      gis.getMapContainer().removeLayer(this.resourceLayer);
      this.resourceLayer = '';
      // 获取资源列表
      // this.getResourceList(deptId);
      let node = this.$refs["cascader"].panel.getNodeByValue(value);
      this.drawMap(node, isLocated);
      const dept = node.data;
      const deptData = {
        deptId: dept.id,
        deptName: dept.label,
        lat: dept.lat,
        lng: dept.lng,
        deptLevel: dept.deptLevel,
        orgCode: dept.orgCode
      };
      let deptList = [];
      deptList.push(deptData);
      gis.getMapContainer().removeLayer(this.deptLayer);
      this.deptLayer = '';
      // 添加坐标点图层
      this.addDeptLayer(deptList, 'yellow.png');
      gis.getMapContainer().getView().animate({
        // 只设置需要的属性即可
        center: fromLonLat([dept.lng, dept.lat]), // 中心点
        duration: 500, // 缩放持续时间，默认不需要设置
      });
    },
    // 获取村边界的图层名称
    getVillageBorderLayerName () {
      getConfigKey("geoserver.layer.villageBorder").then(response => {
        this.villageBorderLayerName = response.msg;
      });
    },
    // 获取资产列表
    getPermanentList (deptId) {
      getPermanentListNew({deptId: deptId}).then(response => {
        if (response.rows && response.rows.length > 0) {
          this.addPermanentLayer(response.rows);
        }
      });
    },
    // 添加资产图层
    addPermanentLayer (permanentList) {
      let features = [];
      permanentList.forEach(item => {
        if (item.theGeom != null && item.theGeom !== '') {
          // //console.log(222, useType, item);
          const { useType } = item
          let icon = iconMap[useType + '']
          let fs = gis.getFeature2(item, icon)
          features.push(fs);
        }
      });


      gis.getVectorLayerByFs(features)
      gis.mapSetFit(features)
    },
    // 添加村边界
    // addVillageBorder (deptId) {
    //   gis.addImageLayer(this.mapGeoServerUrl, this.villageBorderLayerName, deptId)
    // },
    // 获取geoserver的地址
    getGeoServerUrl () {
      // 获取geoserver的地址
      getConfigKey("system.geoServer.url").then(response => {
        this.mapGeoServerUrl = response.msg;
      });
      // 获取区县边界图层名称
      getConfigKey("geoserver.layer.countyBorder").then(response => {
        this.countyBorderLayerName = response.msg;
      });
      // 获取乡镇边界的图层名称
      getConfigKey("geoserver.layer.townBorder").then(response => {
        this.townBorderLayerName = response.msg;
      });
      // 获取村边界的图层名称
      getConfigKey("geoserver.layer.villageBorder").then(response => {
        this.villageBorderLayerName = response.msg;
      });
      // 获取组边界的图层名称
      getConfigKey("geoserver.layer.groupBorder").then(response => {
        this.groupBorderLayerName = response.msg;
      });
    },
    // 创建矢量数据源
    addDeptLayer (nextDeptSet) {
      let features = [];
      nextDeptSet.forEach(item => {
        let fs = gis.getFeature(item, this.yellowIcon)
        features.push(fs);
      });
      gis.getVectorLayerByFs(features)
      gis.mapSetFit(features)
    },
    listDialogHidden (type) {
      if (type == 'detail') {
        //合同信息详情弹窗
        this.showInfoDetail = false;
        //资源信息详情弹窗
        this.showResourceDetail = false;
        //资产信息详情弹窗
        this.showPermanentDetail.show = false;
        //农业补贴详情弹窗
        this.showSubsidyFundsDetail = false;
        //重大事项详情弹窗
        this.showMajorEventDetail = false;
        //零工公开详情弹窗
        this.showTempWorkerDetail = false;
        //三务公开详情弹窗
        this.showAffairsDetail = false;
      } else {
        //三务公开列表弹窗
        this.showAffairs = false;
        //零工公开列表弹窗
        this.showTempWorker = false;
        //重大事项列表弹窗
        this.showMajorEvent = false;
        //农业补贴列表弹窗
        this.showSubsidyFunds = false;
        //资产信息列表弹窗
        this.showPermanent = false;
        //资源信息列表弹窗
        this.showResource = false;
        //合同信息列表弹窗
        this.showInfo = false;
        //合同信息详情弹窗
        this.showInfoDetail = false;
        //资源信息详情弹窗
        this.showResourceDetail = false;
        //资产信息详情弹窗
        this.showPermanentDetail.show = false;
        //农业补贴详情弹窗
        this.showSubsidyFundsDetail = false;
        //重大事项详情弹窗
        this.showMajorEventDetail = false;
        //零工公开详情弹窗
        this.showTempWorkerDetail = false;
        //三务公开详情弹窗
        this.showAffairsDetail = false;
      }

    },
    openPermanentDialog (data) {
      let id = data.id;
      this.showPermanentDetail = {
        id,
        show: true
      }
    },
    // 加载地图
    initMap (deptId) {
      this.$store.commit('SET_DEPTID', deptId);
      this.$store.commit('SET_YEAR', new Date().getFullYear());
      getDept(deptId).then(response => {
        let mapCenterLocation;
        const dept = response.data;
        // 定义地图中心坐标
        if (dept.lng && dept.lat) {
          mapCenterLocation = [dept.lng, dept.lat];
        } else {
          mapCenterLocation = [116.391458, 39.902377];
        }
        gis = new GisUtils('map2')
        gis.addTianDiTuLayer()
        gis.addAnnotationLayer()
        // 添加村边界
        this.addVillageBorder(deptId);
        let deptList = [];
        deptList.push(dept);
        // 添加坐标点图层
        this.addDeptLayer(deptList);
        // // 获取资产列表
        this.getPermanentList(deptId);

        let dept2 = this.addrOptions[0];
        if (dept2.deptLevel === '5') {
          // 登录身份为市级领导
          this.userRole = 'cityLeader';
          this.cityId = dept.id;
          this.currentDeptLevel = '5';
          // 添加区县边界
          this.addCountyBorder(dept.children.map(item => item.id));
        } else if (dept2.deptLevel === '4') {
          // 登录身份为县级领导
          this.userRole = 'countyLeader';
          this.countyId = dept2.id;
          this.currentDeptLevel = '4';
          // 添加乡镇边界
          this.addTownBorder(dept2.children.map(item => item.id));
          gis.getView().setZoom(11);
        } else if (dept2.deptLevel === '3') {
          // 登录身份为镇级领导
          this.userRole = 'townLeader';
          this.townId = dept2.id;
          this.currentDeptLevel = '3';
          // 添加村边界
          this.addVillageBorder(dept2.children.map(item => item.id));
          gis.getView().setZoom(13);
        }
        // 添加坐标点图层
        if (dept2.children) {
          this.addDeptLayer(dept2.children);
        }
        var that = this;
        //点击查询详细信息
        gis.getMapContainer().on("singleclick", function (evt) {
          let feature = gis.getMapContainer().forEachFeatureAtPixel(
            evt.pixel,
            (feature) => feature
          );
          if (feature) {
            // 镇级：加载村级坐标点
            if (feature.get('deptLevel') === '3') {
              gis.getMapContainer().getView().animate({
                center: fromLonLat([feature.get('lng'), feature.get('lat')]), // 中心点
                zoom: 12, // 缩放级别
                rotation: undefined, // 缩放完成view视图旋转弧度
                duration: 1000, // 缩放持续时间，默认不需要设置
              });
            } else {
              that.listDialogHidden('detail');
              that.openPermanentDialog(feature.values_.detail);
            }
          }
        });
      });
    },
    // 添加区县边界
    addCountyBorder (deptIds) {
      gis.addImageLayer(this.mapGeoServerUrl, this.countyBorderLayerName, deptIds)
    },
    // 添加乡镇边界
    addTownBorder (deptIds) {
      //console.log(this.townBorderLayerName);
      gis.addImageLayer(this.mapGeoServerUrl, this.townBorderLayerName, deptIds)
    },
    // 添加村边界
    addVillageBorder (deptIds) {
      gis.addImageLayer(this.mapGeoServerUrl, this.villageBorderLayerName, deptIds)
    },
    // 获取资源列表
    getResourceList (deptId) {
      getResourceListByDeptId(deptId).then(response => {
        if (response.data && response.data.length > 0) {
          this.addResourceLayer(response.data);
        }
      });
    },
    // 添加资源图层
    addResourceLayer (resourceList) {
      let features = [];
      resourceList.forEach(item => {
        if (item.theGeom != null && item.theGeom !== '') {
          let fs = gis.getFeature3(item)
          features.push(fs);
        }
      });
      gis.getVectorLayerByFs(features)
      gis.mapSetFit(features)
    },
    getAllList () {
      //三务公开
      // this.getList(null);
      // //零工公开
      // this.getTempWorkerOpenList();
      // //重大事项公开
      // this.getMajorEventOpenList();
      // //补贴资金管理
      // this.getSubsidyFundsList();
      // //固定资产
      // this.getPermanentListList();
      // //资源资产
      // this.getResourceListList();
      // //合同信息
      // this.getContractionByPermanentList();
      // //资金情况
      // this.getFundAndBankAmountByDeptIdArray();
    },
  }
};
