<template>
    <div class="fatherDiv">
        <div class="centerBox">
            <div style="width: 100%; height: 100%" id="cesiumContainer"></div>
            <div class="leftWra">
                <div class="leftTop">
                    <div class="title">
                        <span>作物长势等级面积统计</span>
                        <p @click="Deta()">
                            下载 &nbsp;

                            <img
                                src="@/assets/icons/svg/downloads.svg"
                                style="width: 14px; height: 14px; cursor: pointer"
                            />
                        </p>
                    </div>
                    <div ref="areaDiv" class="areaDiv"></div>
                    <div ref="leftProgressBarDiv" class="ProgressBar"></div>
                </div>
                <div class="leftbottom">
                    <div class="title">
                        <span>作物长势等级面积占比</span>
                        <p @click="Deta2()">
                            下载 &nbsp;
                            <img
                                src="@/assets/icons/svg/downloads.svg"
                                style="width: 14px; height: 14px; cursor: pointer"
                            />
                        </p>
                    </div>
                    <div ref="typesofDiv" class="typesofDiv"></div>
                    <div class="tableDiv">
                        <el-table :data="tableData" style="width: 100%">
                            <el-table-column prop="date" label="类型" />
                            <el-table-column prop="name" label="面积(亩)" />
                            <el-table-column prop="address" label="占比" />
                        </el-table>
                    </div>
                </div>
                <div class="leftFoldDiv" @click="leftFoldClick()">
                    <el-tooltip
                        class="box-item"
                        :show-arrow="false"
                        :disabled="leftWraFlag"
                        hide-after="0"
                        show-after="200"
                        effect="dark"
                        content="展开"
                        placement="top"
                    >
                        <img v-if="!leftWraFlag" src="@/assets/images/close1.png" alt="" />
                    </el-tooltip>
                    <el-tooltip
                        :disabled="!leftWraFlag"
                        :show-arrow="false"
                        class="box-item"
                        show-after="200"
                        hide-after="0"
                        effect="dark"
                        content="收起"
                        placement="top"
                    >
                        <img
                            class="imgrotate"
                            v-if="leftWraFlag"
                            src="@/assets/images/close1.png"
                            alt=""
                        />
                    </el-tooltip>
                </div>
            </div>
            <div class="rightWra">
                <div class="rightTop">
                    <div class="title">
                        <span>作物长势等级统计-高标准农田</span>
                        <p @click="Deta3()">
                            下载 &nbsp;
                            <img
                                src="@/assets/icons/svg/downloads.svg"
                                style="width: 14px; height: 14px; cursor: pointer"
                            />
                        </p>
                    </div>
                    <div ref="farmlandDiv" class="farmlandDiv"></div>
                    <!-- <div ref="ProgressBarDiv" class="ProgressBar"></div> -->
                </div>
                <div class="rightbottom">
                    <div class="title">
                        <span>作物长势等级统计-行政区划</span>
                        <p @click="Deta4()">
                            下载 &nbsp;
                            <img
                                src="@/assets/icons/svg/downloads.svg"
                                style="width: 14px; height: 14px; cursor: pointer"
                            />
                        </p>
                    </div>
                    <el-select
                        popper-class="select_city"
                        @change="selectTab(item)"
                        v-model="value"
                        placeholder="全部"
                    >
                        <el-option
                            v-for="item in Township.arr"
                            :key="item.subregion"
                            :label="item.subregionName"
                            :value="item.subregion"
                        />
                    </el-select>
                    <div ref="ASdivisionDiv" class="ASdivision"></div>
                </div>
                <div class="rightFoldDiv" @click="rightFoldClick()">
                    <el-tooltip
                        :disabled="!rightWraFlag"
                        :show-arrow="false"
                        hide-after="0"
                        show-after="200"
                        class="box-item"
                        effect="dark"
                        content="收起"
                        placement="top"
                    >
                        <img v-if="rightWraFlag" src="@/assets/images/close1.png" alt="" />
                    </el-tooltip>
                    <el-tooltip
                        :disabled="rightWraFlag"
                        :show-arrow="false"
                        hide-after="0"
                        show-after="200"
                        class="box-item"
                        effect="dark"
                        content="展开"
                        placement="top"
                    >
                        <img
                            class="imgrotate"
                            v-if="!rightWraFlag"
                            src="@/assets/images/close1.png"
                            alt=""
                        />
                    </el-tooltip>
                </div>
            </div>

            <div class="bottom_center">
                <TimeLine />
            </div>
            <div class="tool">
                <span><img src="@/assets/images/LAYER.png" alt="" /></span>
                <span><img src="@/assets/images/amplify.png" alt="" /></span>
                <span><img src="@/assets/images/reduce.png" alt="" /></span>
                <span><img src="@/assets/images/measure.png" alt="" /></span>
                <span><img src="@/assets/images/face.png" alt="" /></span>
                <span><img src="@/assets/images/position.png" alt="" /></span>
            </div>
            <div id="popup">
                <div>
                    等级:
                    <p>{{ clickInfoMap.grade }}</p>
                </div>
                <div>
                    经度:
                    <p>{{ clickInfoMap.lon }}</p>
                </div>
                <div>
                    纬度:
                    <p>{{ clickInfoMap.lat }}</p>
                </div>
                <div class="cancel" @click="hiddenOverlayChart">X</div>
            </div>
            <div id="pop">
                <div v-for="(item, index) in townZuowu.label" :key="index">
                    <div>{{ item.crop }}:</div>
                    <div>{{ item.Shape_Area.toFixed(2) }} 亩</div>
                </div>
                <div v-if="townZuowu.XZQMC">
                    <div>村名:</div>
                    <div>{{ townZuowu.XZQMC }}</div>
                </div>
                <div class="cancel" @click="hiddenOverlayChart">X</div>
            </div>
            <el-collapse class="legend" accordion>
                <el-collapse-item name="1">
                    <template #title>图例</template>
                    <div class="mt-4">
                        <el-checkbox-group v-model="checkList" @change="change">
                            <el-checkbox
                                v-for="(value, item, key) in dic"
                                :key="key"
                                :style="{
                                    backgroundColor: value.color,
                                    border: `1px solid value.color`,
                                    width: `100%`,
                                }"
                                :v-model="value.disabled"
                                :disabled="value.disabled"
                                :label="item"
                            />
                        </el-checkbox-group>
                    </div>
                </el-collapse-item>
            </el-collapse>
            <el-button v-if="flag" class="back_button" @click="back()">返回</el-button>
        </div>
        <div class="tabulation">
            <div class="searchDiv">
                <el-form :inline="true" :model="formInline" class="demo-form-inline">
                    <el-form-item label="时间:">
                        <el-select
                            popper-class="selectCity"
                            v-model="formInline.time"
                            placeholder="请选择"
                        >
                            <el-option
                                v-for="(item, index) in timeArr"
                                :key="index"
                                :label="Zitem"
                                :value="item"
                            />
                        </el-select>
                    </el-form-item>
                    <el-form-item label="统计方式:">
                        <el-select
                            popper-class="selectCity"
                            v-model="formInline.statistical"
                            placeholder="请选择"
                        >
                            <el-option label="镇级" value="镇" />
                            <el-option label="村级" value="村" />
                            <el-option label="高标准农田" value="高标准农田" />
                        </el-select>
                    </el-form-item>
                    <el-form-item label="长势等级">
                        <el-select
                            v-model="formInline.droughtRating"
                            popper-class="selectCity"
                            placeholder="请选择"
                        >
                            <el-option label="全部" value="" />
                            <el-option label="好" value="好" />
                            <el-option label="较好" value="较好" />
                            <el-option label="适中" value="适中" />
                            <el-option label="较差" value="较差" />
                            <el-option label="差" value="差" />
                        </el-select>
                    </el-form-item>
                    <el-form-item label="面积(亩)>">
                        <el-input-number v-model="num" :min="0" @change="handleChange" />
                    </el-form-item>
                    <el-form-item>
                        <el-button type="primary" @click="onSubmit">查询</el-button>
                        <el-button plain @click="resetForm" :disabled="!SwitchFlag ? true : false">
                            重置
                        </el-button>
                        <el-button v-if="!operate" type="primary" text @click="dowcity">
                            <img src="@/assets/images/dow.png" alt="" />
                            下载
                        </el-button>
                    </el-form-item>
                </el-form>
                <div class="modeDiv" @click="SwitchMode">
                    <div :class="SwitchFlag ? 'Selected' : ''">表格模式</div>
                    <div :class="SwitchFlag ? '' : 'Selecteds'">图表模式</div>
                </div>
            </div>
            <div v-show="SwitchFlag" class="tableBox">
                <div class="tableBorder">
                    <el-table
                        :data="amount"
                        :header-cell-style="{ 'text-align': 'center' }"
                        :cell-style="{ 'text-align': 'center' }"
                        style="width: 100%"
                        highlight-current-row
                        header-row-class-name="tabth"
                        v-if="!operate"
                    >
                        <el-table-column prop="" width="80" />
                        <el-table-column
                            v-for="(item, index) in tableItem"
                            :key="index"
                            :prop="item.value"
                            :label="index == 0 ? item.lable : item.lable + '(亩)'"
                        />
                    </el-table>
                </div>
                <el-table
                    :data="tableNewData"
                    :header-cell-style="{ 'text-align': 'center' }"
                    :cell-style="{ 'text-align': 'center' }"
                    height="80%"
                    highlight-current-row
                    header-row-class-name="tabth"
                >
                    <el-table-column type="index" width="80" label="序号" :index="Nindex" />
                    <el-table-column prop="subName" label="区域名称" />
                    <el-table-column prop="good" label="好(亩)" />
                    <el-table-column prop="better" label="较好(亩)" />
                    <el-table-column prop="moderate" label="适中(亩)" />
                    <el-table-column prop="difference" label="较差(亩)" />
                    <el-table-column prop="poor" label="差(亩)" />
                </el-table>
                <div class="example-pagination-block">
                    共{{ insectarr.length }}条
                    <el-pagination
                        background
                        layout="prev, pager, next"
                        :total="insectarr.length"
                        :current-page="currentPage"
                        :page-size="pageSize"
                        @current-change="handleCurrentChange"
                    />
                </div>
            </div>
            <div v-show="!SwitchFlag" class="chartMode">
                <div ref="chartModeDiv" class="chartModeDiv"></div>
            </div>
        </div>
    </div>
</template>

<script setup>
import { ref, onMounted, inject, reactive, watch } from 'vue';
import * as echarts from 'echarts';
import TimeLine from '@/components/TimeLine/TimeLine.vue';
import * as xlsx from 'xlsx'; // Vue3 版本
// import * as turf from '@turf/turf';
import { useEcharts } from '@/hooks/useEcharts';
import {
    getfarmland,
    getstatistics,
    gethighStandards,
    getgradeStatistics,
    getadministrativeDivisions,
    getgarrison,
    getgrowthTime,
    getgrowthList,
} from '@/api/crops/site.js';
import axios from 'axios';
import 'echarts-gl';
import { download } from '@/utils/request';
import { useRouter } from 'vue-router';

