htc 2 месяцев назад
Сommit
5391dc36e9
100 измененных файлов с 308468 добавлено и 0 удалено
  1. 2 0
      .gitignore
  2. 15 0
      .hbuilderx/launch.json
  3. 4 0
      .idea/encodings.xml
  4. 6 0
      .idea/misc.xml
  5. 8 0
      .idea/modules.xml
  6. 6 0
      .idea/vcs.xml
  7. 12 0
      .idea/witcabonAPP.iml
  8. 618 0
      .idea/workspace.xml
  9. 80 0
      App.vue
  10. 33 0
      androidPrivacy.json
  11. 819 0
      components/mx-datepicker/mx-datepicker.vue
  12. 86 0
      components/t-table/t-table.vue
  13. 71 0
      components/t-table/t-td.vue
  14. 71 0
      components/t-table/t-th.vue
  15. 81 0
      components/t-table/t-tr.vue
  16. 18 0
      directive/permission.js
  17. 93 0
      http/Api.js
  18. 9 0
      http/baseApi.js
  19. 111 0
      http/index.js
  20. 120 0
      http/interface.js
  21. 112 0
      http/readme.md
  22. 20 0
      index.html
  23. 184 0
      js_sdk/ly-watermark/commons/watermark.js
  24. 69 0
      main.js
  25. 126 0
      manifest.json
  26. 312 0
      node_modules/echarts/KEYS
  27. 222 0
      node_modules/echarts/LICENSE
  28. 5 0
      node_modules/echarts/NOTICE
  29. 98 0
      node_modules/echarts/README.md
  30. BIN
      node_modules/echarts/asset/logo.png
  31. 183 0
      node_modules/echarts/build/addHeader.js
  32. 114 0
      node_modules/echarts/build/build-i18n.js
  33. 210 0
      node_modules/echarts/build/build.js
  34. 176 0
      node_modules/echarts/build/config.js
  35. 67 0
      node_modules/echarts/build/dev-fast.js
  36. 30 0
      node_modules/echarts/build/nightly/post.js
  37. 72 0
      node_modules/echarts/build/nightly/prepare.js
  38. 428 0
      node_modules/echarts/build/pre-publish.js
  39. 231 0
      node_modules/echarts/build/preamble.js
  40. 164 0
      node_modules/echarts/build/source-release/prepareReleaseMaterials.js
  41. 26 0
      node_modules/echarts/build/source-release/template/announce-release.tpl
  42. 44 0
      node_modules/echarts/build/source-release/template/vote-release.tpl
  43. 23 0
      node_modules/echarts/build/source-release/template/vote-result.tpl
  44. 20 0
      node_modules/echarts/build/template/charts.d.ts
  45. 27 0
      node_modules/echarts/build/template/charts.js
  46. 20 0
      node_modules/echarts/build/template/components.d.ts
  47. 20 0
      node_modules/echarts/build/template/components.js
  48. 20 0
      node_modules/echarts/build/template/core.d.ts
  49. 20 0
      node_modules/echarts/build/template/core.js
  50. 20 0
      node_modules/echarts/build/template/features.d.ts
  51. 20 0
      node_modules/echarts/build/template/features.js
  52. 20 0
      node_modules/echarts/build/template/option.d.ts
  53. 20 0
      node_modules/echarts/build/template/renderers.d.ts
  54. 20 0
      node_modules/echarts/build/template/renderers.js
  55. 75 0
      node_modules/echarts/build/testDts.js
  56. 58 0
      node_modules/echarts/build/transform-dev.js
  57. 20 0
      node_modules/echarts/charts.d.ts
  58. 27 0
      node_modules/echarts/charts.js
  59. 20 0
      node_modules/echarts/components.d.ts
  60. 20 0
      node_modules/echarts/components.js
  61. 20 0
      node_modules/echarts/core.d.ts
  62. 20 0
      node_modules/echarts/core.js
  63. 62469 0
      node_modules/echarts/dist/echarts.common.js
  64. 1 0
      node_modules/echarts/dist/echarts.common.js.map
  65. 45 0
      node_modules/echarts/dist/echarts.common.min.js
  66. 95673 0
      node_modules/echarts/dist/echarts.esm.js
  67. 1 0
      node_modules/echarts/dist/echarts.esm.js.map
  68. 45 0
      node_modules/echarts/dist/echarts.esm.min.js
  69. 95739 0
      node_modules/echarts/dist/echarts.js
  70. 1 0
      node_modules/echarts/dist/echarts.js.map
  71. 45 0
      node_modules/echarts/dist/echarts.min.js
  72. 45488 0
      node_modules/echarts/dist/echarts.simple.js
  73. 1 0
      node_modules/echarts/dist/echarts.simple.js.map
  74. 45 0
      node_modules/echarts/dist/echarts.simple.min.js
  75. 425 0
      node_modules/echarts/dist/extension/bmap.js
  76. 1 0
      node_modules/echarts/dist/extension/bmap.js.map
  77. 22 0
      node_modules/echarts/dist/extension/bmap.min.js
  78. 436 0
      node_modules/echarts/dist/extension/dataTool.js
  79. 1 0
      node_modules/echarts/dist/extension/dataTool.js.map
  80. 22 0
      node_modules/echarts/dist/extension/dataTool.min.js
  81. 248 0
      node_modules/echarts/extension-src/bmap/BMapCoordSys.ts
  82. 62 0
      node_modules/echarts/extension-src/bmap/BMapModel.ts
  83. 142 0
      node_modules/echarts/extension-src/bmap/BMapView.ts
  84. 84 0
      node_modules/echarts/extension-src/bmap/README.md
  85. 46 0
      node_modules/echarts/extension-src/bmap/bmap.ts
  86. 222 0
      node_modules/echarts/extension-src/dataTool/gexf.ts
  87. 42 0
      node_modules/echarts/extension-src/dataTool/index.ts
  88. 114 0
      node_modules/echarts/extension-src/dataTool/prepareBoxplotData.ts
  89. 273 0
      node_modules/echarts/extension/bmap/BMapCoordSys.js
  90. 76 0
      node_modules/echarts/extension/bmap/BMapModel.js
  91. 168 0
      node_modules/echarts/extension/bmap/BMapView.js
  92. 66 0
      node_modules/echarts/extension/bmap/bmap.js
  93. 233 0
      node_modules/echarts/extension/dataTool/gexf.js
  94. 61 0
      node_modules/echarts/extension/dataTool/index.js
  95. 123 0
      node_modules/echarts/extension/dataTool/prepareBoxplotData.js
  96. 20 0
      node_modules/echarts/features.d.ts
  97. 20 0
      node_modules/echarts/features.js
  98. 173 0
      node_modules/echarts/i18n/langCS-obj.js
  99. 169 0
      node_modules/echarts/i18n/langCS.js
  100. 0 0
      node_modules/echarts/i18n/langDE-obj.js

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+test.apk
+/unpackage/release/apk/__UNI__FF40C0C__20230327163324.apk

+ 15 - 0
.hbuilderx/launch.json

@@ -0,0 +1,15 @@
+{
+    "version" : "1.0",
+    "configurations" : [
+        {
+            "playground" : "standard",
+            "type" : "uni-app:app-android"
+        },
+        {
+            "app-plus" : {
+                "launchtype" : "local"
+            },
+            "type" : "uniCloud"
+        }
+    ]
+}

+ 4 - 0
.idea/encodings.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>

+ 6 - 0
.idea/misc.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/witcabonAPP.iml" filepath="$PROJECT_DIR$/.idea/witcabonAPP.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 12 - 0
.idea/witcabonAPP.iml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/temp" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 618 - 0
.idea/workspace.xml

@@ -0,0 +1,618 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="b14f9fe1-d3c3-496a-8ebb-4789fe400212" name="默认更改列表" comment="">
+      <change beforePath="$PROJECT_DIR$/.hbuilderx/launch.json" beforeDir="false" afterPath="$PROJECT_DIR$/.hbuilderx/launch.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/http/baseApi.js" beforeDir="false" afterPath="$PROJECT_DIR$/http/baseApi.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/manifest.json" beforeDir="false" afterPath="$PROJECT_DIR$/manifest.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages.json" beforeDir="false" afterPath="$PROJECT_DIR$/pages.json" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/index/Workordertodone/Toberepaired/Toberepaired.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/index/Workordertodone/Toberepaired/Toberepaired.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/index/Workordertodone/hasrepaired/hasrepaired.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/index/Workordertodone/hasrepaired/hasrepaired.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/login/Privacyagreement.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/login/Privacyagreement.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/login/login.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/login/login.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/login/register.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/login/register.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/pages/login/useragree.vue" beforeDir="false" afterPath="$PROJECT_DIR$/pages/login/useragree.vue" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-config-service.js" beforeDir="false" afterPath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-config-service.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-service.js" beforeDir="false" afterPath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-service.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-view.js" beforeDir="false" afterPath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/app-view.js" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/manifest.json" beforeDir="false" afterPath="$PROJECT_DIR$/unpackage/cache/wgt/__UNI__FF40C0C/manifest.json" afterDir="false" />
+    </list>
+    <ignored path="$PROJECT_DIR$/.tmp/" />
+    <ignored path="$PROJECT_DIR$/temp/" />
+    <ignored path="$PROJECT_DIR$/tmp/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/pages/Workorder/Remotecontrol/Remotecontrol.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="6750">
+              <caret line="230" column="35" selection-start-line="230" selection-start-column="27" selection-end-line="230" selection-end-column="35" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/pages/Workorder/Tenantbill/Tenantbill.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="270">
+              <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/pages/Workorder/Tenantbill/companybill/companybill.vue">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="279">
+              <caret line="250" column="59" selection-start-line="250" selection-start-column="51" selection-end-line="250" selection-end-column="59" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="JavaScript File" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>columnsrenyuan</find>
+      <find>Workorderdetails3</find>
+      <find>editdata</find>
+      <find>fileList1</find>
+      <find>uploadBox</find>
+      <find>uploadImg</find>
+      <find>class</find>
+      <find>newimg</find>
+      <find>confirmtype</find>
+      <find>columnstype</find>
+      <find>postdata</find>
+      <find>uploadPart</find>
+      <find>Workordertodone</find>
+      <find>srcxianshang1</find>
+      <find>kongbai</find>
+      <find>Homepage_suspension</find>
+      <find>tuichu</find>
+      <find>Homepage_header</find>
+      <find>managelind</find>
+      <find>managename</find>
+      <find>首页</find>
+      <find>mjname</find>
+      <find>sfkq</find>
+      <find>mjkg</find>
+      <find>Videosurveillance</find>
+      <find>asyncChange1</find>
+      <find>mjzt1</find>
+      <find>buttons</find>
+      <find>uni</find>
+      <find>dataList</find>
+    </findStrings>
+    <replaceStrings>
+      <replace>repairRegioncontactPerson</replace>
+    </replaceStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/pages/my/Mydistribution/distributionedit/distributionedit.vue" />
+        <option value="$PROJECT_DIR$/http/baseApi.js" />
+        <option value="$PROJECT_DIR$/utils/qrcode.js" />
+        <option value="$PROJECT_DIR$/pages/index/BillPending/BillPending.vue" />
+        <option value="$PROJECT_DIR$/pages/index/EquipmentException/EquipmentException.vue" />
+        <option value="$PROJECT_DIR$/pages/my/Personalinformation/Personalinformation.vue" />
+        <option value="$PROJECT_DIR$/pages/my/Personalinformation/Informationmodification/Informationmodification.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Workordertodone/hasrepaired/hasrepaired.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Workordertodone/Workordertodone.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Onlinewarranty/Onlinewarranty.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Inspectionrecord/Inspectionrecord.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Withholdingrecord/Withholdingrecord.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Immediateinspection/Immediateinspection.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Immediatecollection/Chargedetails/Chargedetails.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Immediatecollection/Immediatecollection.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Workordertodone/Workorderdetails/Workorderdetails.vue" />
+        <option value="$PROJECT_DIR$/pages/index/Workordertodone/Toberepaired/Toberepaired.vue" />
+        <option value="$PROJECT_DIR$/pages/index/index.vue" />
+        <option value="$PROJECT_DIR$/pages/login/login.vue" />
+        <option value="$PROJECT_DIR$/pages/my/my.vue" />
+        <option value="$PROJECT_DIR$/uni.scss" />
+        <option value="$PROJECT_DIR$/pages.json" />
+        <option value="$PROJECT_DIR$/pages/Workorder/Workorder.vue" />
+        <option value="$PROJECT_DIR$/pages/Workorder/AccessControl/AccessControl.vue" />
+        <option value="$PROJECT_DIR$/manifest.json" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="x" value="1913" />
+    <option name="y" value="2" />
+    <option name="width" value="1932" />
+    <option name="height" value="1045" />
+  </component>
+  <component name="ProjectLevelVcsManager">
+    <ConfirmationsSetting value="1" id="添加" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="directive" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="http" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Arrearsrecord" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Intelligentdoorlock" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Intelligentdoorlock" type="462c0819:PsiDirectoryNode" />
+              <item name="Dooropeningrecord" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Intelligentdoorlock" type="462c0819:PsiDirectoryNode" />
+              <item name="Tenantdetails" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Remotecontrol" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Tenantbill" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="pages" type="462c0819:PsiDirectoryNode" />
+              <item name="Workorder" type="462c0819:PsiDirectoryNode" />
+              <item name="Tenantbill" type="462c0819:PsiDirectoryNode" />
+              <item name="companybill" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="双碳APP" type="b2602c69:ProjectViewProjectNode" />
+              <item name="双碳APP" type="462c0819:PsiDirectoryNode" />
+              <item name="utils" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+    <property name="nodejs_package_manager_path" value="npm" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="b14f9fe1-d3c3-496a-8ebb-4789fe400212" name="默认更改列表" comment="" />
+      <created>1680248385794</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1680248385794</updated>
+      <workItem from="1680248387431" duration="1978000" />
+      <workItem from="1680571981170" duration="1053000" />
+      <workItem from="1680939102464" duration="5415000" />
+      <workItem from="1681086898029" duration="593000" />
+      <workItem from="1681105513481" duration="9579000" />
+      <workItem from="1681172833354" duration="23497000" />
+      <workItem from="1681258597059" duration="12277000" />
+      <workItem from="1681345236598" duration="1191000" />
+      <workItem from="1681432005487" duration="594000" />
+      <workItem from="1681691706962" duration="1414000" />
+      <workItem from="1681776390439" duration="13917000" />
+      <workItem from="1681862208704" duration="24333000" />
+      <workItem from="1682035999607" duration="2001000" />
+      <workItem from="1682208706300" duration="592000" />
+      <workItem from="1682296331955" duration="593000" />
+      <workItem from="1682382351913" duration="595000" />
+      <workItem from="1682468371664" duration="591000" />
+      <workItem from="1682554138603" duration="592000" />
+      <workItem from="1682641765071" duration="593000" />
+      <workItem from="1683160641474" duration="594000" />
+      <workItem from="1683265707499" duration="595000" />
+      <workItem from="1683332933669" duration="593000" />
+      <workItem from="1683364463682" duration="61000" />
+      <workItem from="1683505747555" duration="593000" />
+      <workItem from="1683594601602" duration="595000" />
+      <workItem from="1683852687927" duration="250000" />
+      <workItem from="1683880139423" duration="549000" />
+      <workItem from="1694136155539" duration="54000" />
+      <workItem from="1696897994141" duration="1666000" />
+      <workItem from="1697178000799" duration="203000" />
+      <workItem from="1698114744785" duration="45000" />
+      <workItem from="1698129213286" duration="636000" />
+      <workItem from="1698303813553" duration="608000" />
+      <workItem from="1710415419678" duration="165000" />
+      <workItem from="1710558035957" duration="594000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="109199000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="1912" y="-8" width="1936" height="1056" extended-state="6" />
+    <editor active="true" />
+    <layout>
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.25" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Favorites" order="2" side_tool="true" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="bottom" id="Run" order="2" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Version Control" order="8" />
+      <window_info anchor="bottom" id="Terminal" order="9" />
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
+      <window_info anchor="bottom" id="调试" order="11" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/pages/index/BillPending/BillPending.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="489">
+          <caret line="446" lean-forward="true" selection-start-line="446" selection-end-line="446" />
+          <folding>
+            <element signature="n#style#0;n#view#1;n#view#1;n#view#0;n#template#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#span#0;n#view#1;n#view#1;n#view#0;n#template#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#view#2;n#view#0;n#u-popup#0;n#view#0;n#template#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#view#2;n#view#0;n#u-popup#1;n#view#0;n#template#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/my/Mydistribution/distributionedit/distributionedit.vue" />
+    <entry file="file://$PROJECT_DIR$/pages/index/EquipmentException/EquipmentException.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="549">
+          <caret line="185" column="30" selection-start-line="185" selection-start-column="30" selection-end-line="185" selection-end-column="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/my/Personalinformation/Informationmodification/Informationmodification.vue" />
+    <entry file="file://$PROJECT_DIR$/pages/my/Personalinformation/Personalinformation.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="390">
+          <caret line="28" column="29" selection-start-line="24" selection-start-column="8" selection-end-line="28" selection-end-column="29" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Inspectionrecord/Inspectionrecord.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="259" column="23" selection-start-line="259" selection-start-column="12" selection-end-line="259" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Withholdingrecord/Withholdingrecord.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="423">
+          <caret line="44" column="54" selection-start-line="44" selection-start-column="54" selection-end-line="44" selection-end-column="54" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Immediatecollection/Chargedetails/Chargedetails.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="62" column="37" lean-forward="true" selection-start-line="62" selection-start-column="37" selection-end-line="62" selection-end-column="37" />
+          <folding>
+            <element signature="n#style#0;n#span#0;n#view#0;n#view#0;n#view#0;n#template#0;n#!!top" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Onlinewarranty/Onlinewarranty.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="119">
+          <caret line="293" column="14" selection-start-line="293" selection-start-column="14" selection-end-line="293" selection-end-column="14" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Workordertodone/Workorderdetails/Workorderdetails.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="339">
+          <caret line="45" column="90" selection-start-line="45" selection-start-column="60" selection-end-line="45" selection-end-column="90" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Workordertodone/hasrepaired/hasrepaired.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="510">
+          <caret line="68" column="19" selection-start-line="68" selection-start-column="19" selection-end-line="68" selection-end-column="19" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Workordertodone/Toberepaired/Toberepaired.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="369">
+          <caret line="61" column="55" selection-start-line="61" selection-start-column="31" selection-end-line="61" selection-end-column="55" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Immediateinspection/Immediateinspection.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="144">
+          <caret line="146" column="55" selection-start-line="146" selection-start-column="41" selection-end-line="146" selection-end-column="55" />
+          <folding>
+            <element signature="n#style#0;n#view#0;n#view#3;n#view#0;n#template#0;n#!!top" expanded="true" />
+            <element signature="n#style#0;n#span#0;n#view#0;n#view#3;n#view#0;n#template#0;n#!!top" expanded="true" />
+            <element signature="e#1561#1611#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Workorder.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1209">
+          <caret line="124" column="32" lean-forward="true" selection-start-line="124" selection-start-column="32" selection-end-line="124" selection-end-column="32" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/AccessControl/AccessControl.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="22" column="85" selection-start-line="22" selection-start-column="78" selection-end-line="22" selection-end-column="85" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Immediatecollection/Immediatecollection.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="56" lean-forward="true" selection-end-line="443" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/http/interface.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="180">
+          <caret line="6" column="17" selection-start-line="6" selection-start-column="17" selection-end-line="6" selection-end-column="17" />
+          <folding>
+            <element signature="e#0#39#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/http/Api.js">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/http/baseApi.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state>
+          <caret column="62" selection-start-column="17" selection-end-column="62" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/directive/permission.js">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/manifest.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2430">
+          <caret line="12" column="26" selection-start-line="12" selection-start-column="26" selection-end-line="12" selection-end-column="26" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/utils/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-450">
+          <caret line="27" column="52" lean-forward="true" selection-start-line="27" selection-start-column="52" selection-end-line="27" selection-end-column="52" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/utils/qrcode.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="7659">
+          <caret line="411" column="38" selection-start-line="411" selection-start-column="29" selection-end-line="411" selection-end-column="38" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/package.json">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/uni.scss">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1470">
+          <caret line="49" selection-start-line="51" selection-start-column="2" selection-end-line="53" selection-end-column="3" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/index.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="6690">
+          <caret line="223" column="16" selection-start-line="223" selection-start-column="16" selection-end-line="223" selection-end-column="16" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/http/index.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="300">
+          <caret line="10" column="25" selection-start-line="10" selection-start-column="25" selection-end-line="10" selection-end-column="25" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/main.js">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="360">
+          <caret line="38" selection-start-line="38" selection-end-line="40" selection-end-column="35" />
+          <folding>
+            <element signature="e#120#660#0" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/my/my.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="3450">
+          <caret line="115" column="114" selection-start-line="115" selection-start-column="114" selection-end-line="115" selection-end-column="114" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/login/login.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="4020">
+          <caret line="134" column="23" selection-start-line="134" selection-start-column="23" selection-end-line="134" selection-end-column="23" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages.json">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="744">
+          <caret line="47" column="13" selection-start-line="44" selection-start-column="12" selection-end-line="47" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/my/Myorder/Myorder.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="81" column="24" selection-start-line="81" selection-start-column="16" selection-end-line="81" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/index/Workordertodone/Workordertodone.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="113" column="41" selection-start-line="113" selection-start-column="33" selection-end-line="113" selection-end-column="41" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Intelligentdoorlock/Dooropeningrecord/Dooropeningrecord.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="39" column="24" selection-start-line="39" selection-start-column="16" selection-end-line="39" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Intelligentdoorlock/Intelligentdoorlock.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="42" column="24" selection-start-line="42" selection-start-column="16" selection-end-line="42" selection-end-column="24" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Arrearsrecord/Arrearsrecord.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="129" column="67" selection-start-line="129" selection-start-column="59" selection-end-line="129" selection-end-column="67" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Intelligentdoorlock/Tenantdetails/Tenantdetails.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-450" />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Remotecontrol/Remotecontrol.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="6750">
+          <caret line="230" column="35" selection-start-line="230" selection-start-column="27" selection-end-line="230" selection-end-column="35" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Tenantbill/Tenantbill.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="270">
+          <caret line="9" column="34" selection-start-line="9" selection-start-column="34" selection-end-line="9" selection-end-column="34" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pages/Workorder/Tenantbill/companybill/companybill.vue">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="279">
+          <caret line="250" column="59" selection-start-line="250" selection-start-column="51" selection-end-line="250" selection-end-column="59" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+</project>

+ 80 - 0
App.vue

