@vtx/ol-map 2.0.0-beta.15 → 2.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,7 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
9
9
  var _antd = require("antd");
10
10
  var _Modal = _interopRequireDefault(require("../../components/Modal"));
11
11
  var _jspdf = require("jspdf");
12
- var _snapdom = require("@zumer/snapdom");
12
+ var _html2canvas = _interopRequireDefault(require("html2canvas"));
13
13
  var _interaction = require("ol/interaction");
14
14
  var _Vector = _interopRequireDefault(require("ol/layer/Vector"));
15
15
  var _Tile = _interopRequireDefault(require("ol/layer/Tile"));
@@ -19,14 +19,17 @@ var _Draw = require("ol/interaction/Draw");
19
19
  var _Draw2 = require("../../Utils/Draw");
20
20
  var _useProps2 = _interopRequireDefault(require("../../../use-props"));
21
21
  var _olMap = require("@vtx/ol-map");
22
+ var _FeatureLayer = _interopRequireDefault(require("../../../feature-layer/FeatureLayer"));
23
+ var _ImageLayer = _interopRequireDefault(require("../../../image-layer/ImageLayer"));
24
+ var _lock = _interopRequireDefault(require("./assets/lock.png"));
22
25
  require("./index.less");
23
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
24
27
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
28
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
25
29
  function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
26
30
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
31
  function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
28
32
  function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
29
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
30
33
  function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
31
34
  function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
32
35
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
@@ -41,7 +44,7 @@ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructur
41
44
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
42
45
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
43
46
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
44
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
47
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } // import { snapdom } from '@zumer/snapdom';
45
48
  var pageSizeOptions = ['A4', 'A3', 'A2', 'A1', 'A0'];