const router = useRouter();
let viewer = ref(null);
const areaDiv = ref(null);
const typesofDiv = ref(null);
const farmlandDiv = ref(null);
const ProgressBarDiv = ref(null);
const ASdivisionDiv = ref(null);
const value = ref('370211');
const leftProgressBarDiv = ref(null);
let Township = reactive({ arr: [], brr: [], crr: [] }); //街道
let OptionArr = reactive({ arr: [] });
const clickInfoMap = ref({});
const checkedCities = ref([]);
const formLandRef = ref([]);
const flag = ref(false);
let leftWraFlag = ref(true);
let rightWraFlag = ref(true);
let ff = ref('{x:765,y:191}');
let areacharLable = ref([]); //面积统计
let areacharPrice = ref([]);
let totalArea = ref(0); //总面积
let farmlandData = ref([]);
let checkList = ref(['false']);
let checkListdata = ref([]);
const num = ref(0);
let timeArr = ref([]); //年数组
let SwitchFlag = ref(true);
const chartModeDiv = ref(null);
let currentPage = ref(1); //当前页
let pageSize = ref(12); //每页条数
let tableNewData = ref([]);
let tableItem = ref([]);
let operate = ref(true);
let amount = ref([
    {
        好: 0,
        较好: 0,
        适中: 0,
        较差: 0,
        差: 0,
    },
]);
let dowArr = ref([]);
let highStandard = [
    '高标准农田1.0',
    '高标准农田2.0',
    '高标准农田3.0',
    '高标准农田4.0',
    '高标准农田5.0',
    '高标准农田6.0',
    '高标准农田7.0',
];
let highStandarditem = {
    good: [], //好的
    better: [], //较好的
    moderate: [], //适中
    poor: [], //较差
    difference: [], //差
};
const insectarr = ref([]);
//搜索
let formInline = ref({
    time: '',
    statistical: '镇',
    droughtRating: '',
    area: num.value,
});

let typesofData = ref([]);
let dic = {
    好: { color: 'rgba(50, 148, 1, 1)', disabled: false },
    较好: { color: 'rgba(154, 208, 0, 1)', disabled: false },
    适中: { color: 'rgba(234, 219, 0, 1)', disabled: false },
    较差: { color: 'rgba(239, 152, 0, 1)', disabled: false },
    差: { color: 'rgba(247, 85, 0, 1)', disabled: false },
};
watch(
    () => checkList.value,
    (val, oldVal) => {
        if (val.length > oldVal.length) {
            // 挑选出增多的数据
            const newData = val.filter(item => {
                const index = oldVal.findIndex(it => it === item);
                if (index < 0) {
                    return item;
                }
            });
            newData.forEach(item => {
                switch (item) {
                    case '好':
                        addvillages(5, item);
                        break;
                    case '较好':
                        addvillages(4, item);
                        break;
                    case '适中':
                        addvillages(3, item);
                        break;
                    case '较差':
                        addvillages(2, item);
                        break;
                    case '差':
                        addvillages(1, item);
                        break;
                    default:
                        break;
                }
            });
            addWms('shuzisannong:huangdaoqu_town', 'tl');
        } else if (val.length < oldVal.length) {
            // 挑选出减少的数据
            const newData = oldVal.filter(item => {
                const index = val.findIndex(it => it === item);
                if (index < 0) {
                    return item;
                }
            });
            newData.forEach(item => {
                console.log(item);
                removeWms([item]);
            });
        }
    }
);
//行政区划数据
var data = {
    title: [],
};
let dd = ref({
    good: [],
    better: [],
    difference: [],
    moderate: [],
    poor: [],
});

const change = () => {
    console.log(checkedCities.value);
};

//表格数据
let tableData = ref([]);

// 组件挂载完成后执行
onMounted(() => {
    initonMounted();
});

function initonMounted() {
    getfarmlands('370211'); //作物长势等级面积统计
    getstatisticss('370211'); //作物长势等级面积占比
    gethighStandardss(); //高标准农田
    getTownships('370211'); //镇
    getgrowthTimes(); //年

    //地图
    initMap();
    getFarmland();

    for (const key in dic) {
        if (dic[key].disabled !== true) {
            console.log(key);
            checkListdata.value.push(key);
        }
    }
    checkList.value = checkListdata.value;
    localStorage.setItem(router.currentRoute.value.path, true);
}

onUpdated(() => {
    if (localStorage.getItem(router.currentRoute.value.path) == 'false') {
        document.querySelector('.mode').innerText = '地图模式';
    } else {
        document.querySelector('.mode').innerText = '列表模式';
    }
});

/*-------------地图------------------------*/
const mapOption = {
    url:
        'http://{s}.tianditu.gov.cn/img_c/wmts?service=wmts&request=GetTile&version=1.0.0' +
        '&LAYER=img&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}' +
        '&style=default&format=tiles&tk=31091965e263284a501a723b8909f405',
    layer: 'tdtCva',
    style: 'default',
    format: 'tiles',
    tileMatrixSetID: 'c',
    subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'],
    tilingScheme: new Cesium.GeographicTilingScheme(),
    tileMatrixLabels: [
        '1',
        '2',
        '3',
        '4',
        '5',
        '6',
        '7',
        '8',
        '9',
        '10',
        '11',
        '12',
        '13',
        '14',
        '15',
        '16',
        '17',
        '18',
        '19',
    ],
    maximumLevel: 18,
};
Cesium.Ion.defaultAccessToken =
    'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiYzcwZmJmNi02MzQ5LTQ1MGEtODgzMy0yZTZiZGExY2MzMGMiLCJpZCI6MTAxOTgsInNjb3BlcyI6WyJhc2wiLCJhc3IiLCJnYyJdLCJpYXQiOjE1ODEzMDgxNTR9.NeJU4yfUi-SnLrNDOBYsQgmiSh3B4axCTi1m84Qw99c';
function initMap() {
    viewer = new Cesium.Viewer('cesiumContainer', {
        baseLayerPicker: false,
        shouldAnimate: true, //自动播放
        infoBox: false, //信息框
        animation: false, //“动画”窗口小部件提供用于播放,暂停和倒退的按钮,以及当前时间和日期,并由“飞梭环”包围,用于控制动画的速度。cesium示例地图左下角那个
        timeline: false, //时间轴是用于显示和控制当前场景时间的小部件。
        geocoder: false, //查找,用于查找地址和地标,以及将照相机悬挂到它们。使用铯离子进行地址解析。,cesium示例地图右上角的放大镜
        homeButton: false, //主页按钮
        navigationHelpButton: false, //导航帮助按钮
        selectionIndicator: false, //原生选择绿框
        fullscreenButton: false, //右下角的全屏按钮
        // terrainProvider:new Cesium.createWorldTerrain(),
        terrainProvider: new Cesium.EllipsoidTerrainProvider({}),
        sceneModePicker: false, //是否显示投影方式控件
        contextOptions: {
            webgl: {
                alpha: true,
            },
        },

        imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
            ...mapOption,
        }),
    });
    // 去除logo
    viewer.cesiumWidget.creditContainer.style.display = 'none';
    viewer.camera.flyTo({
        destination: Cesium.Rectangle.fromDegrees(119.5091, 35.5671, 120.3285, 36.1455),
        duration: 0,
    });

    // 图层点击事件
    layerClick();
    // 蒙版
    mbHandle();
}

// data数据数组
// name实体名称,方便以后删除
// color实体颜色
function addBoundaryHandle(data, name, color) {
    data.forEach(item => {
        let arr = [];
        item[0].forEach(mem => {
            arr.push(mem[0]);
            arr.push(mem[1]);
        });
        viewer.entities.add({
            name: name,
            polyline: {
                positions: Cesium.Cartesian3.fromDegreesArray(arr),
                width: 6,
                // material: new Cesium.PolylineDashMaterialProperty({//虚线
                material: new Cesium.PolylineGlowMaterialProperty({
                    //光晕
                    glowPower: 0.2,
                    color: color
                        ? Cesium.Color.fromCssColorString(color)
                        : Cesium.Color.fromBytes(250, 128, 114), //#FA8072
                }),
                // followSurface: false, //是否贴着地表
                clampToGround: true, //贴地
            },
        });
    });
}
function getLevel(height) {
    if (height > 48000000) {
        return 0;
    } else if (height > 24000000) {
        return 1;
    } else if (height > 12000000) {
        return 2;
    } else if (height > 6000000) {
        return 3;
    } else if (height > 3000000) {
        return 4;
    } else if (height > 1500000) {
        return 5;
    } else if (height > 750000) {
        return 6;
    } else if (height > 375000) {
        return 7;
    } else if (height > 187500) {
        return 8;
    } else if (height > 93750) {
        return 9;
    } else if (height > 46875) {
        return 10;
    } else if (height > 23437.5) {
        return 11;
    } else if (height > 11718.75) {
        return 12;
    } else if (height > 5859.38) {
        return 13;
    } else if (height > 2929.69) {
        return 14;
    } else if (height > 1464.84) {
        return 15;
    } else if (height > 732.42) {
        return 16;
    } else if (height > 366.21) {
        return 17;
    } else {
        return 18;
    }
}
function getFarmland() {
    axios({
        url:
            serverAPI.geoserverUrl +
            '/shuzisannong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=shuzisannong%3Afarmland&maxFeatures=50&outputFormat=application%2Fjson',
        method: 'get',
    })
        .then(res => {
            console.log('农田:', res);
            formLandRef.value = res.data.features;
        })
        .catch(err => {});
}