@@ -0,0 +1,80 @@
+
+<script>
+	
+
+//	window.SITE_CONFIG = {};
+//	window.SITE_CONFIG["dictList"] = JSON.parse(localStorage.getItem('dictList'))||[];
+//	import Api from "./@/http/Api.js";
+	export default {
+		data() {
+			return {
+			//	globalData: {},
+		
+			}
+		},
+		methods:{
+			// getDictAll() {
+			//   Api.getDictList().then((res) => {
+			// 	  console.log(res.data)
+			//     window.SITE_CONFIG["dictList"] = res.data.data;
+			// 	localStorage.setItem("dictList",JSON.stringify(res.data.data));
+			//   });
+			// },
+		
+			
+		},
+		onLaunch: function() {
+			
+			
+		//	this.getDictAll();
+			// 获取字典列表, 添加并全局变量保存
+		},
+		onShow: function() {
+			
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style lang="scss">
+	/*每个页面公共css */
+	@import "@/uni_modules/uview-ui/index.scss";
+	*{box-sizing: border-box;}
+	  uni-page-body,html,body{  
+	        height: 100%; 
+			 width: 750rpx;
+			 background: #F6F6F6;
+	    }  
+		.u-button--primary{background-color: #5776E6;}
+		.uni-input-placeholder{text-align: right;}
+		.ml5{margin-left:10rpx;}
+		
+		.contain{
+			height: 100%;
+			padding-bottom: 120rpx;
+			padding-top: 24rpx;
+			overflow-y: auto;
+			.main{
+				padding: 0 32rpx;
+				background-color: #fff;
+			}
+			.tijiao {
+				position: fixed;
+				width: 100%;
+				bottom: 0;
+				left: 0;
+				background-color: #fff;
+				padding: 16rpx 32rpx;
+				box-sizing: border-box;
+				box-shadow: 0 -6px 12px 0 rgba(153, 153, 153, 0.10);
+			}
+			.u-cell__value{
+				color: #333!important;
+			}
+			
+		}
+		
+</style>
+

+ 33 - 0
androidPrivacy.json

@@ -0,0 +1,33 @@
+{
+    "version" : "2",
+    "prompt" : "template",
+    "title" : "用户协议和隐私政策",
+    "message" : "请你务必审慎阅读、充分理解“用户协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"./static/useragree.html\">《用户协议》</a>和<a href=\"./static/privacy.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
+    "buttonAccept" : "同意并接受",
+    "buttonRefuse" : "暂不同意",
+    "second" : {
+        "title" : "确认提示",
+        "message" : "  进入应用前,你需先同意<a href=\"./static/useragree.html\">《用户协议》</a>和<a href=\"./static/privacy.html\">《隐私政策》</a>,否则将退出应用。",
+        "buttonAccept" : "同意并继续",
+        "buttonRefuse" : "退出应用"
+    },
+    "styles" : {
+        "backgroundColor" : "#ffffff",
+        "borderRadius" : "5px",
+        "title" : {
+            "color" : "#000000",
+            "fontSize" : "32rpx"
+        },
+        "message" : {
+            "fontSize" : "26rpx"
+        },
+        "buttonAccept" : {
+            "color" : "#5cb26f",
+            "fontSize" : "28rpx"
+        },
+        "buttonRefuse" : {
+            "color" : "#606266",
+            "fontSize" : "28rpx"
+        }
+    }
+}

Разница между файлами не показана из-за своего большого размера
+ 819 - 0
components/mx-datepicker/mx-datepicker.vue


+ 86 - 0
components/t-table/t-table.vue

@@ -0,0 +1,86 @@
+<template>
+	<view class="t-table" :style="{ 'border-width': border + 'px', 'border-color': borderColor }">
+		<slot />
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			border: {
+				type: String,
+				default: '1'
+			},
+			borderColor: {
+				type: String,
+				default: '#d0dee5'
+			},
+			isCheck: {
+				type: Boolean,
+				default: false
+			}
+		},
+		provide() {
+			return {
+				table: this
+			};
+		},
+		data() {
+			return {};
+		},
+		created() {
+			this.childrens = [];
+			this.index = 0;
+		},
+		methods: {
+			fire(e, index, len) {
+				let childrens = this.childrens;
+				console.log(childrens);
+				// 全选
+				if (index === 0) {
+					childrens.map((vm, index) => {
+						vm.checkboxData.checked = e;
+						return vm;
+					});
+				} else {
+					let isAll = childrens.find((n, ids) => ids !== 0 && !n.checkboxData.checked);
+					childrens[0].checkboxData.checked = isAll ? false : true;
+				}
+
+				let fireArr = [];
+				for (let i = 0; i < childrens.length; i++) {
+					if (childrens[i].checkboxData.checked && i !== 0) {
+						fireArr.push(childrens[i].checkboxData.value - 1);
+					}
+				}
+				this.$emit('change', {
+					detail: fireArr
+				});
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	.t-table {
+		width: 100%;
+		border: 1px #d0dee5 solid;
+		border-left: none;
+		border-top: none;
+		box-sizing: border-box;
+	}
+
+	.t-table>>>t-tr {
+		display: flex;
+	}
+
+	.t-table>>>t-tr:nth-child(2n) {
+		background: #f5f5f5;
+	}
+
+	/* #ifdef H5 */
+	.t-table>>>.t-tr:nth-child(2n) {
+		background: #f5f5f5;
+	}
+	/* #endif */
+</style>

+ 71 - 0
components/t-table/t-td.vue

@@ -0,0 +1,71 @@
+<template>
+	<view class="t-td" :style="{ 'border-width': thBorder + 'px','border-color':borderColor ,'font-size':fontSize+'px' ,'color':color,'justify-content':tdAlignCpd}">
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			align: String
+		},
+		data() {
+			return {
+				thBorder: '1',
+				borderColor: '#d0dee5',
+				fontSize: '14',
+				color: '#555c60',
+				tdAlign: 'center'
+			};
+		},
+		inject: ['table', 'tr'],
+
+		created() {
+			this.thBorder = this.table.border;
+			this.borderColor = this.table.borderColor;
+			this.fontSize = this.tr.fontSize;
+			this.color = this.tr.color;
+			if (this.align) {
+				this.tdAlign = this.align;
+			} else {
+				this.tdAlign = this.tr.align
+			}
+		},
+		computed: {
+			tdAlignCpd() {
+				let nameAlign = '';
+				switch (this.tdAlign) {
+					case 'left':
+						nameAlign = 'flex-start'
+						break;
+					case 'center':
+						nameAlign = 'center'
+						break;
+					case 'right':
+						nameAlign = 'flex-end'
+						break;
+					default:
+						nameAlign = 'center'
+						break;
+				}
+				return nameAlign
+			}
+		}
+	};
+</script>
+
+<style>
+	.t-td {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		width: 100%;
+		padding: 14upx;
+		border-top: 1px #d0dee5 solid;
+		border-left: 1px #d0dee5 solid;
+		text-align: center;
+		color: #697081;
+		font-size: 24upx;
+
+	}
+</style>

+ 71 - 0
components/t-table/t-th.vue

@@ -0,0 +1,71 @@
+<template>
+	<view class="t-th" :style="{ 'border-width': thBorder + 'px' ,'border-color':borderColor,'font-size':fontSize+'px' ,'color':color,'justify-content':thAlignCpd}">
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			align: String,
+		},
+		data() {
+			return {
+				thBorder: '1',
+				borderColor: '#d0dee5',
+				fontSize: '15',
+				color: '#3b4246',
+				thAlign: 'center'
+			};
+		},
+		inject: ['table', 'tr'],
+
+		created() {
+			this.thBorder = this.table.border;
+			this.borderColor = this.table.borderColor;
+			this.fontSize = this.tr.fontSize;
+			this.color = this.tr.color;
+			if (this.align) {
+				this.thAlign = this.align;
+			} else {
+				this.thAlign = this.tr.align
+			}
+		},
+
+		computed: {
+			thAlignCpd() {
+				let nameAlign = '';
+				switch (this.thAlign) {
+					case 'left':
+						nameAlign = 'flex-start'
+						break;
+					case 'center':
+						nameAlign = 'center'
+						break;
+					case 'right':
+						nameAlign = 'flex-end'
+						break;
+					default:
+						nameAlign = 'center'
+						break;
+				}
+				return nameAlign
+			}
+		}
+	};
+</script>
+
+<style>
+	.t-th {
+		flex: 1;
+		display: flex;
+		align-items: center;
+		font-size: 25upx;
+		font-weight: bold;
+		text-align: center;
+		color: #9DA0AC;
+		border-left: 1px #d0dee5 solid;
+		border-top: 1px #d0dee5 solid;
+		padding: 15upx;
+	}
+</style>

+ 81 - 0
components/t-table/t-tr.vue

@@ -0,0 +1,81 @@
+<template>
+	<view class="t-tr">
+		<view v-if="isCheck" class="t-check-box" :style="{ 'border-width': thBorder + 'px' ,'border-color':borderColor}">
+			<checkbox-group @change="checkboxChange">
+				<checkbox :value="checkboxData.value + ''" :checked="checkboxData.checked" />
+			</checkbox-group>
+		</view>
+		<slot></slot>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			fontSize: String,
+			color: String,
+			align: String
+		},
+		inject: ['table'],
+		provide() {
+			return {
+				tr: this
+			};
+		},
+		data() {
+			return {
+				isCheck: false,
+				checkboxData: {
+					value: 0,
+					checked: false
+				},
+				checked: false,
+				thBorder: '1',
+				borderColor: '#d0dee5'
+			};
+		},
+		created() {
+			this.thBorder = this.table.border;
+			this.borderColor = this.table.borderColor;
+			this.table.childrens.push(this);
+			this.checkboxData.value = this.table.index++;
+			this.isCheck = this.table.isCheck;
+
+		},
+		methods: {
+			checkboxChange(e) {
+				this.checkboxData.checked = !this.checkboxData.checked;
+				this.table.childrens[this.checkboxData.value] = this;
+				this.table.fire(e.detail.value[0] ? true : false, this.checkboxData.value, this.table.index);
+			}
+		}
+	};
+</script>
+
+<style>
+	.t-tr {
+		width: 100%;
+		display: flex;
+	}
+
+	.t-tr t-th,
+	.t-tr t-td {
+		display: flex;
+		flex: 1;
+	}
+
+	.t-tr .t-check-box {
+		flex-shrink: 0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		width: 80upx;
+		color: #3b4246;
+		border-left: 1px #d0dee5 solid;
+		border-top: 1px #d0dee5 solid;
+	}
+
+	.t-tr .t-check-box checkbox {
+		transform: scale(0.8);
+	}
+</style>

+ 18 - 0
directive/permission.js

@@ -0,0 +1,18 @@
+//先获取本地权限数据 permissions 
+let btnPermission = (data) => {
+	//  console.log('999999999',uni.getStorageSync('ButtonPermissions'))
+	  // uni.getStorage({
+	  // 	key: 'ButtonPermissions',
+	  // 	success: function (res) {
+	  // 		console.log(res.data);
+			
+			// let permissions = res.data;
+			// let isHave = permissions.includes(data);
+			// return isHave;
+	  // 	}
+	  // });
+	let permissions = uni.getStorageSync('ButtonPermissions');
+	let isHave = permissions.includes(data);
+	return isHave;
+}
+export default btnPermission;

+ 93 - 0
http/Api.js

@@ -0,0 +1,93 @@
+import $api from '@/http/index.js'
+export default {
+
+    //账号密码登录
+    loginByPwd: (params) => $api.post("/login", params),
+
+    //用户信息
+    getUserInfo: (params) => $api.get("/user/userInfo", params),
+
+    //修改密码
+    updatePwd: (params) => $api.put("/user/password", params),
+
+    //数据字典
+    getDictList: (params) => $api.get("/all",params),
+
+    //首页信息
+    homeData: (params) => $api.get("/home/homedata", params),
+
+    // 获取空间树
+    getBuildInfo: (params) => $api.get("/control/getOrgStructureTree",params),
+
+    //上传图片
+    uploadFile: (params) => $api.post("/uploadFile", params, { header: { "Content-Type": "multipart/form-data" } }),
+
+    //空调设备控制分页
+    airconditioner: (params) => $api.get("/airconditioner/page", params),
+
+    //电表控制分页
+    getElec: (params) => $api.get("/relay/control/page", params),
+
+    //一键开闸关闸
+    elecControl: (params) => $api.post("/relay/control/command", params),
+
+    //空调下发指令
+    setControl: (params) => $api.post("/airconditioner/command", params),
+
+    //继电器下发指令
+    setControlElec: (params) => $api.post("/relay/control/command", params),
+
+    //工单维修--列表
+    repairList: (params) => $api.get("/repairorder/page", params),
+
+    //工单维修--详情
+    repairDetail: (id) => $api.get(`/repairorder/${id}`),
+
+    //工单维修--保存
+    repairSave: (params) => $api.post("/repairorder", params),
+
+    //工单维修--指派
+    repairDispatch: (params) => $api.put('/repairorder', params),
+
+    //工单维修--完成
+    repairFinish: (id) => $api.post(`/repairorder/finish/${id}`),
+
+    //工单维修--联系人列表
+    repairUserList: (params) => $api.get('/user/list',params),
+
+    // 设备异常--列表
+    deviceAlarmList: (params) => $api.get("/home/actualAlertList",params),
+
+    // 欠费待收--列表
+    lackFeeList: (params) => $api.get("/expeditrecordpage",params),
+
+    // 欠费待收--详情
+    lackFeeDetail: (params) => $api.get("/expeditrecord/recordpage",params),
+
+    // 欠费待收--催费
+    lackFeePay: (params) => $api.post("/expeditrecord/charge", params),
+
+    //扣缴记录
+    reduceRecordList: (params) => $api.get("/payrecord/page",params),
+
+    //租户账单
+    rentBillList: (params) => $api.get("/billinfo/paypage",params),
+
+    //租户账单明细--列表
+    rentBillDetail: (params) => $api.post("/billinfo/billDetail", params),
+
+    //获取缴费账户
+    getTenantAccount: (params) => $api.get(`/accountinfo/detail/${params}`),
+
+    //预存缴费
+    tenantPay: (params) => $api.post('/accountinfo/pay', params),
+
+    //立即支付
+    billPay: (params) => $api.post('/billinfo/billPay', params),
+
+    //巡检记录
+    reviewList: (params) => $api.get("/circuitrecord/page",params),
+
+    //巡检记录--打卡
+    reviewClock: (params) => $api.post("/circuitrecord", params),
+}

+ 9 - 0
http/baseApi.js

@@ -0,0 +1,9 @@
+const BaseApi = 'http://gpu.ringzle.com:8082/witcarbon-app/app'
+//严工
+//const BaseApi = 'http://192.168.1.2:9013/witcarbon-app/app'
+
+
+
+export {
+	BaseApi
+}

+ 111 - 0
http/index.js

@@ -0,0 +1,111 @@
+import http from './interface'
+
+ 
+  
+export const $http = (url, method, data, json) => {
+	//设置请求前拦截器
+	http.interceptor.request = (config) => {
+		uni.showLoading({
+			title:'加载中...'
+		})
+		config.header = {
+			'content-type': json ? 'application/json' : 'application/x-www-form-urlencoded',
+			"token": uni.getStorageSync('tokendata'),
+			
+		}
+	}
+	//设置请求结束后拦截器
+	http.interceptor.response = async (response) => {
+		//判断返回状态 执行相应操作
+		uni.hideLoading()
+		// 请根据后端规定的状态码判定
+		//  console.log('111111111111111111',response)
+		if (response.data.code === 300) {//token失效
+		
+		//	return response.data = await doRequest(response, url)//动态刷新token,并重新完成request请求
+		}else{
+			if(response.data.code==10021&&response.data.msg){
+				uni.showToast({
+					title:response.data.msg,
+					icon:'none',
+					duration:1500
+				})
+			}
+		}
+
+		return response;
+	}
+	return http.request({
+		method: method,
+		url: url,
+		dataType: 'json',
+		data,
+	})
+}
+
+// async function login() {
+// 	//返回环宇token所需的login code
+// 	return new Promise(resolve => {
+// 		uni.login({
+// 			provider: 'weixin',
+// 			success(loginRes) {
+// 				resolve(loginRes.code)
+// 			},
+// 			fail() {}
+// 		});
+// 	})
+// }
+
+// async function doRequest(response, url) {
+// 	//var code = await login()
+// 	var res = await get('/v1/oauth/refreshToken/code/'+code, {})
+// 	if (res && res.data.data.token) {
+// 		let config = response.config
+// 		uni.setStorageSync("token", res.data.data.token);
+// 		config.header['Authorization'] = res.data.data.token
+// 		let json = config.header["Content-Type"] === 'application/json'
+// 		const resold = await $http(url, config.method, {
+// 			...config.data
+// 		}, json)
+// 		return resold
+// 	} else {
+// 		uni.clearStorage()
+// 		uni.showToast({
+// 			title: "授权失效,请重新登录",
+// 			duration: 1000,
+// 		})
+// 		uni.navigateTo({
+// 			url: '/pages/login/auth'
+// 		})
+// 		return false
+// 	}
+// }
+
+function postJson(url, data) {
+	return $http(url, 'POST', data)
+}
+
+function get(url, data) {
+	
+	return $http(url, 'GET', data, true)
+}
+
+function post(url, data) {
+	return $http(url, 'POST', data, true)
+}
+
+function put(url, data) {
+	return $http(url, 'PUT', data, true)
+}
+
+function del(url, data) {
+	return $http(url, 'DELETE', data, true)
+}
+
+export default {
+	postJson,
+	get,
+	post,
+	put,
+	del
+}

+ 120 - 0
http/interface.js

@@ -0,0 +1,120 @@
+import {
+	BaseApi
+} from './baseApi.js'
+export default {
+	config: {
+		baseUrl: BaseApi,
+		header: {
+			'Content-Type':'application/json;charset=UTF-8',
+			'Content-Type':'application/x-www-form-urlencoded'
+		},  
+		data: {},
+		method: "GET",
+		dataType: "json",  /* 如设为json,会对返回的数据做一次 JSON.parse */
+		responseType: "text",
+		success() {},
+		fail() {},
+		complete() {}
+	},
+	interceptor: {
+		request: null,
+		response: null
+	},
+	request(options) {
+		if (!options) {
+			options = {}
+		}
+		options.baseUrl = options.baseUrl || this.config.baseUrl
+		options.dataType = options.dataType || this.config.dataType
+		options.url = options.baseUrl + options.url
+		options.data = options.data || {}
+		options.method = options.method || this.config.method
+		
+		return new Promise((resolve, reject) => {
+			let _config = null
+			
+			options.complete = (response) => {
+				let statusCode = response.statusCode
+				response.config = _config
+				if (process.env.NODE_ENV === 'development') {
+					if (statusCode === 200) {
+						////console.log("【" + _config.requestId + "】 结果:" + JSON.stringify(response.data))
+					}
+				}
+				if (this.interceptor.response) {
+					
+					let newResponse = this.interceptor.response(response)
+					if (newResponse) {
+						response = newResponse
+					}
+				}
+				// 统一的响应日志记录
+				//_reslog(response)
+				if (statusCode === 200) { //成功
+					resolve(response);
+				} else {
+					reject(response)
+				}
+			}
+
+			_config = Object.assign({}, this.config, options)
+			_config.requestId = new Date().getTime()
+
+			if (this.interceptor.request) {
+				this.interceptor.request(_config)
+			}
+			
+			// 统一的请求日志记录
+			//_reqlog(_config)
+
+			if (process.env.NODE_ENV === 'development') {
+				//console.log("【" + _config.requestId + "】 地址:" + _config.url)
+				if (_config.data) {
+					//console.log("【" + _config.requestId + "】 参数:" + JSON.stringify(_config.data))
+				}
+			}
+
+			uni.request(_config);
+		});
+	}	
+}
+
+
+/**
+ * 请求接口日志记录
+ */
+function _reqlog(req) {
+	if (process.env.NODE_ENV === 'development') {
+		//console.log("【" + req.requestId + "】 地址:" + req.url)
+		if (req.data) {
+			//console.log("【" + req.requestId + "】 请求参数:" + JSON.stringify(req.data))
+		}
+	}
+	//TODO 调接口异步写入日志数据库
+}
+
+/**
+ * 响应接口日志记录
+ */
+function _reslog(res) {
+	let _statusCode = res.statusCode;
+	if (process.env.NODE_ENV === 'development') {
+		//console.log("【" + res.config.requestId + "】 地址:" + res.config.url)
+		if (res.config.data) {
+			//console.log("【" + res.config.requestId + "】 请求参数:" + JSON.stringify(res.config.data))
+		}
+		//console.log("【" + res.config.requestId + "】 响应结果:" + JSON.stringify(res))
+	}
+	//TODO 除了接口服务错误外,其他日志调接口异步写入日志数据库
+	switch(_statusCode){
+		case 200:
+			break;
+		case 401:
+			break;
+		case 404:
+			break;
+		default:
+			break;
+	}
+}
+

+ 112 - 0
http/readme.md

@@ -0,0 +1,112 @@
+**插件使用说明**
+
+- 基于 Promise 对象实现更简单的 request 使用方式,支持请求和响应拦截
+- 下载后把 http 文件夹 copy 到项目根目录下
+
+## 1. 配置 
+
+### 1.1 全局配置修改(修改http/baseApi.js中BaseApi和http/index.js中相关配置)
+	
+### 1.2 具体接口调用时修改(在http/index.js文件中具体业务接口中配置)
+``` javascript
+//设置token和content-type(区分json对象传输和formData传输)
+http.interceptor.request = (config) => {
+		config.header = {
+			'content-type': json ? 'application/json' : 'application/x-www-form-urlencoded',
+			"Authorization": uni.getStorageSync('token')
+		}
+	}
+//设置请求结束后拦截器
+	http.interceptor.response = async (response) => {
+		//判断返回状态 执行相应操作
+			if(response.data.code===401){//执行token过期的操作
+				return response.data = await doRequest(response,url)
+			}
+		return response;
+	}
+//配置刷新token的接口
+	var res=await postJson('/v1/miniprogram/oauth/wechat/refreshToken',{code:code})
+```	
+### 1.3 封装具体的业务请求(在http/index.js文件中具体业务接口中配置)
+``` javascript
+function postJson(url, data) {
+	return $http(url, 'POST', data)
+}
+function get(url, data) {
+	return $http(url, 'GET', data)
+}
+
+function post(url, data) {
+	return $http(url, 'POST', data, true)
+}
+
+function put(url, data) {
+	return $http(url, 'PUT', data, true)
+}
+
+function del(url,data){
+	return $http(url, 'DELETE', data, true)
+}
+``` 
+## 2. 使用
+
+### 2.1 全局使用(在main.js注册)
+
+``` //  main.js
+  import api from '@/http/'
+	
+	// 全局挂载后使用
+	Vue.prototype.$api = api
+```
+
+``` // pages/index/index.vue
+
+<template>
+	<view class="content">
+		测试api
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		onLoad(option) {
+			this.test()
+		},
+		methods: {
+			// 方式一
+			test(){
+							this.$api.get('/v1/miniprogram/device/'+'21040011515')
+							.then(res=>{
+								this.name = res.data.data.clazz_name
+							})
+						}
+			
+			//方式二
+			async test(){
+							let res = await this.$api.get('/v1/miniprogram/device/'+'21040011515')
+						}
+		}
+	}
+</script>
+```
+
+## 3. 接口数据加密、接口签名核验
+
+在http/interface.js文件中的request(Object)方法中补充修改相应的代码
+
+## 4. 接口请求/响应日志记录
+
+在http/interface.js文件中的request(Object)方法中补充修改相应的代码
+
+## 5. 业务相关接口编写
+
+在http/index.js文件中的编写具体业务相关的接口
+
+
+
+	

+ 20 - 0
index.html

@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="/main.js"></script>
+  </body>
+</html>

+ 184 - 0
js_sdk/ly-watermark/commons/watermark.js