46
49
  var pageSizeMap = {
47
50
  A4: {
@@ -286,7 +289,7 @@ var syncBusinessLayers = function syncBusinessLayers(sourceMap, targetMap, exclu
286
289
  if (layer.get('key') === '__TDT_TILE' || layer.get('key') === '__TDT_MARK') {
287
290
  return false;
288
291
  }
289
- return layer instanceof _Vector["default"] || layer instanceof _Tile["default"] || layer instanceof _Image["default"];
292
+ return true;
290
293
  }).forEach(function (layer) {
291
294
  var clonedLayer = cloneLayer(layer);
292
295
  if (clonedLayer) {
@@ -322,34 +325,221 @@ var waitMapRender = function waitMapRender(mapInstance) {
322
325
  });
323
326
  };
324
327
 
325
- // 统一用 html2canvas 截取隐藏导出地图的 DOM,
326
- // 预览图和最终分幅图片都走这条截图链路。
327
- var captureDomCanvas = /*#__PURE__*/function () {
328
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(dom, width, height) {
329
- var snapshot, canvas, ctx;
328
+ // 业务图层经常是 WMS/WFS 异步请求,rendercomplete 加上固定 600ms 还不够稳。
329
+ // 这里额外等待图层 source 进入一段“空闲期”后再截图,避免外面图层还在加载时就提前截空白图。
330
+ var waitLayerSourcesSettled = function waitLayerSourcesSettled(mapInstance) {
331
+ var timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4000;
332
+ return new Promise(function (resolve) {
333
+ var _mapInstance$renderSy3;
334
+ if (!mapInstance) {
335
+ resolve();
336
+ return;
337
+ }
338
+ var disposers = [];
339
+ var pending = 0;
340
+ var done = false;
341
+ var idleTimer = null;
342
+ var finish = function finish() {
343
+ if (done) {
344
+ return;
345
+ }
346
+ done = true;
347
+ if (idleTimer) {
348
+ clearTimeout(idleTimer);
349
+ }
350
+ disposers.forEach(function (dispose) {
351
+ return dispose();
352
+ });
353
+ resolve();
354
+ };
355
+ var scheduleFinish = function scheduleFinish(delay) {
356
+ if (idleTimer) {
357
+ clearTimeout(idleTimer);
358
+ }
359
+ idleTimer = setTimeout(function () {
360
+ if (pending <= 0) {
361
+ finish();
362
+ }
363
+ }, delay);
364
+ };
365
+ var onStart = function onStart() {
366
+ pending += 1;
367
+ if (idleTimer) {
368
+ clearTimeout(idleTimer);
369
+ idleTimer = null;
370
+ }
371
+ };
372
+ var onEnd = function onEnd() {
373
+ pending = Math.max(0, pending - 1);
374
+ if (pending === 0) {
375
+ scheduleFinish(250);
376
+ }
377
+ };
378
+ var bind = function bind(target, type, handler) {
379
+ if (!(target !== null && target !== void 0 && target.on)) {
380
+ return;
381
+ }
382
+ target.on(type, handler);
383
+ disposers.push(function () {
384
+ var _target$un;
385
+ return (_target$un = target.un) === null || _target$un === void 0 ? void 0 : _target$un.call(target, type, handler);
386
+ });
387
+ };
388
+ mapInstance.getLayers().getArray().filter(function (layer) {
389
+ return layer.get('__sheetPrintClone');
390
+ }).forEach(function (layer) {
391
+ var _layer$getSource;
392
+ var source = (_layer$getSource = layer.getSource) === null || _layer$getSource === void 0 ? void 0 : _layer$getSource.call(layer);
393
+ if (!source) {
394
+ return;
395
+ }
396
+ ['tileloadstart', 'imageloadstart', 'featuresloadstart', 'vectorloadstart'].forEach(function (type) {
397
+ return bind(source, type, onStart);
398
+ });
399
+ ['tileloadend', 'tileloaderror', 'imageloadend', 'imageloaderror', 'featuresloadend', 'featuresloaderror', 'vectorloadend', 'vectorloaderror'].forEach(function (type) {
400
+ return bind(source, type, onEnd);
401
+ });
402
+
403
+ // 业务 ImageLayer 第一次进入预览时,经常是 source 已经创建但首张 WMS 图还没真正画进地图。
404
+ // 这里额外盯一下当前 image state,等它从 idle/loading 走到可用状态后再继续截图。
405
+ if (layer instanceof _ImageLayer["default"] && typeof source.getImage === 'function') {
406
+ var _mapInstance$getView, _mapInstance$getSize, _view$calculateExtent, _view$getResolution, _view$getProjection, _image$getState;
407
+ var view = (_mapInstance$getView = mapInstance.getView) === null || _mapInstance$getView === void 0 ? void 0 : _mapInstance$getView.call(mapInstance);
408
+ var size = (_mapInstance$getSize = mapInstance.getSize) === null || _mapInstance$getSize === void 0 ? void 0 : _mapInstance$getSize.call(mapInstance);
409
+ var extent = view === null || view === void 0 || (_view$calculateExtent = view.calculateExtent) === null || _view$calculateExtent === void 0 ? void 0 : _view$calculateExtent.call(view, size);
410
+ var resolution = view === null || view === void 0 || (_view$getResolution = view.getResolution) === null || _view$getResolution === void 0 ? void 0 : _view$getResolution.call(view);
411
+ var projection = view === null || view === void 0 || (_view$getProjection = view.getProjection) === null || _view$getProjection === void 0 ? void 0 : _view$getProjection.call(view);
412
+ var image = extent && resolution && projection ? source.getImage(extent, resolution, 1, projection) : null;
413
+ var imageState = image === null || image === void 0 || (_image$getState = image.getState) === null || _image$getState === void 0 ? void 0 : _image$getState.call(image);
414
+ if (image && (imageState === 0 || imageState === 1)) {
415
+ var _image$on;
416
+ onStart();
417
+ var _handleImageChange = function handleImageChange() {
418
+ var _image$getState2, _image$un, _mapInstance$renderSy2;
419
+ var nextState = (_image$getState2 = image.getState) === null || _image$getState2 === void 0 ? void 0 : _image$getState2.call(image);
420
+ if (nextState === 0 || nextState === 1) {
421
+ return;
422
+ }
423
+ (_image$un = image.un) === null || _image$un === void 0 || _image$un.call(image, 'change', _handleImageChange);
424
+ onEnd();
425
+ (_mapInstance$renderSy2 = mapInstance.renderSync) === null || _mapInstance$renderSy2 === void 0 || _mapInstance$renderSy2.call(mapInstance);
426
+ };
427
+ (_image$on = image.on) === null || _image$on === void 0 || _image$on.call(image, 'change', _handleImageChange);
428
+ disposers.push(function () {
429
+ var _image$un2;
430
+ return (_image$un2 = image.un) === null || _image$un2 === void 0 ? void 0 : _image$un2.call(image, 'change', _handleImageChange);
431
+ });
432
+ if (imageState === 0 && image.load) {
433
+ image.load();
434
+ }
435
+ }
436
+ }
437
+ });
438
+ scheduleFinish(500);
439
+ setTimeout(finish, timeout);
440
+ (_mapInstance$renderSy3 = mapInstance.renderSync) === null || _mapInstance$renderSy3 === void 0 || _mapInstance$renderSy3.call(mapInstance);
441
+ });
442
+ };
443
+ var parseCanvasTransform = function parseCanvasTransform(canvas) {
444
+ var transformText = canvas.style.transform || window.getComputedStyle(canvas).transform || '';
445
+ var match = transformText.match(/^matrix\(([^)]+)\)$/);
446
+ if (!match) {
447
+ return [1, 0, 0, 1, 0, 0];
448
+ }
449
+ return match[1].split(',').map(function (item) {
450
+ return Number(item.trim());
451
+ }).filter(function (item) {
452
+ return Number.isFinite(item);
453
+ });
454
+ };
455
+ var snapdomPromise = null;
456
+ var dynamicImport = function dynamicImport(specifier) {
457
+ return new Function('s', 'return import(s)')(specifier);
458
+ };
459
+ var getSnapdom = /*#__PURE__*/function () {
460
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
330
461
  return _regenerator().w(function (_context) {
331
462
  while (1) switch (_context.n) {
332
463
  case 0:
333
- _context.n = 1;
334
- return _snapdom.snapdom.toCanvas(dom, {
335
- scale: 1,
336
- backgroundColor: '#ffffff'
337
- });
338
- case 1:
339
- snapshot = _context.v;
464
+ if (!snapdomPromise) {
465
+ snapdomPromise = dynamicImport('@zumer/snapdom').then(function (mod) {
466
+ return mod.snapdom;
467
+ });
468
+ }
469
+ return _context.a(2, snapdomPromise);
470
+ }
471
+ }, _callee);
472
+ }));
473
+ return function getSnapdom() {
474
+ return _ref2.apply(this, arguments);
475
+ };
476
+ }();
477
+
478
+ // 优先直接合成 OpenLayers 实际渲染出来的各层 canvas,
479
+ // 避免 html2canvas 再截图 DOM 时把地图细节压糊。
480
+ var captureDomCanvas = /*#__PURE__*/function () {
481
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(dom, width, height) {
482
+ var canvas, ctx, layerCanvases, snapdom, snapshot;
483
+ return _regenerator().w(function (_context2) {
484
+ while (1) switch (_context2.n) {
485
+ case 0:
340
486
  canvas = document.createElement('canvas');
341
487
  canvas.width = Math.max(1, Math.round(width));
342
488
  canvas.height = Math.max(1, Math.round(height));
343
489
  ctx = canvas.getContext('2d');
344
490
  ctx.fillStyle = '#fff';
345
491
  ctx.fillRect(0, 0, canvas.width, canvas.height);
492
+ layerCanvases = Array.from(dom.querySelectorAll('.ol-layer canvas, canvas.ol-layer, canvas')).filter(function (item) {
493
+ return item.width > 0 && item.height > 0;
494
+ });
495
+ if (!layerCanvases.length) {
496
+ _context2.n = 1;
497
+ break;
498
+ }
499
+ layerCanvases.forEach(function (layerCanvas) {
500
+ var parentStyle = window.getComputedStyle(layerCanvas.parentElement || layerCanvas);
501
+ var canvasStyle = window.getComputedStyle(layerCanvas);
502
+ var opacity = Number(parentStyle.opacity || canvasStyle.opacity || 1);
503
+ var transform = parseCanvasTransform(layerCanvas);
504
+ var backgroundColor = parentStyle.backgroundColor;
505
+ ctx.save();
506
+ ctx.globalAlpha = Number.isFinite(opacity) ? opacity : 1;
507
+ if (backgroundColor && backgroundColor !== 'rgba(0, 0, 0, 0)' && backgroundColor !== 'transparent') {
508
+ ctx.fillStyle = backgroundColor;
509
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
510
+ }
511
+ if (transform.length === 6) {
512
+ ctx.setTransform.apply(ctx, _toConsumableArray(transform));
513
+ } else {
514
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
515
+ }
516
+ ctx.drawImage(layerCanvas, 0, 0);
517
+ ctx.restore();
518
+ });
519
+ return _context2.a(2, canvas);
520
+ case 1:
521
+ _context2.n = 2;
522
+ return getSnapdom();
523
+ case 2:
524
+ snapdom = _context2.v;
525
+ _context2.n = 3;
526
+ return snapdom.toCanvas(dom, {
527
+ scale: 1,
528
+ backgroundColor: '#ffffff'
529
+ });
530
+ case 3:
531
+ snapshot = _context2.v;
532
+ // const snapshot = await snapdom.toCanvas(dom, {
533
+ // scale: 1,
534
+ // backgroundColor: '#ffffff',
535
+ // });
346
536
  ctx.drawImage(snapshot, 0, 0, canvas.width, canvas.height);
347
- return _context.a(2, canvas);
537
+ return _context2.a(2, canvas);
348
538
  }
349
- }, _callee);
539
+ }, _callee2);
350
540
  }));
351
541
  return function captureDomCanvas(_x, _x2, _x3) {
352
- return _ref2.apply(this, arguments);
542
+ return _ref3.apply(this, arguments);
353
543
  };
354
544
  }();
355
545
  var loadImage = function loadImage(src) {
@@ -362,11 +552,11 @@ var loadImage = function loadImage(src) {
362
552
  img.src = src;
363
553
  });
364
554
  };