let townZuowu = ref({ label: [] }); //镇的作物
let XZDM = '';
// 图层点击事件
function layerClick() {
    var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
    handler.setInputAction(function (movement) {
        var ray = viewer.camera.getPickRay(movement.position);
        var cartesian = viewer.scene.globe.pick(ray, viewer.scene);
        if (cartesian) {
            let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
            if (cartographic) {
                let xy = new Cesium.Cartesian2();
                let alti = viewer.camera.positionCartographic.height;
                let level = getLevel(alti);
                const layers = viewer.imageryLayers._layers;
                // 筛选出黄岛区服务
                const index = layers.findIndex(
                    item =>
                        item._imageryProvider._layers &&
                        item._imageryProvider._layers === 'shuzisannong:huangdaoqu_town'
                );
                if (index > -1) {
                    const providerPoint = layers[index];
                    // 拿取最后一个图层
                    let provider = providerPoint._imageryProvider;
                    if (
                        provider &&
                        provider.ready &&
                        provider._layers &&
                        providerPoint.show === true
                    ) {
                        xy = provider.tilingScheme.positionToTileXY(cartographic, level, xy);
                        let promise = provider.pickFeatures(
                            xy.x,
                            xy.y,
                            level,
                            cartographic.longitude,
                            cartographic.latitude
                        );
                        if (promise) {
                            promise.then(data => {
                                if (data.length > 0) {
                                    let newData = data['0'];
                                    if (newData.properties && newData.properties.XZDM) {
                                        console.log('XZDM:', XZDM);
                                        console.log(
                                            'newData.properties.XZDM:',
                                            newData.properties.XZDM
                                        );
                                        if (XZDM !== newData.properties.XZDM) {
                                            flag.value = true;
                                            //防止重复加载
                                            XZDM = newData.properties.XZDM;
                                            value.value = XZDM; //
                                            if (selectTab) {
                                                selectTab(); //
                                            }
                                            let item = newData.data;
                                            // 定位
                                            viewer.camera.flyTo({
                                                destination: Cesium.Rectangle.fromDegrees(
                                                    item.bbox[0],
                                                    item.bbox[1],
                                                    item.bbox[2],
                                                    item.bbox[3]
                                                ),
                                                duration: 2,
                                            });
                                            // 移除高亮
                                            deleteEntityByName('townLine');
                                            // 高亮边界
                                            addBoundaryHandle(
                                                item.geometry && item.geometry.coordinates,
                                                'townLine',
                                                'yellow'
                                            );
                                            // // 移除以前的
                                            removeWms(['village_CQL']);
                                            // 添加新的
                                            console.log(newData.properties.XZDM);
                                            addvillage(
                                                `XZDM=${newData.properties.XZDM}`,
                                                'village_CQL'
                                            );

                                            // 显示该镇的种植结构
                                            let entitys = viewer.entities._entities._array;
                                            for (var na = entitys.length - 1; na >= 0; na--) {
                                                if (
                                                    entitys[na]._name &&
                                                    entitys[na]._name ===
                                                        'point' + newData.properties.XZDM
                                                ) {
                                                    let info = entitys[na]._info;
                                                    // entitys[na].label.show = true
                                                    townZuowu.value = info; //保存数据
                                                    showOverlayChart(movement.position); // 添加地图移动监听:使地图移动弹窗跟着移动
                                                    viewer.scene.postRender.addEventListener(
                                                        infoWindowPostRender
                                                    );
                                                } else {
                                                    // if (entitys[na].label) {
                                                    //     entitys[na].label.show = false
                                                    // }
                                                }
                                            }
                                            // 移除村高亮
                                            deleteEntityByName('villageLine');
                                            XZQDM = '';
                                        } else {
                                            // // 已经有镇了,监听村点击
                                            villageClick(layers, xy, level, cartographic, movement);
                                        }
                                    } else {
                                        removeWms(['village_CQL']);
                                        // 移除框框
                                        hiddenOverlayChart(); // 清除监听事件
                                    }
                                }
                            });
                        }
                    }
                }
            }
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}
let XZQDM = '';
// 村点击高亮
function villageClick(layers, xy, level, cartographic, movement) {
    const index = layers.findIndex(
        item =>
            item._imageryProvider._layers &&
            item._imageryProvider._layers === 'shuzisannong:huangdaoqu_village'
    );
    if (index > -1) {
        const providerPoint = layers[index];
        // 拿取最后一个图层
        let provider = providerPoint._imageryProvider;
        if (provider && provider.ready && provider._layers && providerPoint.show === true) {
            xy = provider.tilingScheme.positionToTileXY(cartographic, level, xy);
            let promise = provider.pickFeatures(
                xy.x,
                xy.y,
                level,
                cartographic.longitude,
                cartographic.latitude
            );
            if (promise) {
                promise.then(data => {
                    if (data.length > 0) {
                        let newData = data['0'];
                        console.log(newData);
                        viewer.camera.flyTo({
                            destination: Cesium.Rectangle.fromDegrees(
                                newData.data.bbox[0],
                                newData.data.bbox[1],
                                newData.data.bbox[2],
                                newData.data.bbox[3]
                            ),
                            duration: 2,
                        });

                        if (newData.properties && newData.properties.XZQDM) {
                            if (XZQDM !== newData.properties.XZQDM) {
                                //防止
                                XZQDM = newData.properties.XZQDM;
                                let item = newData.data;
                                // 移除高亮
                                deleteEntityByName('villageLine');
                                // 高亮边界
                                addBoundaryHandle(
                                    item.geometry && item.geometry.coordinates,
                                    'villageLine',
                                    'yellow'
                                );
                            } else {
                                massif(layers, xy, level, cartographic, movement);
                            }
                        }
                    }
                });
            }
        }
    }
}
function massif(layers, xy, level, cartographic, movement) {
    console.log(layers);
    const index = layers.findIndex(
        item =>
            item._imageryProvider._layers && item._imageryProvider._layers === 'shuzisannong:growth'
    );
    if (index > -1) {
        const providerPoint = layers[index];
        // 拿取最后一个图层
        let provider = providerPoint._imageryProvider;
        if (provider && provider.ready && provider._layers && providerPoint.show === true) {
            xy = provider.tilingScheme.positionToTileXY(cartographic, level, xy);
            let promise = provider.pickFeatures(
                xy.x,
                xy.y,
                level,
                cartographic.longitude,
                cartographic.latitude
            );
            if (promise) {
                promise.then(data => {
                    if (data.length > 0) {
                        let newData = data['0'];
                        let grade = '';
                        switch (newData.properties.value) {
                            case 1:
                                grade = '差';
                                break;
                            case 2:
                                grade = '较差';
                                break;
                            case 3:
                                grade = '适中';
                                break;
                            case 4:
                                grade = '较好';
                                break;
                            case 5:
                                grade = '好';
                                break;
                            default:
                                break;
                        }
                        let longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(
                            6
                        );
                        let latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(
                            6
                        );
                        clickInfoMap.value = {
                            lon: longitudeString,
                            lat: latitudeString,
                            grade: grade,
                        };
                        console.log(clickInfoMap.value);
                        showOverlayChart(movement.position); // 添加地图移动监听:使地图移动弹窗跟着移动
                        viewer.scene.postRender.addEventListener(infoWindowPostRender);
                    }
                });
            }
        }
    }
}

//添加地图
function addvillages(value, customName) {
    let map2 = new Cesium.WebMapServiceImageryProvider({
        url: `${serverAPI.geoserverUrl}/shuzisannong/wms`,
        layers: 'shuzisannong:growth', //图层名
        parameters: {
            service: 'WMS',
            format: 'image/png',
            transparent: true, //是否透明
            // CQL_FILTER: `XZDM=${value.value}`,
            CQL_FILTER: `value in (${value})`,
        },
    });
    map2.customName = customName;
    viewer.imageryLayers.addImageryProvider(map2);
}
// 添加村
// CQL_FILTER:筛选的语句
// customName地图服务自定义属性名
function addvillage(CQL_FILTER, customName) {
    let map2 = new Cesium.WebMapServiceImageryProvider({
        url: `${serverAPI.geoserverUrl}/shuzisannong/wms`,
        layers: 'shuzisannong:huangdaoqu_village', //图层名
        parameters: {
            service: 'WMS',
            format: 'image/png',
            transparent: true, //是否透明
            // CQL_FILTER: `XZDM=${value.value}`,
            CQL_FILTER: CQL_FILTER,
        },
    });
    map2.customName = customName;
    viewer.imageryLayers.addImageryProvider(map2);
}
// 移除wms
// nameArry :属性名数组(customName)
// isMohu :是否模糊查询
function removeWms(nameArry, isMohu) {
    if (viewer) {
        // 倒叙遍历,customName是自定义的属性
        const layers = viewer.imageryLayers._layers;
        for (let f = layers.length - 1; f >= 0; f--) {
            nameArry.forEach(item => {
                if (layers[f]._imageryProvider && layers[f]._imageryProvider.customName) {
                    if (isMohu) {
                        if (layers[f]._imageryProvider.customName.indexOf(item) > -1) {
                            viewer.imageryLayers.remove(layers[f]);
                        }
                    } else {
                        if (layers[f]._imageryProvider.customName === item) {
                            viewer.imageryLayers.remove(layers[f]);
                        }
                    }
                }
            });
        }
    }
}

// 根据实体名字删除实体(模糊删除)
function deleteEntityByName(name) {
    if (viewer) {
        let entitys = viewer.entities._entities._array;
        for (var na = entitys.length - 1; na >= 0; na--) {
            if (entitys[na]._name && entitys[na]._name === name) {
                viewer.entities.remove(entitys[na]);
            }
        }
    }
}
//折叠

function leftFoldClick() {
    leftWraFlag.value = !leftWraFlag.value;
    if (leftWraFlag.value) {
        let leftWra = document.querySelector('.leftWra');
        leftWra ? (leftWra.style.transform = 'translate(0,0)') : '';
    } else {
        let leftWra = document.querySelector('.leftWra');
        leftWra ? (leftWra.style.transform = 'translate(-107%,0)') : '';
    }
    console.log(leftWraFlag.value);
}
function rightFoldClick() {
    rightWraFlag.value = !rightWraFlag.value;
    if (rightWraFlag.value) {
        let rightWra = document.querySelector('.rightWra');
        rightWra.style.transform = 'translate(0,0)';
    } else {
        let rightWra = document.querySelector('.rightWra');
        rightWra.style.transform = 'translate(107%,0)';
    }
}
const resetForm = () => {
    (formInline.value.time = timeArr.value[0]),
        (formInline.value.statistical = '镇'),
        (formInline.value.droughtRating = ''),
        (formInline.value.area = 1),
        (operate.value = true);
    onSubmit();
};
//列表模式模式切换
const SwitchMode = () => {
    SwitchFlag.value = !SwitchFlag.value;
    const statInfo = chartModeDiv.value; // 获取图表元素
    statInfo.style.width = window.innerWidth - 200 + 'px'; //初始化echarts图表宽度
    statInfo.style.height = window.innerHeight - 200 + 'px';
    const myChart = echarts.init(statInfo);
    // 设置宽度自适应
    window.addEventListener('resize', () => {
        statInfo.style.width = window.innerWidth - 200 + 'px';
        statInfo.style.height = window.innerHeight - 200 + 'px';
        myChart.resize();
    });
    chartModes();
};
const handleChange = value => {
    formInline.value.area = value;
};
//搜索
const onSubmit = () => {
    let arr = [];
    let brr = [];
    currentPage.value = 1;
    getgrowthList({
        time: formInline.value.time,
        statistical: formInline.value.statistical,
        droughtRating: formInline.value.droughtRating,
        area: formInline.value.area,
    }).then(res => {
        tableItem.value = [
            {
                lable: '',
                value: '区域名称',
            },
            {
                lable: '好',
                value: '好',
            },
            {
                lable: '较好',
                value: '较好',
            },
            {
                lable: '适中',
                value: '适中',
            },
            {
                lable: '较差',
                value: '较差',
            },
            {
                lable: '差',
                value: '差',
            },
        ];

        operate.value = false;
        insectarr.value = res.data;
        tableNewData.value = res.data.slice(
            (currentPage.value - 1) * pageSize.value,
            (currentPage.value - 1) * pageSize.value + pageSize.value
        );
        console.log(tableNewData.value);
        tableNewData.value.forEach(item => {
            dowArr.value.push({
                区域名称: item.subName,
                好: item.good,
                较好: item.better,
                适中: item.moderate,
                较差: item.difference,
                差: item.poor,
            });
        });

        amount.value[0]['好'] = 0;
        amount.value[0]['较好'] = 0;
        amount.value[0]['适中'] = 0;
        amount.value[0]['较差'] = 0;
        amount.value[0]['差'] = 0;
        amount.value[0]['区域名称'] = '合计';
        res.data.forEach(item => {
            item.good
                ? (amount.value[0]['好'] += Number(item.good) !== NaN ? Number(item.good) : 0)
                : 0;
            item.better
                ? (amount.value[0]['较好'] += Number(item.better) !== NaN ? Number(item.better) : 0)
                : 0;
            item.moderate
                ? (amount.value[0]['适中'] +=
                      Number(item.moderate) !== NaN ? Number(item.moderate) : 0)
                : 0;
            item.difference
                ? (amount.value[0]['较差'] +=
                      Number(item.difference) !== NaN ? Number(item.difference) : 0)
                : 0;
            item.poor
                ? (amount.value[0]['差'] += Number(item.poor) !== NaN ? Number(item.poor) : 0)
                : 0;
        });
        for (const key in amount.value[0]) {
            if (amount.value[0][key] !== '合计') {
                amount.value[0][key] = amount.value[0][key].toFixed(2);
            }
        }
        const statInfo = chartModeDiv.value; // 获取图表元素
        statInfo.style.width = window.innerWidth - 100 + 'px'; //初始化echarts图表宽度
        statInfo.style.height = window.innerHeight - 100 + 'px';
        const myChart = echarts.init(statInfo);
        // 设置宽度自适应
        window.addEventListener('resize', () => {
            statInfo.style.width = window.innerWidth - 200 + 'px';
            statInfo.style.height = window.innerHeight - 200 + 'px';
            myChart.resize();
        });
        chartModes();
    });
};
//每页条数
const handleCurrentChange = val => {
    currentPage.value = val;
    tableNewData.value = insectarr.value.slice(
        (currentPage.value - 1) * pageSize.value,
        (currentPage.value - 1) * pageSize.value + pageSize.value
    );
};
const Nindex = index => {
    // 当前页数 - 1 * 每页数据条数 + 1
    const page = currentPage.value; // 当前页码
    const pagesize = pageSize.value; // 每页条数
    return index + 1 + (page - 1) * pagesize;
};

/*------------------接口--------------------*/
//获取年
const getgrowthTimes = () => {
    getgrowthTime().then(res => {
        timeArr.value = res.data;
        formInline.value.time = res.data[0];
        onSubmit();
    });
};

//作物长势等级面积统计
const getfarmlands = city => {
    areacharLable = ref([]);
    areacharPrice = ref([]);
    getfarmland({ divisions: city }).then(res => {
        for (const key in res.data[0]) {
            if (res.data[0][key]) {
                areacharLable.value.push(key);
                areacharPrice.value.push(res.data[0][key]);
            }
        }
        areachar();
    });
};
//作物长势等级面积占比
const getstatisticss = city => {
    typesofData = ref([]);
    tableData.value = [];
    totalArea = ref(0);
    getstatistics({ divisions: city }).then(res => {
        console.log(res.data);
        res.data.forEach(item => {
            totalArea.value = Number(item.sum);
            console.log(item);
            for (const key in item) {
                if (key !== 'sum' && Number.isFinite(item[key])) {
                    typesofData.value.push({
                        name: key,
                        value: item[key],
                    });
                    tableData.value.push({
                        date: key,
                        name: item[key],
                    });
                }
                tableData.value.forEach(it => {
                    if (item[`${it.date}Zb`] !== undefined) {
                        it['address'] = (item[`${it.date}Zb`] * 100).toFixed(2) + '%';
                    }
                });
                let arr = JSON.parse(JSON.stringify(tableData.value));
                arr.forEach(it => {
                    switch (it.date) {
                        case 'good':
                            it.date = '好';
                            break;
                        case 'better':
                            it.date = '较好';
                            break;
                        case 'moderate':
                            it.date = '适中';
                            break;
                        case 'poor':
                            it.date = '较差';
                            break;
                        case 'difference':
                            it.date = '差';
                            break;

                        default:
                            break;
                    }
                });
                tableData.value = arr;
            }
        });
        typesof();
    });
};
//高标准农田统计

const gethighStandardss = () => {
    farmlandData = ref([]);
    gethighStandards().then(res => {
        highStandard.forEach((item, index) => {
            let town = res.data.map(i => {
                if (item === i.region) {
                    for (const key in i) {
                        if (highStandarditem[key]) {
                            highStandarditem[key].push(i[key]);
                        }
                    }
                }
            });
        });
        farmland();
    });
};

//镇
const getTownships = city => {
    dd.value['better'] = [];
    dd.value['difference'] = [];
    dd.value['good'] = [];
    dd.value['moderate'] = [];
    dd.value['poor'] = [];
    getgradeStatistics({ divisions: city, yearMonth: '2023-05' }).then(res => {
        console.log(res.data);
        Township.brr = res.data;
        Township.arr = res.data.sort((a, b) => {
            return a.subregionName.length - b.subregionName.length;
        });
        Township.arr.unshift({
            subregion: '370211',
            subregionName: '全部',
        });
        let arr = [...res.data];
        let brr = [];
        arr.splice(0, 1);
        arr.forEach(item => {
            if (brr.indexOf(item.subregionName) == -1) {
                brr.push(item.subregionName);
            }
        });
        data.title = [...Object.values(brr)];
        data.title.forEach((item, index) => {
            let town = res.data.map(i => {
                if (item === i.subregionName) {
                    dd.value['better'].push(i.better);
                    dd.value['difference'].push(i.difference);
                    dd.value['good'].push(i.good);
                    dd.value['moderate'].push(i.moderate);
                    dd.value['poor'].push(i.poor);
                    return i;
                }
            });
        });
        console.log(dd);
        ASdivision();
    });
};
//村
const getvillages = city => {
    let newdd = {
        good: [],
        better: [],
        difference: [],
        moderate: [],
        poor: [],
    };
    getadministrativeDivisions({ divisions: city }).then(res => {
        console.log(res.data);
        Township.brr = res.data;
        let arr = [...res.data];
        let brr = [];
        arr.forEach(item => {
            if (brr.indexOf(item.subregionName) == -1) {
                brr.push(item.subregionName);
            }
        });
        data.title = [...Object.values(brr)];
        data.title.forEach((item, index) => {
            let town = res.data.map(i => {
                if (item === i.subregionName) {
                    newdd['better'].push(i.better);
                    newdd['difference'].push(i.difference);
                    newdd['good'].push(i.good);
                    newdd['moderate'].push(i.moderate);
                    newdd['poor'].push(i.poor);
                    return i;
                }
            });
        });
        dd.value = newdd;
        ASdivision();
    });
};

const selectTab = () => {
    getgarrison().then(res => {
        console.log(res);
        res.features.forEach(item => {
            if (item.properties.XZDM == value.value) {
                deleteEntityByName('townLine');
                addBoundaryHandle(item.geometry.coordinates, 'townLine', 'yellow');
                viewer.camera.flyTo({
                    destination: Cesium.Rectangle.fromDegrees(
                        item.bbox[0],
                        item.bbox[1],
                        item.bbox[2],
                        item.bbox[3]
                    ),
                    duration: 0,
                });
            }
        });
    });
    viewer.camera.flyTo({
        destination: Cesium.Rectangle.fromDegrees(119.5091, 35.5671, 120.3285, 36.1455),
        duration: 2,
    });
    getfarmlands(value.value); //作物长势等级面积统计
    getstatisticss(value.value); //作物长势等级面积占比
    if (value.value !== '370211') {
        getvillages(value.value); //村
    }

    if (value.value == '370211') {
        removeWms(['village_CQL']);
        removeWms(['aaa']);
        getTownships();
        hiddenOverlayChart();
    }
    let arr = [...Township.arr];
    console.log('arr:', arr);
    // arr.forEach(item => {
    //     if (item.properties.XZDM == value.value) {
    //         viewer.camera.flyTo({
    //             destination: Cesium.Rectangle.fromDegrees(
    //                 item.bbox[0],
    //                 item.bbox[1],
    //                 item.bbox[2],
    //                 item.bbox[3]
    //             ),
    //             duration: 2,
    //         });
    //     }
    //     let arr = [...Township.brr];
    //     let brr = [];
    //     // console.log(Township.brr);
    //     arr.forEach(item => {
    //         if (item.properties.XZDM == value.value) {
    //             brr.push(item.properties.XZQMC);
    //         }
    //     });
    //     // console.log(brr);
    //     data.title = [...Object.values(brr)];
    // });
    let town = [...Township.arr];
    // const townData = town.find(item => item.properties.XZDM === value.value);
    // if (townData) {
    //     // 移除镇高亮
    //     deleteEntityByName('townLine');
    //     // 高亮镇边界
    //     addBoundaryHandle(townData.geometry.coordinates, 'townLine', 'yellow');
    // }
    // 移除以前村
    removeWms(['aaa']);
    // 添加村
    addvillage(`XZDM=${value.value}`, 'aaa');
    // getarea({ time: '2023-04-26', subregion: '1', parent: '黄岛区' }).then(res => {
    //     let arr = [];
    //     res.data.map((item, index) => {
    //         if (item.region == townData.properties.XZMC) {
    //             arr.push({
    //                 crop: item.type,
    //                 Shape_Area: item.area,
    //             });
    //         }
    //     });
    //     townZuowu.value = {
    //         label: arr,
    //     };
    //     console.log(arr);
    //     showOverlayChart({ x: 642, y: 312 });
    // });
};

//下载
/*---------------------------*/
const Deta = item => {
    let region = '';
    Township.arr.forEach(item => {
        if (item.subregion == value.value) {
            region = item.subregionName == '全部' ? '黄岛区' : item.subregionName;
        }
    });
    getfarmland({ divisions: value.value }).then(res => {
        let arr = [
            {
                region: region == '全部' ? '黄岛区' : region,
                good: res.data[0].good,
                better: res.data[0].better,
                moderate: res.data[0].moderate,
                poor: res.data[0].poor,
                difference: res.data[0].difference,
            },
        ];
        exportExcel(arr, `${arr[0].region}作物长势等级面积统计`, 'Sheet1');
    });
};
const Deta2 = item => {
    let region = '';
    Township.arr.forEach(item => {
        if (item.subregion == value.value) {
            region = item.subregionName == '全部' ? '黄岛区' : item.subregionName;
        }
    });
    console.log(tableData);
    exportExcels(tableData.value, `${region}作物长势等级面积占比`, 'Sheet1');
};
const Deta3 = item => {
    let arr = [];
    gethighStandards().then(res => {
        console.log(res.data);
        res.data.forEach(item => {
            arr.push({
                region: item.region,
                good: item.good,
                better: item.better,
                moderate: item.moderate,
                poor: item.poor,
                difference: item.difference,
            });
        });
        exportExcel(arr, '作物长势等级统计-高标准农田列表', 'Sheet1');
    });
};
const Deta4 = item => {
    let region = '';
    let arr = [];
    Township.arr.forEach(item => {
        if (item.subregion == value.value) {
            region = item.subregionName == '全部' ? '黄岛区' : item.subregionName;
        }
    });
    if (value.value === '370211') {
        getgradeStatistics({ divisions: value.value, whetherToDownload: false }).then(res => {
            res.data.forEach(item => {
                console.log(item);
                arr.push({
                    region: item.subregionName,
                    good: item.good,
                    better: item.better,
                    moderate: item.moderate,
                    poor: item.poor,
                    difference: item.difference,
                });
            });
            exportExcel(arr, `${region}作物长势等级统计-行政区划`, 'Sheet1');
        });
    } else {
        getadministrativeDivisions({ divisions: value.value, whetherToDownload: false }).then(
            res => {
                res.data.forEach(item => {
                    console.log(item)
                    arr.push({
                        region: item.subregionName,
                        good: item.good,
                        better: item.better,
                        moderate: item.moderate,
                        poor: item.poor,
                        difference: item.difference,
                    });
                });
                exportExcel(arr, `${region}作物长势等级统计-行政区划`, 'Sheet1');
            }
        );
    }
};

const dowcity = () => {
    console.log(insectarr);
    let arr = JSON.parse(JSON.stringify(amount.value[0]));
    arr.region = '合计';
    dowArr.value.push(arr);
    exportExcelss(dowArr.value, '长势面积统计表', 'Sheet1');
};

//表头数据切换  ----------前端生成excel
const changeTableHead = (tableData, fieldName) => {
    const list = tableData.map(item => {
        const obj = {};
        for (const k in item) {
            if (fieldName[k]) {
                obj[fieldName[k]] = item[k];
            }
        }
        return obj;
    });
    return list;
};
const exportExcel = (tableData, fileName = '用户列表', pageName = 'Sheet1') => {
    let fieldNameObj = {
        region: '区域名称',
        good: '好(亩)',
        better: '较好(亩)',
        moderate: '适中(亩)',
        difference: '较差(亩)',
        poor: '差(亩)',
    };
    const list = changeTableHead(tableData, fieldNameObj);
    // 创建工作表
    const data = xlsx.utils.json_to_sheet(list);
    // 创建工作簿
    const wb = xlsx.utils.book_new();
    // 将工作表放入工作簿中
    xlsx.utils.book_append_sheet(wb, data, pageName);
    // 生成文件并下载
    xlsx.writeFile(wb, `${fileName}.xlsx`);
};

const exportExcels = (tableData, fileName = '用户列表', pageName = 'Sheet1') => {
    let fieldNameObj = {
        date: '类型',
        name: '面积(亩)',
        address: '占比',
    };
    const list = changeTableHead(tableData, fieldNameObj);
    // 创建工作表
    const data = xlsx.utils.json_to_sheet(list);
    // 创建工作簿
    const wb = xlsx.utils.book_new();
    // 将工作表放入工作簿中
    xlsx.utils.book_append_sheet(wb, data, pageName);
    // 生成文件并下载
    xlsx.writeFile(wb, `${fileName}.xlsx`);
};
const exportExcelss = (tableData, fileName = '用户列表', pageName = 'Sheet1') => {
    let fieldNameObj = {
        区域名称: '区域名称',
        好: '好(亩)',
        较好: '较好(亩)',
        适中: '适中(亩)',
        较差: '较差(亩)',
        差: '差(亩)',
    };
    const list = changeTableHead(tableData, fieldNameObj);
    // 创建工作表
    const data = xlsx.utils.json_to_sheet(list);
    // 创建工作簿
    const wb = xlsx.utils.book_new();
    // 将工作表放入工作簿中
    xlsx.utils.book_append_sheet(wb, data, pageName);
    // 生成文件并下载
    xlsx.writeFile(wb, `${fileName}.xlsx`);
};

/*-------------echarts--------------*/
function areachar() {
    const areaDivIntance = echarts.init(areaDiv.value);
    // let dataX = areacharLable.value; //名称
    let dataX = ['好', '较好', '适中', '较差', '差']; //名称
    let dataY = areacharPrice.value; //数据
    let zoomShow = false;
    if (dataY.length > 14) {
        zoomShow = true;
    } else {
        zoomShow = false;
    }
    var option = {
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow',
            },
        },
        grid: {
            top: '10%',
            right: '5%',
            left: '18%',
            bottom: '10%',
        },
        xAxis: [
            {
                type: 'category',
                data: dataX,
                axisLine: {
                    lineStyle: {
                        color: 'rgba(66, 192, 255, .3)',
                    },
                },
                axisLabel: {
                    interval: 0,
                    margin: 10,
                    color: 'rgba(255, 255, 255, 0.7)',
                    textStyle: {
                        fontSize: 14,
                    },
                    rotate: '0',
                },
                axisTick: {
                    //刻度
                    show: false,
                },
            },
        ],
        yAxis: {
            name: '面积(亩)',
            nameTextStyle: {
                color: 'rgba(255, 255, 255, 0.8)',
                fontSize: 14,
            },
            type: 'value',
            axisLabel: {
                color: 'rgba(255,255,255,0.7)',
            },
            splitLine: {
                // lineStyle: {
                //     type: 'dashed',
                // },
                show: false,
            },
            minInterval: 1,
            axisLine: {
                show: false,
            },
            axisTick: {
                show: false,
            },
        },
        dataZoom: [
            //滚动条
            {
                show: zoomShow,
                zoomLock: true, //禁止拉伸
                type: 'slider',
                realtime: true,
                startValue: 0,
                endValue: 14,
                xAxisIndex: [0],
                bottom: '10',
                left: '30',
                height: 10,
                borderColor: 'rgba(0,0,0,0)',
                textStyle: {
                    color: '#05D5FF',
                },
            },
        ],
        series: [
            {
                type: 'bar',
                data: dataY,
                barWidth: '15',
                itemStyle: {
                    normal: {
                        color: new echarts.graphic.LinearGradient(
                            0,
                            0,
                            0,
                            1,
                            [
                                {
                                    offset: 0,
                                    color: 'rgba(45, 204, 177, 1)', // 0% 处的颜色
                                },
                                {
                                    offset: 0.98,
                                    color: 'rgba(71, 179, 161, 0)', // 100% 处的颜色
                                },
                            ],
                            false
                        ),
                        shadowColor: 'rgba(5, 213, 255, 1)',
                        shadowBlur: 4,
                    },
                },
                label: {
                    normal: {
                        show: true,
                        lineHeight: 10,
                        formatter: '{c}',
                        position: 'top',
                        textStyle: {
                            color: '#fff',
                            fontSize: 10,
                        },
                    },
                },
            },
        ],
    };

    option && areaDivIntance.setOption(option);

    window.addEventListener('resize', function () {
        areaDivIntance.resize();
    });
}

function typesof() {
    const typesofDivIntance = echarts.init(typesofDiv.value);
    typesofData.value.forEach(item => {
        switch (item.name) {
            case 'good':
                item.name = '好';
                break;
            case 'better':
                item.name = '较好';
                break;
            case 'moderate':
                item.name = '适中';
                break;
            case 'poor':
                item.name = '较差';
                break;
            case 'difference':
                item.name = '差';
                break;

            default:
                break;
        }
    });
    var data = typesofData.value;

    let option = {
        color: [
            'rgba(50, 148, 1, 1)',
            'rgba(154, 208, 0, 1)',
            'rgba(234, 219, 0, 1)',
            'rgba(239, 152, 0, 1)',
            'rgba(247, 85, 0, 1)',
        ],
        title: {
            text: '总面积',
            subtext: `${totalArea.value}亩`,
            textStyle: {
                color: '#f2f2f2',
                fontSize: 14,
                // align: 'center'
            },
            subtextStyle: {
                fontSize: 14,
                color: ['#ff9d19'],
            },
            x: 'center',
            y: 'center',
        },
        grid: {
            top: 0,
        },
        legend: {
            orient: 'vertical',
            top: 'middle',
            right: '2%',
            textStyle: {
                color: '#f2f2f2',
                fontSize: 14,
            },
            icon: 'roundRect',
            data: data,
        },
        tooltip: {
            //提示框组件
            trigger: 'item', //item数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用。
            axisPointer: {
                // 坐标轴指示器,坐标轴触发有效
                type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
            },
            formatter: '{a} <br/>{b} : {c}亩 <br/>百分比 : {d}%', //{a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
        },
        series: [
            // 主要展示层的
            {
                radius: ['50%', '71%'],
                center: ['50%', '50%'],
                type: 'pie',
                label: {
                    normal: {
                        show: false,
                    },
                },
                labelLine: {
                    normal: {
                        show: false,
                    },
                },
                name: '作物长势等级面积占比',
                data: data,
            },
            // 边框的设置
            {
                radius: ['50%', '54%'],
                center: ['50%', '50%'],
                type: 'pie',
                label: {
                    normal: {
                        show: false,
                    },
                    emphasis: {
                        show: false,
                    },
                },
                labelLine: {
                    normal: {
                        show: false,
                    },
                    emphasis: {
                        show: false,
                    },
                },
                animation: false,
                tooltip: {
                    show: false,
                },
                data: [
                    {
                        value: 1,
                        itemStyle: {
                            color: 'rgba(250,250,250,0.3)',
                        },
                    },
                ],
            },
            {
                name: '外边框',
                type: 'pie',
                clockWise: false, //顺时加载
                hoverAnimation: false, //鼠标移入变大
                center: ['50%', '50%'],
                radius: ['85%', '85%'],
                tooltip: { show: false },
                label: {
                    normal: {
                        show: false,
                    },
                },
                data: [
                    {
                        value: 9,
                        name: '',
                        itemStyle: {
                            normal: {
                                borderWidth: 2,
                                borderColor: '#0b5263',
                            },
                        },
                    },
                ],
            },
        ],
    };

    useEcharts(typesofDivIntance, option);
}

function farmland() {
    const farmlandDivIntance = echarts.init(farmlandDiv.value);
    let option = {
        title: {
            text: '',
            subtext: '',
        },
        tooltip: {
            trigger: 'axis',
            axisPointer: {
                type: 'shadow',
            },
        },
        // legend: {
        //     icon: 'circle',
        //     left: 'center',
        //     top: '5',
        //     show: true,
        // },

        grid: {
            top: '15%',
            left: '5%',
            right: '5%',
            bottom: '10%',
            containLabel: true,
        },
        xAxis: {
            type: 'category',
            data: highStandard,
            axisLine: {
                lineStyle: {
                    color: 'rgba(255, 255, 255, 0.7)',
                    width: 1,
                    type: 'solid',
                },
                axisLabel: {
                    color: 'rgba(255, 255, 255, 0.7)',
                    fontWeight: 400,
                    fontFamily: 'SourceHanSansCN-Regular, SourceHanSansCN',
                    fontSize: 14,
                },
            },
        },
        yAxis: {
            name: '面积(亩)',
            nameTextStyle: {
                color: 'rgba(255, 255, 255, 0.8)',
                fontSize: 14,
            },
            type: 'value',
            axisLabel: {
                color: 'rgba(255, 255, 255, 0.7)',
            },
            splitLine: {
                lineStyle: {
                    type: 'solid',
                    color: 'rgba(255, 255, 255, 0.3)',
                },
            },
            minInterval: 1,
            axisLine: {
                show: false,
            },
            axisTick: {
                show: false,
            },
        },
        series: [
            {
                name: '好',
                type: 'bar',
                barWidth: 14,
                stack: '数量',
                data: highStandarditem.good,
                itemStyle: {
                    normal: {
                        borderWidth: 1,
                        borderColor: 'rgba(50, 148, 1, 1)',
                        //颜色渐变
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(50, 148, 1, 1)',
                            },
                            {
                                offset: 1,
                                color: 'rgba(50, 148, 1, 1)',
                            },
                        ]),
                    },
                },
            },
            {
                name: '较好',
                type: 'bar',
                barWidth: 14,
                stack: '数量',
                data: highStandarditem.better,
                itemStyle: {
                    normal: {
                        borderWidth: 1,
                        borderColor: 'rgba(154, 208, 0, 1)',
                        //颜色渐变
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(154, 208, 0, 1)',
                            },
                            {
                                offset: 1,
                                color: 'rgba(154, 208, 0, 1)',
                            },
                        ]),
                    },
                },
            },
            {
                name: '适中',
                type: 'bar',
                barWidth: 14,
                stack: '数量',
                data: highStandarditem.moderate,
                itemStyle: {
                    normal: {
                        borderWidth: 1,
                        borderColor: 'rgba(234, 219, 0, 1)',
                        //颜色渐变
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(234, 219, 0, 1)',
                            },
                            {
                                offset: 1,
                                color: 'rgba(234, 219, 0, 1)',
                            },
                        ]),
                    },
                },
            },
            {
                name: '较差',
                type: 'bar',
                barWidth: 14,
                stack: '数量',
                data: highStandarditem.poor,
                itemStyle: {
                    normal: {
                        borderWidth: 1,
                        borderColor: 'rgba(239, 152, 0, 1)',
                        //颜色渐变
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(239, 152, 0, 1)',
                            },
                            {
                                offset: 1,
                                color: 'rgba(239, 152, 0, 1)',
                            },
                        ]),
                    },
                },
            },
            {
                name: '差',
                type: 'bar',
                barWidth: 14,
                stack: '数量',
                data: highStandarditem.difference,
                itemStyle: {
                    normal: {
                        borderWidth: 1,
                        borderColor: 'rgba(247, 85, 0, 1)',
                        //颜色渐变
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                            {
                                offset: 0,
                                color: 'rgba(247, 85, 0, 1)',
                            },
                            {
                                offset: 1,
                                color: 'rgba(247, 85, 0, 1)',
                            },
                        ]),
                    },
                },
            },
        ],
    };

    // farmlandDivIntance.on('click', function (params) {
    //     console.log(params.name);
    // });
    // farmlandDivIntance.on('click', param => ChartClick(param));
    option && farmlandDivIntance.setOption(option, { notMerge: true, grid: { bottom: 20 } });
    useEcharts(farmlandDivIntance, option);
}