@@ -0,0 +1,184 @@
+const VIEW_ID = '1.23452384164.123412415';
+let watermarkView;
+export default {
+	data() {
+		return {
+			showCanvas: true,
+			canvasText: '',
+			canvasSize: uni.upx2px(250),
+			canvasFontSize: uni.upx2px(30),
+			canvasTextColor: 'rgba(200, 200, 200, 0.50)',
+			canvasRotate: -30 * Math.PI / 180,
+			canvasTextAlign: 'left',
+			canvasTextBaseline: 'middle',
+			canvasTextFillX: uni.upx2px(-50),
+			canvasTextFillY: uni.upx2px(170)
+		}
+	},
+	
+	watch: {
+		canvasText(newVal) {
+			this.updateWatermark()
+		}
+	},
+	
+	methods: {
+		show() {
+			// #ifdef APP-PLUS
+			plus.nativeObj.View.getViewById(VIEW_ID) !== null && plus.nativeObj.View.getViewById(VIEW_ID).show();
+			// #endif
+
+			// #ifdef H5
+			if (document.getElementById(VIEW_ID)) {
+				document.getElementById(VIEW_ID).style.visibility = "visible";
+			}
+			// #endif
+		},
+		
+		hide() {
+			// #ifdef APP-PLUS
+			plus.nativeObj.View.getViewById(VIEW_ID) !== null && plus.nativeObj.View.getViewById(VIEW_ID).hide();
+			// #endif
+
+			// #ifdef H5
+			if (document.getElementById(VIEW_ID)) {
+				document.getElementById(VIEW_ID).style.visibility = "hidden";
+			}
+			// #endif
+		},
+		
+		updateWatermark() {
+			if (!this.canvasText) throw new Error('canvasText is Requied!');
+			
+			// #ifdef APP-PLUS  
+			watermarkView && watermarkView.reset();
+			this.drawAppWaterMark(VIEW_ID);
+			// #endif  
+			
+			// #ifdef H5  
+			this.drawH5WaterMark(VIEW_ID);
+			// #endif  
+		},
+		
+		initWatermark() {
+			if (!this.canvasText) throw new Error('canvasText is Requied!');
+			
+			// #ifdef APP-PLUS  
+			this.drawAppWaterMark(VIEW_ID);
+			// #endif  
+			
+			// #ifdef H5  
+			this.drawH5WaterMark(VIEW_ID);
+			// #endif  
+			
+			uni.$off('ly-show-watermar');
+			uni.$off('ly-hide-watermark');
+			
+			// 全局监听事件,触发水印显示
+			uni.$on('ly-show-watermark', () => {
+				this.show();
+			});
+			
+			// 全局监听事件,触发水印隐藏
+			uni.$on('ly-hide-watermark', () => {
+				this.hide();
+			});
+		},
+		
+		// #ifdef APP-PLUS
+		drawAppWaterMark(id) {
+			plus.nativeObj.View.getViewById(id) && plus.nativeObj.View.getViewById(id).close();
+
+			let cans = uni.createCanvasContext('watermarkCanvas');
+			
+			cans.rotate(this.canvasRotate);
+			cans.setFontSize(this.canvasFontSize);
+			cans.setFillStyle(this.canvasTextColor);
+			cans.setTextAlign(this.canvasTextAlign);
+			cans.setTextBaseline(this.canvasTextBaseline);
+			cans.fillText(this.canvasText, this.canvasTextFillX, this.canvasTextFillY);
+			cans.draw(false);
+			this.canvasDrawCallFn(id);
+		},
+		
+		// 利用canvas生成水印图片
+		canvasDrawCallFn(id) {
+			// 适当的延时确保绘制完毕
+			setTimeout(() => {
+				uni.canvasToTempFilePath({
+					canvasId: "watermarkCanvas",
+					success: res => {
+						let viewList = this.getWaterMarkWebview(res);
+						watermarkView = new plus.nativeObj.View(id, {
+							top: '0',
+							left: '0',
+							right: '0',
+							bottom: '0'
+						}, viewList);
+				
+						// 拦截View控件的触屏事件,将事件穿透给下一层view  
+						watermarkView.interceptTouchEvent(false);
+						watermarkView.show();
+						// this.showCanvas = false;
+					}
+				});
+			}, 100);
+		},
+		
+		// 创建webview页面水印样式
+		getWaterMarkWebview(res) {
+			let sysInfo = uni.getSystemInfoSync(),
+				row = Math.ceil(sysInfo.windowHeight / this.canvasSize), // 水印排列行数
+				imgList = [];
+
+			for (let i = 0; i < row; i++) {
+				for (let j = 0; j < 3; j++) {
+					imgList.push({
+						tag: 'img',
+						src: res.tempFilePath,
+						position: {
+							top: (this.canvasSize * i) + 'px',
+							left: (this.canvasSize * j) + 'px',
+							width: this.canvasSize + 'px',
+							height: this.canvasSize + 'px'
+						}
+					});
+				}
+			}
+
+			return imgList;
+		},
+		// #endif
+		
+		// #ifdef H5
+		drawH5WaterMark(id) {
+			document.getElementById(id) && document.body.removeChild(document.getElementById(id));
+
+			let can = document.createElement('canvas');
+			let cans = can.getContext('2d');
+			let div = document.createElement('div');
+
+			can.width = this.canvasSize;
+			can.height = this.canvasSize;
+
+			cans.rotate(this.canvasRotate);
+			cans.font = this.canvasFontSize + 'px sans-serif';
+			cans.fillStyle = this.canvasTextColor;
+			cans.textAlign = this.canvasTextAlign;
+			cans.textBaseline = this.canvasTextBaseline;
+			cans.fillText(this.canvasText, this.canvasTextFillX, this.canvasTextFillY);
+
+			div.id = id;
+			div.style.pointerEvents = 'none';
+			div.style.top = '0';
+			div.style.left = '0';
+			div.style.bottom = '0';
+			div.style.right = '0';
+			div.style.position = 'fixed';
+			div.style.zIndex = '100000';
+			div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
+			document.body.appendChild(div);
+		}
+		// #endif
+	}
+}

+ 69 - 0
main.js

@@ -0,0 +1,69 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+
+try {
+  function isPromise(obj) {
+    return (
+      !!obj &&
+      (typeof obj === "object" || typeof obj === "function") &&
+      typeof obj.then === "function"
+    );
+  }
+
+  // 统一 vue2 API Promise 化返回格式与 vue3 保持一致
+  uni.addInterceptor({
+    returnValue(res) {
+      if (!isPromise(res)) {
+        return res;
+      }
+      return new Promise((resolve, reject) => {
+        res.then((res) => {
+          if (res[0]) {
+            reject(res[0]);
+          } else {
+            resolve(res[1]);
+          }
+        });
+      });
+    },
+  });
+} catch (error) { }
+
+//import Permission from './directive/permission.js'
+//Vue.use(Permission)
+
+import btnPermission from './directive/permission.js';
+
+Vue.prototype.$has = btnPermission;
+
+
+
+  import api from '@/http/index.js'
+    // 全局挂载后使用
+    Vue.prototype.$api = api
+
+// 引入全局uView
+import uView from '@/uni_modules/uview-ui'
+Vue.use(uView)
+uni.$u.config.unit = 'rpx'
+const app = new Vue({
+  ...App
+})
+
+
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+  const app = createSSRApp(App)
+  return {
+    app
+  }
+}
+// #endif

+ 126 - 0
manifest.json

@@ -0,0 +1,126 @@
+{
+    "name" : "传能",
+    "appid" : "__UNI__FF40C0C",
+    "description" : "智慧生活",
+    "versionName" : "1.0.3",
+    "versionCode" : 102,
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {
+            "Barcode" : {},
+            "Camera" : {}
+        },
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
+                "autoSdkPermissions" : false,
+                "permissionExternalStorage" : {
+                    "request" : "none",
+                    "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+                },
+                "permissionPhoneState" : {
+                    "request" : "none",
+                    "prompt" : "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
+                }
+            },
+            /* ios打包配置 */
+            "ios" : {
+                "dSYMs" : false,
+                "privacyDescription" : {
+                    "NSPhotoLibraryUsageDescription" : "报修文件上传",
+                    "NSPhotoLibraryAddUsageDescription" : "拍照需要报修的地方",
+                    "NSCameraUsageDescription" : "扫码二维码"
+                },
+                "idfa" : false
+            },
+            /* SDK配置 */
+            "sdkConfigs" : {
+                "ad" : {},
+                "payment" : {
+                    "weixin" : {
+                        "__platform__" : [ "ios", "android" ],
+                        "appid" : "",
+                        "UniversalLinks" : ""
+                    }
+                }
+            },
+            "icons" : {
+                "android" : {
+                    "hdpi" : "unpackage/res/icons/72x72.png",
+                    "xhdpi" : "unpackage/res/icons/96x96.png",
+                    "xxhdpi" : "unpackage/res/icons/144x144.png",
+                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
+                },
+                "ios" : {
+                    "appstore" : "unpackage/res/icons/1024x1024.png",
+                    "ipad" : {
+                        "app" : "unpackage/res/icons/76x76.png",
+                        "app@2x" : "unpackage/res/icons/152x152.png",
+                        "notification" : "unpackage/res/icons/20x20.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "proapp@2x" : "unpackage/res/icons/167x167.png",
+                        "settings" : "unpackage/res/icons/29x29.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "spotlight" : "unpackage/res/icons/40x40.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
+                    },
+                    "iphone" : {
+                        "app@2x" : "unpackage/res/icons/120x120.png",
+                        "app@3x" : "unpackage/res/icons/180x180.png",
+                        "notification@2x" : "unpackage/res/icons/40x40.png",
+                        "notification@3x" : "unpackage/res/icons/60x60.png",
+                        "settings@2x" : "unpackage/res/icons/58x58.png",
+                        "settings@3x" : "unpackage/res/icons/87x87.png",
+                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
+                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
+                    }
+                }
+            },
+            "splashscreen" : {
+                "useOriginalMsgbox" : true
+            }
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "2"
+}
+/* ios打包配置 *//* SDK配置 */
+

+ 312 - 0
node_modules/echarts/KEYS

