import { ref, unref } from 'vue'; import { defineStore } from 'pinia'; import mapGrid from '@/components/map/mapGrid'; import baseMapUtil from '@/components/map/baseMapUtil'; export const useGridStore = defineStore('grid', () => { // 当前加载的网格数据集合 const gridList = ref([]); // 当前选中操作的网格信息 const selectedGrid = ref({}); // 当前选中操作的网格是否处于可编辑状态 const isEdit = ref(false); /** * 检查当前是否有选中的网格 * @returns {Boolean} */ function _checkGridExist() { return selectedGrid.value.gId != undefined; } /**数据增删**************************************************************/ /** * 选择当前操作的网格 * @param {Object} grid */ function setGrid(index) { if (index >= 0 && index < gridList.value.length) { selectedGrid.value = gridList.value[index]; } } /** * 设置网格数据 * @param {Array} list */ function setGridList(list) { gridList.value = list; } /** * 新增网格 * @param {...any} grids */ function addGrid(...grids) { grids.forEach((g) => { gridList.value.unshift(g); }); } /** * 网格删除 */ function deleteGrid(i) { closeGridEdit(); if (gridList.value[i].overlays) baseMapUtil.removeView(this.gridList[i].overlays); gridList.value.splice(i, 1); } /**地图网格编辑**************************************************************/ /** * 开启网格多边形编辑 */ function openGridEdit() { if (!_checkGridExist()) return; const adsorbPolygons = []; const overlays = selectedGrid.value.overlays; gridList.value.forEach((e) => { if (overlays != e.overlays) { adsorbPolygons.push(unref(e.overlays)); } }); mapGrid.openPolyGonEditor(overlays, adsorbPolygons); isEdit.value = true; } /** * 关闭网格多边形编辑 */ function closeGridEdit() { mapGrid.closePolyGonEditor(); isEdit.value = false; } /** * 保存对当前网格的绘制变更 */ function saveSelectedGrid() { if (!_checkGridExist()) return; selectedGrid.value.gSide = selectedGrid.value.overlays.getPath(); } /** * 取消对当前网格的绘制变更 */ function quitSelectedGrid() { if (!_checkGridExist()) return; baseMapUtil.removeView(selectedGrid.value.overlays); selectedGrid.value.overlays = mapGrid.drawPolygon( selectedGrid.value.gSide ); } /**地图网格显示隐藏**************************************************************/ /** * 网格集合显示 */ function showGrids() { const grids = []; gridList.value.forEach((l, i) => { showGrid(i); grids.push(l.overlays); }); baseMapUtil.setFitView(grids, 1); } /** * 网格显示 */ function showGrid(index) { const item = gridList.value[index]; if (item.overlays) { baseMapUtil.setFitView(item.overlays); } else { item.overlays = mapGrid.drawPolygon(item.gSide); } } return { gridList, selectedGrid, isEdit, setGrid, setGridList, addGrid, deleteGrid, openGridEdit, closeGridEdit, saveSelectedGrid, quitSelectedGrid, showGrids, showGrid }; });