// 添加wms
function addWms(layers, customName) {
    let map = new Cesium.WebMapServiceImageryProvider({
        url: serverAPI.geoserverUrl + `/shuzisannong/wms?`,
        layers: layers, //图层名
        parameters: {
            service: 'WMS',
            format: 'image/png',
            transparent: true, //是否透明
            // CQL_FILTER: `crop in (${name})`,
        },
    });
    map.customName = customName; //自己定义各种属性
    let dd = viewer.imageryLayers.addImageryProvider(map); //添加图层
    if (customName.indexOf('gbznt') > -1) {
        // viewer.imageryLayers.lower(dd);//将图层下移一层
        viewer.imageryLayers.lowerToBottom(dd); //将图层移到最底层
        viewer.imageryLayers.raise(dd); //将图层上移一层
    }
}
//返回
function back() {
    removeWms(['gbznt'], true);
    viewer.camera.flyTo({
        destination: Cesium.Rectangle.fromDegrees(119.5091, 35.5671, 120.3285, 36.1455),
        duration: 2,
    });
    flag.value = false;
}
// 图表点击事件
function ChartClick(item) {
    console.log('item:', item);
    // 移除作物
    removeWms(['huangdaoqu_town'], true);
    removeWms(['tl'], true);
    let layername = 'shuzisannong:farmland';

    // 判断是否存在避免重复添加
    let cz = false;
    const layers = viewer.imageryLayers._layers;
    for (let f = layers.length - 1; f >= 0; f--) {
        if (
            layers[f] &&
            layers[f]._imageryProvider.customName &&
            layers[f]._imageryProvider.customName === layername + 'gbznt'
        ) {
            cz = true;
        }
    }
    if (!cz) {
        // 添加高标准农田服务
        addWms(layername, layername + 'gbznt');
    }
    // 定位到地块
    let features = formLandRef.value;
    features.forEach(it => {
        console.log('it.properties.name:', it.properties.name);
        console.log('item.name:', item.name);
        if (it.properties.name === item.name) {
            console.log('dingwei');
            viewer.camera.flyTo({
                destination: Cesium.Rectangle.fromDegrees(
                    it.bbox[0],
                    it.bbox[1],
                    it.bbox[2],
                    it.bbox[3]
                ),
                duration: 2,
            });
        }
    });
    flag.value = true;

    townZuowu.value = {
        label: [
            { crop: '小麦', Shape_Area: '53000' },
            { crop: '地瓜', Shape_Area: '50000' },
        ],
    };
    console.log(townZuowu.label);
    showOverlayChart({ x: 642, y: 312 });
}
function ASdivision() {
    const ASdivisionDivIntance = echarts.init(ASdivisionDiv.value);
    console.log(dd);
    console.log(data);
    var option = {
        // 设置图表的位置
        grid: {
            bottom: '8%',
            left: '10%',
            right: '6%',
            top: '12%',
            containLabel: true,
        },
        // legend: {
        //     // data: ["已完成", "进行中"],
        //     top: '5%',
        //     left: '10%',
        //     icon: 'rect',
        //     textStyle: {
        //         color: '#fff',
        //     },
        // },
        tooltip: {
            formatter: function (params) {
                // 自定义悬浮文字的格式,params.value 为当前柱状图的数值
                return (
                    params.seriesName +
                    '<span style="font-size: 14px; color: #f00;">' +
                    params.value.toFixed(2) +
                    '</span>' +
                    '亩'
                );
            },
        },
        dataZoom: [
            {
                type: 'slider',
                show: false,
                zoomLock: true, //禁止拉伸
                width: 8,
                yAxisIndex: [0],
                bottom: 30,
                top: 20,
                right: 10,
                startValue: 0,
                endValue: 4,
                handleIcon:
                    'M-292,322.2c-3.2,0-6.4-0.6-9.3-1.9c-2.9-1.2-5.4-2.9-7.6-5.1s-3.9-4.8-5.1-7.6c-1.3-3-1.9-6.1-1.9-9.3c0-3.2,0.6-6.4,1.9-9.3c1.2-2.9,2.9-5.4,5.1-7.6s4.8-3.9,7.6-5.1c3-1.3,6.1-1.9,9.3-1.9c3.2,0,6.4,0.6,9.3,1.9c2.9,1.2,5.4,2.9,7.6,5.1s3.9,4.8,5.1,7.6c1.3,3,1.9,6.1,1.9,9.3c0,3.2-0.6,6.4-1.9,9.3c-1.2,2.9-2.9,5.4-5.1,7.6s-4.8,3.9-7.6,5.1C-285.6,321.5-288.8,322.2-292,322.2z',
                handleSize: '100%',
                handleStyle: {
                    color: '#DBDBDB',
                    height: '100%',
                },
                backgroundColor: 'transparent',
                fillerColor: '#DBDBDB',
                textStyle: {
                    color: 'transparent',
                },
                dataBackground: {
                    lineStyle: {
                        color: 'transparent',
                    },
                    areaStyle: {
                        color: 'transparent',
                    },
                },
                borderColor: 'transparent',
            },
            {
                type: 'inside',
                id: 'insideY',
                yAxisIndex: 0,
                start: 0,
                end: 50,
                zoomOnMouseWheel: false,
                moveOnMouseMove: true,
                moveOnMouseWheel: true,
            },
        ],
        // X轴
        xAxis: {
            type: 'value', // 坐标轴类型,   'value' 数值轴,适用于连续数据
            // 坐标轴刻度
            axisTick: {
                show: false, // 是否显示坐标轴刻度 默认显示
            },
            // 坐标轴轴线
            axisLine: {
                // 是否显示坐标轴轴线 默认显示
                show: false, // 是否显示坐标轴轴线 默认显示
            },
            // 坐标轴在图表区域中的分隔线
            splitLine: {
                show: false, // 是否显示分隔线。默认数值轴显示
            },
            // 坐标轴刻度标签
            axisLabel: {
                show: false, // 是否显示刻度标签 默认显示
            },
        },
        // Y轴
        yAxis: [
            // 左侧Y轴
            {
                // 坐标轴类型,  'category' 类目轴,适用于离散的类目数据
                // 为该类型时必须通过 data 设置类目数据
                type: 'category',
                // 坐标轴刻度
                axisTick: {
                    show: false, // 是否显示坐标轴刻度 默认显示
                },
                // 坐标轴轴线
                axisLine: {
                    // 是否显示坐标轴轴线 默认显示
                    show: false, // 是否显示坐标轴轴线 默认显示
                    lineStyle: {
                        // 坐标轴线线的颜色
                        color: '#cdd3ee',
                    },
                },
                // 坐标轴在图表区域中的分隔线
                splitLine: {
                    show: false, // 是否显示分隔线。默认数值轴显示
                },
                // 坐标轴刻度标签
                axisLabel: {
                    show: true, // 是否显示刻度标签 默认显示
                    fontSize: 12, // 文字的字体大小
                    color: 'rgba(255, 255, 255, 1)', // 刻度标签文字的颜色
                    // 使用字符串模板,模板变量为刻度默认标签 {value}
                    formatter: '{value}',
                },
                // 类目数据,在类目轴(type: 'category')中有效
                data: data.title,
                inverse: true,
            },
        ],
        // 系列列表
        series: [
            {
                type: 'bar', // 系列类型
                name: '好', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                    show: false,
                    position: '好',
                    textStyle: {
                        fontSize: 12,
                        fontWeight: 'bolder',
                        color: 'rgba(255,255,255,1)',
                    },
                },
                // 图形样式
                itemStyle: {
                    barBorderRadius: [0, 0, 0, 0],
                    barBorderRadius: [0, 0, 0, 0], //
                    // borderWidth: 1, // 设置边框宽度
                    // borderColor: 'rgba(4, 247, 227, 0.8)', // 设置边框颜色
                    color: {
                        colorStops: [
                            {
                                offset: 0,
                                color: 'rgba(50, 148, 1, 1)', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: 'rgba(50, 148, 1, 1)', // 100% 处的颜色
                            },
                        ],
                    },
                },
                data: dd.value.good, // 系列中的数据内容数组
            },
            {
                type: 'bar', // 系列类型
                name: '较好', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                    show: false,
                    position: 'inside',
                    formatter: '较好',
                    textStyle: {
                        fontSize: 12,
                        fontWeight: 'bolder',
                        color: 'rgba(255,255,255,1)',
                    },
                },
                // 图形样式
                itemStyle: {
                    barBorderRadius: [0, 0, 0, 0], //
                    // borderWidth: 1, // 设置边框宽度
                    // borderColor: 'rgba(143, 186, 243, 0.8)', // 设置边框颜色
                    color: {
                        colorStops: [
                            {
                                offset: 0,
                                color: 'rgba(154, 208, 0, 1)', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: 'rgba(154, 208, 0, 1)', // 100% 处的颜色
                            },
                        ],
                    },
                },
                data: dd.value.better, // 系列中的数据内容数组
            },
            {
                type: 'bar', // 系列类型
                name: '适中', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                    show: false,
                    position: 'inside',
                    formatter: '适中',
                    textStyle: {
                        fontSize: 12,
                        fontWeight: 'bolder',
                        color: 'rgba(255,255,255,1)',
                    },
                },
                // 图形样式
                itemStyle: {
                    barBorderRadius: [0, 0, 0, 0],
                    barBorderRadius: [0, 0, 0, 0], //
                    // borderWidth: 1, // 设置边框宽度
                    // borderColor: 'rgba(4, 247, 227, 0.9)', // 设置边框颜色
                    color: {
                        colorStops: [
                            {
                                offset: 0,
                                color: 'rgba(234, 219, 0, 1)', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: 'rgba(234, 219, 0, 1)', // 100% 处的颜色
                            },
                        ],
                    },
                },
                data: dd.value.moderate, // 系列中的数据内容数组
            },
            {
                type: 'bar', // 系列类型
                name: '较差', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                    show: false,
                    position: 'inside',
                    formatter: '较差',
                    textStyle: {
                        fontSize: 12,
                        fontWeight: 'bolder',
                        color: 'rgba(255,255,255,1)',
                    },
                },
                // 图形样式
                itemStyle: {
                    barBorderRadius: [0, 0, 0, 0],
                    barBorderRadius: [0, 0, 0, 0], //
                    // borderWidth: 1, // 设置边框宽度
                    // borderColor: 'rgba(33, 187, 251, 0.8)', // 设置边框颜色
                    color: {
                        colorStops: [
                            {
                                offset: 0,
                                color: 'rgba(239, 152, 0, 1)', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: 'rgba(239, 152, 0, 1)', // 100% 处的颜色
                            },
                        ],
                    },
                },
                data: dd.value.difference, // 系列中的数据内容数组
            },
            {
                type: 'bar', // 系列类型
                name: '差', // 系列名称, 用于tooltip的显示, legend 的图例筛选
                // 数据堆叠,同个类目轴上系列配置相同的stack值后,后一个系列的值会在前一个系列的值上相加
                stack: '总量',
                barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
                // 图形上的文本标签
                label: {
                    show: false,
                    position: 'inside',
                    formatter: '差',
                    textStyle: {
                        fontSize: 12,
                        fontWeight: 'bolder',
                        color: 'rgba(255,255,255,1)',
                    },
                },
                // 图形样式
                itemStyle: {
                    barBorderRadius: [0, 0, 0, 0],
                    barBorderRadius: [0, 0, 0, 0], //
                    // borderWidth: 1, // 设置边框宽度
                    // borderColor: 'rgba(14, 223, 255, 0.8)', // 设置边框颜色
                    color: {
                        colorStops: [
                            {
                                offset: 0,
                                color: 'rgba(247, 85, 0, 1)', // 0% 处的颜色
                            },
                            {
                                offset: 1,
                                color: 'rgba(247, 85, 0, 1)', // 100% 处的颜色
                            },
                        ],
                    },
                },
                data: dd.value.poor, // 系列中的数据内容数组
            },
        ],
    };
    // option && ASdivisionDivIntance.setOption(option, true);
    useEcharts(ASdivisionDivIntance, option);
}
function chartModes() {
    const ASdivisionDivIntance = echarts.init(chartModeDiv.value);
    let arr = [];
    let 好 = [];
    let 较好 = [];
    let 适中 = [];
    let 较差 = [];
    let 差 = [];
    insectarr.value.forEach(item => {
        arr.push(item.subName);
        item.good !== null ? 好.push(item.good) : 好.push(0);
        item.better !== null ? 较好.push(item.better) : 较好.push(0);
        item.moderate !== null ? 适中.push(item.moderate) : 适中.push(0);
        item.difference !== null ? 较差.push(item.difference) : 较差.push(0);
        item.poor !== null ? 差.push(item.poor) : 差.push(0);
    });
    let ends = (10 / arr.length) * 100;
    let option = {
        tooltip: {
            trigger: 'axis',
            formatter: function (params) {
                let tipStr = params[0].axisValueLabel + '</br>';
                let totalNum = 0;
                for (let i = 0; i < params.length; i++) {
                    totalNum += params[i].value;
                    if (params[i].seriesName !== '合计') {
                        tipStr += params[i].seriesName + ':' + params[i].value + '</br>';
                    }
                }
                for (let i = 0; i < params.length; i++) {
                    totalNum += Number(params[i].value);
                    if (params[i].seriesName === '合计') {
                        tipStr += '合计:' + totalNum;
                    }
                }
                return tipStr;
            },
            axisPointer: {
                // 坐标轴指示器,坐标轴触发有效
                type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'
            },
        },
        legend: {
            top: 5,
            left: 10,
            icon: 'rect',
            itemWidth: 4, // 图例图表宽度
            itemHeight: 12, // 图例图标高度
            data: [],
        },
        dataZoom: [
            {
                type: 'slider',
                width: '40%',
                top: '90%',
                zoomLock: true, //禁止拉伸
                start: 0,
                end: ends,
                showDataShadow: false,
                showDetail: false,
                fillerColor: 'rgba(64, 158, 255)',
                borderRadius: '50%',
                moveHandleSize: 0,
                moveHandleStyle: {},
                left: '30%',
                height: 12,
                handleSize: '80%',
                handleIcon: 'path://M512,512m-448,0a448,448,0,1,0,896,0a448,448,0,1,0,-896,0Z',
                handleStyle: {
                    borderWidth: 0,
                    color: 'rgba(64, 158, 255)',
                },
            },
            {
                type: 'inside',
            },
        ],
        grid: {
            left: '3%',
            right: '10%',
            bottom: '15%',
            top: '5%',
            containLabel: true,
        },
        xAxis: {
            type: 'category',
            name: '区域',
            axisLabel: {
                fontSize: 12,
                interval: 0,
                rotate: 0,
            },
            axisLine: {
                lineStyle: {
                    // color: '#cbeaf6', // x坐标轴线颜色
                },
            },
            data: arr,
        },
        yAxis: [
            {
                type: 'value',
                name: '面积(亩)',
                axisLabel: {
                    // color: '#cbeaf6', // 坐标轴label文字颜色
                },
                axisLine: {
                    lineStyle: {
                        // color: '#cbeaf6', // y坐标轴线颜色
                    },
                },
                splitLine: {
                    // 网格线
                    lineStyle: {
                        // type: 'dashed', // 设置网格线类型 dotted:虚线   solid:实线
                        // color: '#395367',
                    },
                    show: true, // 隐藏或显示
                },
            },
        ],
        series: [
            {
                name: '好',
                type: 'bar',
                barWidth: 13,
                stack: '分类',
                itemStyle: {
                    color: 'rgba(255, 141, 26, 1)',
                },
                data: 好,
            },
            {
                name: '较好',
                type: 'bar',
                barWidth: 13,
                stack: '分类',
                itemStyle: {
                    color: 'rgba(255, 255, 26, 1)',
                },
                data: 较好,
            },
            {
                name: '适中',
                type: 'bar',
                barWidth: 13,
                stack: '分类',
                itemStyle: {
                    color: 'rgba(255, 201, 148, 1)',
                },
                data: 适中,
            },
            {
                name: '较差',
                type: 'bar',
                barWidth: 13,
                stack: '分类',
                itemStyle: {
                    color: 'rgba(255, 84, 84, 1)',
                },
                data: 较差,
            },
            {
                name: '差',
                type: 'bar',
                barWidth: 13,
                stack: '分类',
                itemStyle: {
                    color: 'rgba(255, 140, 255, 1)',
                },
                data: 差,
            },
        ],
    };

    var series = option.series;
    var tooltip = option.tooltip;
    // 提示框自定义内容包括总合及文字
    function formatFun(params) {
        // console.log('params====>', params)
        let tipStr = params[0].axisValueLabel + '</br>'; // 初始化提示框文字默认当前轴名称并换行
        let totalNum = 0; // 用于存储当前列总数
        // params为当前柱状图数组数量 遍历求和并添加类目label:value
        for (let i = 0; i < params.length; i++) {
            if (params[i].seriesName !== '合计') {
                const dotHtml = `<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params[i].color}"></span>`;
                totalNum += params[i].value;
                tipStr += dotHtml + params[i].seriesName + ':' + params[i].value + '</br>';
            }
        }
        // 添加最后的合计行 数据为每列总合
        for (let i = 0; i < params.length; i++) {
            if (params[i].seriesName === '合计') {
                tipStr += '合计:' + totalNum;
            }
        }
        return tipStr;
    }
    tooltip.formatter = formatFun;
    // 指定函数计算总合
    function fun(params) {
        var dataSum = 0;
        for (var i = 0; i < series.length; i++) {
            dataSum += series[i].data[params.dataIndex];
        }
        return dataSum;
    }
    // 加载页面时候替换最后一个series的formatter
    // series[series.length - 1].label.normal.formatter = fun;
    useEcharts(ASdivisionDivIntance, option);
}