@@ -0,0 +1,312 @@
+This file contains the PGP keys of various developers.
+Please don't use them for email unless you have to. Their main
+purpose is code signing.
+
+Examples of importing this file in your keystore:
+ gpg --import KEYS.txt
+ (need pgp and other examples here)
+
+Examples of adding your key to this file:
+ pgp -kxa <your name> and append it to this file.
+ (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
+ (gpg --list-sigs <your name>
+     && gpg --armor --export <your name>) >> this file.
+
+---------------------------------------
+pub   rsa4096 2018-04-23 [SC]
+      9B06D9B4FA37C4DD52725742747985D7E3CEB635
+uid           [ultimate] Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
+sig 3        747985D7E3CEB635 2018-04-23  Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
+sub   rsa4096 2018-04-23 [E]
+sig          747985D7E3CEB635 2018-04-23  Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+oQH7TsthVKvdZyjtZQg=
+=Uv8d
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub   rsa4096 2019-01-24 [SC]
+      1683FBD23F6DD36C0E52223507D78F777D2C0C27
+uid           [ultimate] Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
+sig 3        07D78F777D2C0C27 2019-01-24  Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
+sub   rsa4096 2019-01-24 [E]
+sig          07D78F777D2C0C27 2019-01-24  Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+B4WM8AJSCwl8WlZrRA==
+=wft0
+-----END PGP PUBLIC KEY BLOCK-----
+
+pub   rsa4096 2020-08-06 [SC]
+      94BD178077672157652826758E44A82497382298
+uid             [ 绝对 ] Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
+sig 3        8E44A82497382298 2020-08-06  Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
+sub   rsa4096 2020-08-06 [E]
+sig          8E44A82497382298 2020-08-06  Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+krvOtK7UUytDTcY=
+=+SBy
+-----END PGP PUBLIC KEY BLOCK-----
+pub   rsa4096 2022-03-02 [SC]
+      8ACA4FC874B6B0836DFE70BB52514D7E7CFC32B6
+uid             [ 绝对 ] Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
+sig 3        52514D7E7CFC32B6 2022-03-02  Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
+sub   rsa4096 2022-03-02 [E]
+sig          52514D7E7CFC32B6 2022-03-02  Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+RWnk0btbWIvaznWpIWo=
+=QBYg
+-----END PGP PUBLIC KEY BLOCK-----
+pub   rsa4096 2022-03-28 [SC]
+      EFA5629C5F1FF8D33E016202F16C82C561221579
+uid           [ultimate] Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
+sig 3        F16C82C561221579 2022-03-28  Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
+sub   rsa4096 2022-03-28 [E]
+sig          F16C82C561221579 2022-03-28  Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+5B5E6LlMNPTCWmPzYtTm5qZK
+=bbcU
+-----END PGP PUBLIC KEY BLOCK-----

+ 222 - 0
node_modules/echarts/LICENSE

@@ -0,0 +1,222 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+
+
+
+========================================================================
+Apache ECharts Subcomponents:
+
+The Apache ECharts project contains subcomponents with separate copyright
+notices and license terms. Your use of the source code for these
+subcomponents is also subject to the terms and conditions of the following
+licenses.
+
+BSD 3-Clause (d3.js):
+The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause:
+    `/src/chart/treemap/treemapLayout.ts`,
+    `/src/chart/tree/layoutHelper.ts`,
+    `/src/chart/graph/forceHelper.ts`,
+    `/src/util/number.ts`
+See `/licenses/LICENSE-d3` for details of the license.

+ 5 - 0
node_modules/echarts/NOTICE

@@ -0,0 +1,5 @@
+Apache ECharts
+Copyright 2017-2023 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (https://www.apache.org/).

Разница между файлами не показана из-за своего большого размера
+ 98 - 0
node_modules/echarts/README.md


BIN
node_modules/echarts/asset/logo.png


+ 183 - 0
node_modules/echarts/build/addHeader.js

@@ -0,0 +1,183 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+const fs = require('fs');
+const preamble = require('./preamble');
+const pathTool = require('path');
+const chalk = require('chalk');
+
+// In the `.headerignore`, each line is a pattern in RegExp.
+// all relative path (based on the echarts base directory) is tested.
+// The pattern should match the relative path completely.
+const excludesPath = pathTool.join(__dirname, '../.headerignore');
+const ecBasePath = pathTool.join(__dirname, '../');
+
+const isVerbose = process.argv[2] === '--verbose';
+
+// const lists = [
+//     '../src/**/*.js',
+//     '../build/*.js',
+//     '../benchmark/src/*.js',
+//     '../benchmark/src/gulpfile.js',
+//     '../extension-src/**/*.js',
+//     '../extension/**/*.js',
+//     '../map/js/**/*.js',
+//     '../test/build/**/*.js',
+//     '../test/node/**/*.js',
+//     '../test/ut/core/*.js',
+//     '../test/ut/spe/*.js',
+//     '../test/ut/ut.js',
+//     '../test/*.js',
+//     '../theme/*.js',
+//     '../theme/tool/**/*.js',
+//     '../echarts.all.js',
+//     '../echarts.blank.js',
+//     '../echarts.common.js',
+//     '../echarts.simple.js',
+//     '../index.js',
+//     '../index.common.js',
+//     '../index.simple.js'
+// ];
+
+function run() {
+    const updatedFiles = [];
+    const passFiles = [];
+    const pendingFiles = [];
+
+    eachFile(function (absolutePath, fileExt) {
+        const fileStr = fs.readFileSync(absolutePath, 'utf-8');
+
+        const existLicense = preamble.extractLicense(fileStr, fileExt);
+
+        if (existLicense) {
+            passFiles.push(absolutePath);
+            return;
+        }
+
+        // Conside binary files, only add for files with known ext.
+        if (!preamble.hasPreamble(fileExt)) {
+            pendingFiles.push(absolutePath);
+            return;
+        }
+
+        fs.writeFileSync(absolutePath, preamble.addPreamble(fileStr, fileExt), 'utf-8');
+        updatedFiles.push(absolutePath);
+    });
+
+    console.log('\n');
+    console.log('----------------------------');
+    console.log(' Files that exists license: ');
+    console.log('----------------------------');
+    if (passFiles.length) {
+        if (isVerbose) {
+            passFiles.forEach(function (path) {
+                console.log(chalk.green(path));
+            });
+        }
+        else {
+            console.log(chalk.green(passFiles.length + ' files. (use argument "--verbose" see details)'));
+        }
+    }
+    else {
+        console.log('Nothing.');
+    }
+
+    console.log('\n');
+    console.log('--------------------');
+    console.log(' License added for: ');
+    console.log('--------------------');
+    if (updatedFiles.length) {
+        updatedFiles.forEach(function (path) {
+            console.log(chalk.green(path));
+        });
+    }
+    else {
+        console.log('Nothing.');
+    }
+
+    console.log('\n');
+    console.log('----------------');
+    console.log(' Pending files: ');
+    console.log('----------------');
+    if (pendingFiles.length) {
+        pendingFiles.forEach(function (path) {
+            console.log(chalk.red(path));
+        });
+    }
+    else {
+        console.log('Nothing.');
+    }
+
+    console.log('\nDone.');
+}
+
+function eachFile(visit) {
+
+    const excludePatterns = [];
+    const extReg = /\.([a-zA-Z0-9_-]+)$/;
+
+    prepareExcludePatterns();
+    travel('./');
+
+    function travel(relativePath) {
+        if (isExclude(relativePath)) {
+            return;
+        }
+
+        const absolutePath = pathTool.join(ecBasePath, relativePath);
+        const stat = fs.statSync(absolutePath);
+
+        if (stat.isFile()) {
+            visit(absolutePath, getExt(absolutePath));
+        }
+        else if (stat.isDirectory()) {
+            fs.readdirSync(relativePath).forEach(function (file) {
+                travel(pathTool.join(relativePath, file));
+            });
+        }
+    }
+
+    function prepareExcludePatterns() {
+        const content = fs.readFileSync(excludesPath, {encoding: 'utf-8'});
+        content.replace(/\r/g, '\n').split('\n').forEach(function (line) {
+            line = line.trim();
+            if (line && line.charAt(0) !== '#') {
+                excludePatterns.push(new RegExp(line));
+            }
+        });
+    }
+
+    function isExclude(relativePath) {
+        for (let i = 0; i < excludePatterns.length; i++) {
+            if (excludePatterns[i].test(relativePath)) {
+                return true;
+            }
+        }
+    }
+
+    function getExt(path) {
+        if (path) {
+            const mathResult = path.match(extReg);
+            return mathResult && mathResult[1];
+        }
+    }
+}
+
+run();

+ 114 - 0
node_modules/echarts/build/build-i18n.js

@@ -0,0 +1,114 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const fs = require('fs');
+const preamble = require('./preamble');
+const ts = require('typescript');
+const path = require('path');
+const fsExtra = require('fs-extra');
+
+const umdWrapperHead = `
+${preamble.js}
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+(function(root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports'], factory);
+    } else if (
+        typeof exports === 'object' &&
+        typeof exports.nodeName !== 'string'
+    ) {
+        // CommonJS
+        factory(exports);
+    } else {
+        // Browser globals
+        factory({});
+    }
+})(this, function(exports) {
+`;
+
+const umdWrapperHeadWithEcharts = `
+${preamble.js}
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+(function(root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (
+        typeof exports === 'object' &&
+        typeof exports.nodeName !== 'string'
+    ) {
+        // CommonJS
+        factory(exports, require('echarts/lib/echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+})(this, function(exports, echarts) {
+`;
+
+const umdWrapperTail = `
+});`;
+
+async function buildI18nWrap() {
+    const targetDir = path.join(__dirname, '../i18n');
+    const sourceDir = path.join(__dirname, '../src/i18n');
+    const files = fs.readdirSync(sourceDir);
+    files.forEach(t => {
+        if(!t.startsWith('lang')) {
+            return;
+        }
+        const fileName = t.replace(/\.ts$/, '');
+        const type = fileName.replace(/^lang/, '');
+        const echartsRegister = `
+    echarts.registerLocale('${type}', localeObj);
+        `;
+        const pureExports = `
+    for (var key in localeObj) {
+        if (localeObj.hasOwnProperty(key)) {
+            exports[key] = localeObj[key];
+        }
+    }
+        `;
+        const code = fs.readFileSync(path.join(sourceDir, t), 'utf-8');
+        // const outputText = ts.transpileModule(code, {
+        //     module: ts.ModuleKind.CommonJS,
+        // }).outputText;
+        // Simple regexp replace is enough
+        const outputCode = code.replace(/export\s+?default/, 'var localeObj =')
+            .replace(/\/\*([\w\W]*?)\*\//, '');
+
+        fsExtra.ensureDirSync(targetDir);
+
+        fs.writeFileSync(path.join(targetDir, fileName + '.js'), umdWrapperHeadWithEcharts + outputCode + echartsRegister + umdWrapperTail, 'utf-8');
+        fs.writeFileSync(path.join(targetDir, fileName + '-obj.js'), umdWrapperHead + outputCode + pureExports + umdWrapperTail, 'utf-8');
+    })
+    console.log('i18n build completed');
+}
+
+buildI18nWrap();
+
+module.exports = {
+    buildI18n: buildI18nWrap
+};

+ 210 - 0
node_modules/echarts/build/build.js

@@ -0,0 +1,210 @@
+#!/usr/bin/env node
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const fs = require('fs');
+const config = require('./config.js');
+const commander = require('commander');
+const chalk = require('chalk');
+const rollup = require('rollup');
+const prePublish = require('./pre-publish');
+const transformDEV = require('./transform-dev');
+
+async function run() {
+
+    /**
+     * Tips for `commander`:
+     * (1) If arg xxx not specified, `commander.xxx` is undefined.
+     *     Otherwise:
+     *      If '-x, --xxx', `commander.xxx` can only be true/false, even if '--xxx yyy' input.
+     *      If '-x, --xxx <some>', the 'some' string is required, or otherwise error will be thrown.
+     *      If '-x, --xxx [some]', the 'some' string is optional, that is, `commander.xxx` can be boolean or string.
+     * (2) `node ./build/build.js --help` will print helper info and exit.
+     */
+
+    let descIndent = '                                 ';
+    let egIndent = '    ';
+
+    commander
+        .usage('[options]')
+        .description([
+            'Build echarts and generate result files in directory `echarts/dist`.',
+            '',
+            '  For example:',
+            '',
+            egIndent + 'node build/build.js --prepublish'
+                + '\n' + descIndent + '# Only prepublish.',
+            egIndent + 'node build/build.js --type ""'
+                + '\n' + descIndent + '# Only generate `dist/echarts.js`.',
+            egIndent + 'node build/build.js --type common --min'
+                + '\n' + descIndent + '# Only generate `dist/echarts.common.min.js`.',
+            egIndent + 'node build/build.js --type simple --min'
+                + '\n' + descIndent + '# Only generate `dist/echarts-en.simple.min.js`.',
+        ].join('\n'))
+        .option(
+            '--prepublish',
+            'Build all for release'
+        )
+        .option(
+            '--min',
+            'Whether to compress the output file, and remove error-log-print code.'
+        )
+        .option(
+            '--type <type name>', [
+            'Can be "simple" or "common" or "all" (default). Or can be simple,common,all to build multiple. For example,',
+            descIndent + '`--type ""` or `--type "common"`.'
+        ].join('\n'))
+        .option(
+            '--format <format>',
+            'The format of output bundle. Can be "umd", "amd", "iife", "cjs", "esm".'
+        )
+        .parse(process.argv);
+
+    let isPrePublish = !!commander.prepublish;
+    let buildType = commander.type || 'all';
+
+    let opt = {
+        min: commander.min,
+        format: commander.format || 'umd'
+    };
+
+    validateIO(opt.input, opt.output);
+
+    if (isPrePublish) {
+        await prePublish();
+    }
+    else if (buildType === 'extension') {
+        const cfgs = [
+            config.createBMap(opt),
+            config.createDataTool(opt)
+        ];
+        await build(cfgs);
+    }
+    else if (buildType === 'myTransform') {
+        const cfgs = [
+            config.createMyTransform(opt)
+        ];
+        await build(cfgs);
+    }
+    else {
+        const types = buildType.split(',').map(a => a.trim());
+        const cfgs = types.map(type =>
+            config.createECharts({
+                ...opt,
+                type
+            })
+        );
+        await build(cfgs);
+    }
+}
+
+function checkBundleCode(cfg) {
+    // Make sure process.env.NODE_ENV is eliminated.
+    for (let output of cfg.output) {
+        let code = fs.readFileSync(output.file, {encoding: 'utf-8'});
+        if (!code) {
+            throw new Error(`${output.file} is empty`);
+        }
+        transformDEV.recheckDEV(code);
+        console.log(chalk.green.dim('Check code: correct.'));
+    }
+}
+
+function validateIO(input, output) {
+    if ((input != null && output == null)
+        || (input == null && output != null)
+    ) {
+        throw new Error('`input` and `output` must be both set.');
+    }
+}
+
+/**
+ * @param {Array.<Object>} configs A list of rollup configs:
+ *  See: <https://rollupjs.org/#big-list-of-options>
+ *  For example:
+ *  [
+ *      {
+ *          ...inputOptions,
+ *          output: [outputOptions],
+ *      },
+ *      ...
+ *  ]
+ */
+async function build(configs) {
+    console.log(chalk.yellow(`
+    NOTICE: If you are using 'npm run build'. Run 'npm run prepublish' before build !!!
+`));
+
+    console.log(chalk.yellow(`
+    NOTICE: If you are using syslink on zrender. Run 'npm run prepublish' in zrender first !!
+`));
+
+    for (let singleConfig of configs) {
+        console.log(
+            chalk.cyan.dim('\Bundling '),
+            chalk.cyan(singleConfig.input)
+        );
+
+        console.time('rollup build');
+        const bundle = await rollup.rollup(singleConfig);
+
+        for (let output of singleConfig.output) {
+            console.log(
+                chalk.green.dim('Created '),
+                chalk.green(output.file),
+                chalk.green.dim(' successfully.')
+            );
+
+            await bundle.write(output);
+
+        };
+        console.timeEnd('rollup build');
+
+        checkBundleCode(singleConfig);
+    }
+}
+
+async function main() {
+    try {
+        await run();
+    }
+    catch (err) {
+        console.log(chalk.red('BUILD ERROR!'));
+        // rollup parse error.
+        if (err) {
+            if (err.loc) {
+                console.warn(chalk.red(`${err.loc.file} (${err.loc.line}:${err.loc.column})`));
+                console.warn(chalk.red(err.message));
+            }
+            if (err.frame) {
+                console.warn(chalk.red(err.frame));
+            }
+            console.log(chalk.red(err ? err.stack : err));
+
+            err.id != null && console.warn(chalk.red(`id: ${err.id}`));
+            err.hook != null && console.warn(chalk.red(`hook: ${err.hook}`));
+            err.code != null && console.warn(chalk.red(`code: ${err.code}`));
+            err.plugin != null && console.warn(chalk.red(`plugin: ${err.plugin}`));
+        }
+        // console.log(err);
+    }
+}
+
+main();

+ 176 - 0
node_modules/echarts/build/config.js

@@ -0,0 +1,176 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const nodeResolvePlugin = require('@rollup/plugin-node-resolve').default;
+const nodePath = require('path');
+const ecDir = nodePath.resolve(__dirname, '..');
+const {terser} = require('rollup-plugin-terser');
+const replace = require('@rollup/plugin-replace');
+const MagicString = require('magic-string');
+const preamble = require('./preamble');
+
+function createAddLicensePlugin(sourcemap) {
+    return {
+        renderChunk(code, chunk) {
+            const s = new MagicString(code);
+            s.prepend(preamble.js);
+            return {
+                code: s.toString(),
+                map: sourcemap ? s.generateMap({ hires: true }).toString() : null
+            };
+        }
+    }
+}
+
+function createOutputs(basename, { min }, commonOutputOpts) {
+    commonOutputOpts = {
+        format: 'umd',
+        ...commonOutputOpts
+    }
+    function createReplacePlugin(replacement) {
+        const plugin = replace({
+            'process.env.NODE_ENV': JSON.stringify(replacement)
+        });
+        // Remove transform hook. It will have warning when using in output
+        delete plugin.transform;
+        return plugin;
+    }
+    const output = [{
+        ...commonOutputOpts,
+        // Disable sourcemap in
+        sourcemap: true,
+        plugins: [
+            createReplacePlugin('development'),
+            createAddLicensePlugin(true)
+        ],
+        file: basename + '.js'
+    }];
+
+    if (min) {
+        output.push({
+            ...commonOutputOpts,
+            // Disable sourcemap in min file.
+            sourcemap: false,
+            // TODO preamble
+            plugins: [
+                createReplacePlugin('production'),
+                terser(),
+                createAddLicensePlugin(false)
+            ],
+            file: basename + '.min.js'
+        })
+    }
+    return output;
+}
+
+/**
+ * @param {Object} [opt]
+ * @param {string} [opt.type=''] 'all' or 'simple' or 'common', default is 'all'
+ * @param {boolean} [opt.sourcemap] If set, `opt.input` is required too, and `opt.type` is ignored.
+ * @param {string} [opt.format='umd'] If set, `opt.input` is required too, and `opt.type` is ignored.
+ * @param {string} [opt.min=false] If build minified output
+ * @param {boolean} [opt.addBundleVersion=false] Only for debug in watch, prompt that the two build is different.
+ */
+exports.createECharts = function (opt = {}) {
+    const srcType = opt.type !== 'all' ? '.' + opt.type : '';
+    const postfixType = srcType;
+    const format = opt.format || 'umd';
+    const postfixFormat = (format !== 'umd') ? '.' + format.toLowerCase() : '';
+
+    const input = nodePath.resolve(ecDir, `index${srcType}.js`);
+
+    return {
+        plugins: [nodeResolvePlugin()],
+        treeshake: {
+            moduleSideEffects: false
+        },
+
+        input: input,
+
+        output: createOutputs(
+            nodePath.resolve(ecDir, `dist/echarts${postfixFormat}${postfixType}`),
+            opt,
+            {
+                name: 'echarts',
+                // Ignore default exports, which is only for compitable code like:
+                // import echarts from 'echarts/lib/echarts';
+                exports: 'named',
+                format: format
+            }
+        )
+    };
+};
+
+exports.createBMap = function (opt) {
+    const input = nodePath.resolve(ecDir, `extension/bmap/bmap.js`);
+
+    return {
+        plugins: [nodeResolvePlugin()],
+        input: input,
+        external: ['echarts'],
+        output: createOutputs(
+            nodePath.resolve(ecDir, `dist/extension/bmap`),
+            opt,
+            {
+                name: 'bmap',
+                globals: {
+                    // For UMD `global.echarts`
+                    echarts: 'echarts'
+                }
+            }
+        )
+    };
+};
+
+exports.createDataTool = function (opt) {
+    let input = nodePath.resolve(ecDir, `extension/dataTool/index.js`);
+
+    return {
+        plugins: [nodeResolvePlugin()],
+        input: input,
+        external: ['echarts'],
+        output: createOutputs(
+            nodePath.resolve(ecDir, `dist/extension/dataTool`),
+            opt,
+            {
+                name: 'dataTool',
+                globals: {
+                    // For UMD `global.echarts`
+                    echarts: 'echarts'
+                }
+            }
+        )
+    };
+};
+
+exports.createMyTransform = function (opt) {
+    let input = nodePath.resolve(ecDir, `test/lib/myTransform/src/index.ts`);
+
+    return {
+        plugins: [nodeResolvePlugin()],
+        input: input,
+        output: createOutputs(
+            nodePath.resolve(ecDir, `test/lib/myTransform/dist/myTransform`),
+            opt,
+            {
+                name: 'myTransform'
+            }
+        )
+    };
+};

+ 67 - 0
node_modules/echarts/build/dev-fast.js

@@ -0,0 +1,67 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const path = require('path');
+const {build} = require('esbuild');
+const commander = require('commander');
+const outFilePath = path.resolve(__dirname, '../dist/echarts.js');
+
+const umdWrapperHead = `(function (root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports'], factory);
+    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
+        // CommonJS
+        factory(exports);
+    } else {
+        // Browser globals
+        factory((root.echarts = {}));
+    }
+}(typeof self !== 'undefined' ? self : this, function (exports, b) {
+`;
+
+const umdWrapperTail = `
+}));`;
+
+build({
+    entryPoints: [path.resolve(__dirname, '../src/echarts.all.ts')],
+    outfile: outFilePath,
+    format: 'cjs',
+    sourcemap: true,
+    bundle: true,
+    banner: umdWrapperHead,
+    footer: umdWrapperTail,
+    define: {
+        'process.env.NODE_ENV': '"development"',
+        '__DEV__': 'true'
+    },
+    watch: {
+        async onRebuild(error) {
+            if (error) {
+                console.error('watch build failed:', error)
+            }
+            else {
+                console.log('Bundled with esbuild')
+            }
+        },
+    },
+}).then(async () => {
+    console.log('Bundled with esbuild')
+}).catch(e => console.error(e.toString()))

+ 30 - 0
node_modules/echarts/build/nightly/post.js

@@ -0,0 +1,30 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const fs = require('fs');
+
+const root = __dirname + '/../../';
+const echartsPkg = JSON.parse(fs.readFileSync(root + 'package.json'), 'utf-8');
+const zrenderPkg = JSON.parse(fs.readFileSync(root + 'node_modules/zrender/package.json', 'utf-8'));
+
+const echartsCorePath = root + 'src/core/echarts.ts';
+const echartsCoreFile = fs.readFileSync(echartsCorePath, 'utf-8')
+    .replace(/export const version = '\S+'/, `export const version = '${echartsPkg.version}'`)
+    .replace(/(export const dependencies = {\s+zrender: ')\S+('\s+})/, `$1${zrenderPkg.version}$2`);
+fs.writeFileSync(echartsCorePath, echartsCoreFile, 'utf-8');

+ 72 - 0
node_modules/echarts/build/nightly/prepare.js

@@ -0,0 +1,72 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+const fs = require('fs');
+const packageJsonPath = __dirname + '/../../package.json';
+const nightlyPackageName = 'echarts-nightly';
+
+const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
+
+function updateVersion(version) {
+    const isNext = process.argv.includes('--next');
+    const parts = /(\d+)\.(\d+)\.(\d+)($|\-)/.exec(version);
+    if (!parts) {
+        throw new Error(`Invalid version number ${version}`);
+    }
+    // Add date to version.
+    const major = +parts[1];
+    let minor = +parts[2];
+    let patch = +parts[3];
+    const isStable = !parts[4];
+    if (isStable) {
+        // It's previous stable version. Dev version should be higher.
+        if (isNext) {
+            // Increase minor version for next branch.
+            minor++;
+            patch = 0;
+        }
+        else {
+            // Increase main version for master branch.
+            patch++;
+        }
+    }
+
+    const date = new Date().toISOString().replace(/:|T|\.|-/g, '').slice(0, 8);
+    return `${major}.${minor}.${patch}-dev.${date}`;
+}
+
+packageJson.name = nightlyPackageName;
+packageJson.version = updateVersion(packageJson.version);
+
+fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');
+
+const readmePath = __dirname + '/../../README.md';
+const readmeAttention = `<h3>
+<p><em>⚠️ ATTENTION PLEASE</em></p>
+<p><em>This is nightly build of Apache ECharts. Please DON't use it in your production environment.</em></p>
+</h3>`;
+const readmeContent = fs.readFileSync(readmePath, 'utf-8');
+if (!readmeContent.includes(readmeAttention)) {
+    fs.writeFileSync(readmePath, `
+${readmeAttention}
+
+${readmeContent}
+`, 'utf-8');
+}

+ 428 - 0
node_modules/echarts/build/pre-publish.js

@@ -0,0 +1,428 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+/**
+ * [Create CommonJS files]:
+ * Compatible with prevoius folder structure: `echarts/lib` exists in `node_modules`
+ * (1) Build all files to CommonJS to `echarts/lib`.
+ * (2) Remove __DEV__.
+ * (3) Mount `echarts/src/export.js` to `echarts/lib/echarts.js`.
+ *
+ * [Create ESModule files]:
+ * Build all files to CommonJS to `echarts/esm`.
+ */
+
+const nodePath = require('path');
+const assert = require('assert');
+const fs = require('fs');
+const fsExtra = require('fs-extra');
+const chalk = require('chalk');
+const ts = require('typescript');
+const globby = require('globby');
+const transformDEVUtil = require('./transform-dev');
+const preamble = require('./preamble');
+const dts = require('@lang/rollup-plugin-dts').default;
+const rollup = require('rollup');
+const { transformImport } = require('zrender/build/transformImport');
+
+const ecDir = nodePath.resolve(__dirname, '..');
+const tmpDir = nodePath.resolve(ecDir, 'pre-publish-tmp');
+
+const tsConfig = readTSConfig();
+
+const autoGeneratedFileAlert = `
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+`;
+
+const mainSrcGlobby = {
+    patterns: [
+        'src/**/*.ts'
+    ],
+    cwd: ecDir
+};
+const extensionSrcGlobby = {
+    patterns: [
+        'extension-src/**/*.ts'
+    ],
+    cwd: ecDir
+};
+const extensionSrcDir = nodePath.resolve(ecDir, 'extension-src');
+const extensionESMDir = nodePath.resolve(ecDir, 'extension');
+
+const typesDir = nodePath.resolve(ecDir, 'types');
+const esmDir = 'lib';
+
+
+const compileWorkList = [
+    {
+        logLabel: 'main ts -> js-esm',
+        compilerOptionsOverride: {
+            module: 'ES2015',
+            rootDir: ecDir,
+            outDir: tmpDir,
+            // Generate types when buidling esm
+            declaration: true,
+            declarationDir: typesDir
+        },
+        srcGlobby: mainSrcGlobby,
+        transformOptions: {
+            filesGlobby: {patterns: ['**/*.js'], cwd: tmpDir},
+            preamble: preamble.js,
+            transformDEV: true
+        },
+        before: async function () {
+            fsExtra.removeSync(tmpDir);
+            fsExtra.removeSync(nodePath.resolve(ecDir, 'types'));
+            fsExtra.removeSync(nodePath.resolve(ecDir, esmDir));
+            fsExtra.removeSync(nodePath.resolve(ecDir, 'index.js'));
+            fsExtra.removeSync(nodePath.resolve(ecDir, 'index.blank.js'));
+            fsExtra.removeSync(nodePath.resolve(ecDir, 'index.common.js'));
+            fsExtra.removeSync(nodePath.resolve(ecDir, 'index.simple.js'));
+        },
+        after: async function () {
+            fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.all.js'), nodePath.resolve(ecDir, 'index.js'));
+            fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.blank.js'), nodePath.resolve(ecDir, 'index.blank.js'));
+            fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.common.js'), nodePath.resolve(ecDir, 'index.common.js'));
+            fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.simple.js'), nodePath.resolve(ecDir, 'index.simple.js'));
+            fs.renameSync(nodePath.resolve(tmpDir, 'src'), nodePath.resolve(ecDir, esmDir));
+
+            transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.js'), esmDir);
+            transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.blank.js'), esmDir);
+            transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.common.js'), esmDir);
+            transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.simple.js'), esmDir);
+
+            await transformLibFiles(nodePath.resolve(ecDir, esmDir), esmDir);
+            await transformLibFiles(nodePath.resolve(ecDir, 'types'), esmDir);
+            fsExtra.removeSync(tmpDir);
+        }
+    },
+    {
+        logLabel: 'extension ts -> js-esm',
+        compilerOptionsOverride: {
+            module: 'ES2015',
+            declaration: false,
+            rootDir: extensionSrcDir,
+            outDir: extensionESMDir
+        },
+        srcGlobby: extensionSrcGlobby,
+        transformOptions: {
+            filesGlobby: {patterns: ['**/*.js'], cwd: extensionESMDir},
+            preamble: preamble.js,
+            transformDEV: true
+        },
+        before: async function () {
+            fsExtra.removeSync(extensionESMDir);
+        },
+        after: async function () {
+            await transformLibFiles(extensionESMDir, 'lib');
+        }
+    }
+];
+
+
+
+/**
+ * @public
+ */
+module.exports = async function () {
+
+    for (let {
+        logLabel, compilerOptionsOverride, srcGlobby,
+        transformOptions, before, after
+    } of compileWorkList) {
+
+        process.stdout.write(chalk.green.dim(`[${logLabel}]: compiling ...`));
+
+        before && await before();
+
+        let srcPathList = await readFilePaths(srcGlobby);
+
+        await tsCompile(compilerOptionsOverride, srcPathList);
+
+        process.stdout.write(chalk.green.dim(` done \n`));
+
+        process.stdout.write(chalk.green.dim(`[${logLabel}]: transforming ...`));
+
+        await transformCode(transformOptions);
+
+        after && await after();
+
+        process.stdout.write(chalk.green.dim(` done \n`));
+    }
+
+    process.stdout.write(chalk.green.dim(`Generating entries ...`));
+    generateEntries();
+    process.stdout.write(chalk.green.dim(`Bundling DTS ...`));
+    await bundleDTS();
+
+    console.log(chalk.green.dim('All done.'));
+};
+
+async function runTsCompile(localTs, compilerOptions, srcPathList) {
+    // Must do it. becuase the value in tsconfig.json might be different from the inner representation.
+    // For example: moduleResolution: "NODE" => moduleResolution: 2
+    const {options, errors} = localTs.convertCompilerOptionsFromJson(compilerOptions, ecDir);
+
+    if (errors.length) {
+        let errMsg = 'tsconfig parse failed: '
+            + errors.map(error => error.messageText).join('. ')
+            + '\n compilerOptions: \n' + JSON.stringify(compilerOptions, null, 4);
+        assert(false, errMsg);
+    }
+
+    // See: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API
+
+    let program = localTs.createProgram(srcPathList, options);
+    let emitResult = program.emit();
+
+    let allDiagnostics = localTs
+        .getPreEmitDiagnostics(program)
+        .concat(emitResult.diagnostics);
+
+    allDiagnostics.forEach(diagnostic => {
+        if (diagnostic.file) {
+            let {line, character} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
+            let message = localTs.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
+            console.log(chalk.red(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`));
+        }
+        else {
+            console.log(chalk.red(localTs.flattenDiagnosticMessageText(diagnostic.messageText, '\n')));
+        }
+    });
+    if (allDiagnostics.length > 0) {
+        throw new Error('TypeScript Compile Failed')
+    }
+}
+module.exports.runTsCompile = runTsCompile;
+
+async function tsCompile(compilerOptionsOverride, srcPathList) {
+    assert(
+        compilerOptionsOverride
+        && compilerOptionsOverride.module
+        && compilerOptionsOverride.rootDir
+        && compilerOptionsOverride.outDir
+    );
+
+    let compilerOptions = {
+        ...tsConfig.compilerOptions,
+        ...compilerOptionsOverride,
+        sourceMap: false
+    };
+
+    runTsCompile(ts, compilerOptions, srcPathList);
+}
+
+/**
+ * Transform import/require path in the entry file to `esm` or `lib`.
+ */
+function transformRootFolderInEntry(entryFile, replacement) {
+    let code = fs.readFileSync(entryFile, 'utf-8');
+    // Simple regex replacement
+    // TODO More robust way?
+    assert(
+        !/(import\s+|from\s+|require\(\s*)["']\.\/echarts\./.test(code)
+        && !/(import\s+|from\s+|require\(\s*)["']echarts\./.test(code),
+        'Import echarts.xxx.ts is not supported.'
+    );
+    code = code.replace(/((import\s+|from\s+|require\(\s*)["'])\.\//g, `$1./${replacement}/`);
+    fs.writeFileSync(
+        entryFile,
+        // Also transform zrender.
+        singleTransformImport(code, replacement),
+        'utf-8'
+    );
+}
+
+/**
+ * Transform `zrender/src` to `zrender/lib` in all files
+ */
+async function transformLibFiles(rooltFolder, replacement) {
+    const files = await readFilePaths({
+        patterns: ['**/*.js', '**/*.d.ts'],
+        cwd: rooltFolder
+    });
+    // Simple regex replacement
+    // TODO More robust way?
+    for (let fileName of files) {
+        let code = fs.readFileSync(fileName, 'utf-8');
+        code = singleTransformImport(code, replacement);
+        // For lower ts version, not use import type
+        // TODO Use https://github.com/sandersn/downlevel-dts ?
+        // if (fileName.endsWith('.d.ts')) {
+        //     code = singleTransformImportType(code);
+        // }
+        fs.writeFileSync(fileName, code, 'utf-8');
+    }
+}
+
+/**
+ * 1. Transform zrender/src to zrender/lib
+ * 2. Add .js extensions
+ */
+function singleTransformImport(code, replacement) {
+    return transformImport(
+        code.replace(/([\"\'])zrender\/src\//g, `$1zrender/${replacement}/`),
+        (moduleName) => {
+            // Ignore 'tslib' and 'echarts' in the extensions.
+            if (moduleName === 'tslib' || moduleName === 'echarts') {
+                return moduleName;
+            }
+            else if (moduleName === 'zrender/lib/export') {
+                throw new Error('Should not import the whole zrender library.');
+            }
+            else if (moduleName.endsWith('.ts')) {
+                // Replace ts with js
+                return moduleName.replace(/\.ts$/, '.js');
+            }
+            else if (moduleName.endsWith('.js')) {
+                return moduleName;
+            }
+            else {
+                return moduleName + '.js'
+            }
+        }
+    );
+}
+
+// function singleTransformImportType(code) {
+//     return code.replace(/import\s+type\s+/g, 'import ');
+// }
+
+/**
+ * @param {Object} transformOptions
+ * @param {Object} transformOptions.filesGlobby {patterns: string[], cwd: string}
+ * @param {string} [transformOptions.preamble] See './preamble.js'
+ * @param {boolean} [transformOptions.transformDEV]
+ */
+async function transformCode({filesGlobby, preamble, transformDEV}) {
+
+    let filePaths = await readFilePaths(filesGlobby);
+
+    filePaths.map(filePath => {
+        let code = fs.readFileSync(filePath, 'utf8');
+
+        if (transformDEV) {
+            let result = transformDEVUtil.transform(code, false);
+            code = result.code;
+        }
+
+        code = autoGeneratedFileAlert + code;
+
+        if (preamble) {
+            code = preamble + code;
+        }
+
+        fs.writeFileSync(filePath, code, 'utf8');
+    });
+}
+
+async function readFilePaths({patterns, cwd}) {
+    assert(patterns && cwd);
+    return (
+        await globby(patterns, {cwd})
+    ).map(
+        srcPath => nodePath.resolve(cwd, srcPath)
+    );
+}
+
+async function bundleDTS() {
+
+    const outDir = nodePath.resolve(__dirname, '../types/dist');
+    const commonConfig = {
+        onwarn(warning, rollupWarn) {
+            // Not warn circular dependency
+            if (warning.code !== 'CIRCULAR_DEPENDENCY') {
+                rollupWarn(warning);
+            }
+        },
+        plugins: [
+            dts({
+                respectExternal: true
+            })
+//             {
+//                 generateBundle(options, bundle) {
+//                     for (let chunk of Object.values(bundle)) {
+//                         chunk.code = `
+// type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
+// ${chunk.code}`
+//                     }
+//                 }
+//             }
+        ]
+    };
+
+    // Bundle chunks.
+    const parts = [
+        'core', 'charts', 'components', 'renderers', 'option', 'features'
+    ];
+    const inputs = {};
+    parts.forEach(partName => {
+        inputs[partName] = nodePath.resolve(__dirname, `../types/src/export/${partName}.d.ts`)
+    });
+
+    const bundle = await rollup.rollup({
+        input: inputs,
+        ...commonConfig
+    });
+    let idx = 1;
+    await bundle.write({
+        dir: outDir,
+        minifyInternalExports: false,
+        manualChunks: (id) => {
+            // Only create one chunk.
+            return 'shared';
+        },
+        chunkFileNames: 'shared.d.ts'
+    });
+
+    // Bundle all in one
+    const bundleAllInOne = await rollup.rollup({
+        input: nodePath.resolve(__dirname, `../types/src/export/all.d.ts`),
+        ...commonConfig
+    });
+    await bundleAllInOne.write({
+        file: nodePath.resolve(outDir, 'echarts.d.ts')
+    });
+}
+
+function readTSConfig() {
+    // tsconfig.json may have comment string, which is invalid if
+    // using `require('tsconfig.json'). So we use a loose parser.
+    let filePath = nodePath.resolve(ecDir, 'tsconfig.json');
+    const tsConfigText = fs.readFileSync(filePath, {encoding: 'utf8'});
+    return (new Function(`return ( ${tsConfigText} )`))();
+}
+
+
+function generateEntries() {
+    ['charts', 'components', 'renderers', 'core', 'features'].forEach(entryName => {
+        if (entryName !== 'option') {
+            const jsCode = fs.readFileSync(nodePath.join(__dirname, `template/${entryName}.js`), 'utf-8');
+            fs.writeFileSync(nodePath.join(__dirname, `../${entryName}.js`), jsCode, 'utf-8');
+        }
+
+        const dtsCode = fs.readFileSync(nodePath.join(__dirname, `/template/${entryName}.d.ts`), 'utf-8');
+        fs.writeFileSync(nodePath.join(__dirname, `../${entryName}.d.ts`), dtsCode, 'utf-8');
+    });
+}
+
+module.exports.readTSConfig = readTSConfig;

+ 231 - 0
node_modules/echarts/build/preamble.js

@@ -0,0 +1,231 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const cStyleComment = `
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+`;
+
+const hashComment = `
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+`;
+
+const mlComment = `
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+`;
+
+function hasPreamble(fileExt) {
+    return fileExt && preambleMap[fileExt];
+}
+
+function addPreamble(fileStr, fileExt) {
+    if (fileStr && fileExt) {
+        const addFn = addFns[fileExt];
+        const headStr = preambleMap[fileExt];
+        return addFn && headStr && addFn(headStr, fileStr);
+    }
+}
+
+const addFns = {
+
+    ts: function (headStr, fileStr) {
+        return headStr + fileStr;
+    },
+
+    js: function (headStr, fileStr) {
+        return headStr + fileStr;
+    },
+
+    css: function (headStr, fileStr) {
+        return headStr + fileStr;
+    },
+
+    java: function (headStr, fileStr) {
+        return headStr + fileStr;
+    },
+
+    yml: addShellLikeHeader,
+
+    yaml: addShellLikeHeader,
+
+    sh: addShellLikeHeader,
+
+    html: function (headStr, fileStr) {
+        // Git diff enables manual check.
+        let resultStr = fileStr.replace(/^\s*<!DOCTYPE\s[^<>]+>/i, '$&' + headStr);
+        // If no doctype
+        if (resultStr.length === fileStr.length) {
+            resultStr = headStr + fileStr;
+        }
+        return resultStr;
+    },
+
+    xml: xmlAddFn,
+
+    xsl: xmlAddFn
+};
+
+function addShellLikeHeader(headStr, fileStr) {
+    // Git diff enables manual check.
+    if (/^#\!/.test(fileStr)) {
+        const lines = fileStr.split('\n');
+        lines.splice(1, 0, headStr);
+        return lines.join('\n');
+    }
+    else {
+        return headStr + fileStr;
+    }
+}
+
+function xmlAddFn(headStr, fileStr) {
+    // Git diff enables manual check.
+    let resultStr = fileStr.replace(/^\s*<\?xml\s[^<>]+\?>/i, '$&' + headStr);
+    // If no <?xml version='1.0' ?>
+    if (resultStr.length === fileStr.length) {
+        resultStr = headStr + fileStr;
+    }
+    return resultStr;
+}
+
+const preambleMap = {
+    ts: cStyleComment,
+    js: cStyleComment,
+    css: cStyleComment,
+    java: cStyleComment,
+    yml: hashComment,
+    yaml: hashComment,
+    sh: hashComment,
+    html: mlComment,
+    xml: mlComment,
+    xsl: mlComment
+};
+
+const licenseReg = [
+    {name: 'Apache', reg: /apache (license|commons)/i},
+    {name: 'BSD', reg: /BSD/},
+    {name: 'LGPL', reg: /LGPL/},
+    {name: 'GPL', reg: /GPL/},
+    {name: 'Mozilla', reg: /mozilla public/i},
+    {name: 'MIT', reg: /mit license/i},
+    {name: 'BSD-d3', reg: /Copyright\s+\(c\)\s+2010-2015,\s+Michael\s+Bostock/i}
+];
+
+function extractLicense(fileStr, fileExt) {
+    let commentText = extractComment(fileStr.trim(), fileExt);
+    if (!commentText) {
+        return;
+    }
+    for (let i = 0; i < licenseReg.length; i++) {
+        if (licenseReg[i].reg.test(commentText)) {
+            return licenseReg[i].name;
+        }
+    }
+}
+
+const cStyleCommentReg = /\/\*[\S\s]*?\*\//;
+const hashCommentReg = /^\s*#.*$/gm;
+const mlCommentReg = /<\!\-\-[\S\s]*?\-\->/;
+const commentReg = {
+    ts: cStyleCommentReg,
+    js: cStyleCommentReg,
+    css: cStyleCommentReg,
+    java: cStyleCommentReg,
+    yml: hashCommentReg,
+    yaml: hashCommentReg,
+    sh: hashCommentReg,
+    html: mlCommentReg,
+    xml: mlCommentReg,
+    xsl: mlCommentReg
+};
+
+function extractComment(str, fileExt) {
+    const reg = commentReg[fileExt];
+
+    if (!fileExt || !reg || !str) {
+        return;
+    }
+
+    reg.lastIndex = 0;
+
+    if (fileExt === 'sh' || fileExt === 'yml' || fileExt === 'yaml') {
+        let result = str.match(reg);
+        return result && result.join('\n');
+    }
+    else {
+        let result = reg.exec(str);
+        return result && result[0];
+    }
+}
+
+module.exports = Object.assign({
+    extractLicense,
+    hasPreamble,
+    addPreamble
+}, preambleMap);

+ 164 - 0
node_modules/echarts/build/source-release/prepareReleaseMaterials.js

@@ -0,0 +1,164 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+// Prepare release materials like mail, release note
+
+const commander = require('commander');
+const fse = require('fs-extra');
+const pathTool = require('path');
+const https = require('https');
+
+commander
+    .usage('[options]')
+    .description([
+        'Generate source release'
+    ].join('\n'))
+    .option(
+        '--rcversion <version>',
+        'Release version'
+    )
+    .option(
+        '--commit <commit>',
+        'Hash of commit'
+    )
+    .option(
+        '--repo <repo>',
+        'Repo'
+    )
+    .option(
+        '--out <out>',
+        'Out directory. Default to be tmp/release-mail'
+    )
+    .parse(process.argv);
+
+const outDir = pathTool.resolve(process.cwd(), commander.out || 'tmp/release-materials');
+const releaseCommit = commander.commit;
+if (!releaseCommit) {
+    throw new Error('Release commit is required');
+}
+const repo = commander.repo || 'apache/echarts';
+
+let rcVersion = commander.rcversion + '';
+if (rcVersion.startsWith('v')) {   // tag may have v prefix, v5.1.0
+    rcVersion = rcVersion.substr(1);
+}
+if (rcVersion.indexOf('-rc.') < 0) {
+    throw new Error('Only rc version is accepeted.');
+}
+
+const parts = /(\d+)\.(\d+)\.(\d+)\-rc\.(\d+)/.exec(rcVersion);
+if (!parts) {
+    throw new Error(`Invalid version number ${rcVersion}`);
+}
+
+const major = +parts[1];
+const minor = +parts[2];
+const patch = +parts[3];
+const rc = +parts[4];
+
+const stableVersion = `${major}.${minor}.${patch}`;
+const releaseFullName = `Apache ECharts ${stableVersion} (release candidate ${rc})`;
+
+console.log('[Release Repo] ' + repo);
+console.log('[Release Verion] ' + rcVersion);
+console.log('[Release Commit] ' + releaseCommit);
+console.log('[Release Name] ' + releaseFullName);
+
+const voteTpl = fse.readFileSync(pathTool.join(__dirname, './template/vote-release.tpl'), 'utf-8');
+const voteResultTpl = fse.readFileSync(pathTool.join(__dirname, './template/vote-result.tpl'), 'utf-8');
+const announceTpl = fse.readFileSync(pathTool.join(__dirname, './template/announce-release.tpl'), 'utf-8');
+const voteUntil = new Date(+new Date() + (72 + 12) * 3600 * 1000);   // 3.5 day.
+
+fse.ensureDirSync(outDir);
+fse.writeFileSync(
+    pathTool.resolve(outDir, 'vote.txt'),
+    voteTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, rcVersion)
+        .replace(/{{ECHARTS_RELEASE_VERSION_FULL_NAME}}/g, releaseFullName)
+        .replace(/{{ECHARTS_RELEASE_COMMIT}}/g, releaseCommit)
+        .replace(/{{VOTE_UNTIL}}/g, voteUntil.toISOString()),
+    'utf-8'
+);
+
+fse.ensureDirSync(outDir);
+fse.writeFileSync(
+    pathTool.resolve(outDir, 'vote-result.txt'),
+    voteResultTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, rcVersion)
+        .replace(/{{ECHARTS_RELEASE_VERSION_FULL_NAME}}/g, releaseFullName),
+    'utf-8'
+);
+
+fse.writeFileSync(
+    pathTool.resolve(outDir, 'announce.txt'),
+    announceTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, stableVersion)
+        .replace(/{{ECHARTS_RELEASE_COMMIT}}/g, releaseCommit),
+    'utf-8'
+);
+
+
+// Fetch RELEASE_NOTE
+https.get({
+    hostname: 'api.github.com',
+    path: `/repos/${repo}/releases`,
+    headers: {
+        'User-Agent': 'NodeJS'
+    }
+}, function (res) {
+    console.log(`https://api.github.com/repos/${repo}/releases`);
+    if (res.statusCode !== 200) {
+        console.error(`Failed to fetch releases ${res.statusCode}`);
+        res.resume();
+        return;
+    }
+
+    res.setEncoding('utf8');
+    let rawData = '';
+    res.on('data', (chunk) => {
+        rawData += chunk;
+    });
+    res.on('end', () => {
+        let releaseNote = '';
+
+        const releases = JSON.parse(rawData);
+        const found = releases.find(release => release.name === rcVersion);
+        if (!found) {
+            throw 'Can\'t found release';
+        }
+        else {
+            releaseNote = found.body.trim();
+            if (!releaseNote) {
+                throw 'Release description is empty';
+            }
+        }
+
+        const firstLine = releaseNote.split('\n')[0];
+        if (firstLine.indexOf(stableVersion) < 0) {
+            // Add version if release note is not start with version.
+        }
+        releaseNote = `## ${stableVersion}\n\n${releaseNote}`;
+
+        fse.writeFileSync(
+            pathTool.resolve(outDir, 'RELEASE_NOTE.txt'),
+            releaseNote,
+            'utf-8'
+        );
+    });
+  }).on('error', (e) => {
+      throw e;
+  });

+ 26 - 0
node_modules/echarts/build/source-release/template/announce-release.tpl

@@ -0,0 +1,26 @@
+--- Mail to: ---
+dev@echarts.apache.org
+------------------------------------------------------------------------------
+
+--- Subject: ---
+[ANNOUNCE] Release Apache ECharts {{ECHARTS_RELEASE_VERSION}}
+------------------------------------------------------------------------------
+
+
+Hi all,
+
+The Apache ECharts team is proud to announce Apache ECharts {{ECHARTS_RELEASE_VERSION}}.
+
+Apache ECharts is a powerful, interactive charting and data visualization library for browser.
+
+Download Links: https://echarts.apache.org/download.html
+
+Release Notes: https://echarts.apache.org/changelog.html
+
+Website: https://echarts.apache.org/
+
+
+ECharts Resources:
+- Issue: https://github.com/apache/echarts/issues
+- Build Guide: https://github.com/apache/echarts/blob/{{ECHARTS_RELEASE_VERSION}}/README.md
+- Mailing list: dev@echarts.apache.org

+ 44 - 0
node_modules/echarts/build/source-release/template/vote-release.tpl

@@ -0,0 +1,44 @@
+--- Mail To: ---
+dev@echarts.apache.org
+-----------------------------------------------------------
+
+--- Subject: ---
+[VOTE] Release {{ECHARTS_RELEASE_VERSION_FULL_NAME}}
+-----------------------------------------------------------
+
+Dear community,
+
+We are pleased to be calling this vote for the release of {{ECHARTS_RELEASE_VERSION_FULL_NAME}}.
+
+The release candidate to be voted over is available at:
+https://dist.apache.org/repos/dist/dev/echarts/{{ECHARTS_RELEASE_VERSION}}/
+
+The release candidate is signed with a GPG key available at:
+https://dist.apache.org/repos/dist/dev/echarts/KEYS
+
+The Git commit for this release is:
+https://gitbox.apache.org/repos/asf?p=echarts.git;a=commit;h={{ECHARTS_RELEASE_COMMIT}}
+
+The Release Note is available in:
+https://dist.apache.org/repos/dist/dev/echarts/{{ECHARTS_RELEASE_VERSION}}/RELEASE_NOTE.txt
+
+Build Guide:
+https://github.com/apache/echarts/blob/{{ECHARTS_RELEASE_VERSION}}/README.md#build
+
+NPM Install:
+npm i echarts@{{ECHARTS_RELEASE_VERSION}}
+https://www.npmjs.com/package/echarts/v/{{ECHARTS_RELEASE_VERSION}}
+
+Please vote on releasing this package as:
+{{ECHARTS_RELEASE_VERSION_FULL_NAME}}
+by "{{VOTE_UNTIL}}".
+
+[ ] +1 Release this package
+[ ] 0 I don't feel strongly about it, but don't object
+[ ] -1 Do not release this package because...
+
+Anyone can participate in testing and voting, not just committers, please
+feel free to try out the release candidate and provide your votes.
+
+A checklist for reference:
+https://cwiki.apache.org/confluence/display/ECHARTS/Apache+ECharts+Release+Checklist

+ 23 - 0
node_modules/echarts/build/source-release/template/vote-result.tpl

@@ -0,0 +1,23 @@
+--- Mail To: ---
+dev@echarts.apache.org
+-----------------------------------------------------------
+
+--- Subject: ---
+[RESULT] [VOTE] Release {{ECHARTS_RELEASE_VERSION_FULL_NAME}}
+-----------------------------------------------------------
+
+Thanks to all who voted or provided comments!
+
+We received ______NUMBER_OF_+1_VOTES______ +1 votes from the PMC members, and the release has PASSED:
+
++1 ______NAME______ (binding)
+
+Other votes from the community:
+
++1 ______NAME______
+
+Vote thread:
+https://lists.apache.org/thread/xxx
+
+I'm going to release the source release of Apache ECharts {{ECHARTS_RELEASE_VERSION}}.
+Thank you all for making this happen!

+ 20 - 0
node_modules/echarts/build/template/charts.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/charts';

+ 27 - 0
node_modules/echarts/build/template/charts.js

@@ -0,0 +1,27 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+// In somehow. If we export like
+// export * as LineChart './chart/line/install'
+// The exported code will be transformed to
+// import * as LineChart_1 './chart/line/install'; export {LineChart_1 as LineChart};
+// Treeshaking in webpack will not work even if we configured sideEffects to false in package.json
+
+export * from './lib/export/charts.js';

+ 20 - 0
node_modules/echarts/build/template/components.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/components';

+ 20 - 0
node_modules/echarts/build/template/components.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/components.js';

+ 20 - 0
node_modules/echarts/build/template/core.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/core';

+ 20 - 0
node_modules/echarts/build/template/core.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/core.js';

+ 20 - 0
node_modules/echarts/build/template/features.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/features';

+ 20 - 0
node_modules/echarts/build/template/features.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/features.js';

+ 20 - 0
node_modules/echarts/build/template/option.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/option';

+ 20 - 0
node_modules/echarts/build/template/renderers.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/renderers';

+ 20 - 0
node_modules/echarts/build/template/renderers.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/renderers.js';

+ 75 - 0
node_modules/echarts/build/testDts.js

@@ -0,0 +1,75 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const { TypeScriptVersion } = require('@definitelytyped/typescript-versions');
+const {
+    cleanTypeScriptInstalls,
+    installAllTypeScriptVersions,
+    typeScriptPath
+} = require('@definitelytyped/utils');
+const { runTsCompile } = require('./pre-publish');
+const globby = require('globby');
+const semver = require('semver');
+
+const MIN_VERSION = '3.5.0';
+
+async function installTs() {
+    // await cleanTypeScriptInstalls();
+    await installAllTypeScriptVersions();
+}
+
+async function runTests() {
+    const compilerOptions = {
+        declaration: false,
+        importHelpers: false,
+        sourceMap: false,
+        pretty: false,
+        removeComments: false,
+        allowJs: false,
+        outDir: __dirname + '/../test/types/tmp',
+        typeRoots: [__dirname + '/../types/dist'],
+        rootDir: __dirname + '/../test/types',
+
+        // Must pass in most strict cases
+        strict: true
+    };
+    const testsList = await globby(__dirname + '/../test/types/*.ts');
+
+    for (let version of TypeScriptVersion.shipped) {
+        if (semver.lt(version + '.0', MIN_VERSION)) {
+            continue;
+        }
+
+        console.log(`Testing ts version ${version}`);
+        const ts = require(typeScriptPath(version));
+        await runTsCompile(ts, compilerOptions, testsList);
+
+        console.log(`Finished test of ts version ${version}`);
+    }
+}
+
+async function main() {
+    await installTs();
+    await runTests();
+}
+
+module.exports = main;
+
+main();

+ 58 - 0
node_modules/echarts/build/transform-dev.js

@@ -0,0 +1,58 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+const babel = require('@babel/core');
+const parser = require('@babel/parser');
+
+function transformDEVPlugin ({types, template}) {
+    return {
+        visitor: {
+            Identifier: {
+                enter(path, state) {
+                    if (path.isIdentifier({ name: '__DEV__' }) && path.scope.hasGlobal('__DEV__')) {
+                        path.replaceWith(
+                            parser.parseExpression(state.opts.expr)
+                        );
+                    }
+                }
+            }
+        }
+    };
+};
+
+
+module.exports.transform = function (sourceCode, sourcemap, expr) {
+    let {code, map} = babel.transformSync(sourceCode, {
+        plugins: [ [transformDEVPlugin, {
+            expr: expr || 'process.env.NODE_ENV !== \'production\''
+        }] ],
+        compact: false,
+        sourceMaps: sourcemap
+    });
+
+    return {code, map};
+};
+
+/**
+ * @param {string} code
+ * @throws {Error} If check failed.
+ */
+module.exports.recheckDEV = function (code) {
+    return code.indexOf('process.env.NODE_ENV') >= 0;
+};

+ 20 - 0
node_modules/echarts/charts.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/charts';

+ 27 - 0
node_modules/echarts/charts.js

@@ -0,0 +1,27 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+// In somehow. If we export like
+// export * as LineChart './chart/line/install'
+// The exported code will be transformed to
+// import * as LineChart_1 './chart/line/install'; export {LineChart_1 as LineChart};
+// Treeshaking in webpack will not work even if we configured sideEffects to false in package.json
+
+export * from './lib/export/charts.js';

+ 20 - 0
node_modules/echarts/components.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/components';

+ 20 - 0
node_modules/echarts/components.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/components.js';

+ 20 - 0
node_modules/echarts/core.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/core';

+ 20 - 0
node_modules/echarts/core.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/core.js';

Разница между файлами не показана из-за своего большого размера
+ 62469 - 0
node_modules/echarts/dist/echarts.common.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/echarts.common.js.map


Разница между файлами не показана из-за своего большого размера
+ 45 - 0
node_modules/echarts/dist/echarts.common.min.js


Разница между файлами не показана из-за своего большого размера
+ 95673 - 0
node_modules/echarts/dist/echarts.esm.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/echarts.esm.js.map


Разница между файлами не показана из-за своего большого размера
+ 45 - 0
node_modules/echarts/dist/echarts.esm.min.js


Разница между файлами не показана из-за своего большого размера
+ 95739 - 0
node_modules/echarts/dist/echarts.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/echarts.js.map


Разница между файлами не показана из-за своего большого размера
+ 45 - 0
node_modules/echarts/dist/echarts.min.js


Разница между файлами не показана из-за своего большого размера
+ 45488 - 0
node_modules/echarts/dist/echarts.simple.js


Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/echarts.simple.js.map


Разница между файлами не показана из-за своего большого размера
+ 45 - 0
node_modules/echarts/dist/echarts.simple.min.js


+ 425 - 0
node_modules/echarts/dist/extension/bmap.js

@@ -0,0 +1,425 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts')) :
+  typeof define === 'function' && define.amd ? define(['exports', 'echarts'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.bmap = {}, global.echarts));
+}(this, (function (exports, echarts) { 'use strict';
+
+  function BMapCoordSys(bmap, api) {
+    this._bmap = bmap;
+    this.dimensions = ['lng', 'lat'];
+    this._mapOffset = [0, 0];
+    this._api = api;
+    this._projection = new BMap.MercatorProjection();
+  }
+
+  BMapCoordSys.prototype.type = 'bmap';
+  BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
+
+  BMapCoordSys.prototype.setZoom = function (zoom) {
+    this._zoom = zoom;
+  };
+
+  BMapCoordSys.prototype.setCenter = function (center) {
+    this._center = this._projection.lngLatToPoint(new BMap.Point(center[0], center[1]));
+  };
+
+  BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
+    this._mapOffset = mapOffset;
+  };
+
+  BMapCoordSys.prototype.getBMap = function () {
+    return this._bmap;
+  };
+
+  BMapCoordSys.prototype.dataToPoint = function (data) {
+    var point = new BMap.Point(data[0], data[1]); // TODO mercator projection is toooooooo slow
+    // let mercatorPoint = this._projection.lngLatToPoint(point);
+    // let width = this._api.getZr().getWidth();
+    // let height = this._api.getZr().getHeight();
+    // let divider = Math.pow(2, 18 - 10);
+    // return [
+    //     Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
+    //     Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
+    // ];
+
+    var px = this._bmap.pointToOverlayPixel(point);
+
+    var mapOffset = this._mapOffset;
+    return [px.x - mapOffset[0], px.y - mapOffset[1]];
+  };
+
+  BMapCoordSys.prototype.pointToData = function (pt) {
+    var mapOffset = this._mapOffset;
+    pt = this._bmap.overlayPixelToPoint({
+      x: pt[0] + mapOffset[0],
+      y: pt[1] + mapOffset[1]
+    });
+    return [pt.lng, pt.lat];
+  };
+
+  BMapCoordSys.prototype.getViewRect = function () {
+    var api = this._api;
+    return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
+  };
+
+  BMapCoordSys.prototype.getRoamTransform = function () {
+    return echarts.matrix.create();
+  };
+
+  BMapCoordSys.prototype.prepareCustoms = function () {
+    var rect = this.getViewRect();
+    return {
+      coordSys: {
+        // The name exposed to user is always 'cartesian2d' but not 'grid'.
+        type: 'bmap',
+        x: rect.x,
+        y: rect.y,
+        width: rect.width,
+        height: rect.height
+      },
+      api: {
+        coord: echarts.util.bind(this.dataToPoint, this),
+        size: echarts.util.bind(dataToCoordSize, this)
+      }
+    };
+  };
+
+  BMapCoordSys.prototype.convertToPixel = function (ecModel, finder, value) {
+    // here we ignore finder as only one bmap component is allowed
+    return this.dataToPoint(value);
+  };
+
+  BMapCoordSys.prototype.convertFromPixel = function (ecModel, finder, value) {
+    return this.pointToData(value);
+  };
+
+  function dataToCoordSize(dataSize, dataItem) {
+    dataItem = dataItem || [0, 0];
+    return echarts.util.map([0, 1], function (dimIdx) {
+      var val = dataItem[dimIdx];
+      var halfSize = dataSize[dimIdx] / 2;
+      var p1 = [];
+      var p2 = [];
+      p1[dimIdx] = val - halfSize;
+      p2[dimIdx] = val + halfSize;
+      p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
+      return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
+    }, this);
+  }
+
+  var Overlay; // For deciding which dimensions to use when creating list data
+
+  BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
+
+  function createOverlayCtor() {
+    function Overlay(root) {
+      this._root = root;
+    }
+
+    Overlay.prototype = new BMap.Overlay();
+    /**
+     * 初始化
+     *
+     * @param {BMap.Map} map
+     * @override
+     */
+
+    Overlay.prototype.initialize = function (map) {
+      map.getPanes().labelPane.appendChild(this._root);
+      return this._root;
+    };
+    /**
+     * @override
+     */
+
+
+    Overlay.prototype.draw = function () {};
+
+    return Overlay;
+  }
+
+  BMapCoordSys.create = function (ecModel, api) {
+    var bmapCoordSys;
+    var root = api.getDom(); // TODO Dispose
+
+    ecModel.eachComponent('bmap', function (bmapModel) {
+      var painter = api.getZr().painter;
+      var viewportRoot = painter.getViewportRoot();
+
+      if (typeof BMap === 'undefined') {
+        throw new Error('BMap api is not loaded');
+      }
+
+      Overlay = Overlay || createOverlayCtor();
+
+      if (bmapCoordSys) {
+        throw new Error('Only one bmap component can exist');
+      }
+
+      var bmap;
+
+      if (!bmapModel.__bmap) {
+        // Not support IE8
+        var bmapRoot = root.querySelector('.ec-extension-bmap');
+
+        if (bmapRoot) {
+          // Reset viewport left and top, which will be changed
+          // in moving handler in BMapView
+          viewportRoot.style.left = '0px';
+          viewportRoot.style.top = '0px';
+          root.removeChild(bmapRoot);
+        }
+
+        bmapRoot = document.createElement('div');
+        bmapRoot.className = 'ec-extension-bmap'; // fix #13424
+
+        bmapRoot.style.cssText = 'position:absolute;width:100%;height:100%';
+        root.appendChild(bmapRoot); // initializes bmap
+
+        var mapOptions = bmapModel.get('mapOptions');
+
+        if (mapOptions) {
+          mapOptions = echarts.util.clone(mapOptions); // Not support `mapType`, use `bmap.setMapType(MapType)` instead.
+
+          delete mapOptions.mapType;
+        }
+
+        bmap = bmapModel.__bmap = new BMap.Map(bmapRoot, mapOptions);
+        var overlay = new Overlay(viewportRoot);
+        bmap.addOverlay(overlay); // Override
+
+        painter.getViewportRootOffset = function () {
+          return {
+            offsetLeft: 0,
+            offsetTop: 0
+          };
+        };
+      }
+
+      bmap = bmapModel.__bmap; // Set bmap options
+      // centerAndZoom before layout and render
+
+      var center = bmapModel.get('center');
+      var zoom = bmapModel.get('zoom');
+
+      if (center && zoom) {
+        var bmapCenter = bmap.getCenter();
+        var bmapZoom = bmap.getZoom();
+        var centerOrZoomChanged = bmapModel.centerOrZoomChanged([bmapCenter.lng, bmapCenter.lat], bmapZoom);
+
+        if (centerOrZoomChanged) {
+          var pt = new BMap.Point(center[0], center[1]);
+          bmap.centerAndZoom(pt, zoom);
+        }
+      }
+
+      bmapCoordSys = new BMapCoordSys(bmap, api);
+      bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
+      bmapCoordSys.setZoom(zoom);
+      bmapCoordSys.setCenter(center);
+      bmapModel.coordinateSystem = bmapCoordSys;
+    });
+    ecModel.eachSeries(function (seriesModel) {
+      if (seriesModel.get('coordinateSystem') === 'bmap') {
+        seriesModel.coordinateSystem = bmapCoordSys;
+      }
+    }); // return created coordinate systems
+
+    return bmapCoordSys && [bmapCoordSys];
+  };
+
+  function v2Equal(a, b) {
+    return a && b && a[0] === b[0] && a[1] === b[1];
+  }
+
+  echarts.extendComponentModel({
+    type: 'bmap',
+    getBMap: function () {
+      // __bmap is injected when creating BMapCoordSys
+      return this.__bmap;
+    },
+    setCenterAndZoom: function (center, zoom) {
+      this.option.center = center;
+      this.option.zoom = zoom;
+    },
+    centerOrZoomChanged: function (center, zoom) {
+      var option = this.option;
+      return !(v2Equal(center, option.center) && zoom === option.zoom);
+    },
+    defaultOption: {
+      center: [104.114129, 37.550339],
+      zoom: 5,
+      // 2.0 https://lbsyun.baidu.com/custom/index.htm
+      mapStyle: {},
+      // 3.0 https://lbsyun.baidu.com/index.php?title=open/custom
+      mapStyleV2: {},
+      // See https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
+      mapOptions: {},
+      roam: false
+    }
+  });
+
+  function isEmptyObject(obj) {
+    for (var key in obj) {
+      if (obj.hasOwnProperty(key)) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  echarts.extendComponentView({
+    type: 'bmap',
+    render: function (bMapModel, ecModel, api) {
+      var rendering = true;
+      var bmap = bMapModel.getBMap();
+      var viewportRoot = api.getZr().painter.getViewportRoot();
+      var coordSys = bMapModel.coordinateSystem;
+
+      var moveHandler = function (type, target) {
+        if (rendering) {
+          return;
+        }
+
+        var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
+        var mapOffset = [-parseInt(offsetEl.style.left, 10) || 0, -parseInt(offsetEl.style.top, 10) || 0]; // only update style when map offset changed
+
+        var viewportRootStyle = viewportRoot.style;
+        var offsetLeft = mapOffset[0] + 'px';
+        var offsetTop = mapOffset[1] + 'px';
+
+        if (viewportRootStyle.left !== offsetLeft) {
+          viewportRootStyle.left = offsetLeft;
+        }
+
+        if (viewportRootStyle.top !== offsetTop) {
+          viewportRootStyle.top = offsetTop;
+        }
+
+        coordSys.setMapOffset(mapOffset);
+        bMapModel.__mapOffset = mapOffset;
+        api.dispatchAction({
+          type: 'bmapRoam',
+          animation: {
+            duration: 0
+          }
+        });
+      };
+
+      function zoomEndHandler() {
+        if (rendering) {
+          return;
+        }
+
+        api.dispatchAction({
+          type: 'bmapRoam',
+          animation: {
+            duration: 0
+          }
+        });
+      }
+
+      bmap.removeEventListener('moving', this._oldMoveHandler);
+      bmap.removeEventListener('moveend', this._oldMoveHandler);
+      bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
+      bmap.addEventListener('moving', moveHandler);
+      bmap.addEventListener('moveend', moveHandler);
+      bmap.addEventListener('zoomend', zoomEndHandler);
+      this._oldMoveHandler = moveHandler;
+      this._oldZoomEndHandler = zoomEndHandler;
+      var roam = bMapModel.get('roam');
+
+      if (roam && roam !== 'scale') {
+        bmap.enableDragging();
+      } else {
+        bmap.disableDragging();
+      }
+
+      if (roam && roam !== 'move') {
+        bmap.enableScrollWheelZoom();
+        bmap.enableDoubleClickZoom();
+        bmap.enablePinchToZoom();
+      } else {
+        bmap.disableScrollWheelZoom();
+        bmap.disableDoubleClickZoom();
+        bmap.disablePinchToZoom();
+      }
+      /* map 2.0 */
+
+
+      var originalStyle = bMapModel.__mapStyle;
+      var newMapStyle = bMapModel.get('mapStyle') || {}; // FIXME, Not use JSON methods
+
+      var mapStyleStr = JSON.stringify(newMapStyle);
+
+      if (JSON.stringify(originalStyle) !== mapStyleStr) {
+        // FIXME May have blank tile when dragging if setMapStyle
+        if (!isEmptyObject(newMapStyle)) {
+          bmap.setMapStyle(echarts.util.clone(newMapStyle));
+        }
+
+        bMapModel.__mapStyle = JSON.parse(mapStyleStr);
+      }
+      /* map 3.0 */
+
+
+      var originalStyle2 = bMapModel.__mapStyle2;
+      var newMapStyle2 = bMapModel.get('mapStyleV2') || {}; // FIXME, Not use JSON methods
+
+      var mapStyleStr2 = JSON.stringify(newMapStyle2);
+
+      if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
+        // FIXME May have blank tile when dragging if setMapStyle
+        if (!isEmptyObject(newMapStyle2)) {
+          bmap.setMapStyleV2(echarts.util.clone(newMapStyle2));
+        }
+
+        bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2);
+      }
+
+      rendering = false;
+    }
+  });
+
+  echarts.registerCoordinateSystem('bmap', BMapCoordSys); // Action
+
+  echarts.registerAction({
+    type: 'bmapRoam',
+    event: 'bmapRoam',
+    update: 'updateLayout'
+  }, function (payload, ecModel) {
+    ecModel.eachComponent('bmap', function (bMapModel) {
+      var bmap = bMapModel.getBMap();
+      var center = bmap.getCenter();
+      bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
+    });
+  });
+  var version = '1.0.0';
+
+  exports.version = version;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=bmap.js.map

Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/extension/bmap.js.map


Разница между файлами не показана из-за своего большого размера
+ 22 - 0
node_modules/echarts/dist/extension/bmap.min.js


+ 436 - 0
node_modules/echarts/dist/extension/dataTool.js

@@ -0,0 +1,436 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts')) :
+    typeof define === 'function' && define.amd ? define(['exports', 'echarts'], factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.dataTool = {}, global.echarts));
+}(this, (function (exports, echarts) { 'use strict';
+
+    var BUILTIN_OBJECT = reduce([
+        'Function',
+        'RegExp',
+        'Date',
+        'Error',
+        'CanvasGradient',
+        'CanvasPattern',
+        'Image',
+        'Canvas'
+    ], function (obj, val) {
+        obj['[object ' + val + ']'] = true;
+        return obj;
+    }, {});
+    var TYPED_ARRAY = reduce([
+        'Int8',
+        'Uint8',
+        'Uint8Clamped',
+        'Int16',
+        'Uint16',
+        'Int32',
+        'Uint32',
+        'Float32',
+        'Float64'
+    ], function (obj, val) {
+        obj['[object ' + val + 'Array]'] = true;
+        return obj;
+    }, {});
+    var arrayProto = Array.prototype;
+    var nativeSlice = arrayProto.slice;
+    var nativeMap = arrayProto.map;
+    var ctorFunction = function () { }.constructor;
+    var protoFunction = ctorFunction ? ctorFunction.prototype : null;
+    function map(arr, cb, context) {
+        if (!arr) {
+            return [];
+        }
+        if (!cb) {
+            return slice(arr);
+        }
+        if (arr.map && arr.map === nativeMap) {
+            return arr.map(cb, context);
+        }
+        else {
+            var result = [];
+            for (var i = 0, len = arr.length; i < len; i++) {
+                result.push(cb.call(context, arr[i], i, arr));
+            }
+            return result;
+        }
+    }
+    function reduce(arr, cb, memo, context) {
+        if (!(arr && cb)) {
+            return;
+        }
+        for (var i = 0, len = arr.length; i < len; i++) {
+            memo = cb.call(context, memo, arr[i], i, arr);
+        }
+        return memo;
+    }
+    function bindPolyfill(func, context) {
+        var args = [];
+        for (var _i = 2; _i < arguments.length; _i++) {
+            args[_i - 2] = arguments[_i];
+        }
+        return function () {
+            return func.apply(context, args.concat(nativeSlice.call(arguments)));
+        };
+    }
+    var bind = (protoFunction && isFunction(protoFunction.bind))
+        ? protoFunction.call.bind(protoFunction.bind)
+        : bindPolyfill;
+    function isFunction(value) {
+        return typeof value === 'function';
+    }
+    function slice(arr) {
+        var args = [];
+        for (var _i = 1; _i < arguments.length; _i++) {
+            args[_i - 1] = arguments[_i];
+        }
+        return nativeSlice.apply(arr, args);
+    }
+
+    function parse(xml) {
+      var doc;
+
+      if (typeof xml === 'string') {
+        var parser = new DOMParser();
+        doc = parser.parseFromString(xml, 'text/xml');
+      } else {
+        doc = xml;
+      }
+
+      if (!doc || doc.getElementsByTagName('parsererror').length) {
+        return null;
+      }
+
+      var gexfRoot = getChildByTagName(doc, 'gexf');
+
+      if (!gexfRoot) {
+        return null;
+      }
+
+      var graphRoot = getChildByTagName(gexfRoot, 'graph');
+      var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
+      var attributesMap = {};
+
+      for (var i = 0; i < attributes.length; i++) {
+        attributesMap[attributes[i].id] = attributes[i];
+      }
+
+      return {
+        nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),
+        links: parseEdges(getChildByTagName(graphRoot, 'edges'))
+      };
+    }
+
+    function parseAttributes(parent) {
+      return parent ? map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {
+        return {
+          id: getAttr(attribDom, 'id'),
+          title: getAttr(attribDom, 'title'),
+          type: getAttr(attribDom, 'type')
+        };
+      }) : [];
+    }
+
+    function parseNodes(parent, attributesMap) {
+      return parent ? map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
+        var id = getAttr(nodeDom, 'id');
+        var label = getAttr(nodeDom, 'label');
+        var node = {
+          id: id,
+          name: label,
+          itemStyle: {
+            normal: {}
+          }
+        };
+        var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
+        var vizPosDom = getChildByTagName(nodeDom, 'viz:position');
+        var vizColorDom = getChildByTagName(nodeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
+
+        var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
+
+        if (vizSizeDom) {
+          node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
+        }
+
+        if (vizPosDom) {
+          node.x = parseFloat(getAttr(vizPosDom, 'x'));
+          node.y = parseFloat(getAttr(vizPosDom, 'y')); // z
+        }
+
+        if (vizColorDom) {
+          node.itemStyle.normal.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
+        } // if (vizShapeDom) {
+        // node.shape = getAttr(vizShapeDom, 'shape');
+        // }
+
+
+        if (attvaluesDom) {
+          var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
+          node.attributes = {};
+
+          for (var j = 0; j < attvalueDomList.length; j++) {
+            var attvalueDom = attvalueDomList[j];
+            var attId = getAttr(attvalueDom, 'for');
+            var attValue = getAttr(attvalueDom, 'value');
+            var attribute = attributesMap[attId];
+
+            if (attribute) {
+              switch (attribute.type) {
+                case 'integer':
+                case 'long':
+                  attValue = parseInt(attValue, 10);
+                  break;
+
+                case 'float':
+                case 'double':
+                  attValue = parseFloat(attValue);
+                  break;
+
+                case 'boolean':
+                  attValue = attValue.toLowerCase() === 'true';
+                  break;
+              }
+
+              node.attributes[attId] = attValue;
+            }
+          }
+        }
+
+        return node;
+      }) : [];
+    }
+
+    function parseEdges(parent) {
+      return parent ? map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
+        var id = getAttr(edgeDom, 'id');
+        var label = getAttr(edgeDom, 'label');
+        var sourceId = getAttr(edgeDom, 'source');
+        var targetId = getAttr(edgeDom, 'target');
+        var edge = {
+          id: id,
+          name: label,
+          source: sourceId,
+          target: targetId,
+          lineStyle: {
+            normal: {}
+          }
+        };
+        var lineStyle = edge.lineStyle.normal;
+        var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
+        var vizColorDom = getChildByTagName(edgeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
+
+        if (vizThicknessDom) {
+          lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
+        }
+
+        if (vizColorDom) {
+          lineStyle.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
+        } // if (vizShapeDom) {
+        //     edge.shape = vizShapeDom.getAttribute('shape');
+        // }
+
+
+        return edge;
+      }) : [];
+    }
+
+    function getAttr(el, attrName) {
+      return el.getAttribute(attrName);
+    }
+
+    function getChildByTagName(parent, tagName) {
+      var node = parent.firstChild;
+
+      while (node) {
+        if (node.nodeType !== 1 || node.nodeName.toLowerCase() !== tagName.toLowerCase()) {
+          node = node.nextSibling;
+        } else {
+          return node;
+        }
+      }
+
+      return null;
+    }
+
+    function getChildrenByTagName(parent, tagName) {
+      var node = parent.firstChild;
+      var children = [];
+
+      while (node) {
+        if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
+          children.push(node);
+        }
+
+        node = node.nextSibling;
+      }
+
+      return children;
+    }
+
+    var gexf = /*#__PURE__*/Object.freeze({
+        __proto__: null,
+        parse: parse
+    });
+
+    /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+
+
+    /**
+     * AUTO-GENERATED FILE. DO NOT MODIFY.
+     */
+
+    /*
+    * Licensed to the Apache Software Foundation (ASF) under one
+    * or more contributor license agreements.  See the NOTICE file
+    * distributed with this work for additional information
+    * regarding copyright ownership.  The ASF licenses this file
+    * to you under the Apache License, Version 2.0 (the
+    * "License"); you may not use this file except in compliance
+    * with the License.  You may obtain a copy of the License at
+    *
+    *   http://www.apache.org/licenses/LICENSE-2.0
+    *
+    * Unless required by applicable law or agreed to in writing,
+    * software distributed under the License is distributed on an
+    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    * KIND, either express or implied.  See the License for the
+    * specific language governing permissions and limitations
+    * under the License.
+    */
+    function asc(arr) {
+      arr.sort(function (a, b) {
+        return a - b;
+      });
+      return arr;
+    }
+
+    function quantile(ascArr, p) {
+      var H = (ascArr.length - 1) * p + 1;
+      var h = Math.floor(H);
+      var v = +ascArr[h - 1];
+      var e = H - h;
+      return e ? v + e * (ascArr[h] - v) : v;
+    }
+    /**
+     * See:
+     *  <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
+     *  <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
+     *
+     * Helper method for preparing data.
+     *
+     * @param {Array.<number>} rawData like
+     *        [
+     *            [12,232,443], (raw data set for the first box)
+     *            [3843,5545,1232], (raw data set for the second box)
+     *            ...
+     *        ]
+     * @param {Object} [opt]
+     *
+     * @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier.
+     *      default 1.5, means Q1 - 1.5 * (Q3 - Q1).
+     *      If 'none'/0 passed, min bound will not be used.
+     * @param {(number|string)} [opt.layout='horizontal']
+     *      Box plot layout, can be 'horizontal' or 'vertical'
+     * @return {Object} {
+     *      boxData: Array.<Array.<number>>
+     *      outliers: Array.<Array.<number>>
+     *      axisData: Array.<string>
+     * }
+     */
+
+
+    function prepareBoxplotData (rawData, opt) {
+      opt = opt || {};
+      var boxData = [];
+      var outliers = [];
+      var axisData = [];
+      var boundIQR = opt.boundIQR;
+      var useExtreme = boundIQR === 'none' || boundIQR === 0;
+
+      for (var i = 0; i < rawData.length; i++) {
+        axisData.push(i + '');
+        var ascList = asc(rawData[i].slice());
+        var Q1 = quantile(ascList, 0.25);
+        var Q2 = quantile(ascList, 0.5);
+        var Q3 = quantile(ascList, 0.75);
+        var min = ascList[0];
+        var max = ascList[ascList.length - 1];
+        var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
+        var low = useExtreme ? min : Math.max(min, Q1 - bound);
+        var high = useExtreme ? max : Math.min(max, Q3 + bound);
+        boxData.push([low, Q1, Q2, Q3, high]);
+
+        for (var j = 0; j < ascList.length; j++) {
+          var dataItem = ascList[j];
+
+          if (dataItem < low || dataItem > high) {
+            var outlier = [i, dataItem];
+            opt.layout === 'vertical' && outlier.reverse();
+            outliers.push(outlier);
+          }
+        }
+      }
+
+      return {
+        boxData: boxData,
+        outliers: outliers,
+        axisData: axisData
+      };
+    }
+
+    var version = '1.0.0';
+    // For backward compatibility, where the namespace `dataTool` will
+    // be mounted on `echarts` is the extension `dataTool` is imported.
+    // But the old version of echarts do not have `dataTool` namespace,
+    // so check it before mounting.
+
+    if (echarts.dataTool) {
+      echarts.dataTool.version = version;
+      echarts.dataTool.gexf = gexf;
+      echarts.dataTool.prepareBoxplotData = prepareBoxplotData; // echarts.dataTool.boxplotTransform = boxplotTransform;
+    }
+
+    exports.gexf = gexf;
+    exports.prepareBoxplotData = prepareBoxplotData;
+    exports.version = version;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=dataTool.js.map