365
- var createPdfFromImages = function createPdfFromImages(_ref3) {
366
- var images = _ref3.images,
367
- pageWidthMm = _ref3.pageWidthMm,
368
- pageHeightMm = _ref3.pageHeightMm,
369
- title = _ref3.title;
555
+ var createPdfFromImages = function createPdfFromImages(_ref4) {
556
+ var images = _ref4.images,
557
+ pageWidthMm = _ref4.pageWidthMm,
558
+ pageHeightMm = _ref4.pageHeightMm,
559
+ title = _ref4.title;
370
560
  if (!(images !== null && images !== void 0 && images.length)) {
371
561
  return;
372
562
  }
@@ -381,7 +571,7 @@ var createPdfFromImages = function createPdfFromImages(_ref3) {
381
571
  if (index > 0) {
382
572
  pdf.addPage([pageWidthMm, pageHeightMm], orientation);
383
573
  }
384
- pdf.addImage(item.url, 'JPEG', 0, 0, pageWidthMm, pageHeightMm, undefined, 'FAST');
574
+ pdf.addImage(item.url, 'PNG', 0, 0, pageWidthMm, pageHeightMm, undefined, 'FAST');
385
575
  });
386
576
  pdf.save(decodeURIComponent("".concat(title || 'map-sheet-print', ".pdf")));
387
577
  };