/*--------------------------------------------------------------------------------------------*/
function getAreaFenlei() {
    let fl = fenleiRef.value;
    console.log('fl:', fl);
    axios({
        url:
            serverAPI.geoserverUrl +
            '/shuzisannong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=shuzisannong%3Ahuangdaoqu_town&maxFeatures=50&outputFormat=application%2Fjson',
    })
        .then(res => {
            console.log('res1111:', res);
            let data = res.data.features;
            data.forEach((item, index) => {
                const rectangle = Cesium.Rectangle.fromDegrees(
                    item.bbox[0],
                    item.bbox[1],
                    item.bbox[2],
                    item.bbox[3]
                );
                const center = Cesium.Rectangle.center(rectangle); //获取视角范围中心点(得到的结果为弧度Cartographic)
                let longitude = Cesium.Math.toDegrees(center.longitude); //将弧度转为度
                let latitude = Cesium.Math.toDegrees(center.latitude);

                if (item.properties.XZDM === '370211011') {
                    //灵山卫街道
                    longitude = 120.0863;
                    latitude = 35.941;
                } else if (item.properties.XZDM === '370211003') {
                    //薛家岛街道
                    longitude = 120.243682;
                    latitude = 35.97123201;
                }
                const townData = fl[item.properties.XZMC];
                let label = [];
                if (townData) {
                    label = townData.map((it, inex) => {
                        // let dd = `${it.properties.crop} :${(it.properties.Shape_Area / 666.67).toFixed(2)} 亩`
                        // return dd
                        return it.properties;
                    });
                }
                // label = label.join(' ')
                // console.log('label:', index, label,fl[item.properties.XZMC],item.properties.XZMC)
            });
        })
        .catch(err => {});
}
let fenleiRef = ref({});
function mbHandle() {
    axios({
        url:
            serverAPI.geoserverUrl +
            '/shuzisannong/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=shuzisannong%3Afenlei&maxFeatures=137&outputFormat=application%2Fjson',
    })
        .then(res => {
            let features = res.data.features;
            let town = {};
            // 按镇分类
            features.forEach(item => {
                let key = item.properties.town;
                if (town[key]) {
                    town[key].push(item);
                } else {
                    town[key] = [item];
                }
            });
            fenleiRef.value = town;
            getAreaFenlei();
        })
        .catch(err => {});
}