Разница между файлами не показана из-за своего большого размера
+ 1 - 0
node_modules/echarts/dist/extension/dataTool.js.map


Разница между файлами не показана из-за своего большого размера
+ 22 - 0
node_modules/echarts/dist/extension/dataTool.min.js


+ 248 - 0
node_modules/echarts/extension-src/bmap/BMapCoordSys.ts

@@ -0,0 +1,248 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+/* global BMap */
+
+import {
+    util as zrUtil,
+    graphic,
+    matrix
+} from 'echarts';
+
+function BMapCoordSys(bmap, api) {
+    this._bmap = bmap;
+    this.dimensions = ['lng', 'lat'];
+    this._mapOffset = [0, 0];
+
+    this._api = api;
+
+    this._projection = new BMap.MercatorProjection();
+}
+
+BMapCoordSys.prototype.type = 'bmap';
+
+BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
+
+BMapCoordSys.prototype.setZoom = function (zoom) {
+    this._zoom = zoom;
+};
+
+BMapCoordSys.prototype.setCenter = function (center) {
+    this._center = this._projection.lngLatToPoint(new BMap.Point(center[0], center[1]));
+};
+
+BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
+    this._mapOffset = mapOffset;
+};
+
+BMapCoordSys.prototype.getBMap = function () {
+    return this._bmap;
+};
+
+BMapCoordSys.prototype.dataToPoint = function (data) {
+    const point = new BMap.Point(data[0], data[1]);
+    // TODO mercator projection is toooooooo slow
+    // let mercatorPoint = this._projection.lngLatToPoint(point);
+
+    // let width = this._api.getZr().getWidth();
+    // let height = this._api.getZr().getHeight();
+    // let divider = Math.pow(2, 18 - 10);
+    // return [
+    //     Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
+    //     Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
+    // ];
+    const px = this._bmap.pointToOverlayPixel(point);
+    const mapOffset = this._mapOffset;
+    return [px.x - mapOffset[0], px.y - mapOffset[1]];
+};
+
+BMapCoordSys.prototype.pointToData = function (pt) {
+    const mapOffset = this._mapOffset;
+    pt = this._bmap.overlayPixelToPoint({
+        x: pt[0] + mapOffset[0],
+        y: pt[1] + mapOffset[1]
+    });
+    return [pt.lng, pt.lat];
+};
+
+BMapCoordSys.prototype.getViewRect = function () {
+    const api = this._api;
+    return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
+};
+
+BMapCoordSys.prototype.getRoamTransform = function () {
+    return matrix.create();
+};
+
+BMapCoordSys.prototype.prepareCustoms = function () {
+    const rect = this.getViewRect();
+    return {
+        coordSys: {
+            // The name exposed to user is always 'cartesian2d' but not 'grid'.
+            type: 'bmap',
+            x: rect.x,
+            y: rect.y,
+            width: rect.width,
+            height: rect.height
+        },
+        api: {
+            coord: zrUtil.bind(this.dataToPoint, this),
+            size: zrUtil.bind(dataToCoordSize, this)
+        }
+    };
+};
+
+BMapCoordSys.prototype.convertToPixel = function (ecModel, finder, value) {
+    // here we ignore finder as only one bmap component is allowed
+    return this.dataToPoint(value);
+};
+
+BMapCoordSys.prototype.convertFromPixel = function (ecModel, finder, value) {
+    return this.pointToData(value);
+};
+
+function dataToCoordSize(dataSize, dataItem) {
+    dataItem = dataItem || [0, 0];
+    return zrUtil.map([0, 1], function (dimIdx) {
+        const val = dataItem[dimIdx];
+        const halfSize = dataSize[dimIdx] / 2;
+        const p1 = [];
+        const p2 = [];
+        p1[dimIdx] = val - halfSize;
+        p2[dimIdx] = val + halfSize;
+        p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
+        return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
+    }, this);
+}
+
+let Overlay;
+
+// For deciding which dimensions to use when creating list data
+BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
+
+function createOverlayCtor() {
+    function Overlay(root) {
+        this._root = root;
+    }
+
+    Overlay.prototype = new BMap.Overlay();
+    /**
+     * 初始化
+     *
+     * @param {BMap.Map} map
+     * @override
+     */
+    Overlay.prototype.initialize = function (map) {
+        map.getPanes().labelPane.appendChild(this._root);
+        return this._root;
+    };
+    /**
+     * @override
+     */
+    Overlay.prototype.draw = function () {};
+
+    return Overlay;
+}
+
+BMapCoordSys.create = function (ecModel, api) {
+    let bmapCoordSys;
+    const root = api.getDom();
+
+    // TODO Dispose
+    ecModel.eachComponent('bmap', function (bmapModel) {
+        const painter = api.getZr().painter;
+        const viewportRoot = painter.getViewportRoot();
+        if (typeof BMap === 'undefined') {
+            throw new Error('BMap api is not loaded');
+        }
+        Overlay = Overlay || createOverlayCtor();
+        if (bmapCoordSys) {
+            throw new Error('Only one bmap component can exist');
+        }
+        let bmap;
+        if (!bmapModel.__bmap) {
+            // Not support IE8
+            let bmapRoot = root.querySelector('.ec-extension-bmap');
+            if (bmapRoot) {
+                // Reset viewport left and top, which will be changed
+                // in moving handler in BMapView
+                viewportRoot.style.left = '0px';
+                viewportRoot.style.top = '0px';
+                root.removeChild(bmapRoot);
+            }
+            bmapRoot = document.createElement('div');
+            bmapRoot.className = 'ec-extension-bmap';
+            // fix #13424
+            bmapRoot.style.cssText = 'position:absolute;width:100%;height:100%';
+            root.appendChild(bmapRoot);
+
+            // initializes bmap
+            let mapOptions = bmapModel.get('mapOptions');
+            if (mapOptions) {
+                mapOptions = zrUtil.clone(mapOptions);
+                // Not support `mapType`, use `bmap.setMapType(MapType)` instead.
+                delete mapOptions.mapType;
+            }
+
+            bmap = bmapModel.__bmap = new BMap.Map(bmapRoot, mapOptions);
+
+            const overlay = new Overlay(viewportRoot);
+            bmap.addOverlay(overlay);
+
+            // Override
+            painter.getViewportRootOffset = function () {
+                return {offsetLeft: 0, offsetTop: 0};
+            };
+        }
+        bmap = bmapModel.__bmap;
+
+        // Set bmap options
+        // centerAndZoom before layout and render
+        const center = bmapModel.get('center');
+        const zoom = bmapModel.get('zoom');
+        if (center && zoom) {
+            const bmapCenter = bmap.getCenter();
+            const bmapZoom = bmap.getZoom();
+            const centerOrZoomChanged = bmapModel.centerOrZoomChanged([bmapCenter.lng, bmapCenter.lat], bmapZoom);
+            if (centerOrZoomChanged) {
+                const pt = new BMap.Point(center[0], center[1]);
+                bmap.centerAndZoom(pt, zoom);
+            }
+        }
+
+        bmapCoordSys = new BMapCoordSys(bmap, api);
+        bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
+        bmapCoordSys.setZoom(zoom);
+        bmapCoordSys.setCenter(center);
+
+        bmapModel.coordinateSystem = bmapCoordSys;
+    });
+
+    ecModel.eachSeries(function (seriesModel) {
+        if (seriesModel.get('coordinateSystem') === 'bmap') {
+            seriesModel.coordinateSystem = bmapCoordSys;
+        }
+    });
+
+    // return created coordinate systems
+    return bmapCoordSys && [bmapCoordSys];
+};
+
+export default BMapCoordSys;

