index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const emptyMapConfirmPayload = () => ({
  2. zone_name: '',
  3. coordinates: '',
  4. gridMultipolygon: '',
  5. selectedGridIds: [],
  6. });
  7. /** coordinates 可能是 WKT 数组,也可能是 merge 后的单条 MULTIPOLYGON 字符串 */
  8. export function normalizeMapCoordinates(coordinates) {
  9. if (Array.isArray(coordinates)) {
  10. return coordinates.filter((item) => item && String(item).trim().length > 10);
  11. }
  12. if (typeof coordinates === 'string') {
  13. const trimmed = coordinates.trim();
  14. return trimmed.length > 10 ? [trimmed] : [];
  15. }
  16. return [];
  17. }
  18. export default {
  19. namespaced: true,
  20. state() {
  21. return {
  22. mapConfirmPayload: emptyMapConfirmPayload(),
  23. };
  24. },
  25. getters: {
  26. hasMapConfirmPayload(state) {
  27. const { zone_name, coordinates } = state.mapConfirmPayload;
  28. return Boolean(zone_name) || normalizeMapCoordinates(coordinates).length > 0;
  29. },
  30. mapConfirmCoordinatesArray(state) {
  31. return normalizeMapCoordinates(state.mapConfirmPayload.coordinates);
  32. },
  33. },
  34. mutations: {
  35. SET_MAP_CONFIRM_PAYLOAD(state, payload) {
  36. state.mapConfirmPayload = {
  37. zone_name: payload?.zone_name || '',
  38. coordinates: payload?.coordinates ?? state.mapConfirmPayload.coordinates ?? '',
  39. gridMultipolygon: payload?.gridMultipolygon ?? state.mapConfirmPayload.gridMultipolygon ?? '',
  40. selectedGridIds: Array.isArray(payload?.selectedGridIds)
  41. ? payload.selectedGridIds
  42. : (state.mapConfirmPayload.selectedGridIds || []),
  43. };
  44. },
  45. CLEAR_MAP_CONFIRM_PAYLOAD(state) {
  46. state.mapConfirmPayload = emptyMapConfirmPayload();
  47. },
  48. },
  49. };