// 地图移动时弹窗跟随
function infoWindowPostRender() {
    // let viewer = viewers.value;
    if (clickInfoMap.value.lon && clickInfoMap.value.lat) {
        //经纬度转为世界坐标
        const gisPosition = Cesium.Cartesian3.fromDegrees(
            Number(clickInfoMap.value.lon),
            Number(clickInfoMap.value.lat),
            0
        ); //转化为屏幕坐标
        var windowPosition = Cesium.SceneTransforms.wgs84ToWindowCoordinates(
            viewer.scene,
            gisPosition
        );

        if (Cesium.defined(windowPosition)) {
            const pop = document.getElementById('popup');
            if (pop) {
                pop.style.top = windowPosition.y - 10 + 'px';
                pop.style.left = windowPosition.x + 10 + 'px';
            }
        }
    }
}

// 隐藏弹窗
function hiddenOverlayChart() {
    const pop = document.getElementById('popup');
    if (pop) {
        pop.style.display = 'none'; // 清除监听事件
    }
    viewer.scene.postRender.removeEventListener(infoWindowPostRender);
}
//显示弹窗
function showOverlayChart(position) {
    const pop = document.getElementById('popup');
    if (pop) {
        pop.style.display = 'block';
        pop.style.position = 'absolute';
        pop.style.top = position.y - 10 + 'px';
        pop.style.left = position.x + 10 + 'px';
        pop.style.zIndex = 99;
    }
}
</script>