+ 62 - 0
node_modules/echarts/extension-src/bmap/BMapModel.ts

@@ -0,0 +1,62 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+import * as echarts from 'echarts';
+
+function v2Equal(a, b) {
+    return a && b && a[0] === b[0] && a[1] === b[1];
+}
+
+export default echarts.extendComponentModel({
+    type: 'bmap',
+
+    getBMap: function () {
+        // __bmap is injected when creating BMapCoordSys
+        return this.__bmap;
+    },
+
+    setCenterAndZoom: function (center, zoom) {
+        this.option.center = center;
+        this.option.zoom = zoom;
+    },
+
+    centerOrZoomChanged: function (center, zoom) {
+        const option = this.option;
+        return !(v2Equal(center, option.center) && zoom === option.zoom);
+    },
+
+    defaultOption: {
+
+        center: [104.114129, 37.550339],
+
+        zoom: 5,
+
+        // 2.0 https://lbsyun.baidu.com/custom/index.htm
+        mapStyle: {},
+
+        // 3.0 https://lbsyun.baidu.com/index.php?title=open/custom
+        mapStyleV2: {},
+
+        // See https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
+        mapOptions: {},
+
+        roam: false
+    }
+});

+ 142 - 0
node_modules/echarts/extension-src/bmap/BMapView.ts

