import { ref, unref } from 'vue';
|
import { defineStore } from 'pinia';
|
import mapGrid from '@/components/map/mapGrid';
|
import baseMapUtil from '@/components/map/baseMapUtil';
|
import gridInfoApi from '@/api/grid/gridInfoApi';
|
import { parseToGridInfo } from '@/model/gridRecord';
|
|
export const useGridStore = defineStore('grid', () => {
|
// 当前加载的网格数据集合
|
const gridList = ref([]);
|
// 当前是否有选中方案
|
const hasScheme = ref(false);
|
// 当前选中操作的网格信息
|
const selectedGrid = ref();
|
// 当前选中操作的网格是否处于可编辑状态
|
const isEdit = ref(false);
|
// 记录当前网格路径信息
|
var selectedPath = undefined;
|
|
/**
|
* 检查当前是否有选中的网格
|
* @returns {Boolean}
|
*/
|
function _checkGridExist() {
|
return selectedGrid.value && selectedGrid.value.id != undefined;
|
}
|
|
/**数据增删**************************************************************/
|
/**
|
* 选择当前操作的网格
|
* @param {Object} grid
|
*/
|
function setGrid(index) {
|
if (index >= 0 && index < gridList.value.length) {
|
selectedGrid.value = gridList.value[index];
|
selectedPath = selectedGrid.value.overlays.getPath().join(';');
|
}
|
}
|
|
/**
|
* 取消选中
|
*/
|
function clearSelect() {
|
selectedGrid.value = undefined;
|
selectedPath = undefined;
|
}
|
|
/**
|
* 设置网格数据
|
* @param {Array<Object>} list
|
*/
|
function setGridList(list) {
|
gridList.value = list;
|
hasScheme.value = true;
|
}
|
|
/**
|
* 新增网格
|
* @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;
|
const newPath = selectedGrid.value.overlays.getPath().join(';');
|
if (selectedPath != newPath) {
|
const _data = parseToGridInfo(selectedGrid.value);
|
return gridInfoApi.updateGrid(_data).then(() => {
|
selectedGrid.value.sides =
|
selectedGrid.value.overlays.getPath();
|
});
|
}
|
}
|
|
/**
|
* 取消对当前网格的绘制变更
|
*/
|
function quitSelectedGrid() {
|
if (!_checkGridExist()) return;
|
baseMapUtil.removeView(selectedGrid.value.overlays);
|
selectedGrid.value.overlays = mapGrid.drawPolygon(
|
selectedGrid.value.sides
|
);
|
}
|
|
/**地图网格显示隐藏**************************************************************/
|
/**
|
* 网格集合显示
|
*/
|
function showGrids() {
|
const grids = [];
|
gridList.value.forEach((l, i) => {
|
showGrid(i);
|
grids.push(l.overlays);
|
});
|
baseMapUtil.setFitView(...grids);
|
}
|
|
/**
|
* 网格显示
|
*/
|
function showGrid(index) {
|
const item = gridList.value[index];
|
if (item.overlays) {
|
baseMapUtil.setFitView(item.overlays);
|
} else {
|
item.overlays = mapGrid.drawPolygon(item.sides);
|
}
|
}
|
|
return {
|
hasScheme,
|
gridList,
|
selectedGrid,
|
isEdit,
|
setGrid,
|
clearSelect,
|
setGridList,
|
addGrid,
|
deleteGrid,
|
openGridEdit,
|
closeGridEdit,
|
saveSelectedGrid,
|
quitSelectedGrid,
|
showGrids,
|
showGrid
|
};
|
});
|