const emptyMapConfirmPayload = () => ({ zone_name: '', coordinates: '', gridMultipolygon: '', selectedGridIds: [], }); /** coordinates 可能是 WKT 数组,也可能是 merge 后的单条 MULTIPOLYGON 字符串 */ export function normalizeMapCoordinates(coordinates) { if (Array.isArray(coordinates)) { return coordinates.filter((item) => item && String(item).trim().length > 10); } if (typeof coordinates === 'string') { const trimmed = coordinates.trim(); return trimmed.length > 10 ? [trimmed] : []; } return []; } export default { namespaced: true, state() { return { mapConfirmPayload: emptyMapConfirmPayload(), }; }, getters: { hasMapConfirmPayload(state) { const { zone_name, coordinates } = state.mapConfirmPayload; return Boolean(zone_name) || normalizeMapCoordinates(coordinates).length > 0; }, mapConfirmCoordinatesArray(state) { return normalizeMapCoordinates(state.mapConfirmPayload.coordinates); }, }, mutations: { SET_MAP_CONFIRM_PAYLOAD(state, payload) { state.mapConfirmPayload = { zone_name: payload?.zone_name || '', coordinates: payload?.coordinates ?? state.mapConfirmPayload.coordinates ?? '', gridMultipolygon: payload?.gridMultipolygon ?? state.mapConfirmPayload.gridMultipolygon ?? '', selectedGridIds: Array.isArray(payload?.selectedGridIds) ? payload.selectedGridIds : (state.mapConfirmPayload.selectedGridIds || []), }; }, CLEAR_MAP_CONFIRM_PAYLOAD(state) { state.mapConfirmPayload = emptyMapConfirmPayload(); }, }, };