@@ -0,0 +1,142 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+import * as echarts from 'echarts';
+
+function isEmptyObject(obj) {
+    for (const key in obj) {
+        if (obj.hasOwnProperty(key)) {
+            return false;
+        }
+    }
+    return true;
+}
+
+export default echarts.extendComponentView({
+    type: 'bmap',
+
+    render: function (bMapModel, ecModel, api) {
+        let rendering = true;
+
+        const bmap = bMapModel.getBMap();
+        const viewportRoot = api.getZr().painter.getViewportRoot();
+        const coordSys = bMapModel.coordinateSystem;
+        const moveHandler = function (type, target) {
+            if (rendering) {
+                return;
+            }
+            const offsetEl = viewportRoot.parentNode.parentNode.parentNode;
+            const mapOffset = [
+                -parseInt(offsetEl.style.left, 10) || 0,
+                -parseInt(offsetEl.style.top, 10) || 0
+            ];
+            // only update style when map offset changed
+            const viewportRootStyle = viewportRoot.style;
+            const offsetLeft = mapOffset[0] + 'px';
+            const offsetTop = mapOffset[1] + 'px';
+            if (viewportRootStyle.left !== offsetLeft) {
+                viewportRootStyle.left = offsetLeft;
+            }
+            if (viewportRootStyle.top !== offsetTop) {
+                viewportRootStyle.top = offsetTop;
+            }
+
+            coordSys.setMapOffset(mapOffset);
+            bMapModel.__mapOffset = mapOffset;
+
+            api.dispatchAction({
+                type: 'bmapRoam',
+                animation: {
+                    duration: 0
+                }
+            });
+        };
+
+        function zoomEndHandler() {
+            if (rendering) {
+                return;
+            }
+            api.dispatchAction({
+                type: 'bmapRoam',
+                animation: {
+                    duration: 0
+                }
+            });
+        }
+
+        bmap.removeEventListener('moving', this._oldMoveHandler);
+        bmap.removeEventListener('moveend', this._oldMoveHandler);
+        bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
+        bmap.addEventListener('moving', moveHandler);
+        bmap.addEventListener('moveend', moveHandler);
+        bmap.addEventListener('zoomend', zoomEndHandler);
+
+        this._oldMoveHandler = moveHandler;
+        this._oldZoomEndHandler = zoomEndHandler;
+
+        const roam = bMapModel.get('roam');
+        if (roam && roam !== 'scale') {
+            bmap.enableDragging();
+        }
+        else {
+            bmap.disableDragging();
+        }
+        if (roam && roam !== 'move') {
+            bmap.enableScrollWheelZoom();
+            bmap.enableDoubleClickZoom();
+            bmap.enablePinchToZoom();
+        }
+        else {
+            bmap.disableScrollWheelZoom();
+            bmap.disableDoubleClickZoom();
+            bmap.disablePinchToZoom();
+        }
+
+        /* map 2.0 */
+        const originalStyle = bMapModel.__mapStyle;
+
+        const newMapStyle = bMapModel.get('mapStyle') || {};
+        // FIXME, Not use JSON methods
+        const mapStyleStr = JSON.stringify(newMapStyle);
+        if (JSON.stringify(originalStyle) !== mapStyleStr) {
+            // FIXME May have blank tile when dragging if setMapStyle
+            if (!isEmptyObject(newMapStyle)) {
+                bmap.setMapStyle(echarts.util.clone(newMapStyle));
+            }
+            bMapModel.__mapStyle = JSON.parse(mapStyleStr);
+        }
+
+        /* map 3.0 */
+        const originalStyle2 = bMapModel.__mapStyle2;
+
+        const newMapStyle2 = bMapModel.get('mapStyleV2') || {};
+        // FIXME, Not use JSON methods
+        const mapStyleStr2 = JSON.stringify(newMapStyle2);
+        if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
+            // FIXME May have blank tile when dragging if setMapStyle
+            if (!isEmptyObject(newMapStyle2)) {
+                bmap.setMapStyleV2(echarts.util.clone(newMapStyle2));
+            }
+            bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2);
+        }
+
+        rendering = false;
+    }
+});

+ 84 - 0
node_modules/echarts/extension-src/bmap/README.md

@@ -0,0 +1,84 @@
+## 百度地图扩展
+
+ECharts 百度地图扩展,可以在百度地图上展现 [点图](https://echarts.apache.org/zh/option.html#series-scatter),[线图](https://echarts.apache.org/zh/option.html#series-lines),[热力图](https://echarts.apache.org/zh/option.html#series-heatmap) 等可视化。
+
+
+### 示例
+
+[全国主要城市空气质量](https://echarts.apache.org/examples/zh/editor.html?c=effectScatter-bmap)
+
+[北京公交路线](https://echarts.apache.org/examples/zh/editor.html?c=lines-bmap-bus)
+
+[北京公交路线特效](https://echarts.apache.org/examples/zh/editor.html?c=lines-bmap-effect)
+
+[杭州热门步行路线](https://echarts.apache.org/examples/zh/editor.html?c=heatmap-bmap)
+
+[在地图上显示分箱图](https://echarts.apache.org/examples/zh/editor.html?c=map-bin)
+
+
+### 引入
+
+可以直接引入打包好的扩展文件和百度地图的 jssdk
+
+```html
+<!-- 引入百度地图的 JS SDK,这里需要使用你在百度地图开发者平台申请的 ak -->
+<!-- 如需使用百度地图 2.0 版本,请将 `v=3.0` 改为 `v=2.0` -->
+<script src="https://api.map.baidu.com/api?v=3.0&ak="></script>
+<!-- 引入 ECharts -->
+<script src="dist/echarts.min.js"></script>
+<!-- 引入百度地图扩展 -->
+<script src="dist/extension/bmap.min.js"></script>
+```
+
+如果是 webpack 打包,也可以 require 引入
+
+```js
+require('echarts');
+require('echarts/extension/bmap/bmap');
+```
+
+插件会自动注册相应的组件。
+
+### 使用
+
+扩展主要提供了跟 geo 一样的坐标系和底图的绘制,因此配置方式非常简单,如下
+
+```js
+option = {
+    // 加载 bmap 组件
+    bmap: {
+        // 百度地图中心经纬度。默认为 [104.114129, 37.550339]。
+        center: [120.13066322374, 30.240018034923],
+        // 百度地图缩放级别。默认为 5。
+        zoom: 14,
+        // 是否开启拖拽缩放,可以只设置 'scale' 或者 'move'。默认关闭。
+        roam: true,
+        // 百度地图的旧版自定义样式,见 https://lbsyun.baidu.com/custom/index.htm
+        mapStyle: {},
+        // 百度地图 3.0 之后的新版自定义样式,见 https://lbsyun.baidu.com/index.php?title=open/custom
+        mapStyleV2: {},
+        // 百度地图的初始化配置,见 https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
+        mapOptions: {
+            // 禁用百度地图自带的底图可点功能
+            enableMapClick: false
+        }
+    },
+    series: [{
+        type: 'scatter',
+        // 使用百度地图坐标系
+        coordinateSystem: 'bmap',
+        // 数据格式跟在 geo 坐标系上一样,每一项都是 [经度,纬度,数值大小,其它维度...]
+        data: [ [120, 30, 1] ],
+        // 编码数据项中第三个元素作为 value 维度
+        encode: {
+            value: 2
+        }
+    }]
+}
+
+// 获取百度地图实例,使用百度地图自带的控件
+var bmap = chart.getModel().getComponent('bmap').getBMap();
+bmap.addControl(new BMap.MapTypeControl());
+```
+
+

+ 46 - 0
node_modules/echarts/extension-src/bmap/bmap.ts

@@ -0,0 +1,46 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+/**
+ * BMap component extension
+ */
+
+import * as echarts from 'echarts';
+import BMapCoordSys from './BMapCoordSys';
+
+import './BMapModel';
+import './BMapView';
+
+echarts.registerCoordinateSystem('bmap', BMapCoordSys);
+
+// Action
+echarts.registerAction({
+    type: 'bmapRoam',
+    event: 'bmapRoam',
+    update: 'updateLayout'
+}, function (payload, ecModel) {
+    ecModel.eachComponent('bmap', function (bMapModel) {
+        const bmap = bMapModel.getBMap();
+        const center = bmap.getCenter();
+        bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
+    });
+});
+
+export const version = '1.0.0';

+ 222 - 0
node_modules/echarts/extension-src/dataTool/gexf.ts

@@ -0,0 +1,222 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+/**
+ * This is a parse of GEXF.
+ *
+ * The spec of GEXF:
+ * https://gephi.org/gexf/1.2draft/gexf-12draft-primer.pdf
+ */
+
+import * as zrUtil from 'zrender/src/core/util';
+
+export function parse(xml) {
+    let doc;
+    if (typeof xml === 'string') {
+        const parser = new DOMParser();
+        doc = parser.parseFromString(xml, 'text/xml');
+    }
+    else {
+        doc = xml;
+    }
+    if (!doc || doc.getElementsByTagName('parsererror').length) {
+        return null;
+    }
+
+    const gexfRoot = getChildByTagName(doc, 'gexf');
+
+    if (!gexfRoot) {
+        return null;
+    }
+
+    const graphRoot = getChildByTagName(gexfRoot, 'graph');
+
+    const attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
+    const attributesMap = {};
+    for (let i = 0; i < attributes.length; i++) {
+        attributesMap[attributes[i].id] = attributes[i];
+    }
+
+    return {
+        nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),
+        links: parseEdges(getChildByTagName(graphRoot, 'edges'))
+    };
+}
+
+function parseAttributes(parent) {
+    return parent ? zrUtil.map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {
+        return {
+            id: getAttr(attribDom, 'id'),
+            title: getAttr(attribDom, 'title'),
+            type: getAttr(attribDom, 'type')
+        };
+    }) : [];
+}
+
+function parseNodes(parent, attributesMap) {
+    return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
+
+        const id = getAttr(nodeDom, 'id');
+        const label = getAttr(nodeDom, 'label');
+
+        const node = {
+            id: id,
+            name: label,
+            itemStyle: {
+                normal: {}
+            }
+        };
+
+        const vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
+        const vizPosDom = getChildByTagName(nodeDom, 'viz:position');
+        const vizColorDom = getChildByTagName(nodeDom, 'viz:color');
+        // let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
+
+        const attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
+
+        if (vizSizeDom) {
+            node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
+        }
+        if (vizPosDom) {
+            node.x = parseFloat(getAttr(vizPosDom, 'x'));
+            node.y = parseFloat(getAttr(vizPosDom, 'y'));
+            // z
+        }
+        if (vizColorDom) {
+            node.itemStyle.normal.color = 'rgb(' + [
+                getAttr(vizColorDom, 'r') | 0,
+                getAttr(vizColorDom, 'g') | 0,
+                getAttr(vizColorDom, 'b') | 0
+            ].join(',') + ')';
+        }
+        // if (vizShapeDom) {
+            // node.shape = getAttr(vizShapeDom, 'shape');
+        // }
+        if (attvaluesDom) {
+            const attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
+
+            node.attributes = {};
+
+            for (let j = 0; j < attvalueDomList.length; j++) {
+                const attvalueDom = attvalueDomList[j];
+                const attId = getAttr(attvalueDom, 'for');
+                let attValue = getAttr(attvalueDom, 'value');
+                const attribute = attributesMap[attId];
+
+                if (attribute) {
+                    switch (attribute.type) {
+                        case 'integer':
+                        case 'long':
+                            attValue = parseInt(attValue, 10);
+                            break;
+                        case 'float':
+                        case 'double':
+                            attValue = parseFloat(attValue);
+                            break;
+                        case 'boolean':
+                            attValue = attValue.toLowerCase() === 'true';
+                            break;
+                        default:
+                    }
+                    node.attributes[attId] = attValue;
+                }
+            }
+        }
+
+        return node;
+    }) : [];
+}
+
+function parseEdges(parent) {
+    return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
+        const id = getAttr(edgeDom, 'id');
+        const label = getAttr(edgeDom, 'label');
+
+        const sourceId = getAttr(edgeDom, 'source');
+        const targetId = getAttr(edgeDom, 'target');
+
+        const edge = {
+            id: id,
+            name: label,
+            source: sourceId,
+            target: targetId,
+            lineStyle: {
+                normal: {}
+            }
+        };
+
+        const lineStyle = edge.lineStyle.normal;
+
+        const vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
+        const vizColorDom = getChildByTagName(edgeDom, 'viz:color');
+        // let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
+
+        if (vizThicknessDom) {
+            lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
+        }
+        if (vizColorDom) {
+            lineStyle.color = 'rgb(' + [
+                getAttr(vizColorDom, 'r') | 0,
+                getAttr(vizColorDom, 'g') | 0,
+                getAttr(vizColorDom, 'b') | 0
+            ].join(',') + ')';
+        }
+        // if (vizShapeDom) {
+        //     edge.shape = vizShapeDom.getAttribute('shape');
+        // }
+
+        return edge;
+    }) : [];
+}
+
+function getAttr(el, attrName) {
+    return el.getAttribute(attrName);
+}
+
+function getChildByTagName(parent, tagName) {
+    let node = parent.firstChild;
+
+    while (node) {
+        if (
+            node.nodeType !== 1
+            || node.nodeName.toLowerCase() !== tagName.toLowerCase()
+        ) {
+            node = node.nextSibling;
+        }
+        else {
+            return node;
+        }
+    }
+
+    return null;
+}
+
+function getChildrenByTagName(parent, tagName) {
+    let node = parent.firstChild;
+    const children = [];
+    while (node) {
+        if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
+            children.push(node);
+        }
+        node = node.nextSibling;
+    }
+
+    return children;
+}

+ 42 - 0
node_modules/echarts/extension-src/dataTool/index.ts

@@ -0,0 +1,42 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+// @ts-nocheck
+import * as echarts from 'echarts';
+import * as gexf from './gexf';
+import prepareBoxplotData from './prepareBoxplotData';
+// import { boxplotTransform } from './boxplotTransform';
+
+export const version = '1.0.0';
+
+export {gexf};
+
+export {prepareBoxplotData};
+// export {boxplotTransform};
+
+// For backward compatibility, where the namespace `dataTool` will
+// be mounted on `echarts` is the extension `dataTool` is imported.
+// But the old version of echarts do not have `dataTool` namespace,
+// so check it before mounting.
+if (echarts.dataTool) {
+    echarts.dataTool.version = version;
+    echarts.dataTool.gexf = gexf;
+    echarts.dataTool.prepareBoxplotData = prepareBoxplotData;
+    // echarts.dataTool.boxplotTransform = boxplotTransform;
+}

+ 114 - 0
node_modules/echarts/extension-src/dataTool/prepareBoxplotData.ts

@@ -0,0 +1,114 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+function asc<T extends number[]>(arr: T): T {
+    arr.sort(function (a, b) {
+        return a - b;
+    });
+    return arr;
+}
+
+function quantile(ascArr: number[], p: number): number {
+    const H = (ascArr.length - 1) * p + 1;
+    const h = Math.floor(H);
+    const v = +ascArr[h - 1];
+    const e = H - h;
+    return e ? v + e * (ascArr[h] - v) : v;
+}
+/**
+ * See:
+ *  <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
+ *  <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
+ *
+ * Helper method for preparing data.
+ *
+ * @param {Array.<number>} rawData like
+ *        [
+ *            [12,232,443], (raw data set for the first box)
+ *            [3843,5545,1232], (raw data set for the second box)
+ *            ...
+ *        ]
+ * @param {Object} [opt]
+ *
+ * @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier.
+ *      default 1.5, means Q1 - 1.5 * (Q3 - Q1).
+ *      If 'none'/0 passed, min bound will not be used.
+ * @param {(number|string)} [opt.layout='horizontal']
+ *      Box plot layout, can be 'horizontal' or 'vertical'
+ * @return {Object} {
+ *      boxData: Array.<Array.<number>>
+ *      outliers: Array.<Array.<number>>
+ *      axisData: Array.<string>
+ * }
+ */
+export default function (
+    rawData: number[][],
+    opt: {
+        boundIQR?: number | 'none',
+        layout?: 'horizontal' | 'vertical'
+    }
+): {
+    boxData: number[][]
+    outliers: number[][]
+    axisData: string[]
+} {
+    opt = opt || {};
+    const boxData = [];
+    const outliers = [];
+    const axisData: string[] = [];
+    const boundIQR = opt.boundIQR;
+    const useExtreme = boundIQR === 'none' || boundIQR === 0;
+
+    for (let i = 0; i < rawData.length; i++) {
+        axisData.push(i + '');
+        const ascList = asc(rawData[i].slice());
+
+        const Q1 = quantile(ascList, 0.25);
+        const Q2 = quantile(ascList, 0.5);
+        const Q3 = quantile(ascList, 0.75);
+        const min = ascList[0];
+        const max = ascList[ascList.length - 1];
+
+        const bound = (boundIQR == null ? 1.5 : boundIQR as number) * (Q3 - Q1);
+
+        const low = useExtreme
+            ? min
+            : Math.max(min, Q1 - bound);
+        const high = useExtreme
+            ? max
+            : Math.min(max, Q3 + bound);
+
+        boxData.push([low, Q1, Q2, Q3, high]);
+
+        for (let j = 0; j < ascList.length; j++) {
+            const dataItem = ascList[j];
+            if (dataItem < low || dataItem > high) {
+                const outlier = [i, dataItem];
+                opt.layout === 'vertical' && outlier.reverse();
+                outliers.push(outlier);
+            }
+        }
+    }
+    return {
+        boxData: boxData,
+        outliers: outliers,
+        axisData: axisData
+    };
+}

+ 273 - 0
node_modules/echarts/extension/bmap/BMapCoordSys.js

@@ -0,0 +1,273 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+
+/* global BMap */
+import { util as zrUtil, graphic, matrix } from 'echarts';
+
+function BMapCoordSys(bmap, api) {
+  this._bmap = bmap;
+  this.dimensions = ['lng', 'lat'];
+  this._mapOffset = [0, 0];
+  this._api = api;
+  this._projection = new BMap.MercatorProjection();
+}
+
+BMapCoordSys.prototype.type = 'bmap';
+BMapCoordSys.prototype.dimensions = ['lng', 'lat'];
+
+BMapCoordSys.prototype.setZoom = function (zoom) {
+  this._zoom = zoom;
+};
+
+BMapCoordSys.prototype.setCenter = function (center) {
+  this._center = this._projection.lngLatToPoint(new BMap.Point(center[0], center[1]));
+};
+
+BMapCoordSys.prototype.setMapOffset = function (mapOffset) {
+  this._mapOffset = mapOffset;
+};
+
+BMapCoordSys.prototype.getBMap = function () {
+  return this._bmap;
+};
+
+BMapCoordSys.prototype.dataToPoint = function (data) {
+  var point = new BMap.Point(data[0], data[1]); // TODO mercator projection is toooooooo slow
+  // let mercatorPoint = this._projection.lngLatToPoint(point);
+  // let width = this._api.getZr().getWidth();
+  // let height = this._api.getZr().getHeight();
+  // let divider = Math.pow(2, 18 - 10);
+  // return [
+  //     Math.round((mercatorPoint.x - this._center.x) / divider + width / 2),
+  //     Math.round((this._center.y - mercatorPoint.y) / divider + height / 2)
+  // ];
+
+  var px = this._bmap.pointToOverlayPixel(point);
+
+  var mapOffset = this._mapOffset;
+  return [px.x - mapOffset[0], px.y - mapOffset[1]];
+};
+
+BMapCoordSys.prototype.pointToData = function (pt) {
+  var mapOffset = this._mapOffset;
+  pt = this._bmap.overlayPixelToPoint({
+    x: pt[0] + mapOffset[0],
+    y: pt[1] + mapOffset[1]
+  });
+  return [pt.lng, pt.lat];
+};
+
+BMapCoordSys.prototype.getViewRect = function () {
+  var api = this._api;
+  return new graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight());
+};
+
+BMapCoordSys.prototype.getRoamTransform = function () {
+  return matrix.create();
+};
+
+BMapCoordSys.prototype.prepareCustoms = function () {
+  var rect = this.getViewRect();
+  return {
+    coordSys: {
+      // The name exposed to user is always 'cartesian2d' but not 'grid'.
+      type: 'bmap',
+      x: rect.x,
+      y: rect.y,
+      width: rect.width,
+      height: rect.height
+    },
+    api: {
+      coord: zrUtil.bind(this.dataToPoint, this),
+      size: zrUtil.bind(dataToCoordSize, this)
+    }
+  };
+};
+
+BMapCoordSys.prototype.convertToPixel = function (ecModel, finder, value) {
+  // here we ignore finder as only one bmap component is allowed
+  return this.dataToPoint(value);
+};
+
+BMapCoordSys.prototype.convertFromPixel = function (ecModel, finder, value) {
+  return this.pointToData(value);
+};
+
+function dataToCoordSize(dataSize, dataItem) {
+  dataItem = dataItem || [0, 0];
+  return zrUtil.map([0, 1], function (dimIdx) {
+    var val = dataItem[dimIdx];
+    var halfSize = dataSize[dimIdx] / 2;
+    var p1 = [];
+    var p2 = [];
+    p1[dimIdx] = val - halfSize;
+    p2[dimIdx] = val + halfSize;
+    p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];
+    return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);
+  }, this);
+}
+
+var Overlay; // For deciding which dimensions to use when creating list data
+
+BMapCoordSys.dimensions = BMapCoordSys.prototype.dimensions;
+
+function createOverlayCtor() {
+  function Overlay(root) {
+    this._root = root;
+  }
+
+  Overlay.prototype = new BMap.Overlay();
+  /**
+   * 初始化
+   *
+   * @param {BMap.Map} map
+   * @override
+   */
+
+  Overlay.prototype.initialize = function (map) {
+    map.getPanes().labelPane.appendChild(this._root);
+    return this._root;
+  };
+  /**
+   * @override
+   */
+
+
+  Overlay.prototype.draw = function () {};
+
+  return Overlay;
+}
+
+BMapCoordSys.create = function (ecModel, api) {
+  var bmapCoordSys;
+  var root = api.getDom(); // TODO Dispose
+
+  ecModel.eachComponent('bmap', function (bmapModel) {
+    var painter = api.getZr().painter;
+    var viewportRoot = painter.getViewportRoot();
+
+    if (typeof BMap === 'undefined') {
+      throw new Error('BMap api is not loaded');
+    }
+
+    Overlay = Overlay || createOverlayCtor();
+
+    if (bmapCoordSys) {
+      throw new Error('Only one bmap component can exist');
+    }
+
+    var bmap;
+
+    if (!bmapModel.__bmap) {
+      // Not support IE8
+      var bmapRoot = root.querySelector('.ec-extension-bmap');
+
+      if (bmapRoot) {
+        // Reset viewport left and top, which will be changed
+        // in moving handler in BMapView
+        viewportRoot.style.left = '0px';
+        viewportRoot.style.top = '0px';
+        root.removeChild(bmapRoot);
+      }
+
+      bmapRoot = document.createElement('div');
+      bmapRoot.className = 'ec-extension-bmap'; // fix #13424
+
+      bmapRoot.style.cssText = 'position:absolute;width:100%;height:100%';
+      root.appendChild(bmapRoot); // initializes bmap
+
+      var mapOptions = bmapModel.get('mapOptions');
+
+      if (mapOptions) {
+        mapOptions = zrUtil.clone(mapOptions); // Not support `mapType`, use `bmap.setMapType(MapType)` instead.
+
+        delete mapOptions.mapType;
+      }
+
+      bmap = bmapModel.__bmap = new BMap.Map(bmapRoot, mapOptions);
+      var overlay = new Overlay(viewportRoot);
+      bmap.addOverlay(overlay); // Override
+
+      painter.getViewportRootOffset = function () {
+        return {
+          offsetLeft: 0,
+          offsetTop: 0
+        };
+      };
+    }
+
+    bmap = bmapModel.__bmap; // Set bmap options
+    // centerAndZoom before layout and render
+
+    var center = bmapModel.get('center');
+    var zoom = bmapModel.get('zoom');
+
+    if (center && zoom) {
+      var bmapCenter = bmap.getCenter();
+      var bmapZoom = bmap.getZoom();
+      var centerOrZoomChanged = bmapModel.centerOrZoomChanged([bmapCenter.lng, bmapCenter.lat], bmapZoom);
+
+      if (centerOrZoomChanged) {
+        var pt = new BMap.Point(center[0], center[1]);
+        bmap.centerAndZoom(pt, zoom);
+      }
+    }
+
+    bmapCoordSys = new BMapCoordSys(bmap, api);
+    bmapCoordSys.setMapOffset(bmapModel.__mapOffset || [0, 0]);
+    bmapCoordSys.setZoom(zoom);
+    bmapCoordSys.setCenter(center);
+    bmapModel.coordinateSystem = bmapCoordSys;
+  });
+  ecModel.eachSeries(function (seriesModel) {
+    if (seriesModel.get('coordinateSystem') === 'bmap') {
+      seriesModel.coordinateSystem = bmapCoordSys;
+    }
+  }); // return created coordinate systems
+
+  return bmapCoordSys && [bmapCoordSys];
+};
+
+export default BMapCoordSys;