<style lang="scss" scoped>
$height: calc(100vh - 100px);
.fatherDiv,
.tabulation,
.centerBox {
    width: 100%;
    height: 100%;
    .imgrotate {
        transform: rotate(180deg);
    }
    .title {
        width: 100%;
        height: 45px;
        background: url('@/assets/images/title.png');
        background-repeat: no-repeat;
        background-size: 110% 100%;
        color: #fff;
        font-size: 18px;
        font-weight: 700;
        line-height: 45px;
        padding-left: 46px;
        display: flex;
        cursor: pointer;
        align-items: center;
        justify-content: space-between;

        span {
            width: 80%;
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
            background: linear-gradient(
                180deg,
                rgba(255, 255, 255, 1) 33.33%,
                rgba(41, 255, 219, 1) 100%
            );
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
        }

        p {
            width: 79px;
            height: 25px;
            border-radius: 20px;
            font-size: 14px;
            background: linear-gradient(
                180deg,
                rgba(16, 111, 111, 1) 0%,
                rgba(47, 214, 214, 1) 100%
            );
            border: 1.5px solid rgba(23, 194, 180, 1);
            display: flex;
            justify-content: center;
            align-items: center;
        }
    }
}
.tabulation {
    display: none;
    padding: 20px;
    .tableBox {
        padding: 0 10px;
        .tableBorder {
            border-radius: 8px;
            margin-bottom: 10px;
            .el-table--fit {
                border-radius: 8px;
                border: 2px solid rgba(100, 195, 164, 0.8);
                box-shadow: 0px 3px 9px 0px rgba(100, 195, 164, 0.25),
                    0px 1px 2px 0px rgba(100, 195, 164, 0.8);
            }
        }
        :deep(
                .el-table .el-table__header-wrapper th,
                .el-table .el-table__fixed-header-wrapper th
            ) {
            color: rgba(0, 0, 0, 1);
        }
        height: 84%;
        :deep(.el-table__inner-wrapper) {
            height: 96% !important;
        }
        .example-pagination-block {
            display: flex;
            align-items: center;
            justify-content: flex-end;
        }
        :deep(.tabth) {
            background-color: rgba(247, 247, 247, 1);
        }
    }
    .chartMode {
        width: 100%;
        height: 85%;
        .chartModeDiv {
            width: 100%;
            height: 100%;
            padding: 10px;
        }
    }
    .searchDiv {
        display: flex;
        .dow {
            float: right;
            margin-right: 10px;
        }
        :deep(.el-input__wrapper) {
            width: 100px;
        }
        .modeDiv {
            width: 234px;
            height: 26px;
            opacity: 1;
            border-radius: 8px;
            display: flex;
            justify-content: flex-start;
            align-items: center;
            text-align: center;
            font-size: 14px;
            // font-weight: 400;
            border: 1px solid #ccc;
            cursor: pointer;
            div {
                flex: 1;
                height: 100%;
                border-radius: 8px;
                line-height: 26px;
            }
            .Selected {
                background: rgba(100, 195, 164, 1);
                border-radius: 8px 0px 0px 8px;
                color: rgba(255, 255, 255, 1);
            }
            .Selecteds {
                background: rgba(100, 195, 164, 1);
                border-radius: 0px 8px 8px 0px;
                color: rgba(255, 255, 255, 1);
            }
        }
    }
}

