components_openFile_react.html 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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_react"></title>
  9. <script type="text/javascript" include="react" 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%"></div>
  15. <div id="loading">....</div>
  16. <script type="text/babel">
  17. var map = L.map('map', {
  18. center: [38, 110],
  19. zoom: 5,
  20. });
  21. var host = window.isLocal ? window.server : "https://iserver.supermap.io";
  22. var url = host + '/iserver/services/map-china400/rest/maps/China';
  23. var baseLayers = L.supermap.tiledMapLayer(url).addTo(map);
  24. var layersControl = L.control.layers({"baseLayers": baseLayers}, {}, {"position": 'topleft'}).addTo(map);
  25. initEditView();
  26. function initEditView() {
  27. var infoView = L.control({position: 'topright'});
  28. infoView.onAdd = function () {
  29. var me = this;
  30. me._div = L.DomUtil.create('div', "component-openfile");
  31. //避免与"源码"控件重叠
  32. me._div.style["margin"] = "40px 4px 0px 0px";
  33. me._div.id = "addDataContainer";
  34. handleMapEvent(me._div, me._map);
  35. return me._div;
  36. };
  37. infoView.addTo(map);
  38. }
  39. function handleMapEvent(div, map) {
  40. if (!div || !map) {
  41. return;
  42. }
  43. div.addEventListener('mouseover', function () {
  44. map.dragging.disable();
  45. map.scrollWheelZoom.disable();
  46. map.doubleClickZoom.disable();
  47. });
  48. div.addEventListener('mouseout', function () {
  49. map.dragging.enable();
  50. map.scrollWheelZoom.enable();
  51. map.doubleClickZoom.enable();
  52. });
  53. }
  54. class AddData extends React.Component {
  55. constructor(props) {
  56. super(props);
  57. //功能组件
  58. this.openFileViewModel = props.openFileViewModel;
  59. this.messageBox = props.messageBox;
  60. this.layersControl = props.layersControl;
  61. this.fileSelectfn = this.openFileViewModel.readFile.bind(this.openFileViewModel);
  62. //监听vm 事件:
  63. this.openFileViewModel.on("filesizeexceed", this._messageListener.bind(this));
  64. this.openFileViewModel.on("errorfileformat", this._messageListener.bind(this));
  65. this.openFileViewModel.on("openfilefailed", this._messageListener.bind(this));
  66. this.openFileViewModel.on("readdatafail", this._messageListener.bind(this));
  67. this.openFileViewModel.on("openfilesucceeded", function (e) {
  68. var layer = L.geoJSON(e.result).addTo(map);
  69. map.flyToBounds(layer.getBounds());
  70. layersControl.addOverlay(layer, e.layerName);
  71. });
  72. }
  73. _messageListener(e) {
  74. this.messageBox.showView(e.message, e.messageType);
  75. }
  76. render() {
  77. return <div className="file-select">
  78. <label className="component-openfile__span--select" htmlFor="input_file">
  79. <div className="supermapol-icons-upload"/>
  80. <span className="component-openfile__span">{this.props.text}</span>
  81. </label>
  82. <input className="component-openfile__input" id="input_file" type="file"
  83. accept=".json,.geojson,.csv,.xlsx,.xls,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
  84. onChange={this.fileSelectfn}/>
  85. </div>
  86. }
  87. }
  88. var openFileViewModel = L.supermap.components.openFileViewModel(map);
  89. var messageBox = new SuperMap.Components.MessageBox();
  90. ReactDOM.render(
  91. <AddData openFileViewModel={openFileViewModel} messageBox={messageBox} text={resources.text_openFile}/>,
  92. document.getElementById('addDataContainer')
  93. );
  94. </script>
  95. </body>
  96. </html>