+ 76 - 0
node_modules/echarts/extension/bmap/BMapModel.js

@@ -0,0 +1,76 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+import * as echarts from 'echarts';
+
+function v2Equal(a, b) {
+  return a && b && a[0] === b[0] && a[1] === b[1];
+}
+
+export default echarts.extendComponentModel({
+  type: 'bmap',
+  getBMap: function () {
+    // __bmap is injected when creating BMapCoordSys
+    return this.__bmap;
+  },
+  setCenterAndZoom: function (center, zoom) {
+    this.option.center = center;
+    this.option.zoom = zoom;
+  },
+  centerOrZoomChanged: function (center, zoom) {
+    var option = this.option;
+    return !(v2Equal(center, option.center) && zoom === option.zoom);
+  },
+  defaultOption: {
+    center: [104.114129, 37.550339],
+    zoom: 5,
+    // 2.0 https://lbsyun.baidu.com/custom/index.htm
+    mapStyle: {},
+    // 3.0 https://lbsyun.baidu.com/index.php?title=open/custom
+    mapStyleV2: {},
+    // See https://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html#a0b1
+    mapOptions: {},
+    roam: false
+  }
+});

+ 168 - 0
node_modules/echarts/extension/bmap/BMapView.js

@@ -0,0 +1,168 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+import * as echarts from 'echarts';
+
+function isEmptyObject(obj) {
+  for (var key in obj) {
+    if (obj.hasOwnProperty(key)) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+export default echarts.extendComponentView({
+  type: 'bmap',
+  render: function (bMapModel, ecModel, api) {
+    var rendering = true;
+    var bmap = bMapModel.getBMap();
+    var viewportRoot = api.getZr().painter.getViewportRoot();
+    var coordSys = bMapModel.coordinateSystem;
+
+    var moveHandler = function (type, target) {
+      if (rendering) {
+        return;
+      }
+
+      var offsetEl = viewportRoot.parentNode.parentNode.parentNode;
+      var mapOffset = [-parseInt(offsetEl.style.left, 10) || 0, -parseInt(offsetEl.style.top, 10) || 0]; // only update style when map offset changed
+
+      var viewportRootStyle = viewportRoot.style;
+      var offsetLeft = mapOffset[0] + 'px';
+      var offsetTop = mapOffset[1] + 'px';
+
+      if (viewportRootStyle.left !== offsetLeft) {
+        viewportRootStyle.left = offsetLeft;
+      }
+
+      if (viewportRootStyle.top !== offsetTop) {
+        viewportRootStyle.top = offsetTop;
+      }
+
+      coordSys.setMapOffset(mapOffset);
+      bMapModel.__mapOffset = mapOffset;
+      api.dispatchAction({
+        type: 'bmapRoam',
+        animation: {
+          duration: 0
+        }
+      });
+    };
+
+    function zoomEndHandler() {
+      if (rendering) {
+        return;
+      }
+
+      api.dispatchAction({
+        type: 'bmapRoam',
+        animation: {
+          duration: 0
+        }
+      });
+    }
+
+    bmap.removeEventListener('moving', this._oldMoveHandler);
+    bmap.removeEventListener('moveend', this._oldMoveHandler);
+    bmap.removeEventListener('zoomend', this._oldZoomEndHandler);
+    bmap.addEventListener('moving', moveHandler);
+    bmap.addEventListener('moveend', moveHandler);
+    bmap.addEventListener('zoomend', zoomEndHandler);
+    this._oldMoveHandler = moveHandler;
+    this._oldZoomEndHandler = zoomEndHandler;
+    var roam = bMapModel.get('roam');
+
+    if (roam && roam !== 'scale') {
+      bmap.enableDragging();
+    } else {
+      bmap.disableDragging();
+    }
+
+    if (roam && roam !== 'move') {
+      bmap.enableScrollWheelZoom();
+      bmap.enableDoubleClickZoom();
+      bmap.enablePinchToZoom();
+    } else {
+      bmap.disableScrollWheelZoom();
+      bmap.disableDoubleClickZoom();
+      bmap.disablePinchToZoom();
+    }
+    /* map 2.0 */
+
+
+    var originalStyle = bMapModel.__mapStyle;
+    var newMapStyle = bMapModel.get('mapStyle') || {}; // FIXME, Not use JSON methods
+
+    var mapStyleStr = JSON.stringify(newMapStyle);
+
+    if (JSON.stringify(originalStyle) !== mapStyleStr) {
+      // FIXME May have blank tile when dragging if setMapStyle
+      if (!isEmptyObject(newMapStyle)) {
+        bmap.setMapStyle(echarts.util.clone(newMapStyle));
+      }
+
+      bMapModel.__mapStyle = JSON.parse(mapStyleStr);
+    }
+    /* map 3.0 */
+
+
+    var originalStyle2 = bMapModel.__mapStyle2;
+    var newMapStyle2 = bMapModel.get('mapStyleV2') || {}; // FIXME, Not use JSON methods
+
+    var mapStyleStr2 = JSON.stringify(newMapStyle2);
+
+    if (JSON.stringify(originalStyle2) !== mapStyleStr2) {
+      // FIXME May have blank tile when dragging if setMapStyle
+      if (!isEmptyObject(newMapStyle2)) {
+        bmap.setMapStyleV2(echarts.util.clone(newMapStyle2));
+      }
+
+      bMapModel.__mapStyle2 = JSON.parse(mapStyleStr2);
+    }
+
+    rendering = false;
+  }
+});

+ 66 - 0
node_modules/echarts/extension/bmap/bmap.js

@@ -0,0 +1,66 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+
+/**
+ * BMap component extension
+ */
+import * as echarts from 'echarts';
+import BMapCoordSys from './BMapCoordSys.js';
+import './BMapModel.js';
+import './BMapView.js';
+echarts.registerCoordinateSystem('bmap', BMapCoordSys); // Action
+
+echarts.registerAction({
+  type: 'bmapRoam',
+  event: 'bmapRoam',
+  update: 'updateLayout'
+}, function (payload, ecModel) {
+  ecModel.eachComponent('bmap', function (bMapModel) {
+    var bmap = bMapModel.getBMap();
+    var center = bmap.getCenter();
+    bMapModel.setCenterAndZoom([center.lng, center.lat], bmap.getZoom());
+  });
+});
+export var version = '1.0.0';

+ 233 - 0
node_modules/echarts/extension/dataTool/gexf.js

@@ -0,0 +1,233 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+
+/**
+ * This is a parse of GEXF.
+ *
+ * The spec of GEXF:
+ * https://gephi.org/gexf/1.2draft/gexf-12draft-primer.pdf
+ */
+import * as zrUtil from 'zrender/lib/core/util.js';
+export function parse(xml) {
+  var doc;
+
+  if (typeof xml === 'string') {
+    var parser = new DOMParser();
+    doc = parser.parseFromString(xml, 'text/xml');
+  } else {
+    doc = xml;
+  }
+
+  if (!doc || doc.getElementsByTagName('parsererror').length) {
+    return null;
+  }
+
+  var gexfRoot = getChildByTagName(doc, 'gexf');
+
+  if (!gexfRoot) {
+    return null;
+  }
+
+  var graphRoot = getChildByTagName(gexfRoot, 'graph');
+  var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));
+  var attributesMap = {};
+
+  for (var i = 0; i < attributes.length; i++) {
+    attributesMap[attributes[i].id] = attributes[i];
+  }
+
+  return {
+    nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),
+    links: parseEdges(getChildByTagName(graphRoot, 'edges'))
+  };
+}
+
+function parseAttributes(parent) {
+  return parent ? zrUtil.map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {
+    return {
+      id: getAttr(attribDom, 'id'),
+      title: getAttr(attribDom, 'title'),
+      type: getAttr(attribDom, 'type')
+    };
+  }) : [];
+}
+
+function parseNodes(parent, attributesMap) {
+  return parent ? zrUtil.map(getChildrenByTagName(parent, 'node'), function (nodeDom) {
+    var id = getAttr(nodeDom, 'id');
+    var label = getAttr(nodeDom, 'label');
+    var node = {
+      id: id,
+      name: label,
+      itemStyle: {
+        normal: {}
+      }
+    };
+    var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');
+    var vizPosDom = getChildByTagName(nodeDom, 'viz:position');
+    var vizColorDom = getChildByTagName(nodeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(nodeDom, 'viz:shape');
+
+    var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');
+
+    if (vizSizeDom) {
+      node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));
+    }
+
+    if (vizPosDom) {
+      node.x = parseFloat(getAttr(vizPosDom, 'x'));
+      node.y = parseFloat(getAttr(vizPosDom, 'y')); // z
+    }
+
+    if (vizColorDom) {
+      node.itemStyle.normal.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
+    } // if (vizShapeDom) {
+    // node.shape = getAttr(vizShapeDom, 'shape');
+    // }
+
+
+    if (attvaluesDom) {
+      var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');
+      node.attributes = {};
+
+      for (var j = 0; j < attvalueDomList.length; j++) {
+        var attvalueDom = attvalueDomList[j];
+        var attId = getAttr(attvalueDom, 'for');
+        var attValue = getAttr(attvalueDom, 'value');
+        var attribute = attributesMap[attId];
+
+        if (attribute) {
+          switch (attribute.type) {
+            case 'integer':
+            case 'long':
+              attValue = parseInt(attValue, 10);
+              break;
+
+            case 'float':
+            case 'double':
+              attValue = parseFloat(attValue);
+              break;
+
+            case 'boolean':
+              attValue = attValue.toLowerCase() === 'true';
+              break;
+
+            default:
+          }
+
+          node.attributes[attId] = attValue;
+        }
+      }
+    }
+
+    return node;
+  }) : [];
+}
+
+function parseEdges(parent) {
+  return parent ? zrUtil.map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {
+    var id = getAttr(edgeDom, 'id');
+    var label = getAttr(edgeDom, 'label');
+    var sourceId = getAttr(edgeDom, 'source');
+    var targetId = getAttr(edgeDom, 'target');
+    var edge = {
+      id: id,
+      name: label,
+      source: sourceId,
+      target: targetId,
+      lineStyle: {
+        normal: {}
+      }
+    };
+    var lineStyle = edge.lineStyle.normal;
+    var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');
+    var vizColorDom = getChildByTagName(edgeDom, 'viz:color'); // let vizShapeDom = getChildByTagName(edgeDom, 'viz:shape');
+
+    if (vizThicknessDom) {
+      lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));
+    }
+
+    if (vizColorDom) {
+      lineStyle.color = 'rgb(' + [getAttr(vizColorDom, 'r') | 0, getAttr(vizColorDom, 'g') | 0, getAttr(vizColorDom, 'b') | 0].join(',') + ')';
+    } // if (vizShapeDom) {
+    //     edge.shape = vizShapeDom.getAttribute('shape');
+    // }
+
+
+    return edge;
+  }) : [];
+}
+
+function getAttr(el, attrName) {
+  return el.getAttribute(attrName);
+}
+
+function getChildByTagName(parent, tagName) {
+  var node = parent.firstChild;
+
+  while (node) {
+    if (node.nodeType !== 1 || node.nodeName.toLowerCase() !== tagName.toLowerCase()) {
+      node = node.nextSibling;
+    } else {
+      return node;
+    }
+  }
+
+  return null;
+}
+
+function getChildrenByTagName(parent, tagName) {
+  var node = parent.firstChild;
+  var children = [];
+
+  while (node) {
+    if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {
+      children.push(node);
+    }
+
+    node = node.nextSibling;
+  }
+
+  return children;
+}

+ 61 - 0
node_modules/echarts/extension/dataTool/index.js

@@ -0,0 +1,61 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+// @ts-nocheck
+import * as echarts from 'echarts';
+import * as gexf from './gexf.js';
+import prepareBoxplotData from './prepareBoxplotData.js'; // import { boxplotTransform } from './boxplotTransform.js';
+
+export var version = '1.0.0';
+export { gexf };
+export { prepareBoxplotData }; // export {boxplotTransform};
+// For backward compatibility, where the namespace `dataTool` will
+// be mounted on `echarts` is the extension `dataTool` is imported.
+// But the old version of echarts do not have `dataTool` namespace,
+// so check it before mounting.
+
+if (echarts.dataTool) {
+  echarts.dataTool.version = version;
+  echarts.dataTool.gexf = gexf;
+  echarts.dataTool.prepareBoxplotData = prepareBoxplotData; // echarts.dataTool.boxplotTransform = boxplotTransform;
+}

+ 123 - 0
node_modules/echarts/extension/dataTool/prepareBoxplotData.js

@@ -0,0 +1,123 @@
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+function asc(arr) {
+  arr.sort(function (a, b) {
+    return a - b;
+  });
+  return arr;
+}
+
+function quantile(ascArr, p) {
+  var H = (ascArr.length - 1) * p + 1;
+  var h = Math.floor(H);
+  var v = +ascArr[h - 1];
+  var e = H - h;
+  return e ? v + e * (ascArr[h] - v) : v;
+}
+/**
+ * See:
+ *  <https://en.wikipedia.org/wiki/Box_plot#cite_note-frigge_hoaglin_iglewicz-2>
+ *  <http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/boxplot.stats.html>
+ *
+ * Helper method for preparing data.
+ *
+ * @param {Array.<number>} rawData like
+ *        [
+ *            [12,232,443], (raw data set for the first box)
+ *            [3843,5545,1232], (raw data set for the second box)
+ *            ...
+ *        ]
+ * @param {Object} [opt]
+ *
+ * @param {(number|string)} [opt.boundIQR=1.5] Data less than min bound is outlier.
+ *      default 1.5, means Q1 - 1.5 * (Q3 - Q1).
+ *      If 'none'/0 passed, min bound will not be used.
+ * @param {(number|string)} [opt.layout='horizontal']
+ *      Box plot layout, can be 'horizontal' or 'vertical'
+ * @return {Object} {
+ *      boxData: Array.<Array.<number>>
+ *      outliers: Array.<Array.<number>>
+ *      axisData: Array.<string>
+ * }
+ */
+
+
+export default function (rawData, opt) {
+  opt = opt || {};
+  var boxData = [];
+  var outliers = [];
+  var axisData = [];
+  var boundIQR = opt.boundIQR;
+  var useExtreme = boundIQR === 'none' || boundIQR === 0;
+
+  for (var i = 0; i < rawData.length; i++) {
+    axisData.push(i + '');
+    var ascList = asc(rawData[i].slice());
+    var Q1 = quantile(ascList, 0.25);
+    var Q2 = quantile(ascList, 0.5);
+    var Q3 = quantile(ascList, 0.75);
+    var min = ascList[0];
+    var max = ascList[ascList.length - 1];
+    var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);
+    var low = useExtreme ? min : Math.max(min, Q1 - bound);
+    var high = useExtreme ? max : Math.min(max, Q3 + bound);
+    boxData.push([low, Q1, Q2, Q3, high]);
+
+    for (var j = 0; j < ascList.length; j++) {
+      var dataItem = ascList[j];
+
+      if (dataItem < low || dataItem > high) {
+        var outlier = [i, dataItem];
+        opt.layout === 'vertical' && outlier.reverse();
+        outliers.push(outlier);
+      }
+    }
+  }
+
+  return {
+    boxData: boxData,
+    outliers: outliers,
+    axisData: axisData
+  };
+}

+ 20 - 0
node_modules/echarts/features.d.ts

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './types/dist/features';

+ 20 - 0
node_modules/echarts/features.js

@@ -0,0 +1,20 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+export * from './lib/export/features.js';

+ 173 - 0
node_modules/echarts/i18n/langCS-obj.js

@@ -0,0 +1,173 @@
+
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+(function(root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports'], factory);
+    } else if (
+        typeof exports === 'object' &&
+        typeof exports.nodeName !== 'string'
+    ) {
+        // CommonJS
+        factory(exports);
+    } else {
+        // Browser globals
+        factory({});
+    }
+})(this, function(exports) {
+
+
+/**
+ * Language: Czech.
+ */
+
+ var localeObj = {
+    time: {
+        month: [
+            'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
+            'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
+        ],
+        monthAbbr: [
+            'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
+            'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
+        ],
+        dayOfWeek: [
+            'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
+        ],
+        dayOfWeekAbbr: [
+            'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
+        ]
+    },
+    legend: {
+        selector: {
+            all: 'Vše',
+            inverse: 'Inv'
+        }
+    },
+    toolbox: {
+        brush: {
+            title: {
+                rect: 'Obdélníkový výběr',
+                polygon: 'Lasso výběr',
+                lineX: 'Horizontální výběr',
+                lineY: 'Vertikální výběr',
+                keep: 'Ponechat výběr',
+                clear: 'Zrušit výběr'
+            }
+        },
+        dataView: {
+            title: 'Data',
+            lang: ['Data', 'Zavřít', 'Obnovit']
+        },
+        dataZoom: {
+            title: {
+                zoom: 'Přiblížit',
+                back: 'Oddálit'
+            }
+        },
+        magicType: {
+            title: {
+                line: 'Změnit na Spojnicový graf',
+                bar: 'Změnit na Sloupcový graf',
+                stack: 'Plošný',
+                tiled: 'Tile'
+            }
+        },
+        restore: {
+            title: 'Obnovit'
+        },
+        saveAsImage: {
+            title: 'Uložit jako obrázek',
+            lang: ['Obrázek uložte pravým kliknutím']
+        }
+    },
+    series: {
+        typeNames: {
+            pie: 'Výsečový graf',
+            bar: 'Sloupcový graf',
+            line: 'Spojnicový graf',
+            scatter: 'XY bodový graf',
+            effectScatter: 'Effect XY bodový graf',
+            radar: 'Paprskový graf',
+            tree: 'Strom',
+            treemap: 'Stromová mapa',
+            boxplot: 'Krabicový graf',
+            candlestick: 'Burzovní graf',
+            k: 'K spojnicový graf',
+            heatmap: 'Teplotní mapa',
+            map: 'Mapa',
+            parallel: 'Rovnoběžné souřadnice',
+            lines: 'Spojnicový graf',
+            graph: 'Graf vztahů',
+            sankey: 'Sankeyův diagram',
+            funnel: 'Trychtýř (Funnel)',
+            gauge: 'Indikátor',
+            pictorialBar: 'Obrázkový sloupcový graf',
+            themeRiver: 'Theme River Map',
+            sunburst: 'Vícevrstvý prstencový graf'
+        }
+    },
+    aria: {
+        general: {
+            withTitle: 'Toto je graf o "{title}"',
+            withoutTitle: 'Toto je graf'
+        },
+        series: {
+            single: {
+                prefix: '',
+                withName: '{seriesName} s typem {seriesType}.',
+                withoutName: ' s typem {seriesType}.'
+            },
+            multiple: {
+                prefix: '. Obsahuje {seriesCount} řad.',
+                withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
+                withoutName: ' Řada {seriesId} je typu {seriesType}.',
+                separator: {
+                    middle: '',
+                    end: ''
+                }
+            }
+        },
+        data: {
+            allData: 'Všechna data jsou: ',
+            partialData: 'První {displayCnt} položky jsou: ',
+            withName: 'data pro {name} jsou {value}',
+            withoutName: '{value}',
+            separator: {
+                middle: ', ',
+                end: '. '
+            }
+        }
+    }
+};
+
+    for (var key in localeObj) {
+        if (localeObj.hasOwnProperty(key)) {
+            exports[key] = localeObj[key];
+        }
+    }
+        
+});

+ 169 - 0
node_modules/echarts/i18n/langCS.js

@@ -0,0 +1,169 @@
+
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+
+/**
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
+ */
+(function(root, factory) {
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(['exports', 'echarts'], factory);
+    } else if (
+        typeof exports === 'object' &&
+        typeof exports.nodeName !== 'string'
+    ) {
+        // CommonJS
+        factory(exports, require('echarts/lib/echarts'));
+    } else {
+        // Browser globals
+        factory({}, root.echarts);
+    }
+})(this, function(exports, echarts) {
+
+
+/**
+ * Language: Czech.
+ */
+
+ var localeObj = {
+    time: {
+        month: [
+            'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen',
+            'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'
+        ],
+        monthAbbr: [
+            'Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čvn',
+            'Čvc', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'
+        ],
+        dayOfWeek: [
+            'Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'
+        ],
+        dayOfWeekAbbr: [
+            'Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'
+        ]
+    },
+    legend: {
+        selector: {
+            all: 'Vše',
+            inverse: 'Inv'
+        }
+    },
+    toolbox: {
+        brush: {
+            title: {
+                rect: 'Obdélníkový výběr',
+                polygon: 'Lasso výběr',
+                lineX: 'Horizontální výběr',
+                lineY: 'Vertikální výběr',
+                keep: 'Ponechat výběr',
+                clear: 'Zrušit výběr'
+            }
+        },
+        dataView: {
+            title: 'Data',
+            lang: ['Data', 'Zavřít', 'Obnovit']
+        },
+        dataZoom: {
+            title: {
+                zoom: 'Přiblížit',
+                back: 'Oddálit'
+            }
+        },
+        magicType: {
+            title: {
+                line: 'Změnit na Spojnicový graf',
+                bar: 'Změnit na Sloupcový graf',
+                stack: 'Plošný',
+                tiled: 'Tile'
+            }
+        },
+        restore: {
+            title: 'Obnovit'
+        },
+        saveAsImage: {
+            title: 'Uložit jako obrázek',
+            lang: ['Obrázek uložte pravým kliknutím']
+        }
+    },
+    series: {
+        typeNames: {
+            pie: 'Výsečový graf',
+            bar: 'Sloupcový graf',
+            line: 'Spojnicový graf',
+            scatter: 'XY bodový graf',
+            effectScatter: 'Effect XY bodový graf',
+            radar: 'Paprskový graf',
+            tree: 'Strom',
+            treemap: 'Stromová mapa',
+            boxplot: 'Krabicový graf',
+            candlestick: 'Burzovní graf',
+            k: 'K spojnicový graf',
+            heatmap: 'Teplotní mapa',
+            map: 'Mapa',
+            parallel: 'Rovnoběžné souřadnice',
+            lines: 'Spojnicový graf',
+            graph: 'Graf vztahů',
+            sankey: 'Sankeyův diagram',
+            funnel: 'Trychtýř (Funnel)',
+            gauge: 'Indikátor',
+            pictorialBar: 'Obrázkový sloupcový graf',
+            themeRiver: 'Theme River Map',
+            sunburst: 'Vícevrstvý prstencový graf'
+        }
+    },
+    aria: {
+        general: {
+            withTitle: 'Toto je graf o "{title}"',
+            withoutTitle: 'Toto je graf'
+        },
+        series: {
+            single: {
+                prefix: '',
+                withName: '{seriesName} s typem {seriesType}.',
+                withoutName: ' s typem {seriesType}.'
+            },
+            multiple: {
+                prefix: '. Obsahuje {seriesCount} řad.',
+                withName: ' Řada {seriesId} je typu {seriesType} repreyentující {seriesName}.',
+                withoutName: ' Řada {seriesId} je typu {seriesType}.',
+                separator: {
+                    middle: '',
+                    end: ''
+                }
+            }
+        },
+        data: {
+            allData: 'Všechna data jsou: ',
+            partialData: 'První {displayCnt} položky jsou: ',
+            withName: 'data pro {name} jsou {value}',
+            withoutName: '{value}',
+            separator: {
+                middle: ', ',
+                end: '. '
+            }
+        }
+    }
+};
+
+    echarts.registerLocale('CS', localeObj);
+        
+});

+ 0 - 0
node_modules/echarts/i18n/langDE-obj.js


Некоторые файлы не были показаны из-за большого количества измененных файлов