@@ -430,37 +620,44 @@ function _default(props) {
430
620
  _useState16 = _slicedToArray(_useState15, 2),
431
621
  previewReady = _useState16[0],
432
622
  setPreviewReady = _useState16[1];
433
- var _useState17 = (0, _react.useState)(''),
623
+ var _useState17 = (0, _react.useState)(TextEnum.generatingPreviewText),
434
624
  _useState18 = _slicedToArray(_useState17, 2),
435
- previewImage = _useState18[0],
436
- setPreviewImage = _useState18[1];
437
- var _useState19 = (0, _react.useState)([]),
625
+ previewLoadingText = _useState18[0],
626
+ setPreviewLoadingText = _useState18[1];
627
+ var _useState19 = (0, _react.useState)(''),
438
628
  _useState20 = _slicedToArray(_useState19, 2),
439
- sheetImages = _useState20[0],
440
- setSheetImages = _useState20[1];
629
+ previewImage = _useState20[0],
630
+ setPreviewImage = _useState20[1];
441
631
  var _useState21 = (0, _react.useState)([]),
442
632
  _useState22 = _slicedToArray(_useState21, 2),
443
- selectedSheetIds = _useState22[0],
444
- setSelectedSheetIds = _useState22[1];
445
- var _useState23 = (0, _react.useState)(false),
633
+ sheetImages = _useState22[0],
634
+ setSheetImages = _useState22[1];
635
+ var _useState23 = (0, _react.useState)([]),
446
636
  _useState24 = _slicedToArray(_useState23, 2),
447
- generating = _useState24[0],
448
- setGenerating = _useState24[1];
637
+ selectedSheetIds = _useState24[0],
638
+ setSelectedSheetIds = _useState24[1];
639
+ var _useState25 = (0, _react.useState)(false),
640
+ _useState26 = _slicedToArray(_useState25, 2),
641
+ generating = _useState26[0],
642
+ setGenerating = _useState26[1];
449
643
  var drawTool = (0, _react.useRef)(null);
450
644
  var boxExtentRef = (0, _react.useRef)(null);
451
645
  var boxLayerRef = (0, _react.useRef)(null);
452
646
  var exportMapRef = (0, _react.useRef)(null);
647
+ var previewMapRef = (0, _react.useRef)(null);
453
648
  var exportStageRef = (0, _react.useRef)(null);
649
+ var previewMasterCanvasRef = (0, _react.useRef)(null);
650
+ var previewMasterFramePixelsRef = (0, _react.useRef)(null);
454
651
  var renderLayersSyncedRef = (0, _react.useRef)(false);
455
652
  var previewRenderSeqRef = (0, _react.useRef)(0);
456
653
  var previewRenderTimerRef = (0, _react.useRef)(null);
457
- var _useState25 = (0, _react.useState)({
654
+ var _useState27 = (0, _react.useState)({
458
655
  width: 1,
459
656
  height: 1
460
657
  }),
461
- _useState26 = _slicedToArray(_useState25, 2),
462
- exportSize = _useState26[0],
463
- setExportSize = _useState26[1];
658
+ _useState28 = _slicedToArray(_useState27, 2),
659
+ exportSize = _useState28[0],
660
+ setExportSize = _useState28[1];
464
661
  (0, _react.useEffect)(function () {
465
662
  form.setFieldsValue({
466
663
  range: '1',
@@ -494,6 +691,9 @@ function _default(props) {
494
691
  var extent = event.feature.getGeometry().getExtent();
495
692
  boxExtentRef.current = extent;
496
693
  map.showTip(TextEnum.leftClickToStart);
694
+ map.getView().fit(extent, {
695
+ duration: 500
696
+ });
497
697
  });
498
698
  map.addLayer(boxLayer);
499
699
  map.addInteraction(tool);
@@ -518,16 +718,33 @@ function _default(props) {
518
718
  var previewFrameExtent = (0, _react.useMemo)(function () {
519
719
  return buildPreviewFrameExtent(splitPlan, metrics === null || metrics === void 0 ? void 0 : metrics.extent);
520
720
  }, [splitPlan, metrics === null || metrics === void 0 ? void 0 : metrics.extent]);
721
+ var mapProjection = (0, _react.useMemo)(function () {
722
+ try {
723
+ var _map$getView, _map$getView$getProje, _map$getView$getProje2;
724
+ return (map === null || map === void 0 || (_map$getView = map.getView) === null || _map$getView === void 0 || (_map$getView = _map$getView.call(map)) === null || _map$getView === void 0 || (_map$getView$getProje = _map$getView.getProjection) === null || _map$getView$getProje === void 0 || (_map$getView$getProje = _map$getView$getProje.call(_map$getView)) === null || _map$getView$getProje === void 0 || (_map$getView$getProje2 = _map$getView$getProje.getCode) === null || _map$getView$getProje2 === void 0 ? void 0 : _map$getView$getProje2.call(_map$getView$getProje)) || 'EPSG:4326';
725
+ } catch (error) {
726
+ return 'EPSG:4326';
727
+ }
728
+ }, [map]);
729
+ var inheritedMapProps = (0, _react.useMemo)(function () {
730
+ var baseLayerParams = (map === null || map === void 0 ? void 0 : map.baseLayerParams) || {};
731
+ return {
732
+ projection: mapProjection,
733
+ mapStyle: baseLayerParams.mapStyle,
734
+ baseMapStyle: baseLayerParams.baseMapStyle,
735
+ dark: baseLayerParams.dark,
736
+ tk: (map === null || map === void 0 ? void 0 : map.tk) || baseLayerParams.tk || '1adbb6e47668cb33757cd799548bf1f4'
737
+ };
738
+ }, [map, mapProjection]);
521
739
 
522
- // 预览按“整张纸面的真实尺寸”缩放,而不是按选区本身缩放。
523
- // 这样手动框选较小时,不会被自动放大到几乎铺满预览区域。
740
+ // 预览里的“单张纸大小”应该只由纸张尺寸本身决定,
741
+ // 不应该因为修改总宽高而把 A4/A3 的纸张框一起缩放掉。
524
742
  var previewScale = (0, _react.useMemo)(function () {
525
- var frameSizeMm = getPreviewFrameSizeMm(splitPlan);
526
- if (!frameSizeMm) {
743
+ if (!(splitPlan !== null && splitPlan !== void 0 && splitPlan.paperWidthMm) || !(splitPlan !== null && splitPlan !== void 0 && splitPlan.paperHeightMm)) {
527
744
  return 1;
528
745
  }
529
- var scaleX = frameSizeMm.width / PREVIEW_WIDTH;
530
- var scaleY = frameSizeMm.height / PREVIEW_HEIGHT;
746
+ var scaleX = splitPlan.paperWidthMm / PREVIEW_WIDTH;
747
+ var scaleY = splitPlan.paperHeightMm / PREVIEW_HEIGHT;
531
748
  return Math.max(scaleX, scaleY, 0.0001);
532
749
  }, [splitPlan]);
533
750
  var selectedMapPixels = (0, _react.useMemo)(function () {
@@ -585,10 +802,10 @@ function _default(props) {
585
802
  };
586
803
  var handleExportMapCreated = function handleExportMapCreated(exportMap) {
587
804
  exportMapRef.current = exportMap;
588
- exportMap.getInteractions().forEach(function (item) {
589
- return item.setActive(false);
590
- });
591
- syncBusinessLayers(map, exportMap, boxLayerRef.current);
805
+ renderLayersSyncedRef.current = false;
806
+ };
807
+ var handlePreviewMapCreated = function handlePreviewMapCreated(previewMap) {
808
+ previewMapRef.current = previewMap;
592
809
  };
593
810
 
594
811
  // 隐藏导出地图只在第一次真正需要时补同步业务图层,
@@ -603,11 +820,18 @@ function _default(props) {
603
820
  }
604
821
  return true;
605
822
  };
823
+ var syncPreviewMapLayers = function syncPreviewMapLayers() {
824
+ if (!previewMapRef.current) {
825
+ return false;
826
+ }
827
+ syncBusinessLayers(map, previewMapRef.current, boxLayerRef.current);
828
+ return true;
829
+ };
606
830
 
607
831
  // 点击“执行分幅”时,直接读取外部主地图当前层级,
608
832
  // 也就是“外面地图是什么层级,进去就按什么层级算”。
609
833
  var handleSubmit = function handleSubmit(values) {
610
- var _values$overlapMargin, _map$getView$getZoom, _map$getView;
834
+ var _values$overlapMargin, _map$getView$getZoom, _map$getView2;
611
835
  var pageSize = values.pageSize || form.getFieldValue('pageSize');
612
836
  var overlapMargin = Number((_values$overlapMargin = values.overlapMargin) !== null && _values$overlapMargin !== void 0 ? _values$overlapMargin : form.getFieldValue('overlapMargin')) || 0;
613
837
  // const overlapMargin = 10
@@ -617,7 +841,7 @@ function _default(props) {
617
841
  if (!isValidExtent(extent)) {
618
842
  return;
619
843
  }
620
- var zoom = Math.round(((_map$getView$getZoom = (_map$getView = map.getView()).getZoom) === null || _map$getView$getZoom === void 0 ? void 0 : _map$getView$getZoom.call(_map$getView)) || 0);
844
+ var zoom = Math.round(((_map$getView$getZoom = (_map$getView2 = map.getView()).getZoom) === null || _map$getView$getZoom === void 0 ? void 0 : _map$getView$getZoom.call(_map$getView2)) || 0);
621
845
  var nextMetrics = calcMetricsFromZoom(extent, map.getView(), zoom);
622
846
  if (!nextMetrics) {
623
847
  return;
@@ -649,7 +873,10 @@ function _default(props) {
649
873
  setTotalWidthMm(Number(nextMetrics.widthMm.toFixed(3)));
650
874
  setTotalHeightMm(Number(nextMetrics.heightMm.toFixed(3)));
651
875
  setPreviewReady(false);
876
+ setPreviewLoadingText(TextEnum.generatingPreviewText);
652
877
  setPreviewImage('');
878
+ previewMasterCanvasRef.current = null;
879
+ previewMasterFramePixelsRef.current = null;
653
880
  renderLayersSyncedRef.current = false;
654
881
  setSheetImages([]);
655
882
  setSheetVisible(false);
@@ -672,28 +899,26 @@ function _default(props) {
672
899
  setTotalWidthMm(Number((nextHeight / metrics.ratio).toFixed(3)));
673
900
  };
674
901
  var renderSheetImage = /*#__PURE__*/function () {
675
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(sheet) {
676
- var previewImg, frameSizeMm, frameTotalWidthMm, frameTotalHeightMm, sourceX, sourceY, sourceWidth, sourceHeight, pageWidthPx, pageHeightPx, pageCanvas, ctx;
677
- return _regenerator().w(function (_context2) {
678
- while (1) switch (_context2.n) {
902
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(sheet) {
903
+ var previewMasterCanvas, previewMasterFramePixels, frameSizeMm, frameTotalWidthMm, frameTotalHeightMm, sourceX, sourceY, sourceWidth, sourceHeight, pageWidthPx, pageHeightPx, pageCanvas, ctx;
904
+ return _regenerator().w(function (_context3) {
905
+ while (1) switch (_context3.n) {
679
906
  case 0:
680
- if (!(!splitPlan || !previewFramePixels || !previewImage)) {
681
- _context2.n = 1;
907
+ if (!(!splitPlan || !previewMasterCanvasRef.current || !previewMasterFramePixelsRef.current)) {
908
+ _context3.n = 1;
682
909
  break;
683
910
  }
684
- return _context2.a(2, null);
911
+ return _context3.a(2, null);
685
912
  case 1:
686
- _context2.n = 2;
687
- return loadImage(previewImage);
688
- case 2:
689
- previewImg = _context2.v;
913
+ previewMasterCanvas = previewMasterCanvasRef.current;
914
+ previewMasterFramePixels = previewMasterFramePixelsRef.current;
690
915
  frameSizeMm = getPreviewFrameSizeMm(splitPlan);
691
916
  frameTotalWidthMm = frameSizeMm.width;
692
917
  frameTotalHeightMm = frameSizeMm.height;
693
- sourceX = sheet.xMm / frameTotalWidthMm * previewFramePixels.width;
694
- sourceY = sheet.yMm / frameTotalHeightMm * previewFramePixels.height;
695
- sourceWidth = splitPlan.paperWidthMm / frameTotalWidthMm * previewFramePixels.width;
696
- sourceHeight = splitPlan.paperHeightMm / frameTotalHeightMm * previewFramePixels.height;
918
+ sourceX = sheet.xMm / frameTotalWidthMm * previewMasterFramePixels.width;
919
+ sourceY = sheet.yMm / frameTotalHeightMm * previewMasterFramePixels.height;
920
+ sourceWidth = splitPlan.paperWidthMm / frameTotalWidthMm * previewMasterFramePixels.width;
921
+ sourceHeight = splitPlan.paperHeightMm / frameTotalHeightMm * previewMasterFramePixels.height;
697
922
  pageWidthPx = Math.max(1, Math.round(mmToPx(splitPlan.paperWidthMm, EXPORT_DPI)));
698
923
  pageHeightPx = Math.max(1, Math.round(mmToPx(splitPlan.paperHeightMm, EXPORT_DPI)));
699
924
  console.log('[MapSheetPrint] 生成单张图幅', {
@@ -714,17 +939,17 @@ function _default(props) {
714
939
  ctx = pageCanvas.getContext('2d');
715
940
  ctx.fillStyle = '#fff';
716
941
  ctx.fillRect(0, 0, pageWidthPx, pageHeightPx);
717
- ctx.drawImage(previewImg, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, pageWidthPx, pageHeightPx);
718
- return _context2.a(2, _objectSpread(_objectSpread({}, sheet), {}, {
719
- url: pageCanvas.toDataURL('image/jpeg', 0.92),
942
+ ctx.drawImage(previewMasterCanvas, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, pageWidthPx, pageHeightPx);
943
+ return _context3.a(2, _objectSpread(_objectSpread({}, sheet), {}, {
944
+ url: pageCanvas.toDataURL('image/png'),
720
945
  pixelWidth: pageWidthPx,
721
946
  pixelHeight: pageHeightPx
722
947
  }));
723
948
  }
724
- }, _callee2);
949
+ }, _callee3);
725
950
  }));
726
951
  return function renderSheetImage(_x4) {
727
- return _ref4.apply(this, arguments);
952
+ return _ref5.apply(this, arguments);
728
953
  };
729
954
  }();
730
955
 
@@ -732,17 +957,17 @@ function _default(props) {
732
957
  // 宽高变大时,不改 extent,而是先把隐藏地图按更大的像素尺寸重新渲染,
733
958
  // 相当于“放大地图层级”,再把同一个 extent 裁成预览图。
734
959
  var renderPreviewImage = /*#__PURE__*/function () {
735
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(seq) {
960
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(seq) {
736
961
  var _exportMapRef$current, _exportMapRef$current2;
737
- var widthScale, heightScale, captureWidthPx, captureHeightPx, targetResolution, targetCenter, view, sourceCanvas, previewCanvas, ctx;
738
- return _regenerator().w(function (_context3) {
739
- while (1) switch (_context3.n) {
962
+ var widthScale, heightScale, captureWidthPx, captureHeightPx, targetResolution, targetCenter, view, _previewMapRef$curren, _previewMapRef$curren2, previewView, sourceCanvas, previewCanvas, masterScaleX, masterScaleY, previewMasterCanvas, masterCtx, ctx;
963
+ return _regenerator().w(function (_context4) {
964
+ while (1) switch (_context4.n) {
740
965
  case 0:
741
966
  if (!(!previewVisible || !(metrics !== null && metrics !== void 0 && metrics.extent) || !selectedMapPixels || !previewFramePixels || !exportMapRef.current || !exportStageRef.current)) {
742
- _context3.n = 1;
967
+ _context4.n = 1;
743
968
  break;
744
969
  }
745
- return _context3.a(2);
970
+ return _context4.a(2);
746
971
  case 1:
747
972
  widthScale = totalWidthMm / metrics.widthMm;
748
973
  heightScale = totalHeightMm / metrics.heightMm;
@@ -775,76 +1000,113 @@ function _default(props) {
775
1000
  } : null
776
1001
  });
777
1002
  setPreviewReady(false);
778
- _context3.n = 2;
1003
+ setPreviewLoadingText(TextEnum.syncingLayersText);
1004
+ _context4.n = 2;
779
1005
  return waitNextFrame();
780
1006
  case 2:
781
1007
  if (!(seq !== previewRenderSeqRef.current)) {
782
- _context3.n = 3;
1008
+ _context4.n = 3;
783
1009
  break;
784
1010
  }
785
- return _context3.a(2);
1011
+ return _context4.a(2);
786
1012
  case 3:
787
1013
  if (ensureRenderMapLayers()) {
788
- _context3.n = 4;
1014
+ _context4.n = 4;
789
1015
  break;
790
1016
  }
791
- return _context3.a(2);
1017
+ return _context4.a(2);
792
1018
  case 4:
1019
+ syncPreviewMapLayers();
793
1020
  setExportSize({
794
1021
  width: captureWidthPx,
795
1022
  height: captureHeightPx
796
1023
  });
797
- _context3.n = 5;
1024
+ _context4.n = 5;
798
1025
  return waitNextFrame();
799
1026
  case 5:
800
1027
  if (!(seq !== previewRenderSeqRef.current)) {
801
- _context3.n = 6;
1028
+ _context4.n = 6;
802
1029
  break;
803
1030
  }
804
- return _context3.a(2);
1031
+ return _context4.a(2);
805
1032
  case 6:
806
1033
  (_exportMapRef$current = (_exportMapRef$current2 = exportMapRef.current).updateSize) === null || _exportMapRef$current === void 0 || _exportMapRef$current.call(_exportMapRef$current2);
807
1034
  view = exportMapRef.current.getView();
808
1035
  view.setCenter(targetCenter);
809
1036
  view.setResolution(targetResolution);
810
- _context3.n = 7;
1037
+ if (previewMapRef.current) {
1038
+ (_previewMapRef$curren = (_previewMapRef$curren2 = previewMapRef.current).updateSize) === null || _previewMapRef$curren === void 0 || _previewMapRef$curren.call(_previewMapRef$curren2);
1039
+ previewView = previewMapRef.current.getView();
1040
+ previewView.setCenter(targetCenter);
1041
+ previewView.setResolution(targetResolution);
1042
+ }
1043
+ _context4.n = 7;
811
1044
  return waitMapRender(exportMapRef.current);
812
1045
  case 7:
813
- _context3.n = 8;
814
- return waitNextFrame();
1046
+ setPreviewLoadingText(TextEnum.waitingBusinessLayersText);
1047
+ _context4.n = 8;
1048
+ return waitLayerSourcesSettled(exportMapRef.current);
815
1049
  case 8:
1050
+ _context4.n = 9;
1051
+ return waitMapRender(exportMapRef.current);
1052
+ case 9:
1053
+ if (!previewMapRef.current) {
1054
+ _context4.n = 10;
1055
+ break;
1056
+ }
1057
+ _context4.n = 10;
1058
+ return waitMapRender(previewMapRef.current);
1059
+ case 10:
1060
+ _context4.n = 11;
1061
+ return waitNextFrame();
1062
+ case 11:
816
1063
  if (!(seq !== previewRenderSeqRef.current)) {
817
- _context3.n = 9;
1064
+ _context4.n = 12;
818
1065
  break;
819
1066
  }
820
- return _context3.a(2);
821
- case 9:
822
- _context3.n = 10;
1067
+ return _context4.a(2);
1068
+ case 12:
1069
+ _context4.n = 13;
823
1070
  return captureDomCanvas(exportStageRef.current, captureWidthPx, captureHeightPx);
824
- case 10:
825
- sourceCanvas = _context3.v;
1071
+ case 13:
1072
+ sourceCanvas = _context4.v;
826
1073
  if (!(seq !== previewRenderSeqRef.current)) {
827
- _context3.n = 11;
1074
+ _context4.n = 14;
828
1075
  break;
829
1076
  }
830
- return _context3.a(2);
831
- case 11:
1077
+ return _context4.a(2);
1078
+ case 14:
832
1079
  previewCanvas = document.createElement('canvas');
833
1080
  previewCanvas.width = Math.max(1, Math.round(previewFramePixels.width));
834
1081
  previewCanvas.height = Math.max(1, Math.round(previewFramePixels.height));
1082
+ masterScaleX = captureWidthPx / Math.max(1, selectedMapPixels.width);
1083
+ masterScaleY = captureHeightPx / Math.max(1, selectedMapPixels.height);
1084
+ previewMasterCanvas = document.createElement('canvas');
1085
+ previewMasterCanvas.width = Math.max(1, Math.round(previewFramePixels.width * masterScaleX));
1086
+ previewMasterCanvas.height = Math.max(1, Math.round(previewFramePixels.height * masterScaleY));
1087
+ masterCtx = previewMasterCanvas.getContext('2d');
1088
+ masterCtx.fillStyle = '#fff';
1089
+ masterCtx.fillRect(0, 0, previewMasterCanvas.width, previewMasterCanvas.height);
1090
+ masterCtx.drawImage(sourceCanvas, 0, 0, captureWidthPx, captureHeightPx);
1091
+ previewMasterCanvasRef.current = previewMasterCanvas;
1092
+ previewMasterFramePixelsRef.current = {
1093
+ width: previewMasterCanvas.width,
1094
+ height: previewMasterCanvas.height
1095
+ };
835
1096
  ctx = previewCanvas.getContext('2d');
836
1097
  ctx.fillStyle = '#fff';
837
1098
  ctx.fillRect(0, 0, previewCanvas.width, previewCanvas.height);
838
- ctx.drawImage(sourceCanvas, 0, 0, captureWidthPx, captureHeightPx, 0, 0, selectedMapPixels.width, selectedMapPixels.height);
839
- setPreviewImage(previewCanvas.toDataURL('image/jpeg', 0.92));
1099
+ ctx.drawImage(previewMasterCanvas, 0, 0, previewCanvas.width, previewCanvas.height);
1100
+ setPreviewImage(previewCanvas.toDataURL('image/png'));
840
1101
  setPreviewReady(true);
841
- case 12:
842
- return _context3.a(2);
1102
+ setPreviewLoadingText(TextEnum.generatingPreviewText);
1103
+ case 15:
1104
+ return _context4.a(2);
843
1105
  }
844
- }, _callee3);
1106
+ }, _callee4);
845
1107
  }));
846
1108
  return function renderPreviewImage(_x5) {
847
- return _ref5.apply(this, arguments);
1109
+ return _ref6.apply(this, arguments);
848
1110
  };
849
1111
  }();
850
1112
  (0, _react.useEffect)(function () {
@@ -893,51 +1155,51 @@ function _default(props) {
893
1155
  });
894
1156
  }, [splitPlan, totalWidthMm, totalHeightMm, pageSizeValue, overlapMarginValue]);
895
1157
  var handleGenerateSheets = /*#__PURE__*/function () {
896
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
1158
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
897
1159
  var _splitPlan$sheets;
898
1160
  var images, _iterator, _step, sheet, image, _t;
899
- return _regenerator().w(function (_context4) {
900
- while (1) switch (_context4.p = _context4.n) {
1161
+ return _regenerator().w(function (_context5) {
1162
+ while (1) switch (_context5.p = _context5.n) {
901
1163
  case 0:
902
1164
  if (splitPlan !== null && splitPlan !== void 0 && (_splitPlan$sheets = splitPlan.sheets) !== null && _splitPlan$sheets !== void 0 && _splitPlan$sheets.length) {
903
- _context4.n = 1;
1165
+ _context5.n = 1;
904
1166
  break;
905
1167
  }
906
- return _context4.a(2);
1168
+ return _context5.a(2);
907
1169
  case 1:
908
1170
  setGenerating(true);
909
- _context4.p = 2;
1171
+ _context5.p = 2;
910
1172
  images = [];
911
1173
  _iterator = _createForOfIteratorHelper(splitPlan.sheets);
912
- _context4.p = 3;
1174
+ _context5.p = 3;
913
1175
  _iterator.s();
914
1176
  case 4:
915
1177
  if ((_step = _iterator.n()).done) {
916
- _context4.n = 7;
1178
+ _context5.n = 7;
917
1179
  break;
918
1180
  }
919
1181
  sheet = _step.value;
920
- _context4.n = 5;
1182
+ _context5.n = 5;
921
1183
  return renderSheetImage(sheet);
922
1184
  case 5:
923
- image = _context4.v;
1185
+ image = _context5.v;
924
1186
  if (image) {
925
1187
  images.push(image);
926
1188
  }
927
1189
  case 6:
928
- _context4.n = 4;
1190
+ _context5.n = 4;
929
1191
  break;
930
1192
  case 7:
931
- _context4.n = 9;
1193
+ _context5.n = 9;
932
1194
  break;
933
1195
  case 8:
934
- _context4.p = 8;
935
- _t = _context4.v;
1196
+ _context5.p = 8;
1197
+ _t = _context5.v;
936
1198
  _iterator.e(_t);
937
1199
  case 9:
938
- _context4.p = 9;
1200
+ _context5.p = 9;
939
1201
  _iterator.f();
940
- return _context4.f(9);
1202
+ return _context5.f(9);
941
1203
  case 10:
942
1204
  setSheetImages(images);
943
1205
  setSelectedSheetIds(images.map(function (item) {
@@ -946,16 +1208,16 @@ function _default(props) {
946
1208
  setPreviewVisible(false);
947
1209
  setSheetVisible(true);
948
1210
  case 11:
949
- _context4.p = 11;
1211
+ _context5.p = 11;
950
1212
  setGenerating(false);
951
- return _context4.f(11);
1213
+ return _context5.f(11);
952
1214
  case 12:
953
- return _context4.a(2);
1215
+ return _context5.a(2);
954
1216
  }
955
- }, _callee4, null, [[3, 8, 9, 10], [2,, 11, 12]]);
1217
+ }, _callee5, null, [[3, 8, 9, 10], [2,, 11, 12]]);
956
1218
  }));
957
1219
  return function handleGenerateSheets() {
958
- return _ref6.apply(this, arguments);
1220
+ return _ref7.apply(this, arguments);
959
1221
  };
960
1222
  }();
961
1223
  var handleExportPdf = function handleExportPdf() {
@@ -986,16 +1248,16 @@ function _default(props) {
986
1248
  },
987
1249
  onFinish: handleSubmit
988
1250
  }, /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
989
- label: TextEnum.mapTitle,
1251
+ label: TextEnum.mapPrintTitle,
990
1252
  name: "title",
991
1253
  rules: [{
992
1254
  required: true,
993
- message: TextEnum.pleaseInputTitle
1255
+ message: TextEnum.pleaseInput
994
1256
  }]
995
1257
  }, /*#__PURE__*/_react["default"].createElement(_antd.Input, {
996
1258
  placeholder: TextEnum.pleaseInput
997
1259
  })), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
998
- label: TextEnum.downloadRange,
1260
+ label: TextEnum.printRange,
999
1261
  name: "range",
1000
1262
  rules: [{
1001
1263
  required: true,
@@ -1012,8 +1274,16 @@ function _default(props) {
1012
1274
  value: '2',
1013
1275
  label: TextEnum.manualBoxSelect
1014
1276
  }]
1015
- })), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1016
- label: "\u7EB8\u5F20\u5C3A\u5BF8",
1277
+ })), /*#__PURE__*/_react["default"].createElement("div", {
1278
+ style: {
1279
+ marginLeft: 12,
1280
+ marginBottom: 12,
1281
+ color: '#333',
1282
+ fontSize: 14,
1283
+ fontWeight: 500
1284
+ }
1285
+ }, TextEnum.sheetPrintParams), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1286
+ label: TextEnum.pageSize,
1017
1287
  name: "pageSize",
1018
1288
  rules: [{
1019
1289
  required: true,
@@ -1030,18 +1300,43 @@ function _default(props) {
1030
1300
  };
1031
1301
  })
1032
1302
  })), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1033
- label: "\u91CD\u53E0\u8FB9\u8DDD"
1303
+ label: TextEnum.overlapMargin,
1304
+ required: true
1305
+ }, /*#__PURE__*/_react["default"].createElement("div", {
1306
+ style: {
1307
+ display: 'flex',
1308
+ alignItems: 'center',
1309
+ gap: 8
1310
+ }
1034
1311
  }, /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1035
1312
  name: "overlapMargin",
1036
- noStyle: true
1313
+ rules: [{
1314
+ required: true,
1315
+ message: TextEnum.pleaseInput
1316
+ }, {
1317
+ type: 'integer',
1318
+ transform: function transform(value) {
1319
+ return value === undefined || value === null || value === '' ? value : Number(value);
1320
+ },
1321
+ message: TextEnum.pleaseInputInteger
1322
+ }],
1323
+ style: {
1324
+ flex: 1,
1325
+ marginBottom: 0
1326
+ }
1037
1327
  }, /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, {
1038
1328
  min: 0,
1039
1329
  precision: 0,
1040
1330
  changeOnBlur: false,
1331
+ step: 1,
1041
1332
  style: {
1042
- width: 'calc(100% - 40px)'
1333
+ width: '100%'
1043
1334
  }
1044
- })), /*#__PURE__*/_react["default"].createElement("span", null, "\uFF08mm\uFF09")), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1335
+ })), /*#__PURE__*/_react["default"].createElement("span", {
1336
+ style: {
1337
+ whiteSpace: 'nowrap'
1338
+ }
1339
+ }, "\uFF08mm\uFF09"))), /*#__PURE__*/_react["default"].createElement(_antd.Form.Item, {
1045
1340
  wrapperCol: {
1046
1341
  offset: 8,
1047
1342
  span: 16
@@ -1049,14 +1344,14 @@ function _default(props) {
1049
1344
  }, /*#__PURE__*/_react["default"].createElement(_antd.Button, {
1050
1345
  type: "primary",
1051
1346
  htmlType: "submit"
1052
- }, "\u6267\u884C\u5206\u5E45"))), /*#__PURE__*/_react["default"].createElement(_antd.Modal, {
1347
+ }, TextEnum.executeSheetPrint))), /*#__PURE__*/_react["default"].createElement(_antd.Modal, {
1053
1348
  open: previewVisible,
1054
1349
  title: TextEnum.preview,
1055
1350
  onCancel: function onCancel() {
1056
1351
  return setPreviewVisible(false);
1057
1352
  },
1058
1353
  onOk: handleGenerateSheets,
1059
- okText: "\u786E\u5B9A",
1354
+ okText: TextEnum.ok,
1060
1355
  cancelText: TextEnum.cancel,
1061
1356
  width: map.getViewport().clientWidth - 80,
1062
1357
  centered: true,
@@ -1070,18 +1365,23 @@ function _default(props) {
1070
1365
  alignItems: 'center',
1071
1366
  marginBottom: 12
1072
1367
  }
1073
- }, /*#__PURE__*/_react["default"].createElement("span", null, "\u5BBD"), /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, {
1368
+ }, /*#__PURE__*/_react["default"].createElement("span", null, TextEnum.widthText), /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, {
1074
1369
  min: 0.001,
1075
1370
  precision: 3,
1076
1371
  value: totalWidthMm,
1077
1372
  onChange: handleWidthChange
1078
- }), /*#__PURE__*/_react["default"].createElement("span", null, "mm"), /*#__PURE__*/_react["default"].createElement("span", {
1373
+ }), /*#__PURE__*/_react["default"].createElement("span", null, "mm"), /*#__PURE__*/_react["default"].createElement("img", {
1374
+ src: _lock["default"],
1375
+ alt: TextEnum.fixedRatioText,
1079
1376
  style: {
1080
- color: '#999'
1377
+ width: 16,
1378
+ height: 16,
1379
+ objectFit: 'contain'
1081
1380
  }
1082
- }, "\u56FA\u5B9A\u6BD4\u4F8B"), /*#__PURE__*/_react["default"].createElement("span", null, "\u9AD8"), /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, {
1083
- min: 0.001,
1084
- precision: 3,
1381
+ }), /*#__PURE__*/_react["default"].createElement("span", null, TextEnum.heightText), /*#__PURE__*/_react["default"].createElement(_antd.InputNumber, {
1382
+ precision: 0,
1383
+ step: 1,
1384
+ min: 0,
1085
1385
  value: totalHeightMm,
1086
1386
  onChange: handleHeightChange
1087
1387
  }), /*#__PURE__*/_react["default"].createElement("span", null, "mm"), splitPlan && /*#__PURE__*/_react["default"].createElement("span", {
@@ -1089,7 +1389,7 @@ function _default(props) {
1089
1389
  marginLeft: 'auto',
1090
1390
  color: '#666'
1091
1391
  }
1092
- }, splitPlan.cols, " \u5217 x ", splitPlan.rows, " \u884C\uFF0C\u5171 ", splitPlan.totalSheets, " \u5E45")), /*#__PURE__*/_react["default"].createElement("div", {
1392
+ }, splitPlan.cols, " ", TextEnum.colText, " x ", splitPlan.rows, " ", TextEnum.rowText, "\uFF0C", TextEnum.totalText, " ", splitPlan.totalSheets, " ", TextEnum.sheetText)), /*#__PURE__*/_react["default"].createElement("div", {
1093
1393
  style: {
1094
1394
  position: 'relative',
1095
1395
  height: PREVIEW_HEIGHT,
@@ -1100,14 +1400,25 @@ function _default(props) {
1100
1400
  }, !previewReady && /*#__PURE__*/_react["default"].createElement("div", {
1101
1401
  style: {
1102
1402
  position: 'absolute',
1103
- inset: 0,
1403
+ left: 0,
1404
+ top: 0,
1405
+ right: 0,
1406
+ bottom: 0,
1104
1407
  display: 'flex',
1408
+ flexDirection: 'column',
1105
1409
  alignItems: 'center',
1106
1410
  justifyContent: 'center',
1107
- zIndex: 2,
1108
- background: 'rgba(255,255,255,0.72)'
1411
+ zIndex: 10,
1412
+ background: 'rgba(255,255,255,0.82)',
1413
+ gap: 12,
1414
+ pointerEvents: 'none'
1415
+ }
1416
+ }, /*#__PURE__*/_react["default"].createElement(_antd.Spin, null), /*#__PURE__*/_react["default"].createElement("div", {
1417
+ style: {
1418
+ color: '#666',
1419
+ fontSize: 13
1109
1420
  }
1110
- }, /*#__PURE__*/_react["default"].createElement(_antd.Spin, null)), metrics && previewFramePixels && splitPlan && selectedMapPixels && /*#__PURE__*/_react["default"].createElement("div", {
1421
+ }, previewLoadingText)), metrics && previewFramePixels && splitPlan && selectedMapPixels && /*#__PURE__*/_react["default"].createElement("div", {
1111
1422
  style: {
1112
1423
  position: 'relative',
1113
1424
  width: previewFramePixels.width,
@@ -1115,12 +1426,35 @@ function _default(props) {
1115
1426
  transformOrigin: 'top left'
1116
1427
  }
1117
1428
  }, /*#__PURE__*/_react["default"].createElement("div", {
1429
+ style: {
1430
+ position: 'absolute',
1431
+ left: 0,
1432
+ top: 0,
1433
+ width: selectedMapPixels.width,
1434
+ height: selectedMapPixels.height,
1435
+ overflow: 'hidden',
1436
+ zIndex: 0,
1437
+ display: 'none'
1438
+ }
1439
+ }, /*#__PURE__*/_react["default"].createElement(_olMap.Map, {
1440
+ width: "".concat(Math.max(1, Math.round(selectedMapPixels.width)), "px"),
1441
+ height: "".concat(Math.max(1, Math.round(selectedMapPixels.height)), "px"),
1442
+ projection: inheritedMapProps.projection,
1443
+ mapStyle: inheritedMapProps.mapStyle,
1444
+ baseMapStyle: inheritedMapProps.baseMapStyle,
1445
+ dark: inheritedMapProps.dark,
1446
+ tk: inheritedMapProps.tk,
1447
+ hidePopupTable: true,
1448
+ createdMap: handlePreviewMapCreated
1449
+ })), /*#__PURE__*/_react["default"].createElement("div", {
1118
1450
  style: {
1119
1451
  position: 'absolute',
1120
1452
  left: 0,
1121
1453
  top: 0,
1122
1454
  width: previewFramePixels.width,
1123
- height: previewFramePixels.height
1455
+ height: previewFramePixels.height,
1456
+ zIndex: 1,
1457
+ pointerEvents: 'none'
1124
1458
  }
1125
1459
  }, /*#__PURE__*/_react["default"].createElement("img", {
1126
1460
  src: previewImage,
@@ -1128,7 +1462,9 @@ function _default(props) {
1128
1462
  style: {
1129
1463
  width: '100%',
1130
1464
  height: '100%',
1131
- display: previewImage ? 'block' : 'none'
1465
+ display: previewImage ? 'block' : 'none',
1466
+ pointerEvents: 'none',
1467
+ opacity: 1
1132
1468
  }
1133
1469
  })), selectedRangeCoverage && selectedRangeCoverage.widthPercent < 100 && /*#__PURE__*/_react["default"].createElement("div", {
1134
1470
  style: {
@@ -1138,7 +1474,8 @@ function _default(props) {
1138
1474
  width: "".concat(100 - selectedRangeCoverage.widthPercent, "%"),
1139
1475
  height: "".concat(selectedRangeCoverage.heightPercent, "%"),
1140
1476
  background: 'rgba(255,255,255,0.96)',
1141
- pointerEvents: 'none'
1477
+ pointerEvents: 'none',
1478
+ zIndex: 2
1142
1479
  }
1143
1480
  }), selectedRangeCoverage && selectedRangeCoverage.heightPercent < 100 && /*#__PURE__*/_react["default"].createElement("div", {
1144
1481
  style: {
@@ -1148,7 +1485,8 @@ function _default(props) {
1148
1485
  width: '100%',
1149
1486
  height: "".concat(100 - selectedRangeCoverage.heightPercent, "%"),
1150
1487
  background: 'rgba(255,255,255,0.96)',
1151
- pointerEvents: 'none'
1488
+ pointerEvents: 'none',
1489
+ zIndex: 2
1152
1490
  }
1153
1491
  }), selectedRangeCoverage && /*#__PURE__*/_react["default"].createElement("div", {
1154
1492
  style: {
@@ -1159,7 +1497,8 @@ function _default(props) {
1159
1497
  height: "".concat(selectedRangeCoverage.heightPercent, "%"),
1160
1498
  border: '2px solid rgba(24, 144, 255, 0.9)',
1161
1499
  boxSizing: 'border-box',
1162
- pointerEvents: 'none'
1500
+ pointerEvents: 'none',
1501
+ zIndex: 3
1163
1502
  }
1164
1503
  }), splitPlan === null || splitPlan === void 0 || (_splitPlan$sheets2 = splitPlan.sheets) === null || _splitPlan$sheets2 === void 0 ? void 0 : _splitPlan$sheets2.map(function (sheet) {
1165
1504
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -1172,7 +1511,8 @@ function _default(props) {
1172
1511
  height: "".concat(splitPlan.paperHeightMm / getPreviewFrameSizeMm(splitPlan).height * 100, "%"),
1173
1512
  border: '2px dashed #333',
1174
1513
  boxSizing: 'border-box',
1175
- pointerEvents: 'none'
1514
+ pointerEvents: 'none',
1515
+ zIndex: 4
1176
1516
  }
1177
1517
  }, /*#__PURE__*/_react["default"].createElement("div", {
1178
1518
  style: {
@@ -1186,12 +1526,12 @@ function _default(props) {
1186
1526
  }, sheet.index));
1187
1527
  })))), /*#__PURE__*/_react["default"].createElement(_antd.Modal, {
1188
1528
  open: sheetVisible,
1189
- title: "\u56FE\u5E45\u7ED3\u679C",
1529
+ title: TextEnum.sheetResultText,
1190
1530
  onCancel: function onCancel() {
1191
1531
  return setSheetVisible(false);
1192
1532
  },
1193
1533
  onOk: handleExportPdf,
1194
- okText: "\u6253\u5370",
1534
+ okText: TextEnum.printText,
1195
1535
  cancelText: TextEnum.cancel,
1196
1536
  width: map.getViewport().clientWidth - 80,
1197
1537
  centered: true,
@@ -1208,7 +1548,7 @@ function _default(props) {
1208
1548
  return item.id;
1209
1549
  }) : []);
1210
1550
  }
1211
- }, "\u5168\u9009")), /*#__PURE__*/_react["default"].createElement("div", {
1551
+ }, TextEnum.selectAllText)), /*#__PURE__*/_react["default"].createElement("div", {
1212
1552
  style: {
1213
1553
  display: 'grid',
1214
1554
  gridTemplateColumns: 'repeat(auto-fill, minmax(240px, 1fr))',
@@ -1242,7 +1582,7 @@ function _default(props) {
1242
1582
  });
1243
1583
  });
1244
1584
  }