.leftWra {
    position: absolute;
    top: 10px;
    left: 20px;
    height: $height;
    width: 23%;
    background: rgba(2, 31, 26, 0.85);
    box-shadow: inset 0px 0px 15px 6px rgba(41, 255, 255, 0.5);
    transition: transform 1s;
    .leftFoldDiv {
        width: 30px;
        height: 30px;
        position: absolute;
        right: -14%;
        top: 50%;
        transform: translate(-50%, -50%);
        font-size: 30px;
        color: #ccc;
    }
    .leftTop {
        width: 100%;
        display: flex;
        flex-direction: column;
        height: 42%;
        .areaDiv {
            width: 100%;
            height: 327px;
            opacity: 1;
            display: flex;
            padding: 1px;
            justify-content: center;
        }

        .ProgressBar {
            width: 100%;
            height: 9px;
            opacity: 1;
        }
    }

    .leftbottom {
        width: 100%;
        height: 57%;
        opacity: 1;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
        padding-top: 13px;

        .typesofDiv {
            width: 100%;
            height: 50%;
            opacity: 1;
            display: flex;
            padding: 1px;
            justify-content: center;
        }

        .tableDiv {
            // background: rgba(255, 255, 255, 0.05);
            display: flex;
            justify-content: center;
            width: 85%;
            flex-direction: column;
            margin-bottom: 10px;
            color: rgba(255, 255, 255, 1);
            height: 50%;
            padding-bottom: 30px;
            :deep(.el-table tr) {
                background-color: transparent;
            }
            :deep(.el-table) {
                --el-table-border-color: none;
                color: rgba(255, 255, 255, 1);
            }
            :deep(.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell) {
                background-color: revert;
            }

            .Crops {
                display: flex;
                width: 100%;
                margin-bottom: 10px;
                font-size: 14px;
                font-weight: 400;
                height: 31px;
                flex-direction: row;
                align-items: center;
                justify-content: space-around;
                opacity: 1;
                background: linear-gradient(
                    90deg,
                    rgba(21, 173, 148, 0.1) 0%,
                    rgba(21, 173, 148, 0) 100%
                );

                div {
                    display: flex;
                    align-items: center;
                }
            }

            .el-checkbox-group {
                display: flex;
                flex-direction: column;
            }

            :deep(.ones) {
                width: 100%;
                height: 171;
                display: flex;
                flex-direction: column;
                justify-content: flex-start;
                align-items: flex-start;
                --el-table-tr-bg-color: null;
                --el-table-border-color: null;
                font-size: 14px;
                font-weight: 400;
                letter-spacing: 0px;
                line-height: 0px;
                color: rgba(255, 255, 255, 1);
            }
        }
    }
}

.rightWra {
    position: absolute;
    top: 10px;
    right: 20px;
    width: 23%;
    height: $height;
    opacity: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    background: rgba(2, 31, 26, 0.85);
    box-shadow: inset 0px 0px 15px 6px rgba(41, 255, 255, 0.5);
    transition: transform 1s;
    .rightFoldDiv {
        width: 30px;
        height: 30px;
        position: absolute;
        left: -8%;
        top: 50%;
        transform: translate(0, -50%);
        font-size: 30px;
        color: #ccc;
    }
    .rightTop {
        width: 100%;
        height: 40%;
        opacity: 1;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;

        .farmlandDiv {
            width: 100%;
            height: 340px;
            opacity: 1;
            display: flex;
            justify-content: center;
        }

        .ProgressBar {
            width: 100%;
            height: 9px;
            opacity: 1;
        }
    }

    .rightbottom {
        width: 100%;
        height: 54%;
        opacity: 1;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;

        .el-select {
            width: 80%;
            font-size: 14px;
            color: #333;
            background: rgba(22, 94, 102, 1);
            border: 1px solid rgba(4, 153, 153, 1) !important;
            margin-top: 20px;

            :deep(.el-input__wrapper) {
                background-color: transparent;
                box-shadow: none;
            }

            :deep(.el-input__inner) {
                color: rgba(255, 255, 255, 0.7);
            }
        }

        .ASdivision {
            width: 100%;
            height: 368px;
            opacity: 1;
            display: flex;
            justify-content: center;
        }
    }
}

.legend {
    position: absolute;
    right: 25%;
    bottom: 7%;
    width: 129px;
    border: 1px solid rgba(4, 153, 153, 1);

    // height: 50px;
    :deep(.el-collapse-item__header) {
        background: rgba(2, 31, 26, 0.6);
        color: rgba(255, 255, 255, 1);
        text-align: center;
        padding: 0 30px;
        font-size: 14px;
    }

    --el-collapse-content-bg-color {
        background: rgba(2, 31, 26, 0.6);
    }

    :deep(.el-collapse-item__content) {
        background: rgba(2, 31, 26, 0.6);
        padding: 0 10px;
        padding-bottom: 10px;
    }

    --el-collapse-border-color: none;
    --el-collapse-content-bg-color: none;

    // opacity: 1;
    // border-radius: 4px;
    // background: rgba(2, 31, 26, 0.6);
    // display: flex;
    // flex-direction: column;
    // justify-content: flex-start;
    // align-items: center;
    // padding: 10px 10px 10px 10px;
    p {
        margin: 10px;
        font-size: 14px;
        font-weight: 400;
        letter-spacing: 0px;
        line-height: 0px;
        color: rgba(255, 255, 255, 1);
        text-align: center;
    }

    .mt-4 {
        .el-checkbox {
            height: 30px;
            width: 100%;
            margin-bottom: 2px;
            padding-left: 10px;
            font-size: 14px;
            font-weight: 400;
            letter-spacing: 0px;
            line-height: 0px;
            color: rgba(255, 255, 255, 1);
            text-align: left;
        }
    }

    :deep(.el-checkbox__label) {
        color: rgba(255, 255, 255, 1);
    }
}

.bottom_center {
    position: absolute;
    // left: calc(400px + 20px + 8vw);
    left: -2%;
    right: 0;
    margin: auto;
    width: calc(100% - (400px * 2) - (10vw * 2));
    min-width: 380px;
    bottom: 5%;
    height: 75px;
    opacity: 1;
    border-radius: 5px;
    background: rgba(2, 31, 26, 0.6);
    border: 1px solid rgba(4, 153, 153, 1);
}

.tool {
    position: absolute;
    right: 30%;
    top: 8%;
    width: 30px;
    height: 280px;
    opacity: 1;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    display: none;
}

#popup {
    border-radius: 5px;
    background: rgba(2, 31, 26, 0.6);
    display: none;
    // justify-content: flex-start;
    // align-items: flex-end;
    padding: 30px 8px 20px 8px;

    & > div:nth-child(1) {
        font-weight: 400;
        letter-spacing: 0px;
        color: rgba(255, 255, 255, 1);
        display: flex;
        align-items: center;
        p {
            background: rgba(217, 231, 255, 0.2);
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 2px 10px 2px 10px;
            width: 140px;
        }
    }

    & > div:nth-child(2) {
        font-weight: 400;
        letter-spacing: 0px;
        color: rgba(255, 255, 255, 1);
        display: flex;
        align-items: center;
        p {
            background: rgba(217, 231, 255, 0.2);
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 2px 10px 2px 10px;
            width: 140px;
        }
    }
    & > div:nth-child(3) {
        font-weight: 400;
        letter-spacing: 0px;
        color: rgba(255, 255, 255, 1);
        display: flex;
        align-items: center;
        p {
            background: rgba(217, 231, 255, 0.2);
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 2px 10px 2px 10px;
            width: 140px;
        }
    }
    .cancel {
        position: absolute;
        right: 10px;
        top: 5px;
        color: rgba(255, 255, 255, 1);
        cursor: pointer;
    }
}
#pop {
    border-radius: 5px;
    background: rgba(2, 31, 26, 1);
    display: none;
    // justify-content: flex-start;
    // align-items: flex-end;
    padding: 30px 8px 20px 8px;

    .cancel {
        position: absolute;
        right: 10px;
        top: 5px;
        color: rgba(255, 255, 255, 1);
        cursor: pointer;
    }

    & > div {
        display: flex;
        margin-bottom: 10px;

        & > div:nth-child(1) {
            font-weight: 400;
            letter-spacing: 0px;
            color: rgba(255, 255, 255, 1);
            // margin-top: 20px;
            line-height: 24px;
            margin-right: 10px;
        }

        & > div:nth-child(2) {
            color: rgba(255, 255, 255, 1);
            width: 129px;
            height: 24px;
            opacity: 1;
            border-radius: 2px;
            background: rgba(217, 231, 255, 0.2);
            display: flex;
            justify-content: center;
            align-items: center;
            padding: 2px 10px 2px 10px;
            // margin-top: 20px;
        }
    }
}
.back_button {
    position: absolute;
    right: 30%;
    top: 20px;
}

:deep(.el-select__popper.el-popper) {
}
</style>
<style lang="scss">
.select_city {
    background: rgba(2, 31, 26, 0.85);
    box-shadow: inset 0px 0px 15px 6px rgba(41, 255, 255, 0.5);

    .el-select-dropdown__item.hover {
        background: rgba(2, 31, 26, 0.95);
        box-shadow: inset 0px 0px 15px 6px rgba(41, 255, 255, 0.7);
    }

    .el-select-dropdown__item {
        color: #fff;
    }
}

.el-select__popper {
    border: none !important;
    background: transparent !important;
}

.el-popper__arrow::before {
    display: none;
}
.selectCity {
    background: #fff;
}
</style>