components_openFile_vue.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <!--********************************************************************
  2. * Copyright© 2000 - 2021 SuperMap Software Co.Ltd. All rights reserved.
  3. *********************************************************************-->
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title data-i18n="resources.title_openFile_vue"></title>
  9. <script type="text/javascript" include="vue" src="../js/include-web.js"></script>
  10. <script type="text/javascript" include="iclient-leaflet-css,xlsx"
  11. src="../../dist/leaflet/include-leaflet.js"></script>
  12. </head>
  13. <body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
  14. <div id="map" style="margin:0 auto;width: 100%;height: 100%">
  15. </div>
  16. <div id="loading">....</div>
  17. <script>
  18. var map = L.map('map', {
  19. center: [38, 110],
  20. zoom: 5,
  21. });
  22. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  23. var url = host + '/iserver/services/map-china400/rest/maps/China';
  24. var baseLayers = L.supermap.tiledMapLayer(url).addTo(map);
  25. var layersControl = L.control.layers({"baseLayers": baseLayers}, {}, {"position": 'topleft'}).addTo(map);
  26. var openFileViewModel = L.supermap.components.openFileViewModel(map);
  27. var messageBox = new SuperMap.Components.MessageBox();
  28. initEditView();
  29. function initEditView() {
  30. var infoView = L.control({position: 'topright'});
  31. infoView.onAdd = function () {
  32. var me = this;
  33. me._div = L.DomUtil.create('div', "component-openfile");
  34. me._div.id = "openFileContainer";
  35. //避免与"源码"控件重叠
  36. me._div.style["margin"] = "40px 4px 0px 0px";
  37. me._div.innerHTML = "<add_data v-bind:openFileViewModel='openFileViewModel' v-bind:messageBox='messageBox'></add_data>";
  38. handleMapEvent(me._div, me._map);
  39. return me._div;
  40. };
  41. infoView.addTo(map);
  42. }
  43. function handleMapEvent(div, map) {
  44. if (!div || !map) {
  45. return;
  46. }
  47. div.addEventListener('mouseover', function () {
  48. map.dragging.disable();
  49. map.scrollWheelZoom.disable();
  50. map.doubleClickZoom.disable();
  51. });
  52. div.addEventListener('mouseout', function () {
  53. map.dragging.enable();
  54. map.scrollWheelZoom.enable();
  55. map.doubleClickZoom.enable();
  56. });
  57. }
  58. var add_data = {
  59. props: ["openFileViewModel", "messageBox"],
  60. data: function () {
  61. return {
  62. text: resources.text_openFile
  63. }
  64. },
  65. template: [
  66. "<div class='file-select'>",
  67. "<label class='component-openfile__span--select' for='input_file'>",
  68. "<div class='supermapol-icons-upload'/>",
  69. "<span class='component-openfile__span'>{{text}}</span>",
  70. "</label>",
  71. "<input class='component-openfile__input' id='input_file' type='file'",
  72. "accept='.json,.geojson,.csv,.xlsx,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel'",
  73. "v-on:change='fileSelectfn(this, $event)'>",
  74. "</div>"
  75. ].join(""),
  76. methods: {
  77. fileSelectfn(self, e) {
  78. //绑定事件监听
  79. self.openFileViewModel.on("filesizeexceed", _messageListener.bind(self));
  80. self.openFileViewModel.on("errorfileformat", _messageListener.bind(self));
  81. self.openFileViewModel.on("openfilefailed", _messageListener.bind(self));
  82. self.openFileViewModel.on("readdatafail", _messageListener.bind(self));
  83. self.openFileViewModel.on("openfilesucceeded", function (e) {
  84. var layer = L.geoJSON(e.result).addTo(map);
  85. map.flyToBounds(layer.getBounds());
  86. layersControl.addOverlay(layer, e.layerName);
  87. });
  88. function _messageListener(e) {
  89. this.messageBox.showView(e.message, e.messageType);
  90. }
  91. self.openFileViewModel.readFile(e);
  92. },
  93. }
  94. };
  95. // 创建根实例
  96. new Vue({
  97. el: '#openFileContainer',
  98. data: {
  99. openFileViewModel: openFileViewModel,
  100. messageBox: messageBox
  101. },
  102. components: {
  103. 'add_data': add_data
  104. }
  105. });
  106. </script>
  107. </body>
  108. </html>