1245
- }), /*#__PURE__*/_react["default"].createElement("span", null, "\u7B2C ", item.index, " \u5E45 (", item.row, "-", item.col, ")")), /*#__PURE__*/_react["default"].createElement("img", {
1585
+ }), /*#__PURE__*/_react["default"].createElement("span", null, TextEnum.sheetIndexPrefix, " ", item.index, " ", TextEnum.sheetText, " (", item.row, "-", item.col, ")")), /*#__PURE__*/_react["default"].createElement("img", {
1246
1586
  src: item.url,
1247
1587
  alt: "sheet-".concat(item.index),
1248
1588
  style: {
@@ -1269,7 +1609,11 @@ function _default(props) {
1269
1609
  }, /*#__PURE__*/_react["default"].createElement(_olMap.Map, {
1270
1610
  width: "".concat(exportSize.width, "px"),
1271
1611
  height: "".concat(exportSize.height, "px"),
1272
- tk: "1adbb6e47668cb33757cd799548bf1f4",
1612
+ projection: inheritedMapProps.projection,
1613
+ mapStyle: inheritedMapProps.mapStyle,
1614
+ baseMapStyle: inheritedMapProps.baseMapStyle,
1615
+ dark: inheritedMapProps.dark,
1616
+ tk: inheritedMapProps.tk,
1273
1617
  hidePopupTable: true,
1274
1618
  createdMap: handleExportMapCreated
1275
1619
  }))));