159 Revize 5b428cf665 ... 48dd266cee

Autor SHA1 Zpráva Datum
  missMyLove 48dd266cee 告警状态bug před 3 roky
  missMyLove 5b428cf665 资料管理 před 3 roky
  missMyLove 757244ffd7 查询告警详情,增加告警处理人‘ame字段 před 3 roky
  missMyLove 921eb3132f 设备详情增加回路 před 3 roky
  missMyLove 8dbbf89796 文件库 před 3 roky
  missMyLove a9b76a0fa5 协议时间处理 před 3 roky
  Jimmy 31018565fc 数据库配置 před 3 roky
  missMyLove 21b5a5ea6e 服务商入驻+微信支付 před 4 roky
  missMyLove c374d60870 产品管理平台 před 4 roky
  Miss My Love 67222bd281 timer před 4 roky
  Miss My Love 9c76146f04 新增timer和查询 před 4 roky
  missMyLove 67542c6c69 资料管理 před 4 roky
  missmylove 571f594c64 配置阈值,一键配置所有的阈值 před 4 roky
  missMyLove 529d08520e 公众号告警模板时间显示修改 před 4 roky
  missmylove 235d03e4b4 解决公众号断电消息推送bug před 4 roky
  missMyLove d7d92a8749 微信公众号消息推送bug 修复 před 4 roky
  missMyLove e7b07765fb 新增bug před 4 roky
  missMyLove 87f35981e2 授权接口修改 před 4 roky
  missMyLove 5e675968f5 资料管理 před 4 roky
  missMyLove e5e79567b6 增加告警详情接口 před 4 roky
  missMyLove 8f4d7721d6 插座电量统计bug修改 před 4 roky
  missmylove ed060f508c m站点电量、设备电量、插座电量修改;授权接口修改 před 4 roky
  Jimmy bae50befc4 设备列表新增通过站点id查询,新增商户中心管理员信息 před 4 roky
  missmylove bbbceffd24 增加设备查询服务器时间协议 před 4 roky
  Jimmy e6ae0f2b05 操作日志方法bug修改 před 4 roky
  Jimmy 152ef88df5 修改AOP获取请求参数 před 4 roky
  missMyLove 0eb86c1f79 发生验证码接口放行 před 4 roky
  missMyLove 3ab8d4f7ff 电量统计,短信验证码发生等接口 před 4 roky
  missmylove b2f31a9b51 模版消息加权限 před 4 roky
  Jimmy b93566bb23 修改首页数据 před 4 roky
  missMyLove 3e9091c403 调整目录结构 před 4 roky
  Jimmy 2f9cc2df00 新增修改与查询商户logo与title před 4 roky
  missMyLove bd1ce60ea7 第一个版本 před 4 roky
  missmylove f7d284fd6e 定时任务模版限制,电量统计调整 před 4 roky
  missMyLove 578fc75eda lcence 查询优化,定时任务模板新增修改 před 4 roky
  missMyLove 16fbcd6c31 任务模板接口修改 před 4 roky
  missMyLove 10b197e41f 任务模板接口修改 před 4 roky
  missMyLove 63847013e2 定时任务模板判断修改 před 4 roky
  missMyLove 7a42986db2 第一次 před 4 roky
  missMyLove 1732a18dfe 设备、站点、商户导出bug修改 před 4 roky
  missMyLove 1d8c5c7e8a 导出接口处理 před 4 roky
  missmylove 34e340ba93 公众号授权放行 před 4 roky
  missmylove 7de6fe8563 首页电量统计 před 4 roky
  missmylove 8319bce6f9 增加告警消息公众号推送功能 před 4 roky
  missmylove 94e2bcc687 增加告警消息公众号推送功能 před 4 roky
  missmylove c74ffc5fbd 工作号授权操作 před 4 roky
  missmylove 64622f099a 定时任务模版~商户~站点~设备导出功能 před 4 roky
  missMyLove c02a0275e3 新增删除ota操作 před 4 roky
  missmylove 7d6b8d62e9 定时任务删除增加一个状态已更改 před 4 roky
  missmylove b0469f3a22 修改定时任务商户查询连接 před 4 roky
  Jimmy 995b9aee0b 新增操作日志 před 4 roky
  missMyLove 38d2bba3be 修改bug před 4 roky
  missmylove 1609803bd7 修改bug před 4 roky
  missMyLove 251a2d0931 修改bug před 4 roky
  missMyLove 3e649aac30 修改bug před 4 roky
  missMyLove 1cdc307956 优化权限 před 4 roky
  missMyLove 36c0db534e 提交 před 4 roky
  missMyLove 7c6884b49a Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  Jimmy 15de86f997 修改首页地图 před 4 roky
  missMyLove 3e9332d3dc 修改导出电流显示 před 4 roky
  missMyLove 424028efa2 处理bug před 4 roky
  missMyLove 00a8b47afe 修改部分代码 před 4 roky
  missMyLove 0f007661d0 修改告警->报警 před 4 roky
  missMyLove d18697726b 使用线程池池化 před 4 roky
  missMyLove 1ddaeb3824 Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  missMyLove 0f27914c60 导出功能 před 4 roky
  Jimmy d41dfc7593 修改redis配置,将端口6379变成16380 před 4 roky
  Jimmy 59567a1198 修改redis配置 před 4 roky
  missmylove 1e0868dbca Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  missmylove 2369608720 修改bug及增加导出功能 před 4 roky
  Jimmy 7687c1b59e 修改配置文件 před 4 roky
  Jimmy 1d02ef690d 修改数据库配置 před 4 roky
  missMyLove 2c667de167 处理bug před 4 roky
  missMyLove 6094a5710e 首页bug před 4 roky
  missMyLove c317e5c5a8 首页问 před 4 roky
  missMyLove 32a5d35cfe 首页统计以及bug 修复 před 4 roky
  Jimmy 97a50b3a54 bug修改 před 4 roky
  Jimmy 88b1854440 修改告警列表bug 以及 添加首页地图数据 před 4 roky
  missMyLove 9375301c86 增加告警统计与12个月告警查询 před 4 roky
  missMyLove 1eb29aa28c 告警记录重新出现的问题 před 4 roky
  missMyLove c2ed02a148 修改权限问题 před 4 roky
  missMyLove 254c2f4634 查询权限问题 před 4 roky
  missMyLove 44cc4bf352 修改定时任务bug před 4 roky
  missMyLove fda019e974 修改bug před 4 roky
  Jimmy dcfdb41007 新增异常日志 před 4 roky
  Miss My Love 70070d3ba4 告警bug问题 před 4 roky
  Miss My Love de1519575e Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  Miss My Love bcb1dea8b8 告警模块与任务功能 před 4 roky
  Jimmy 7f07b51569 新增站点后可以列表查询 před 4 roky
  Miss My Love 11bf49310a 写部分定时任务 před 4 roky
  Miss My Love e4f0acd112 Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  Miss My Love 9ceb2b12b1 合并之前 před 4 roky
  Jimmy 9d9744a124 新增设备编号查询回路数接口 před 4 roky
  Jimmy 6f677c1664 修改bug před 4 roky
  Miss My Love 024a074d0f Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  Miss My Love 3df79d8232 告警处理数据 před 4 roky
  Jimmy d435384ceb 新增首页数据查询,删除向老师在代码里面的名字 před 4 roky
  Miss My Love c7bcebde03 Merge remote-tracking branch 'remotes/origin/master' před 4 roky
  Miss My Love 77dc260a75 x před 4 roky
  missMyLove d4c87643b2 处理告警数据 před 4 roky
  missMyLove 736da0bca5 处理告警数据 před 4 roky
  missMyLove 7151ca3847 处理告警数据 před 4 roky
  missMyLove de70b0a11c 处理无法查出数据bug před 4 roky
  missMyLove 1f27c1fe7a 修改实时数据bug před 4 roky
  missMyLove d559c5f205 修改实时数据bug před 4 roky
  missMyLove 9256e7b511 解决bug 问 před 4 roky
  missMyLove 9016e94ca0 实时数据 před 4 roky
  missMyLove 93fb3b4ca1 告警 增加处理状态 před 4 roky
  missMyLove acacf83434 修改bug 及增加告警 před 4 roky
  Jimmy a2cfc4cc44 代码bug před 4 roky
  Jimmy 8d10115d63 新增aop操作日志 před 4 roky
  Jimmy aa70918580 代码提交 před 4 roky
  missMyLove 6ad9101cea 提交代码 před 4 roky
  missMyLove e5e909d836 test před 4 roky
  missMyLove 2c95a3593e 测试 před 4 roky
  Jimmy ffb18a997f 新增lucene查询工具类 před 4 roky
  missMyLove 9fc076821a Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  missMyLove dcf4de3d94 m提交查询实时数据 před 4 roky
  Jimmy 75f05cc62f 代码提交 před 4 roky
  missMyLove 75d8766235 增加lucene例子 před 4 roky
  Jimmy bc0afb286b 代码提交 před 4 roky
  missMyLove 9bf5ec9da6 增加lucene+时时上报数据 před 4 roky
  missMyLove 707886b07f 定时任务+继电器开关 před 4 roky
  Jimmy 1ee7c116e0 bug修改 před 4 roky
  Jimmy f3ef299254 1设备列表新增设备回路数代码bug修改 před 4 roky
  missmylove 3bbafd4b73 设备阈值配置 před 4 roky
  missmylove 411fa75496 增加消息推送配置 před 4 roky
  missmylove 5dc430e3e6 新增电能API před 4 roky
  missmylove 10fd6542f3 修改Redis 密码 před 4 roky
  Jimmy 4b176b9eb0 代码提交 před 4 roky
  Jimmy 40da6a278b 删除两个接口 před 4 roky
  Jimmy 42f47cbe6d 代码修改 před 4 roky
  Jimmy 8cb89f4c34 修改设备的一个小bug před 4 roky
  Miss My Love c495565320 协议模块修该 před 4 roky
  Miss My Love 14bd2635bf 加协议以及修改Redis配置 před 4 roky
  Miss My Love 33002b2220 Merge branch 'master' of http://193.112.16.187:3000/comtika/comtika-safe před 4 roky
  Miss My Love 6c70694b71 合并代码前 před 4 roky
  Jimmy ac39a75b74 设备代码 před 4 roky
  Jimmy 287543b16e 代码修改 před 4 roky
  Miss My Love 0c0e7180a6 ftp 路径修改 před 4 roky
  Jimmy a0ac9c9040 代码提交 před 4 roky
  Jimmy 803dabe106 代码提交 před 4 roky
  Jimmy 00f1753c27 提交 před 4 roky
  Jimmy a9da3fdccb 代码提交 před 4 roky
  Miss My Love 08dd1108d6 上传模块+OTA před 4 roky
  Jimmy f5d4ddb590 代码提交 před 4 roky
  Jimmy 55df467f4e 增加组织架构 před 4 roky
  Jimmy 00acc6876a 优化代码 před 4 roky
  Jimmy c28a23ab6f 代码提交 před 4 roky
  Jimmy 3a531567b3 代码 před 4 roky
  Jimmy f3827e732a 端口修改 před 4 roky
  Jimmy 430aa549fe 代码提交 před 4 roky
  Jimmy c347a27ee8 daima před 4 roky
  Jimmy 07dd5cc2aa daima před 4 roky
  missmylove 2a123c0fb9 找bug před 4 roky
  Jimmy 0cd8c0ae93 daima před 4 roky
  Jimmy 853e646372 代码提交 před 4 roky
  Jimmy 51afd4886f 代码提交 před 4 roky
  missmylove 8c904c5d62 康体佳-安全用电第一个版本 před 4 roky
100 změnil soubory, kde provedl 802 přidání a 4393 odebrání
  1. 0 5
      .babelrc
  2. 0 9
      .editorconfig
  3. 0 0
      .eslintignore
  4. 0 21
      .eslintrc.js
  5. 30 24
      .gitignore
  6. 118 0
      .mvn/wrapper/MavenWrapperDownloader.java
  7. binární
      .mvn/wrapper/maven-wrapper.jar
  8. 2 0
      .mvn/wrapper/maven-wrapper.properties
  9. 0 5
      .postcssrc.js
  10. 0 5
      .travis.yml
  11. 0 21
      LICENSE
  12. 0 128
      README.md
  13. 0 3
      cypress.json
  14. 0 199
      miss.html
  15. 310 0
      mvnw
  16. 182 0
      mvnw.cmd
  17. 0 84
      package.json
  18. 160 0
      pom.xml
  19. binární
      public/favicon.ico
  20. 0 28
      public/index.html
  21. 0 27
      src/App.vue
  22. 0 51
      src/api/data.js
  23. 0 97
      src/api/user.js
  24. 0 37
      src/assets/icons/iconfont.css
  25. binární
      src/assets/icons/iconfont.eot
  26. 0 56
      src/assets/icons/iconfont.svg
  27. binární
      src/assets/icons/iconfont.ttf
  28. binární
      src/assets/icons/iconfont.woff
  29. binární
      src/assets/images/avatar.png
  30. binární
      src/assets/images/eloam.png
  31. 0 1
      src/assets/images/error-page/error-401.svg
  32. 0 1
      src/assets/images/error-page/error-404.svg
  33. 0 1
      src/assets/images/error-page/error-500.svg
  34. binární
      src/assets/images/login-bg.png
  35. binární
      src/assets/images/login-pmp.jpg
  36. binární
      src/assets/images/logo-02.png
  37. binární
      src/assets/images/logo-min-back.jpg
  38. binární
      src/assets/images/logo-min.jpg
  39. binární
      src/assets/images/logo-pmp.png
  40. binární
      src/assets/images/logo.jpg
  41. binární
      src/assets/images/logo.png
  42. binární
      src/assets/images/pic.png
  43. binární
      src/assets/images/small.jpg
  44. binární
      src/assets/images/talkingdata.png
  45. binární
      src/assets/images/upload.jpg
  46. binární
      src/assets/images/zip.png
  47. 0 17
      src/assets/js/AMap.js
  48. 0 13
      src/common/common.js
  49. 0 121
      src/common/date.js
  50. 0 64
      src/common/formatRegion.js
  51. 0 81
      src/components/charts/bar.vue
  52. 0 5
      src/components/charts/index.js
  53. 0 64
      src/components/charts/obar.vue
  54. 0 82
      src/components/charts/pie.vue
  55. 0 491
      src/components/charts/theme.json
  56. 0 78
      src/components/charts/wsPie.vue
  57. 0 42
      src/components/common-icon/common-icon.vue
  58. 0 2
      src/components/common-icon/index.js
  59. 0 8
      src/components/common/common.less
  60. 0 3
      src/components/common/util.js
  61. 0 197
      src/components/count-to/count-to.vue
  62. 0 2
      src/components/count-to/index.js
  63. 0 10
      src/components/count-to/index.less
  64. 0 2
      src/components/cropper/index.js
  65. 0 35
      src/components/cropper/index.less
  66. 0 139
      src/components/cropper/index.vue
  67. 0 18
      src/components/drag-drawer/drag-drawer-trigger.vue
  68. 0 156
      src/components/drag-drawer/drag-drawer.vue
  69. 0 2
      src/components/drag-drawer/index.js
  70. 0 70
      src/components/drag-drawer/index.less
  71. 0 7
      src/components/drag-drawer/mixin.js
  72. 0 92
      src/components/drag-list/drag-list.vue
  73. 0 2
      src/components/drag-list/index.js
  74. 0 75
      src/components/editor/editor.vue
  75. 0 2
      src/components/editor/index.js
  76. 0 63
      src/components/eloamApplyCard.vue
  77. 0 17
      src/components/eloamCopy.vue
  78. 0 161
      src/components/eloamExcel.vue
  79. 0 83
      src/components/eloamIcon.vue
  80. 0 43
      src/components/eloamListItemMeta.vue
  81. 0 178
      src/components/eloamMap.vue
  82. 0 335
      src/components/eloamUpload.vue
  83. 0 249
      src/components/eloamWebSocket.vue
  84. 0 35
      src/components/icons/icons.vue
  85. 0 2
      src/components/icons/index.js
  86. 0 2
      src/components/info-card/index.js
  87. 0 97
      src/components/info-card/infor-card.vue
  88. 0 2
      src/components/login-form/index.js
  89. 0 124
      src/components/login-form/login-form.vue
  90. 0 2
      src/components/main/components/a-back-top/index.js
  91. 0 90
      src/components/main/components/a-back-top/index.vue
  92. 0 32
      src/components/main/components/dynamic-web-socket/dynamicWebSocket.vue
  93. 0 2
      src/components/main/components/dynamic-web-socket/index.js
  94. 0 49
      src/components/main/components/error-store/error-store.vue
  95. 0 2
      src/components/main/components/error-store/index.js
  96. 0 90
      src/components/main/components/fullscreen/fullscreen.vue
  97. 0 2
      src/components/main/components/fullscreen/index.js
  98. 0 4
      src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less
  99. 0 46
      src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue
  100. 0 0
      src/components/main/components/header-bar/custom-bread-crumb/index.js

+ 0 - 5
.babelrc

@@ -1,5 +0,0 @@
-{
-  "presets": [
-    "@vue/app"
-  ]
-}

+ 0 - 9
.editorconfig

@@ -1,9 +0,0 @@
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true

+ 0 - 0
.eslintignore


+ 0 - 21
.eslintrc.js

@@ -1,21 +0,0 @@
-module.exports = {
-  root: true,
-  'extends': [
-    'plugin:vue/essential',
-    '@vue/standard'
-  ],
-  rules: {
-    // allow async-await
-    'generator-star-spacing': 'off',
-    // allow debugger during development
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
-    'vue/no-parsing-error': [2, {
-      'x-invalid-end-tag': false
-    }],
-    'no-undef': 'off',
-    'camelcase': 'off'
-  },
-  parserOptions: {
-    parser: 'babel-eslint'
-  }
-}

+ 30 - 24
.gitignore

@@ -1,28 +1,34 @@
-.DS_Store
-node_modules
-/dist
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
 
-package-lock.json
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
 
-/tests/e2e/videos/
-/tests/e2e/screenshots/
-
-# local env files
-.env.local
-.env.*.local
-
-# Log files
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Editor directories and files
+### IntelliJ IDEA ###
 .idea
-.vscode
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw*
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
 
-build/env.js
+### VS Code ###
+.vscode/
+/target/

+ 118 - 0
.mvn/wrapper/MavenWrapperDownloader.java

@@ -0,0 +1,118 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * 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
+ *
+ *      https://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.
+ */
+
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+            + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if (mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if (mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if (!outputFile.getParentFile().exists()) {
+            if (!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}

binární
.mvn/wrapper/maven-wrapper.jar


+ 2 - 0
.mvn/wrapper/maven-wrapper.properties

@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

+ 0 - 5
.postcssrc.js

@@ -1,5 +0,0 @@
-module.exports = {
-  plugins: {
-    autoprefixer: {}
-  }
-}

+ 0 - 5
.travis.yml

@@ -1,5 +0,0 @@
-language: node_js
-node_js: stable
-script: npm run lint
-notifications:
-  email: false

+ 0 - 21
LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2017 iView
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 128
README.md

@@ -1,128 +0,0 @@
-<p align="center">
-    <a href="https://www.iviewui.com">
-        <img width="200" src="https://file.iviewui.com/logo-new.svg">
-    </a>
-</p>
-
-<h1>
-iView Admin
-    <h3>Vue.js 2.0 admin management system template based on iView.</h3>
-</h1>
-
-[![](https://img.shields.io/github/release/iview/iview-admin.svg)](https://github.com/iview/iview-admin/releases)
-[![](https://img.shields.io/travis/iview/iview-admin.svg?style=flat-square)](https://travis-ci.org/iview/iview-admin)
-[![vue](https://img.shields.io/badge/vue-2.5.17-brightgreen.svg?style=flat-square)](https://github.com/vuejs/vue)
-[![iview ui](https://img.shields.io/badge/iview-3.2.2-brightgreen.svg?style=flat-square)](https://github.com/iview/iview)
-[![npm](https://img.shields.io/npm/l/express.svg)]()
-
-<h2 align="center">Special Sponsors</h2>
-<table>
-      <tbody>
-        <tr>
-          <td align="center" valign="middle">
-            <a href="https://segmentfault.com/ls/1650000016424063" target="_blank">
-              <img width="300" src="https://file.iviewui.com/asd/asd-i-2.png">
-            </a>
-          </td>
-          <td align="center" valign="middle">
-            <a href="https://e.coding.net/?utm_source=iview" target="_blank">
-              <img width="300" src="https://file.iviewui.com/asd/asd-coding5.png">
-            </a>
-          </td>
-            <td align="center" valign="middle">
-            <a href="https://cn.udacity.com/course/wechat-mini-program-nanodegree--nd666-cn?utm_source=iviewui&utm_medium=banner&utm_campaign=wmpnd" target="_blank">
-              <img width="300" src="https://file.iviewui.com/asd/asd-u-13.png">
-            </a>
-          </td>
-          <tr>
-            </td>
-            <td align="center" valign="middle">
-            <a href="https://m3w.cn/track/uniapp/iview" target="_blank">
-              <img width="300" src="https://file.iviewui.com/asd/asd-uniapp3.png">
-            </a>
-          </td>
-          <td align="center" valign="middle">
-            <a href="https://s.growingio.com/p0732m" target="_blank">
-              <img width="300" src="https://file.iviewui.com/asd/asd-kkb-1.png">
-            </a>
-          </td>
-        </tr>
-        </tr>
-      </tbody>
-</table>
-
-> If you'd like be a sponsor, to show your ads in GitHub and iView doc, please email admin@aresn.com to get more infomation.
-
-## Introduction
-
-iView Admin is a front-end management background integration solution. It based on [Vue.js](https://github.com/vuejs/vue) and use the UI Toolkit [iView](https://github.com/iview/iview).
-
-- [Document](https://lison16.github.io/iview-admin-doc/)
-- [Preview](https://admin.iviewui.com/)
-- [Base template recommends using](https://github.com/iview/iview-admin/tree/template)
-
-![image](https://file.iviewui.com/admin-dist/admin-preview.png)
-
-## Features
-
-- Login / Logout
-- Permission Authentication
-    - A list of filters
-    - Permission to switch
-- i18n
-- Components
-    - Rich Text Editor
-    - Markdown Editor
-    - City Cascader
-    - Photos preview and edit
-    - Draggable list
-    - File upload
-    - Digital gradient
-    - split-pane
-- Form
-    - The article published
-    - Workflow
-- Table
-    - Drag-and-drop sort
-    - Searchable form
-    - Table export data
-        - Export to Csv file
-        - Export to Xls file
-    - Table to picture
-- Error Page
-    - 403
-    - 404
-    - 500
-- Router
-    - Dynamic routing
-    - With reference page
-- Theme
-- Shrink the sidebar
-- Tag navigation
-- Breadcrumb navigation
-- Full screen / exit full screen
-- Lock screen
-- The message center
-- Personal center
-
-## Getting started
-```bush
-# clone the project
-git clone https://github.com/iview/iview-admin.git
-
-// install dependencies
-npm install
-
-// develop
-npm run dev
-```
-
-## Build
-```bush
-npm run build
-```
-
-## License
-[MIT](http://opensource.org/licenses/MIT)
-
-Copyright (c) 2016-present, iView

+ 0 - 3
cypress.json

@@ -1,3 +0,0 @@
-{
-  "pluginsFile": "tests/e2e/plugins/index.js"
-}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 199
miss.html


+ 310 - 0
mvnw

@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# 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
+#
+#    https://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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 182 - 0
mvnw.cmd

@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%

+ 0 - 84
package.json

@@ -1,84 +0,0 @@
-{
-  "name": "iview-admin",
-  "version": "2.0.0",
-  "author": "Lison<lison16new@163.com>",
-  "private": false,
-  "scripts": {
-    "dev": "vue-cli-service serve --open",
-    "build": "vue-cli-service build",
-    "lint": "vue-cli-service lint",
-    "test:unit": "vue-cli-service test:unit",
-    "test:e2e": "vue-cli-service test:e2e"
-  },
-  "dependencies": {
-    "amap": "^1.0.7",
-    "axios": "^0.18.0",
-    "babel-polyfill": "^6.26.0",
-    "clipboard": "^2.0.4",
-    "codemirror": "^5.38.0",
-    "countup": "^1.8.2",
-    "cropperjs": "^1.2.2",
-    "dayjs": "^1.7.7",
-    "echarts": "^4.8.0",
-    "element-china-area-data": "^5.0.2",
-    "html2canvas": "^1.0.0-alpha.12",
-    "iview": "^3.2.2",
-    "iview-area": "^1.6.0",
-    "jquery": "^3.4.1",
-    "js-cookie": "^2.2.0",
-    "qrcodejs2": "0.0.2",
-    "quill": "^1.3.7",
-    "quill-image-drop-module": "^1.0.3",
-    "simplemde": "^1.11.2",
-    "sortablejs": "^1.7.0",
-    "tree-table-vue": "^1.1.0",
-    "v-org-tree": "^1.0.6",
-    "v-viewer": "^1.4.2",
-    "vue": "^2.5.10",
-    "vue-amap": "^0.5.10",
-    "vue-i18n": "^7.8.0",
-    "vue-pdf": "^4.0.7",
-    "vue-qr": "^2.3.0",
-    "vue-quill-editor": "^3.0.6",
-    "vue-router": "^3.0.1",
-    "vue2-editor": "^2.10.2",
-    "vuedraggable": "^2.16.0",
-    "vuex": "^3.0.1",
-    "wangeditor": "^3.1.1",
-    "xlsx": "^0.13.3"
-  },
-  "devDependencies": {
-    "@vue/cli-plugin-babel": "^3.0.1",
-    "@vue/cli-plugin-eslint": "^3.0.1",
-    "@vue/cli-plugin-unit-mocha": "^3.0.1",
-    "@vue/cli-service": "^3.0.1",
-    "@vue/eslint-config-standard": "^3.0.0-beta.10",
-    "@vue/test-utils": "^1.0.0-beta.10",
-    "chai": "^4.1.2",
-    "eslint-plugin-cypress": "^2.0.1",
-    "less": "^2.7.3",
-    "less-loader": "^4.0.5",
-    "lint-staged": "^6.0.0",
-    "mockjs": "^1.0.1-beta3",
-    "qs": "^6.7.0",
-    "vue-template-compiler": "^2.5.13"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions",
-    "not ie <= 8"
-  ],
-  "gitHooks": {
-    "pre-commit": "lint-staged"
-  },
-  "lint-staged": {
-    "*.js": [
-      "vue-cli-service lint",
-      "git add"
-    ],
-    "*.vue": [
-      "vue-cli-service lint",
-      "git add"
-    ]
-  }
-}

+ 160 - 0
pom.xml

@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.2.5.RELEASE</version>
+		<relativePath /> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.comtika</groupId>
+	<artifactId>safe</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>safe</name>
+	<description>康体佳-安全用电</description>
+
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.tomcat</groupId>
+					<artifactId>tomcat-jdbc</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>3.7.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.bouncycastle</groupId>
+			<artifactId>bcprov-jdk16</artifactId>
+			<version>1.45</version>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-aop</artifactId>
+		</dependency>
+		<!--MySQL JDBC驱动 -->
+		<dependency>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<scope>runtime</scope>
+		</dependency>
+		<!--lombok -->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>1.16.10</version>
+		</dependency>
+		<!--springboot 整合 beetlsql 并且与sharding-jdbc一起使用 -->
+		<dependency>
+			<groupId>com.ibeetl</groupId>
+			<artifactId>beetl-framework-starter</artifactId>
+			<version>1.2.31.RELEASE</version>
+		</dependency>
+
+		<!-- fastjson 作为项目序列化工具 -->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>fastjson</artifactId>
+			<version>1.2.47</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>jexcelapi</groupId>
+			<artifactId>jxl</artifactId>
+			<version>2.6</version>
+		</dependency>
+		<!-- swagger2 -->
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.8.0</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.8.0</version>
+		</dependency>
+		<!-- redis https://blog.csdn.net/jikefzz1095377498/article/details/81231720
+			redis jar的比较 -->
+		<!--<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-pool2</artifactId>
+		</dependency>-->
+		<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
+		<dependency>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.6</version>
+		</dependency>
+		<dependency>
+			<groupId>io.netty</groupId>
+			<artifactId>netty-all</artifactId>
+			<version>4.1.30.Final</version>
+		</dependency>
+		<!--lucene -->
+		<dependency>
+			<groupId>org.apache.lucene</groupId>
+			<artifactId>lucene-queryparser</artifactId>
+			<version>7.1.0</version>
+		</dependency>
+		<!--smartcn 中文分词器 SmartChineseAnalyzer smartcn分词器 需要lucene依赖 且和lucene版本同步 -->
+		<dependency>
+			<groupId>org.apache.lucene</groupId>
+			<artifactId>lucene-analyzers-smartcn</artifactId>
+			<version>7.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-httpclient</groupId>
+			<artifactId>commons-httpclient</artifactId>
+			<version>3.0-rc4</version>
+		</dependency>
+		<!--<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<version>1.0.4</version>
+		</dependency>-->
+		<!--<dependency>
+			<groupId>dom4j</groupId>
+			<artifactId>dom4j</artifactId>
+		</dependency>-->
+		<!--java execl  jxl 博客:https://www.cnblogs.com/hanfeihanfei/p/7079210.html-->
+		<dependency>
+			<groupId>jexcelapi</groupId>
+			<artifactId>jxl</artifactId>
+			<version>2.6</version>
+		</dependency>
+	</dependencies>
+
+
+	<build>
+		<finalName>comtika-safe</finalName>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>

binární
public/favicon.ico


+ 0 - 28
public/index.html

@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>良田科技|访客管理系统</title>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <!--  <meta name="viewport" content="width=device-width,initial-scale=1.0">-->
-    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0">
-    <meta name="keywords" content="深圳市新良田科技股份有限公司是集设计、研发、制造、销售为一体的高拍仪新品类创立者,低碳办公解决方案商,国家高新技术企业,双软企业,高拍仪命名者和积极推动者">
-    <meta name="description" content="良田高拍仪;高拍仪命名者与推动者,文件拍摄|书籍扫描|人脸识别|OCR">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title></title>
-
-  </head>
-  <body>
-    <noscript>
-      <strong>We're sorry but iview-admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
-    </noscript>
-   <div id="app"></div>
-    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.10&key=78c7bcb35946360f93d5a05f87598138"></script>
-<!-- built files will be auto injected -->
-<!--引用 高德地图-->
-<!--<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.10&key=78c7bcb35946360f93d5a05f87598138"></script>-->
-<!--<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=56f21ce58051ada716eb1bbd92875772"></script>-->
-<!--引入UI组件库(1.0版本) -->
-<!--<script src="https://webapi.amap.com/ui/1.0/main.js"></script>-->
-</body>
-</html>

+ 0 - 27
src/App.vue

@@ -1,27 +0,0 @@
-<template>
-  <div id="app">
-    <router-view/>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'App'
-}
-</script>
-
-<style lang="less">
-.size{
-  width: 100%;
-  height: 100%;
-}
-html,body{
-  .size;
-  overflow: hidden;
-  margin: 0;
-  padding: 0;
-}
-#app {
-  .size;
-}
-</style>

+ 0 - 51
src/api/data.js

@@ -1,51 +0,0 @@
-import axios from '@/libs/api.request'
-
-export const getTableData = () => {
-  return axios.request({
-    url: 'get_table_data',
-    method: 'get'
-  })
-}
-
-export const getDragList = () => {
-  return axios.request({
-    url: 'get_drag_list',
-    method: 'get'
-  })
-}
-
-export const errorReq = () => {
-  return axios.request({
-    url: 'error_url',
-    method: 'post'
-  })
-}
-
-export const saveErrorLogger = info => {
-  return axios.request({
-    url: 'save_error_logger',
-    data: info,
-    method: 'post'
-  })
-}
-
-export const uploadImg = formData => {
-  return axios.request({
-    url: 'image/upload',
-    data: formData
-  })
-}
-
-export const getOrgData = () => {
-  return axios.request({
-    url: 'get_org_data',
-    method: 'get'
-  })
-}
-
-export const getTreeSelectData = () => {
-  return axios.request({
-    url: 'get_tree_select_data',
-    method: 'get'
-  })
-}

+ 0 - 97
src/api/user.js

@@ -1,97 +0,0 @@
-import axios from '@/libs/api.request'
-import qs from 'qs'
-// import { getToken } from '../libs/util'
-
-export const login = ({ userName, password }) => {
-  const data = {
-    userName,
-    password
-  }
-  return axios.request({
-    url: 'login',
-    data,
-    method: 'post'
-  })
-}
-export const api = ({ method, URI, params, data, isFormData, headers }) => {
-  return axios.request({
-    url: URI,
-    method: method,
-    params: params,
-    data: data,
-    headers: headers || {
-      // 'X-EloamVistor-Token': `Bearer ${getToken()}`, 这里去掉token 改为session
-      'Content-Type': isFormData ? 'application/x-www-form-urlencoded;charset=utf-8' : 'application/json;charset=UTF-8'
-    },
-    transformRequest: (data) => isFormData ? qs.stringify(data) : JSON.stringify(data)
-  })
-}
-
-export const getUserInfo = (token) => {
-  return axios.request({
-    url: 'get_info',
-    params: {
-      token
-    },
-    method: 'get'
-  })
-}
-
-export const logout = () => {
-  let URI = 'user/logout'
-  return api({ method: 'delete', URI })
-}
-
-export const getUnreadCount = () => {
-  return axios.request({
-    url: 'message/count',
-    method: 'get'
-  })
-}
-
-export const getMessage = () => {
-  return axios.request({
-    url: 'message/init',
-    method: 'get'
-  })
-}
-
-export const getContentByMsgId = msg_id => {
-  return axios.request({
-    url: 'message/content',
-    method: 'get',
-    params: {
-      msg_id
-    }
-  })
-}
-
-export const hasRead = msg_id => {
-  return axios.request({
-    url: 'message/has_read',
-    method: 'post',
-    data: {
-      msg_id
-    }
-  })
-}
-
-export const removeReaded = msg_id => {
-  return axios.request({
-    url: 'message/remove_readed',
-    method: 'post',
-    data: {
-      msg_id
-    }
-  })
-}
-
-export const restoreTrash = msg_id => {
-  return axios.request({
-    url: 'message/restore',
-    method: 'post',
-    data: {
-      msg_id
-    }
-  })
-}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 37
src/assets/icons/iconfont.css


binární
src/assets/icons/iconfont.eot


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 56
src/assets/icons/iconfont.svg


binární
src/assets/icons/iconfont.ttf


binární
src/assets/icons/iconfont.woff


binární
src/assets/images/avatar.png


binární
src/assets/images/eloam.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
src/assets/images/error-page/error-401.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
src/assets/images/error-page/error-404.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
src/assets/images/error-page/error-500.svg


binární
src/assets/images/login-bg.png


binární
src/assets/images/login-pmp.jpg


binární
src/assets/images/logo-02.png


binární
src/assets/images/logo-min-back.jpg


binární
src/assets/images/logo-min.jpg


binární
src/assets/images/logo-pmp.png


binární
src/assets/images/logo.jpg


binární
src/assets/images/logo.png


binární
src/assets/images/pic.png


binární
src/assets/images/small.jpg


binární
src/assets/images/talkingdata.png


binární
src/assets/images/upload.jpg


binární
src/assets/images/zip.png


+ 0 - 17
src/assets/js/AMap.js

@@ -1,17 +0,0 @@
-export default function MapLoader () { // <-- 原作者这里使用的是module.exports
-  return new Promise((resolve, reject) => {
-    if (window.AMap) {
-      resolve(window.AMap)
-    } else {
-      let script = document.createElement('script')
-      script.type = 'text/javascript'
-      script.async = true
-      script.src = 'https://webapi.amap.com/maps?v=1.4.10&key=78c7bcb35946360f93d5a05f87598138'
-      script.onerror = reject
-      document.head.appendChild(script)
-    }
-    window.initAMap = () => {
-      resolve(window.AMap)
-    }
-  })
-}

+ 0 - 13
src/common/common.js

@@ -1,13 +0,0 @@
-export function joinListToString (list, format) { // 建数组转换为string
-  const lt = list.filter(item => item.id).map(item => item.id)
-  if (format) {
-    return lt.join(format)
-  }
-  return lt.join('-')
-}
-export function feeConvertMethod (fee, defaultValue) { // 金额转换
-  if (fee) {
-    return '¥' + (fee / 100).toFixed(2)
-  }
-  return defaultValue || '--'
-}

+ 0 - 121
src/common/date.js

@@ -1,121 +0,0 @@
-function formatDate (date, fmt) {
-  if (/(y+)/.test(fmt)) {
-    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
-  }
-  let o = {
-    'M+': date.getMonth() + 1,
-    'd+': date.getDate(),
-    'h+': date.getHours(),
-    'm+': date.getMinutes(),
-    's+': date.getSeconds()
-  }
-  for (let k in o) {
-    if (new RegExp(`(${k})`).test(fmt)) {
-      let str = o[k] + ''
-      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : padLeftZero(str))
-    }
-  }
-  return fmt
-};
-export function dateFormatMethod (date, defaultValue, format) {
-  if (date) {
-    if (format) {
-      return formatDate(new Date(date), format)
-    } else {
-      return formatDate(new Date(date), 'yyyy-MM-dd hh:mm:ss')
-    }
-  }
-  return defaultValue || ''
-}
-
-function padLeftZero (str) {
-  return ('00' + str).substr(str.length)
-};
-
-/**
- * [convertToTimestamp 将Date类型时间范围转为毫秒数时间范围]
- * @param  {[array]} timeArray [时间数组(Date类型)]
- * @return {[array]}           [时间数组(毫秒数)]
- */
-export function convertToTimestamp (timeArray) {
-  for (let i = timeArray.length - 1; i >= 0; i--) {
-    if (timeArray[i]) {
-      timeArray[i] = timeArray[i].getTime()
-    }
-  }
-  return timeArray
-}
-
-// 日期选择器的快捷选项
-export function getDatePickOptions (end) {
-  // const now = Date.now() // 当前时间毫秒数
-  const currHour = new Date().getHours() // 当前小时数
-  const currMinute = new Date().getMinutes() // 当前分钟数
-  const currSeconds = new Date().getSeconds() // 当前秒数
-  const todayZeroTime = Date.now() - currHour * 3600 * 1000 - currMinute * 60 * 1000 - currSeconds * 1000 // 今日零点时间毫秒数
-  const twoDaysAgoZeroTime = todayZeroTime - 2 * 24 * 3600 * 1000 // 两天前零点时间毫秒数
-  const sixDaysAgoZeroTime = todayZeroTime - 6 * 24 * 3600 * 1000 // 六天前零点时间毫秒数
-  const twentyNineDaysAgoZeroTime = todayZeroTime - 29 * 24 * 3600 * 1000 // 29天前零点时间毫秒数
-  // const fiftyNineDaysAgoZeroTime = todayZeroTime - 89 * 24 * 3600 * 1000 // 59天前零点时间毫秒数
-  return {
-    shortcuts: [{
-      text: '今天',
-      value () {
-        return [new Date(todayZeroTime), new Date()]
-      }
-    }, {
-      text: '近三天',
-      value () {
-        return [new Date(twoDaysAgoZeroTime), new Date()]
-      }
-    }, {
-      text: '近一周',
-      value () {
-        return [new Date(sixDaysAgoZeroTime), new Date()]
-      }
-    }, {
-      text: '近一个月',
-      value () {
-        return [new Date(twentyNineDaysAgoZeroTime), new Date()]
-      }
-    }],
-    disabledDate (date) {
-      if (end) { return false } else return date && date.valueOf() > Date.now()
-    }
-  }
-}
-// 日期选择器的快捷选项
-export function getDatePickOptionsNodis () {
-  // const now = Date.now() // 当前时间毫秒数
-  const currHour = new Date().getHours() // 当前小时数
-  const currMinute = new Date().getMinutes() // 当前分钟数
-  const currSeconds = new Date().getSeconds() // 当前秒数
-  const todayZeroTime = Date.now() - currHour * 3600 * 1000 - currMinute * 60 * 1000 - currSeconds * 1000 // 今日零点时间毫秒数
-  const twoDaysAgoZeroTime = todayZeroTime - 2 * 24 * 3600 * 1000 // 两天前零点时间毫秒数
-  const sixDaysAgoZeroTime = todayZeroTime - 6 * 24 * 3600 * 1000 // 六天前零点时间毫秒数
-  const twentyNineDaysAgoZeroTime = todayZeroTime - 29 * 24 * 3600 * 1000 // 29天前零点时间毫秒数
-  // const fiftyNineDaysAgoZeroTime = todayZeroTime - 89 * 24 * 3600 * 1000 // 59天前零点时间毫秒数
-  return {
-    shortcuts: [{
-      text: '今天',
-      value () {
-        return [new Date(todayZeroTime), new Date()]
-      }
-    }, {
-      text: '近三天',
-      value () {
-        return [new Date(twoDaysAgoZeroTime), new Date()]
-      }
-    }, {
-      text: '近一周',
-      value () {
-        return [new Date(sixDaysAgoZeroTime), new Date()]
-      }
-    }, {
-      text: '近一个月',
-      value () {
-        return [new Date(twentyNineDaysAgoZeroTime), new Date()]
-      }
-    }]
-  }
-}

+ 0 - 64
src/common/formatRegion.js

@@ -1,64 +0,0 @@
-/**
- * [formatRegion 格式化区域]
- * @param  {[array]} regionArray [区域Json字符串,含省市区三级信息]
- * @return {[string]}            [格式化后的区域,如‘北京市-东城区’,‘武汉市-青山区’]
- */
-export function decodeRegion (regionArray) {
-  const parsedRegionArray = JSON.parse(regionArray)
-  // 省、直辖市
-  if (parsedRegionArray !== null && parsedRegionArray !== undefined && parsedRegionArray !== '') {
-    if (parsedRegionArray.length === 3) {
-      if (parsedRegionArray[0] && parsedRegionArray[0].name) {
-        // 判断是否是直辖市
-        if 	(parsedRegionArray[1].name === '市辖区') {
-          return parsedRegionArray[0].name + '-' + parsedRegionArray[2].name
-        } else {
-          return parsedRegionArray[1].name + '-' + parsedRegionArray[2].name
-        }
-        // ['', '' , '']或[null, null, null]的情形
-      } else {
-        return ''
-      }
-      // 港、澳
-    } else if (parsedRegionArray.length === 2) {
-      return parsedRegionArray[0].name + '-' + parsedRegionArray[1].name
-      // 台湾省
-    } else if (parsedRegionArray.length === 1) {
-      return parsedRegionArray[0].name
-      // 空数组(表示未选择)
-    } else {
-      return ''
-    }
-  }
-}
-
-/**
- * [formatRegion 格式化区域,用于选择器的初始化]
- * @param  {[array]} regionArray [后台返回的区域Json字符串,含省市区三级信息。]
- * @return {[string]}            [格式化后的区域,如['北京市','市辖区','东城区']]
- */
-export function decodeRegionToArray (regionArray) {
-  const parsedRegionArray = JSON.parse(regionArray)
-  var outputArr = []
-  // 省、直辖市
-  if (parsedRegionArray !== null && parsedRegionArray !== undefined && parsedRegionArray !== '') {
-    for (let i = 0; i < parsedRegionArray.length; i++) {
-      if (parsedRegionArray[i] && parsedRegionArray[i].name) {
-        outputArr.push(parsedRegionArray[i].name)
-      }
-    }
-    return outputArr
-  } else {
-    return ['', '', '']
-  }
-}
-export function decodeStrRegionToArray (strRegin) {
-  let outputArr = []
-  if (strRegin) {
-    let split = strRegin.split('-')
-    for (let i = 0; i < split.length; i++) {
-        	outputArr.push(split[i])
-    }
-  }
-  return outputArr
-}

+ 0 - 81
src/components/charts/bar.vue

@@ -1,81 +0,0 @@
-<template>
-  <div ref="dom" class="charts chart-bar"></div>
-</template>
-
-<script>
-import echarts from 'echarts'
-import tdTheme from './theme.json'
-import { on, off } from '@/libs/tools'
-echarts.registerTheme('tdTheme', tdTheme)
-export default {
-  name: 'ChartBar',
-  props: {
-    valueDataList: Array,
-    text: String,
-    subtext: String
-  },
-  data () {
-    return {
-      dom: null
-    }
-  },
-  methods: {
-    resize () {
-      this.dom.resize()
-    },
-    setOptions () {
-      this.$nextTick(() => {
-        let keys = []
-        let values = []
-        if (this.valueDataList.length === 0) return
-        for (let i = this.valueDataList.length - 1; i >= 0; i--) {
-          let tl = this.valueDataList[i]
-          keys.push(tl.key)
-          values.push(tl.value)
-        }
-        let option = {
-          title: {
-            text: this.text,
-            subtext: this.subtext,
-            x: 'center'
-          },
-          calculable: true,
-          xAxis: {
-            type: 'category',
-            data: keys
-          },
-          yAxis: {
-            type: 'value'
-          },
-          series: [
-            {
-              data: values,
-              type: 'bar',
-              markPoint: {
-                data: [
-                  { type: 'max', name: '最大值' },
-                  { type: 'min', name: '最小值' }
-                ]
-              }
-            }
-          ]
-        }
-        this.dom = echarts.init(this.$refs.dom, 'tdTheme')
-        this.dom.setOption(option)
-        on(window, 'resize', this.resize)
-      })
-    }
-  },
-  mounted () {
-    this.setOptions()
-  },
-  beforeDestroy () {
-    off(window, 'resize', this.resize)
-  },
-  watch: {
-    valueDataList: function (newQuestion, oldQuestion) {
-      this.setOptions()
-    }
-  }
-}
-</script>

+ 0 - 5
src/components/charts/index.js

@@ -1,5 +0,0 @@
-import ChartPie from './pie.vue'
-import ChartBar from './bar.vue'
-import ChartObar from './obar.vue'
-import ChartWsPie from './wsPie.vue'
-export { ChartPie, ChartBar, ChartObar, ChartWsPie }

+ 0 - 64
src/components/charts/obar.vue

@@ -1,64 +0,0 @@
-<template>
-  <div ref="dom" class="charts chart-bar"></div>
-</template>
-
-<script>
-import echarts from 'echarts'
-// import tdTheme from './theme.json'
-import { on, off } from '@/libs/tools'
-// echarts.registerTheme('tdTheme', tdTheme)
-export default {
-  name: 'ChartOBar',
-  props: {
-    value: Object,
-    text: String,
-    subtext: String
-  },
-  data () {
-    return {
-      dom: null
-    }
-  },
-  methods: {
-    resize () {
-      this.dom.resize()
-    },
-    setOptions () {
-      this.$nextTick(() => {
-        let xAxisData = Object.keys(this.value)
-        let seriesData = Object.values(this.value)
-        let option = {
-          title: {
-            text: this.text,
-            subtext: this.subtext,
-            x: 'center'
-          },
-          xAxis: {
-            type: 'category',
-            data: xAxisData
-          },
-          yAxis: {
-            type: 'value'
-          },
-          series: [{
-            data: seriesData,
-            type: 'bar',
-            backgroundStyle: {
-              color: 'rgba(220, 220, 220, 0.8)'
-            }
-          }]
-        }
-        this.dom = echarts.init(this.$refs.dom)
-        this.dom.setOption(option)
-        on(window, 'resize', this.resize)
-      })
-    }
-  },
-  mounted () {
-    // this.setOptions()
-  },
-  beforeDestroy () {
-    off(window, 'resize', this.resize)
-  }
-}
-</script>

+ 0 - 82
src/components/charts/pie.vue

@@ -1,82 +0,0 @@
-<template>
-  <div ref="dom" class="charts chart-pie"></div>
-</template>
-
-<script>
-import echarts from 'echarts'
-import tdTheme from './theme.json'
-import { on, off } from '@/libs/tools'
-echarts.registerTheme('tdTheme', tdTheme)
-export default {
-  name: 'ChartPie',
-  props: {
-    value: Array,
-    text: String,
-    subtext: String
-  },
-  data () {
-    return {
-      dom: null
-    }
-  },
-  methods: {
-    resize () {
-      this.dom.resize()
-    },
-    setOptions () {
-      this.$nextTick(() => {
-        let legend = this.value.map(_ => _.name)
-        let option = {
-          title: {
-            text: this.text,
-            subtext: this.subtext,
-            x: 'center'
-          },
-          tooltip: {
-            trigger: 'item',
-            formatter: '{a} <br/>{b} : {c} ({d}%)'
-          },
-          legend: {
-            orient: 'horizontal', // vertical  horizontal
-            padding: 10,
-            left: '0px', // center
-            itemGap: 20,
-            itemWidth: 8,
-            itemHeight: 8,
-            data: legend
-          },
-          series: [
-            {
-              // center: ['50%', '60%'],
-              type: 'pie',
-              radius: '50%',
-              center: ['50%', '54%'],
-              data: this.value,
-              animation: false,
-              label: {
-                position: 'outer',
-                alignTo: 'edge',
-                margin: 20
-              }
-            }
-          ]
-        }
-        this.dom = echarts.init(this.$refs.dom, 'tdTheme')
-        this.dom.setOption(option)
-        on(window, 'resize', this.resize)
-      })
-    }
-  },
-  mounted () {
-    this.setOptions()
-  },
-  beforeDestroy () {
-    off(window, 'resize', this.resize)
-  },
-  watch: {
-    value: function (newQuestion, oldQuestion) {
-      this.setOptions()
-    }
-  }
-}
-</script>

+ 0 - 491
src/components/charts/theme.json

@@ -1,491 +0,0 @@
-
-{
-    "color": [
-        "#2d8cf0",
-        "#19be6b",
-        "#ff9900",
-        "#E46CBB",
-        "#9A66E4",
-        "#ed3f14"
-    ],
-    "backgroundColor": "rgba(0,0,0,0)",
-    "textStyle": {},
-    "title": {
-        "textStyle": {
-            "color": "#516b91"
-        },
-        "subtextStyle": {
-            "color": "#93b7e3"
-        }
-    },
-    "line": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": "2"
-            }
-        },
-        "lineStyle": {
-            "normal": {
-                "width": "2"
-            }
-        },
-        "symbolSize": "6",
-        "symbol": "emptyCircle",
-        "smooth": true
-    },
-    "radar": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": "2"
-            }
-        },
-        "lineStyle": {
-            "normal": {
-                "width": "2"
-            }
-        },
-        "symbolSize": "6",
-        "symbol": "emptyCircle",
-        "smooth": true
-    },
-    "bar": {
-        "itemStyle": {
-            "normal": {
-                "barBorderWidth": 0,
-                "barBorderColor": "#ccc"
-            },
-            "emphasis": {
-                "barBorderWidth": 0,
-                "barBorderColor": "#ccc"
-            }
-        }
-    },
-    "pie": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "scatter": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "boxplot": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "parallel": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "sankey": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "funnel": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "gauge": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            },
-            "emphasis": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        }
-    },
-    "candlestick": {
-        "itemStyle": {
-            "normal": {
-                "color": "#edafda",
-                "color0": "transparent",
-                "borderColor": "#d680bc",
-                "borderColor0": "#8fd3e8",
-                "borderWidth": "2"
-            }
-        }
-    },
-    "graph": {
-        "itemStyle": {
-            "normal": {
-                "borderWidth": 0,
-                "borderColor": "#ccc"
-            }
-        },
-        "lineStyle": {
-            "normal": {
-                "width": 1,
-                "color": "#aaa"
-            }
-        },
-        "symbolSize": "6",
-        "symbol": "emptyCircle",
-        "smooth": true,
-        "color": [
-            "#2d8cf0",
-            "#19be6b",
-            "#f5ae4a",
-            "#9189d5",
-            "#56cae2",
-            "#cbb0e3"
-        ],
-        "label": {
-            "normal": {
-                "textStyle": {
-                    "color": "#eee"
-                }
-            }
-        }
-    },
-    "map": {
-        "itemStyle": {
-            "normal": {
-                "areaColor": "#f3f3f3",
-                "borderColor": "#516b91",
-                "borderWidth": 0.5
-            },
-            "emphasis": {
-                "areaColor": "rgba(165,231,240,1)",
-                "borderColor": "#516b91",
-                "borderWidth": 1
-            }
-        },
-        "label": {
-            "normal": {
-                "textStyle": {
-                    "color": "#000"
-                }
-            },
-            "emphasis": {
-                "textStyle": {
-                    "color": "rgb(81,107,145)"
-                }
-            }
-        }
-    },
-    "geo": {
-        "itemStyle": {
-            "normal": {
-                "areaColor": "#f3f3f3",
-                "borderColor": "#516b91",
-                "borderWidth": 0.5
-            },
-            "emphasis": {
-                "areaColor": "rgba(165,231,240,1)",
-                "borderColor": "#516b91",
-                "borderWidth": 1
-            }
-        },
-        "label": {
-            "normal": {
-                "textStyle": {
-                    "color": "#000"
-                }
-            },
-            "emphasis": {
-                "textStyle": {
-                    "color": "rgb(81,107,145)"
-                }
-            }
-        }
-    },
-    "categoryAxis": {
-        "axisLine": {
-            "show": true,
-            "lineStyle": {
-                "color": "#cccccc"
-            }
-        },
-        "axisTick": {
-            "show": false,
-            "lineStyle": {
-                "color": "#333"
-            }
-        },
-        "axisLabel": {
-            "show": true,
-            "textStyle": {
-                "color": "#999999"
-            }
-        },
-        "splitLine": {
-            "show": true,
-            "lineStyle": {
-                "color": [
-                    "#eeeeee"
-                ]
-            }
-        },
-        "splitArea": {
-            "show": false,
-            "areaStyle": {
-                "color": [
-                    "rgba(250,250,250,0.05)",
-                    "rgba(200,200,200,0.02)"
-                ]
-            }
-        }
-    },
-    "valueAxis": {
-        "axisLine": {
-            "show": true,
-            "lineStyle": {
-                "color": "#cccccc"
-            }
-        },
-        "axisTick": {
-            "show": false,
-            "lineStyle": {
-                "color": "#333"
-            }
-        },
-        "axisLabel": {
-            "show": true,
-            "textStyle": {
-                "color": "#999999"
-            }
-        },
-        "splitLine": {
-            "show": true,
-            "lineStyle": {
-                "color": [
-                    "#eeeeee"
-                ]
-            }
-        },
-        "splitArea": {
-            "show": false,
-            "areaStyle": {
-                "color": [
-                    "rgba(250,250,250,0.05)",
-                    "rgba(200,200,200,0.02)"
-                ]
-            }
-        }
-    },
-    "logAxis": {
-        "axisLine": {
-            "show": true,
-            "lineStyle": {
-                "color": "#cccccc"
-            }
-        },
-        "axisTick": {
-            "show": false,
-            "lineStyle": {
-                "color": "#333"
-            }
-        },
-        "axisLabel": {
-            "show": true,
-            "textStyle": {
-                "color": "#999999"
-            }
-        },
-        "splitLine": {
-            "show": true,
-            "lineStyle": {
-                "color": [
-                    "#eeeeee"
-                ]
-            }
-        },
-        "splitArea": {
-            "show": false,
-            "areaStyle": {
-                "color": [
-                    "rgba(250,250,250,0.05)",
-                    "rgba(200,200,200,0.02)"
-                ]
-            }
-        }
-    },
-    "timeAxis": {
-        "axisLine": {
-            "show": true,
-            "lineStyle": {
-                "color": "#cccccc"
-            }
-        },
-        "axisTick": {
-            "show": false,
-            "lineStyle": {
-                "color": "#333"
-            }
-        },
-        "axisLabel": {
-            "show": true,
-            "textStyle": {
-                "color": "#999999"
-            }
-        },
-        "splitLine": {
-            "show": true,
-            "lineStyle": {
-                "color": [
-                    "#eeeeee"
-                ]
-            }
-        },
-        "splitArea": {
-            "show": false,
-            "areaStyle": {
-                "color": [
-                    "rgba(250,250,250,0.05)",
-                    "rgba(200,200,200,0.02)"
-                ]
-            }
-        }
-    },
-    "toolbox": {
-        "iconStyle": {
-            "normal": {
-                "borderColor": "#999"
-            },
-            "emphasis": {
-                "borderColor": "#666"
-            }
-        }
-    },
-    "legend": {
-        "textStyle": {
-            "color": "#999999"
-        }
-    },
-    "tooltip": {
-        "axisPointer": {
-            "lineStyle": {
-                "color": "#ccc",
-                "width": 1
-            },
-            "crossStyle": {
-                "color": "#ccc",
-                "width": 1
-            }
-        }
-    },
-    "timeline": {
-        "lineStyle": {
-            "color": "#8fd3e8",
-            "width": 1
-        },
-        "itemStyle": {
-            "normal": {
-                "color": "#8fd3e8",
-                "borderWidth": 1
-            },
-            "emphasis": {
-                "color": "#8fd3e8"
-            }
-        },
-        "controlStyle": {
-            "normal": {
-                "color": "#8fd3e8",
-                "borderColor": "#8fd3e8",
-                "borderWidth": 0.5
-            },
-            "emphasis": {
-                "color": "#8fd3e8",
-                "borderColor": "#8fd3e8",
-                "borderWidth": 0.5
-            }
-        },
-        "checkpointStyle": {
-            "color": "#8fd3e8",
-            "borderColor": "rgba(138,124,168,0.37)"
-        },
-        "label": {
-            "normal": {
-                "textStyle": {
-                    "color": "#8fd3e8"
-                }
-            },
-            "emphasis": {
-                "textStyle": {
-                    "color": "#8fd3e8"
-                }
-            }
-        }
-    },
-    "visualMap": {
-        "color": [
-            "#516b91",
-            "#59c4e6",
-            "#a5e7f0"
-        ]
-    },
-    "dataZoom": {
-        "backgroundColor": "rgba(0,0,0,0)",
-        "dataBackgroundColor": "rgba(255,255,255,0.3)",
-        "fillerColor": "rgba(167,183,204,0.4)",
-        "handleColor": "#a7b7cc",
-        "handleSize": "100%",
-        "textStyle": {
-            "color": "#333"
-        }
-    },
-    "markPoint": {
-        "label": {
-            "normal": {
-                "textStyle": {
-                    "color": "#eee"
-                }
-            },
-            "emphasis": {
-                "textStyle": {
-                    "color": "#eee"
-                }
-            }
-        }
-    }
-}

+ 0 - 78
src/components/charts/wsPie.vue

@@ -1,78 +0,0 @@
-<template>
-  <div ref="dom" class="charts chart-ws-pie"></div>
-</template>
-
-<script>
-import echarts from 'echarts'
-import tdTheme from './theme.json'
-import { on, off } from '@/libs/tools'
-echarts.registerTheme('tdTheme', tdTheme)
-export default {
-  name: 'ChartWsPie',
-  props: {
-    value: Array,
-    text: String,
-    subtext: String
-  },
-  data () {
-    return {
-      dom: null
-    }
-  },
-  methods: {
-    resize () {
-      this.dom.resize()
-    },
-    setOptions () {
-      this.$nextTick(() => {
-        let legend = this.value.map(_ => _.name)
-        let option = {
-          title: {
-            text: this.text,
-            subtext: this.subtext,
-            x: 'center'
-          },
-          tooltip: {
-            trigger: 'item',
-            formatter: '{a} <br/>{b} : {c} ({d}%)'
-          },
-          legend: {
-            orient: 'horizontal', // vertical  horizontal
-            padding: 10,
-            left: 'center',
-            itemGap: 20,
-            // width: 300,
-            itemWidth: 8,
-            itemHeight: 8,
-            data: legend
-          },
-          series: [
-            {
-              type: 'pie',
-              radius: '50%',
-              center: ['50%', '50%'],
-              data: this.value,
-              animation: false,
-              // left: 'left',
-              label: {
-                position: 'outer',
-                alignTo: 'edge',
-                margin: 20
-              }
-            }
-          ]
-        }
-        this.dom = echarts.init(this.$refs.dom, 'tdTheme')
-        this.dom.setOption(option)
-        on(window, 'resize', this.resize)
-      })
-    }
-  },
-  mounted () {
-    // this.setOptions()
-  },
-  beforeDestroy () {
-    off(window, 'resize', this.resize)
-  }
-}
-</script>

+ 0 - 42
src/components/common-icon/common-icon.vue

@@ -1,42 +0,0 @@
-<template>
-  <component :is="iconType" :type="iconName" :color="iconColor" :size="iconSize"/>
-</template>
-
-<script>
-import Icons from '_c/icons'
-export default {
-  name: 'CommonIcon',
-  components: { Icons },
-  props: {
-    type: {
-      type: String,
-      required: true
-    },
-    color: String,
-    size: Number
-  },
-  computed: {
-    iconType () {
-      return this.type.indexOf('_') === 0 ? 'Icons' : 'Icon'
-    },
-    iconName () {
-      return this.iconType === 'Icons' ? this.getCustomIconName(this.type) : this.type
-    },
-    iconSize () {
-      return this.size || (this.iconType === 'Icons' ? 12 : undefined)
-    },
-    iconColor () {
-      return this.color || ''
-    }
-  },
-  methods: {
-    getCustomIconName (iconName) {
-      return iconName.slice(1)
-    }
-  }
-}
-</script>
-
-<style>
-
-</style>

+ 0 - 2
src/components/common-icon/index.js

@@ -1,2 +0,0 @@
-import CommonIcon from './common-icon.vue'
-export default CommonIcon

+ 0 - 8
src/components/common/common.less

@@ -1,8 +0,0 @@
-.no-select{
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -khtml-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}

+ 0 - 3
src/components/common/util.js

@@ -1,3 +0,0 @@
-export const showTitle = (item, vm) => {
-  return vm.$config.useI18n ? vm.$t(item.name) : ((item.meta && item.meta.title) || item.name)
-}

+ 0 - 197
src/components/count-to/count-to.vue

@@ -1,197 +0,0 @@
-<!--
- * @Descripttion:
- * @version: X3版本
- * @Author: 程媛
- * @Date: 2019-08-27 11:49:22
- * @LastEditors: 程媛
- * @LastEditTime: 2019-08-27 11:49:22
- -->
-<template>
-  <div class="count-to-wrapper">
-    <slot name="left"/>
-    <p class="content-outer"><span :class="['count-to-count-text', countClass]" :id="counterId">{{ init }}</span><i :class="['count-to-unit-text', unitClass]">{{ unitText }}</i></p>
-    <slot name="right"/>
-  </div>
-</template>
-
-<script>
-import CountUp from 'countup'
-import './index.less'
-export default {
-  name: 'CountTo',
-  props: {
-    init: {
-      type: Number,
-      default: 0
-    },
-    /**
-     * @description 起始值,即动画开始前显示的数值
-     */
-    startVal: {
-      type: Number,
-      default: 0
-    },
-    /**
-     * @description 结束值,即动画结束后显示的数值
-     */
-    end: {
-      type: Number,
-      required: false
-    },
-    /**
-     * @description 保留几位小数
-     */
-    decimals: {
-      type: Number,
-      default: 0
-    },
-    /**
-     * @description 分隔整数和小数的符号,默认是小数点
-     */
-    decimal: {
-      type: String,
-      default: '.'
-    },
-    /**
-     * @description 动画持续的时间,单位是秒
-     */
-    duration: {
-      type: Number,
-      default: 2
-    },
-    /**
-     * @description 动画延迟开始的时间,单位是秒
-     */
-    delay: {
-      type: Number,
-      default: 0
-    },
-    /**
-     * @description 是否禁用easing动画效果
-     */
-    uneasing: {
-      type: Boolean,
-      default: false
-    },
-    /**
-     * @description 是否使用分组,分组后每三位会用一个符号分隔
-     */
-    usegroup: {
-      type: Boolean,
-      default: false
-    },
-    /**
-     * @description 用于分组(usegroup)的符号
-     */
-    separator: {
-      type: String,
-      default: ','
-    },
-    /**
-     * @description 是否简化显示,设为true后会使用unit单位来做相关省略
-     */
-    simplify: {
-      type: Boolean,
-      default: false
-    },
-    /**
-     * @description 自定义单位,如[3, 'K+'], [6, 'M+']即大于3位数小于6位数的用k+来做省略
-     *              1000即显示为1K+
-     */
-    unit: {
-      type: Array,
-      default () {
-        return [[3, 'K+'], [6, 'M+'], [9, 'B+']]
-      }
-    },
-    countClass: {
-      type: String,
-      default: ''
-    },
-    unitClass: {
-      type: String,
-      default: ''
-    }
-  },
-  data () {
-    return {
-      counter: null,
-      unitText: '',
-      initStatus: false
-    }
-  },
-  computed: {
-    counterId () {
-      return `count_to_${this._uid}`
-    }
-  },
-  methods: {
-    getHandleVal (val, len) {
-      return {
-        endVal: parseInt(val / Math.pow(10, this.unit[len - 1][0])),
-        unitText: this.unit[len - 1][1]
-      }
-    },
-    transformValue (val) {
-      let len = this.unit.length
-      let res = {
-        endVal: 0,
-        unitText: ''
-      }
-      if (val < Math.pow(10, this.unit[0][0])) res.endVal = val
-      else {
-        for (let i = 1; i < len; i++) {
-          if (val >= Math.pow(10, this.unit[i - 1][0]) && val < Math.pow(10, this.unit[i][0])) res = this.getHandleVal(val, i)
-        }
-      }
-      if (val > Math.pow(10, this.unit[len - 1][0])) res = this.getHandleVal(val, len)
-      return res
-    },
-    getValue (val) {
-      let res = 0
-      if (this.simplify) {
-        let { endVal, unitText } = this.transformValue(val)
-        this.unitText = unitText
-        res = endVal
-      } else {
-        res = val
-      }
-      return res
-    },
-    initMethod (value, decimals) {
-      this.$nextTick(() => {
-        this.counter = new CountUp(this.counterId, 0, value, decimals, 2, {
-          useEasing: !this.uneasing,
-          useGrouping: this.usegroup,
-          separator: this.separator,
-          decimal: '.'
-        })
-        setTimeout(() => {
-          if (!this.counter.error) this.counter.start()
-        }, this.delay)
-      })
-    }
-  }
-  /* mounted () {
-    this.$nextTick(() => {
-      let endVal = this.getValue(this.end)
-      this.counter = new CountUp(this.counterId, this.startVal, endVal, this.decimals, this.duration, {
-        useEasing: !this.uneasing,
-        useGrouping: this.useGroup,
-        separator: this.separator,
-        decimal: this.decimal
-      })
-      setTimeout(() => {
-        if (!this.counter.error) this.counter.start()
-      }, this.delay)
-    })
-  },
-
-  watch: {
-    end (newVal) {
-      let endVal = this.getValue(newVal)
-      this.counter.update(endVal)
-    }
-  } */
-}
-</script>

+ 0 - 2
src/components/count-to/index.js

@@ -1,2 +0,0 @@
-import countTo from './count-to.vue'
-export default countTo

+ 0 - 10
src/components/count-to/index.less

@@ -1,10 +0,0 @@
-@prefix: ~"count-to";
-
-.@{prefix}-wrapper{
-  .content-outer{
-    display: inline-block;
-    .@{prefix}-unit-text{
-      font-style: normal;
-    }
-  }
-}

+ 0 - 2
src/components/cropper/index.js

@@ -1,2 +0,0 @@
-import Cropper from './index.vue'
-export default Cropper

+ 0 - 35
src/components/cropper/index.less

@@ -1,35 +0,0 @@
-.bg{
-  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC")
-}
-.cropper-wrapper{
-  width: 600px;
-  height: 340px;
-  .img-box{
-    height: 340px;
-    width: 430px;
-    border: 1px solid #ebebeb;
-    display: inline-block;
-    .bg;
-    img{
-      max-width: 100%;
-      display: block;
-    }
-  }
-  .right-con{
-    display: inline-block;
-    width: 170px;
-    vertical-align: top;
-    box-sizing: border-box;
-    padding: 0 10px;
-    .preview-box{
-      height: 150px !important;
-      width: 100% !important;
-      overflow: hidden;
-      border: 1px solid #ebebeb;
-      .bg;
-    }
-    .button-box{
-      padding: 10px 0 0;
-    }
-  }
-}

+ 0 - 139
src/components/cropper/index.vue

@@ -1,139 +0,0 @@
-<template>
-  <div class="cropper-wrapper">
-    <div class="img-box">
-      <img class="cropper-image" :id="imgId" alt="">
-    </div>
-    <div class="right-con">
-      <div v-if="preview" class="preview-box" :id="previewId"></div>
-      <div class="button-box">
-        <slot>
-          <Upload action="image/upload" :before-upload="beforeUpload">
-            <Button style="width: 150px;" type="primary">上传图片</Button>
-          </Upload>
-        </slot>
-        <div v-show="insideSrc">
-          <Button type="primary" @click="rotate">
-            <Icon type="md-refresh" :size="18"/>
-          </Button>
-          <Button type="primary" @click="shrink">
-            <Icon type="md-remove" :size="18"/>
-          </Button>
-          <Button type="primary" @click="magnify">
-            <Icon type="md-add" :size="18"/>
-          </Button>
-          <Button type="primary" @click="scale('X')">
-            <Icon custom="iconfont icon-shuipingfanzhuan" :size="18"/>
-          </Button>
-          <Button type="primary" @click="scale('Y')">
-            <Icon custom="iconfont icon-chuizhifanzhuan" :size="18"/>
-          </Button>
-          <Button type="primary" @click="move(0, -moveStep)">
-            <Icon type="md-arrow-round-up" :size="18"/>
-          </Button>
-          <Button type="primary" @click="move(-moveStep, 0)">
-            <Icon type="md-arrow-round-back" :size="18"/>
-          </Button>
-          <Button type="primary" @click="move(0, moveStep)">
-            <Icon type="md-arrow-round-down" :size="18"/>
-          </Button>
-          <Button type="primary" @click="move(moveStep, 0)">
-            <Icon type="md-arrow-round-forward" :size="18"/>
-          </Button>
-          <Button style="width: 150px;margin-top: 10px;" type="primary" @click="crop">{{ cropButtonText }}</Button>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import Cropper from 'cropperjs'
-import './index.less'
-import 'cropperjs/dist/cropper.min.css'
-export default {
-  name: 'Cropper',
-  props: {
-    src: {
-      type: String,
-      default: ''
-    },
-    preview: {
-      type: Boolean,
-      default: true
-    },
-    moveStep: {
-      type: Number,
-      default: 4
-    },
-    cropButtonText: {
-      type: String,
-      default: '裁剪'
-    }
-  },
-  data () {
-    return {
-      cropper: null,
-      insideSrc: ''
-    }
-  },
-  computed: {
-    imgId () {
-      return `cropper${this._uid}`
-    },
-    previewId () {
-      return `cropper_preview${this._uid}`
-    }
-  },
-  watch: {
-    src (src) {
-      this.replace(src)
-    },
-    insideSrc (src) {
-      this.replace(src)
-    }
-  },
-  methods: {
-    beforeUpload (file) {
-      const reader = new FileReader()
-      reader.readAsDataURL(file)
-      reader.onload = (event) => {
-        this.insideSrc = event.srcElement.result
-      }
-      return false
-    },
-    replace (src) {
-      this.cropper.replace(src)
-      this.insideSrc = src
-    },
-    rotate () {
-      this.cropper.rotate(90)
-    },
-    shrink () {
-      this.cropper.zoom(-0.1)
-    },
-    magnify () {
-      this.cropper.zoom(0.1)
-    },
-    scale (d) {
-      this.cropper[`scale${d}`](-this.cropper.getData()[`scale${d}`])
-    },
-    move (...argu) {
-      this.cropper.move(...argu)
-    },
-    crop () {
-      this.cropper.getCroppedCanvas().toBlob(blob => {
-        this.$emit('on-crop', blob)
-      })
-    }
-  },
-  mounted () {
-    this.$nextTick(() => {
-      let dom = document.getElementById(this.imgId)
-      this.cropper = new Cropper(dom, {
-        preview: `#${this.previewId}`,
-        checkCrossOrigin: true
-      })
-    })
-  }
-}
-</script>

+ 0 - 18
src/components/drag-drawer/drag-drawer-trigger.vue

@@ -1,18 +0,0 @@
-<template>
-  <div :class="`${prefix}-move-trigger`">
-    <div :class="`${prefix}-move-trigger-point`">
-      <i></i><i></i><i></i><i></i><i></i>
-    </div>
-  </div>
-</template>
-
-<script>
-import Mixin from './mixin'
-export default {
-  name: 'DragDrawerTrigger',
-  mixins: [Mixin]
-}
-</script>
-
-<style>
-</style>

+ 0 - 156
src/components/drag-drawer/drag-drawer.vue

@@ -1,156 +0,0 @@
-<template>
-  <Drawer ref="drawerWrapper"
-          :value="value"
-          @input="handleInput"
-          :width="width"
-          :class-name="outerClasses"
-          v-bind="$attrs"
-          v-on="$listeners">
-    <!-- 所有插槽内容显示在这里 ↓ -->
-
-    <template v-for="(slots, slotsName) in $slots">
-      <template v-if="slotsName !== 'default'">
-        <render-dom v-for="(render, index) in slots"
-                    :key="`b_drawer_${slotsName}_${index}`"
-                    :render="() => render"
-                    :slot="slotsName">
-        </render-dom>
-      </template>
-      <template v-else>
-        <div :class="`${prefix}-body-wrapper`"
-             :key="`b_drawer_${slotsName}`">
-          <render-dom v-for="(render, index) in slots"
-                      :key="`b_drawer_${slotsName}_${index}`"
-                      :render="() => render"
-                      :slot="slotsName">
-          </render-dom>
-        </div>
-      </template>
-    </template>
-    <!-- 所有插槽内容显示在这里 ↑ -->
-    <div v-if="draggable"
-         :style="triggerStyle"
-         :class="`${prefix}-trigger-wrapper`"
-         @mousedown="handleTriggerMousedown">
-      <slot name="trigger">
-        <drag-drawer-trigger></drag-drawer-trigger>
-      </slot>
-    </div>
-    <div v-if="$slots.footer"
-         :class="`${prefix}-footer`">
-      <slot name="footer"></slot>
-    </div>
-  </Drawer>
-</template>
-
-<script>
-import RenderDom from '@/libs/render-dom'
-import DragDrawerTrigger from './drag-drawer-trigger.vue'
-import Mixin from './mixin'
-import { on, off } from '@/libs/tools'
-import './index.less'
-export default {
-  name: 'BDrawer',
-  components: {
-    RenderDom,
-    DragDrawerTrigger
-  },
-  mixins: [Mixin],
-  props: {
-    value: {
-      type: Boolean,
-      default: false
-    },
-    width: {
-      type: [String, Number],
-      default: 256
-    },
-    // 是否可拖动修改宽度
-    draggable: {
-      type: Boolean,
-      default: false
-    },
-    // 最小拖动宽度
-    minWidth: {
-      type: [String, Number],
-      default: 256
-    }
-  },
-  data () {
-    return {
-      canMove: false,
-      wrapperWidth: 0,
-      wrapperLeft: 0
-    }
-  },
-  computed: {
-    outerClasses () {
-      const classesArray = [
-        `${this.prefix}-wrapper`,
-        this.canMove ? 'no-select pointer-events-none' : ''
-      ]
-      return classesArray.join(' ')
-    },
-    placement () {
-      return this.$attrs.placement
-    },
-    innerWidth () {
-      const width = this.width
-      return width <= 100 ? (this.wrapperWidth * width) / 100 : width
-    },
-    triggerStyle () {
-      return {
-        [this.placement]: `${this.innerWidth}px`,
-        position: this.$attrs.inner ? 'absolute' : 'fixed'
-      }
-    }
-  },
-  methods: {
-    handleInput (status) {
-      this.$emit('input', status)
-    },
-    handleTriggerMousedown (event) {
-      this.canMove = true
-      this.$emit('on-resize-start')
-      // 防止鼠标选中抽屉中文字,造成拖动trigger触发浏览器原生拖动行为
-      window.getSelection().removeAllRanges()
-    },
-    handleMousemove (event) {
-      if (!this.canMove) return
-      // 更新容器宽度和距离左侧页面距离,如果是window则距左侧距离为0
-      this.setWrapperWidth()
-      const left = event.pageX - this.wrapperLeft
-      // 如果抽屉方向为右边,宽度计算需用容器宽度减去left
-      let width = this.placement === 'right' ? this.wrapperWidth - left : left
-      // 限定做小宽度
-      width = Math.max(width, parseFloat(this.minWidth))
-      event.atMin = width === parseFloat(this.minWidth)
-      // 如果当前width不大于100,视为百分比
-      if (width <= 100) width = (width / this.wrapperWidth) * 100
-      this.$emit('update:width', parseInt(width))
-      this.$emit('on-resize', event)
-    },
-    handleMouseup (event) {
-      this.canMove = false
-      this.$emit('on-resize-end')
-    },
-    setWrapperWidth () {
-      const {
-        width,
-        left
-      } = this.$refs.drawerWrapper.$el.getBoundingClientRect()
-      this.wrapperWidth = width
-      this.wrapperLeft = left
-    }
-  },
-  mounted () {
-    on(document, 'mousemove', this.handleMousemove)
-    on(document, 'mouseup', this.handleMouseup)
-    this.setWrapperWidth()
-  },
-  beforeDestroy () {
-    off(document, 'mousemove', this.handleMousemove)
-    off(document, 'mouseup', this.handleMouseup)
-  }
-}
-</script>

+ 0 - 2
src/components/drag-drawer/index.js

@@ -1,2 +0,0 @@
-import DragDrawer from './drag-drawer.vue'
-export default DragDrawer

+ 0 - 70
src/components/drag-drawer/index.less

@@ -1,70 +0,0 @@
-@prefix: ~"drag-drawer";
-@drag-drawer-trigger-height: 100px;
-@drag-drawer-trigger-width: 8px;
-
-.@{prefix}-wrapper{
-  &.no-select{
-    user-select: none;
-  }
-  &.pointer-events-none{
-    pointer-events: none;
-    & .@{prefix}-trigger-wrapper{
-      pointer-events: all;
-    }
-  }
-  .ivu-drawer{
-    &-header{
-      overflow: hidden !important;
-      box-sizing: border-box;
-    }
-    &-body{
-      padding: 0;
-      overflow: visible;
-      position: static;
-      display: flex;
-      flex-direction: column;
-    }
-  }
-  .@{prefix}-body-wrapper{
-    width: 100%;
-    height: 100%;
-    padding: 16px;
-    overflow: auto;
-  }
-  .@{prefix}-trigger-wrapper{
-    top: 0;
-    height: 100%;
-    width: 0;
-    .@{prefix}-move-trigger{
-      position: absolute;
-      top: 50%;
-      height: @drag-drawer-trigger-height;
-      width: @drag-drawer-trigger-width;
-      background: rgb(243, 243, 243);
-      transform: translate(-50%, -50%);
-      border-radius: ~"4px / 6px";
-      box-shadow: 0 0 1px 1px rgba(0, 0, 0, .2);
-      line-height: @drag-drawer-trigger-height;
-      cursor: col-resize;
-      &-point{
-        display: inline-block;
-        width: 50%;
-        transform: translateX(50%);
-        i{
-          display: block;
-          border-bottom: 1px solid rgb(192, 192, 192);
-          padding-bottom: 2px;
-        }
-      }
-    }
-  }
-  .@{prefix}-footer{
-    flex-grow: 1;
-    width: 100%;
-    bottom: 0;
-    left: 0;
-    border-top: 1px solid #e8e8e8;
-    padding: 10px 16px;
-    background: #fff;
-  }
-}

+ 0 - 7
src/components/drag-drawer/mixin.js

@@ -1,7 +0,0 @@
-export default {
-  data () {
-    return {
-      prefix: 'drag-drawer'
-    }
-  }
-}

+ 0 - 92
src/components/drag-list/drag-list.vue

@@ -1,92 +0,0 @@
-<template>
-  <div class="drag-list-wrapper">
-    <div class="drag-list-con con1">
-      <slot name="left-title"></slot>
-      <draggable class="drop-box1" :class="dropConClass.left" :options="options" :value="list1" @input="handleListChange($event, 'left')" @end="handleEnd($event, 'left')">
-        <div class="drag-list-item" v-for="(itemLeft, index) in list1" :key="`drag_li1_${index}`">
-          <slot name="left" :itemLeft="itemLeft">{{ itemLeft }}</slot>
-        </div>
-      </draggable>
-    </div>
-    <div class="drag-list-con con2">
-      <slot name="right-title"></slot>
-      <draggable class="drop-box2" :class="dropConClass.right" :options="options" :value="list2" @input="handleListChange($event, 'right')" @end="handleEnd($event, 'right')">
-        <div class="drag-list-item" v-for="(itemRight, index) in list2" :key="`drag_li2_${index}`">
-          <slot name="right" :itemRight="itemRight">{{ itemRight }}</slot>
-        </div>
-      </draggable>
-    </div>
-  </div>
-</template>
-<script>
-import draggable from 'vuedraggable'
-export default {
-  name: 'DragList',
-  components: {
-    draggable
-  },
-  props: {
-    list1: {
-      type: Array,
-      required: true
-    },
-    list2: {
-      type: Array,
-      default: () => []
-    },
-    dropConClass: {
-      type: Object,
-      default: () => ({})
-    }
-  },
-  data () {
-    return {
-      options: { group: 'drag_list' }
-    }
-  },
-  methods: {
-    handleListChange (value, type) {
-      if (type === 'left') this.$emit('update:list1', value)
-      else this.$emit('update:list2', value)
-    },
-    handleEnd (event, type) {
-      const srcClassName = (event.srcElement || event.target).classList[0]
-      const targetClassName = event.to.classList[0]
-      let src = ''
-      let target = ''
-      if (srcClassName === targetClassName) {
-        if (type === 'left') {
-          src = 'left'
-          target = 'left'
-        } else {
-          src = 'right'
-          target = 'right'
-        }
-      } else {
-        if (type === 'left') {
-          src = 'left'
-          target = 'right'
-        } else {
-          src = 'right'
-          target = 'left'
-        }
-      }
-      this.$emit('on-change', {
-        src: src,
-        target: target,
-        oldIndex: event.oldIndex,
-        newIndex: event.newIndex
-      })
-    }
-  }
-}
-</script>
-<style lang="less">
-.drag-list-wrapper{
-  height: 100%;
-  .drag-list-con{
-    width: 50%;
-    float: left;
-  }
-}
-</style>

+ 0 - 2
src/components/drag-list/index.js

@@ -1,2 +0,0 @@
-import DragList from './drag-list.vue'
-export default DragList

+ 0 - 75
src/components/editor/editor.vue

@@ -1,75 +0,0 @@
-<template>
-  <div class="editor-wrapper">
-    <div :id="editorId"></div>
-  </div>
-</template>
-
-<script>
-import Editor from 'wangeditor'
-import 'wangeditor/release/wangEditor.min.css'
-import { oneOf } from '@/libs/tools'
-export default {
-  name: 'Editor',
-  props: {
-    value: {
-      type: String,
-      default: ''
-    },
-    /**
-     * 绑定的值的类型, enum: ['html', 'text']
-     */
-    valueType: {
-      type: String,
-      default: 'html',
-      validator: (val) => {
-        return oneOf(val, ['html', 'text'])
-      }
-    },
-    /**
-     * @description 设置change事件触发时间间隔
-     */
-    changeInterval: {
-      type: Number,
-      default: 200
-    },
-    /**
-     * @description 是否开启本地存储
-     */
-    cache: {
-      type: Boolean,
-      default: true
-    }
-  },
-  computed: {
-    editorId () {
-      return `editor${this._uid}`
-    }
-  },
-  methods: {
-    setHtml (val) {
-      this.editor.txt.html(val)
-    }
-  },
-  mounted () {
-    this.editor = new Editor(`#${this.editorId}`)
-    this.editor.customConfig.onchange = (html) => {
-      let text = this.editor.txt.text()
-      if (this.cache) localStorage.editorCache = html
-      this.$emit('input', this.valueType === 'html' ? html : text)
-      this.$emit('on-change', html, text)
-    }
-    this.editor.customConfig.onchangeTimeout = this.changeInterval
-    // create这个方法一定要在所有配置项之后调用
-    this.editor.create()
-    // 如果本地有存储加载本地存储内容
-    let html = this.value || localStorage.editorCache
-    if (html) this.editor.txt.html(html)
-  }
-}
-</script>
-
-<style lang="less">
-.editor-wrapper *{
-  z-index: 100 !important;
-}
-</style>

+ 0 - 2
src/components/editor/index.js

@@ -1,2 +0,0 @@
-import Editor from './editor.vue'
-export default Editor

+ 0 - 63
src/components/eloamApplyCard.vue

@@ -1,63 +0,0 @@
-<template>
-  <div :style="outerStyles" @click="customClick">
-    <div v-if="itemModel" style="padding-top: 10px;padding-left:10px;font-size: 18px">
-      <p :title="itemModel" style="width: 160px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer;"><strong>{{itemModel}}</strong></p>
-        <Badge style="position: absolute;top:1%;right: 1%;" :text="itemType === 0?'公开':(itemType === 1?'私密':'机密')" :class-name="itemType === 0?'demo-badge-alone':(itemType === 1?'demo-blue-alone':'demo-red-alone')">
-        </Badge>
-    </div>
-    <div v-if="itemName" style="padding-bottom: 10px;padding-left:10px;font-size: 14px">
-      <p :title="itemName" style="width: 200px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;cursor: pointer;">
-        {{itemName}}
-      </p>
-    </div>
-  </div>
-</template>
-<style>
-  .demo-badge-alone{
-    background: #5cb85c !important;
-  }
-  .demo-red-alone{
-    background: #ff2845 !important;
-  }
-  .demo-blue-alone{
-    background: #008080 !important;
-  }
-</style>
-<script>
-export default {
-  name: 'EloamApplyCard',
-  props: {
-    itemModel: {
-      type: String,
-      default: ''
-    },
-    itemName: {
-      type: String,
-      default: ''
-    },
-    itemType: {
-      type: Number,
-      default: 0
-    },
-    styles: {
-      type: Object,
-      default: () => ({})
-    },
-    id: {
-      type: Number,
-      default: 0
-    }
-  },
-  computed: {
-    outerStyles () {
-      let obj = { width: '200px', height: 'auto', position: 'relative', 'border-radius': '5px', border: '1px solid #e8e8e8', 'text-align': 'left', margin: '10px' }
-      return Object.assign(obj, this.styles)
-    }
-  },
-  methods: {
-    customClick () {
-      this.$emit('on-success-click', this.id, this.itemModel + ' ' + this.itemName)
-    }
-  }
-}
-</script>

+ 0 - 17
src/components/eloamCopy.vue

@@ -1,17 +0,0 @@
-<template>
-  <input type="text" ref="copyData" style="opacity: 0;" />
-</template>
-<script>
-export default {
-  name: 'copyAction',
-  methods: {
-    copyHandle (msg) {
-      const copyRef = this.$refs.copyData
-      copyRef.value = msg
-      copyRef.select()
-      document.execCommand('copy')
-      this.$Message.success('复制成功')
-    }
-  }
-}
-</script>

+ 0 - 161
src/components/eloamExcel.vue

@@ -1,161 +0,0 @@
-<template>
-  <div>
-    <Modal
-      v-model="exportModal"
-      :closable="false"
-      :title="title"
-      @on-ok="exportTable"
-      @on-cancel="cancelExport"
-      :loading="addModalLoading"
-    >
-      <Form ref="formValidate" :model="formValidate" :rules="rules">
-        <FormItem prop="tableFiled">
-          <div class="firstRow">
-            <label>请选择需要导出的字段:</label>
-            <div>
-              <Checkbox
-                :indeterminate="indeterminate"
-                :value="checkAll"
-                @click.prevent.native="handleCheckAll"
-              >全选</Checkbox>
-            </div>
-          </div>
-          <CheckboxGroup v-model="formValidate.tableFiled" @on-change="checkAllGroupChange">
-            <Checkbox
-              style="width: 200px"
-              v-for="item in tableFieldList"
-              :label="item.id"
-              :key="item.id"
-              class="checkbox"
-            >{{item.execlName}}</Checkbox>
-          </CheckboxGroup>
-        </FormItem>
-      </Form>
-      <!-- loading START -->
-      <Spin fix v-if="fetchingFields"></Spin>
-      <!-- loading END -->
-    </Modal>
-  </div>
-</template>
-<!--导出模块通用方法-->
-<script>
-export default {
-  name: 'eloamExcel',
-  data () {
-    return {
-      indeterminate: false,
-      checkAll: false,
-      fetchingFields: false,
-      addModalLoading: true,
-      tableFieldList: [],
-      formValidate: {
-        tableFiled: []
-      },
-      exportModal: false,
-      rules: {
-        // 导出表单验证
-        tableFiled: [
-          {
-            required: true,
-            type: 'array',
-            message: '请选择需要导出的字段',
-            trigger: 'change'
-          }
-        ]
-      }
-    }
-  },
-  props: {
-    // 请求类型
-    type: {
-      type: Number,
-      default: 1
-    },
-    url: {
-      type: String,
-      default: 'common/findExcelFieldList'
-    },
-    title: String
-
-  },
-  methods: {
-    fetchServerField (fun, bl) {
-      if (typeof (fun) === 'function') {
-        // 是方法
-        let params = {
-          id: this.type, // 3.信息列表
-          bl: !!bl
-        }
-        let fetchUserListFromMerchantOK = res => {
-          if (res.code === 0) {
-            this.tableFieldList = res.data
-            this.exportModal = true
-          } else this.$Message.error(res.msg)
-        }
-        fun({ method: 'get', URI: this.url, params }).then(
-          fetchUserListFromMerchantOK
-        )
-      } else this.$Message.warning('导出数据,请检查入参')
-    },
-    // 点击全选按钮
-    handleCheckAll () {
-      if (this.indeterminate) {
-        this.checkAll = false
-      } else {
-        this.checkAll = !this.checkAll
-      }
-      this.indeterminate = false
-      if (this.checkAll) {
-        this.formValidate.tableFiled = this.tableFieldList.map(item => item.id)
-      } else {
-        this.formValidate.tableFiled = []
-      }
-    },
-    // 点击字段复选框
-    checkAllGroupChange (data) {
-      const tableFieldList = this.tableFieldList
-      if (data.length === tableFieldList.length) {
-        this.indeterminate = false
-        this.checkAll = true
-      } else if (data.length > 0) {
-        this.indeterminate = true
-        this.checkAll = false
-      } else {
-        this.indeterminate = false
-        this.checkAll = false
-      }
-    },
-    // 点击模态框提交事件
-    exportTable () {
-      this.$refs.formValidate.validate(valid => {
-        if (valid) {
-          // 这里提交数据
-          this.$emit('on-success-excel', { ids: this.formValidate.tableFiled })
-          setTimeout(() => {
-            this.exportModal = false
-            this.formValidate.tableFiled = []
-            this.indeterminate = false
-            this.checkAll = false
-          }, 1000)
-        } else {
-          this.exportModal = true
-          return this.changeLoading()
-        }
-      })
-    },
-    // 取消导出数据
-    cancelExport () {
-      // 重置复选框
-      this.formValidate.tableFiled = []
-      this.checkAll = false
-      this.$Message.info('已取消')
-    },
-    changeLoading () {
-      this.addModalLoading = false
-      this.$nextTick(() => {
-        this.addModalLoading = true
-      })
-    }
-  }
-}
-</script>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 83
src/components/eloamIcon.vue


+ 0 - 43
src/components/eloamListItemMeta.vue

@@ -1,43 +0,0 @@
-<template>
-    <div class="ivu-list-item-meta">
-        <div class="ivu-list-item-meta-avatar" v-if="avatar || $slots.avatar">
-            <slot name="avatar">
-                <Avatar :src="avatar" />
-            </slot>
-        </div>
-        <div class="ivu-list-item-meta-content">
-            <div v-if="title || $slots.title" class="ivu-list-item-meta-title"><slot name="title">{{ title }}</slot></div>
-            <div v-if="descriptions || $slots.descriptions" class="ivu-list-item-meta-description">
-              <slot name="description">
-                <div v-for="(item,index) in descriptions" :key="index">
-                {{ item }}
-                </div>
-              </slot>
-            </div>
-        </div>
-    </div>
-</template>
-<script>
-// import Avatar from '../../components/avatar/avatar.vue'
-
-export default {
-  name: 'EloamListItemMeta',
-  // components: { Avatar },
-  props: {
-    avatar: {
-      type: String,
-      default: ''
-    },
-    title: {
-      type: String,
-      default: ''
-    },
-    descriptions: {
-      type: Array,
-      default: () => {
-        return []
-      }
-    }
-  }
-}
-</script>

+ 0 - 178
src/components/eloamMap.vue

@@ -1,178 +0,0 @@
-<template>
-  <div>
-    <!--地图-->
-    <Modal
-      v-model="mapModal"
-      title="选择地址"
-      width="800"
-      @on-cancel="resetMap"
-      :styles="{top: '20px'}"
-    >
-      <div class="padding-bottom-10">
-        <div style="display: flex;align-items: center;">
-          <b
-            style="margin-left: 10px;width: 60%"
-          >{{address ? `选择的地址:${address}` : '尚未选择任何地址'}}</b>
-          <Input
-            v-model="searchKeywords"
-            @on-search="searchPlace"
-            style="width: 300px"
-            search
-            enter-button
-            placeholder="请输入关键词进行搜索,例如:‘清华信息港"
-          />
-        </div>
-      </div>
-      <div id="amapContainer" style="width: 100%;height: 400px;position: relative;"></div>
-      <div
-        id="panel"
-        style="position: absolute;background-color: white;max-height: 60%;overflow-y: auto;top: 109px;right: 16px;width: 280px;"
-      ></div>
-    </Modal>
-  </div>
-</template>
-<script>
-let map, marker, placeSearch
-export default {
-  name: 'eloamMap',
-  props: {
-    /* lng: {
-      type: Number,
-      default: 113.946146
-    }, // 经度
-    lat: {
-      type: Number,
-      default: 22.553592
-    } // 纬度 */
-    zoom: {// 级别
-      type: Number,
-      default: 12
-    },
-    center: {// 中心点坐标
-      type: Array,
-      default: () => {
-        return [114.05956, 22.54286]
-      }
-    }
-  },
-  data () {
-    return {
-      mapModal: false,
-      searchKeywords: '',
-      address: '',
-      lng: 113.946146,
-      lat: 22.553592
-    }
-  },
-  methods: {
-    openMap (address, lng, lat) {
-      if (address) {
-        this.address = address
-        this.lng = lng
-        this.lat = lat
-      }
-      // 打开高德地图
-      this.mapModal = true
-      this.delayInitMap()
-    },
-    delayInitMap () {
-      this.$nextTick(() => {
-        this.initMap()
-        map.on('click', ev => {
-          const _e = ev
-          this.geoCoder(_e.lnglat.lng, _e.lnglat.lat)
-        })
-      })
-    },
-    // 地图初始化
-    initMap () {
-      if (this.lat && this.lng) {
-        const geoArray = [this.lng, this.lat]
-        map = new AMap.Map('amapContainer', {
-          zoom: 15,
-          center: geoArray
-        })
-        marker = new AMap.Marker({
-          icon: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',
-          position: geoArray
-        })
-        map.add(marker)
-        map.setFitView()
-      } else {
-        map = new AMap.Map('amapContainer', {
-          zoom: this.zoom, // 级别
-          center: this.center // 中心点坐标
-        })
-      }
-    },
-    resetMap () {
-      this.searchKeywords = ''
-      if (placeSearch) {
-        placeSearch.clear()
-      }
-      this.mapModal = false
-      this.lat = ''
-      this.lng = ''
-    },
-    // 地图进行关键词搜索
-    searchPlace () {
-      AMap.service(['AMap.PlaceSearch'], () => {
-        // 构造地点查询类
-        placeSearch = new AMap.PlaceSearch({
-          pageSize: 5, // 单页显示结果条数
-          pageIndex: 1, // 页码
-          city: '全国', // 兴趣点城市
-          citylimit: false, // 是否强制限制在设置的城市内搜索
-          map: map, // 展现结果的地图实例
-          panel: 'panel', // 结果列表将在此容器中进行展示。
-          autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
-        })
-        // 关键字查询
-        placeSearch.search(this.searchKeywords)
-        placeSearch.on('selectChanged', e => this.selectChanged(e))
-      })
-    },
-    selectChanged (e) {
-      const { cityname, adname, address } = e.selected.data
-      // this.addForm.address = cityname + '' + adname + '' + address
-      // this.$set(this.addForm, 'address', cityname + '' + adname + '' + address)
-      this.address = cityname + '' + adname + '' + address
-      console.log(cityname, adname, address)
-      const geoData = e.selected.data.location
-      this.lat = geoData.lat
-      this.lng = geoData.lng
-      this.emit()
-    },
-    emit () {
-      this.$emit('on-success-map', { address: this.address, lng: this.lng, lat: this.lat })
-    },
-    geoCoder (lng, lat) {
-      let lnglat = [lng, lat]
-      if (marker) {
-        map.remove(marker)
-      }
-      AMap.plugin('AMap.Geocoder', () => {
-        var geocoder = new AMap.Geocoder({
-          // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
-          city: '010'
-        })
-        geocoder.getAddress(lnglat, (status, result) => {
-          if (status === 'complete' && result.info === 'OK') {
-            // result为对应的地理位置详细信息
-            const _data = result
-            this.address = _data.regeocode.formattedAddress
-            this.lat = lat
-            this.lng = lng
-            this.emit()
-            marker = new AMap.Marker({
-              icon: 'https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png',
-              position: lnglat
-            })
-            map.add(marker)
-          }
-        })
-      })
-    }
-  }
-}
-</script>

+ 0 - 335
src/components/eloamUpload.vue

@@ -1,335 +0,0 @@
-<style lang="less" scoped>
-  .fileUploader {
-    margin-bottom: 20px;
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    & .firstRow {
-      width: 100%;
-      display: flex;
-      align-items: center;
-    }
-    & .firstRow label {
-      min-width: 80px;
-      padding-right: 12px;
-      font-size: 12px;
-      color: #495060;
-      text-align: right;
-    }
-    & .firstRow label:before {
-      content: "*";
-      display: inline-block;
-      margin-right: 4px;
-      line-height: 1;
-      font-family: SimSun;
-      font-size: 12px;
-      color: #ed3f14;
-    }
-  }
-
-  .sndRow {
-    width: 100%;
-  }
-
-  .fileName {
-    height: 20px;
-    text-align: left;
-    padding-top: 6px;
-    padding-left: 80px;
-    font-size: 12px;
-    word-wrap: break-word;
-  }
-
-  .uploadErrorInfo {
-    height: 20px;
-    text-align: left;
-    padding-top: 6px;
-    padding-left: 80px;
-    font-size: 12px;
-    color: #ed3f14;
-  }
-
-  .demo-upload-list {
-    display: inline-block;
-    min-width: 60px;
-    max-width: 60px;
-    height: 60px;
-    text-align: center;
-    line-height: 60px;
-    border: 1px solid transparent;
-    border-radius: 4px;
-    overflow: hidden;
-    background: #fff;
-    position: relative;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-    margin-right: 4px;
-  }
-
-  .demo-upload-list img {
-    width: 100%;
-    height: 100%;
-  }
-
-  .demo-upload-list-cover {
-    display: none;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    left: 0;
-    right: 0;
-    background: rgba(0, 0, 0, 0.6);
-  }
-
-  .demo-upload-list:hover .demo-upload-list-cover {
-    display: block;
-  }
-
-  .demo-upload-list-cover i {
-    color: #fff;
-    font-size: 20px;
-    cursor: pointer;
-    margin: 0 2px;
-  }
-  /*.ivu-input-group-prepend, .ivu-input-group-append {
-    padding: 0px;
-    border: 0px;
-    width: 180px;
-  }*/
-</style>
-<template>
-  <div>
-    <Upload v-if="!baseUploadInfo.url"
-            :action="action"
-            :show-upload-list="true"
-            :on-success="handleLogoSuccess"
-            :format="format"
-            :max-size="maxSize"
-            :on-format-error="handleLogoFormatError"
-            :on-exceeded-size="handleLogoMaxSize"
-            :before-upload="handleLogoBeforeUpload"
-            :disabled="disabled"
-            type="drag"
-            style="display: inline-block;width:100px;"
-    >
-      <div style="width: 100px;height:58px;line-height: 58px;">
-        <Icon type="ios-camera" size="20"></Icon>
-      </div>
-    </Upload>
-    <!-- 只支持上传一张图片操作-->
-    <div v-else class="demo-upload-list">
-      <template>
-        <template>
-          <img :src="baseUploadInfo.url"/>
-        </template>
-        <div class="demo-upload-list-cover">
-          <template>
-            <Icon type="ios-eye-outline" @click.native="handlePreview(baseUploadInfo.url)"></Icon>
-          </template>
-          <Icon type="ios-trash-outline" v-if="removeBol" @click.native="handleLogoRemove()"></Icon>
-        </div>
-      </template>
-      <Modal v-model="visible" :footer-hide="true">
-        <img :src="imgUrl" style="width: 100%"/>
-      </Modal>
-    </div>
-    <template v-if="showFormBol">
-      <span class="tips">{{fadTipsMsg}}</span>
-    </template>
-    <div class="sndRow">
-      <transition name="fade">
-        <p class="uploadErrorInfo" v-show="uploadErrorInfo">{{uploadErrorInfo}}</p>
-      </transition>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'myEloamUpload',
-  data () {
-    return {
-      baseUploadInfo: {
-        id: '',
-        url: ''
-      },
-      uploadErrorInfo: '',
-      fileName: '',
-      fileName1: '',
-      imgUrl: '',
-      visible: false,
-      fadTipsMsg: ''
-    }
-  },
-  props: {
-    action: {
-      type: String,
-      default: `${window.host}/upload/uploadResources?type=100&save=1`
-    },
-    disabled: {
-      type: Boolean,
-      default: false
-    },
-    type: {
-      type: Number,
-      default: 50
-    },
-    format: {
-      type: Array,
-      default: () => {
-        return ['jpg', 'jpeg', 'png']
-      }
-    },
-    removeBol: {
-      type: Boolean,
-      default: true
-    },
-    showFormBol: {
-      type: Boolean,
-      default: true
-    },
-    maxSize: {
-      type: Number,
-      default: 4096
-    },
-    tipsMsg: String,
-    imageWidth: {
-      type: Number,
-      default: 800
-    },
-    imageHeight: {
-      type: Number,
-      default: 1280
-    },
-    limitSize: {
-      type: Boolean,
-      default: false
-    }
-  },
-  created () {
-    // this.fadTipsMsg = `(支持${this.format.join('、')}等格式文件,文件大小限制为${this.maxSize / 1024}M,尺寸:${this.imageWidth}*${this.imageHeight})`
-    this.handleFadTipMsg()
-  },
-  methods: {
-    uploadDestroyed () { // 清理数据
-      this.uploadErrorInfo = ''
-      this.fileName = ''
-      this.fileName1 = ''
-      this.visible = false
-      this.imgUrl = ''
-      this.fadTipsMsg = ''
-    },
-    uploadStart (url, id) {
-      // 如果有初始的图片,需要调用该接口
-      if (!this.tipsMsg) {
-        // 这里需要处理数据
-        // (支持jpg、jpeg、png等格式文件,文件大小限制为4M,尺寸:800*1280)
-        // this.fadTipsMsg = `(支持${this.format.join('、')}等格式文件,文件大小限制为${this.maxSize / 1024}M,尺寸:${this.imageWidth}*${this.imageHeight})`
-        this.handleFadTipMsg()
-      } else this.fadTipsMsg = this.tipsMsg
-      if (url) {
-        this.baseUploadInfo.url = url
-        this.baseUploadInfo.id = id
-      }
-    },
-    handleFadTipMsg () {
-      if (this.limitSize) {
-        this.fadTipsMsg = `(支持${this.format.join('、')}等格式文件,文件大小限制为${this.maxSize / 1024}M,尺寸:${this.imageWidth}*${this.imageHeight})`
-      } else {
-        this.fadTipsMsg = `(支持${this.format.join('、')}等格式文件,文件大小限制为${this.maxSize / 1024}M)`
-      }
-    },
-    // 预览图片
-    handlePreview (imgUrl) {
-      this.imgUrl = imgUrl
-      this.visible = true
-    },
-    // 删除图片
-    handleLogoRemove (file) {
-      let orgData = this.baseUploadInfo
-      let data = {
-        id: orgData.id,
-        url: orgData.url
-      }
-      orgData.url = ''
-      orgData.id = ''
-      this.fileName = ''
-      this.$emit('on-remove-item', data)
-    },
-    // 上传图片成功
-    handleLogoSuccess (res, file) {
-      // 图片上传成功即将之前的错误信息清除
-      this.uploadErrorInfo = ''
-      if (res.code === 0) {
-        let data = res.data
-        this.baseUploadInfo.url = data.url
-        this.baseUploadInfo.id = data.id
-        // 将baseUrl 转成 url 20201019
-        let assign = Object.assign({ url: data.url }, data)
-        this.fileName = this.fileName1
-        this.$emit('on-success-upload', assign)
-      }
-    },
-    handleLogoMaxSize () {
-      this.uploadErrorInfo = '上传的文件大小超出限制,请重新选择文件上传'
-      setTimeout(() => {
-        this.uploadErrorInfo = ''
-      }, 5000)
-    },
-    handleLogoBeforeUpload (file) {
-      if (this.baseUploadInfo.url) {
-        this.uploadErrorInfo = '最多支持上传1份文件'
-        setTimeout(() => {
-          this.uploadErrorInfo = ''
-        }, 5000)
-        return false
-      } else {
-        this.fileName1 = file.name
-        if (this.uploadErrorInfo === '') {
-          /* let name = file.name
-          let tmpName = name.substr(name.indexOf('.') + 1)
-          if (this.videoFormat.indexOf(tmpName) !== -1) {
-            this.uploadErrorInfo = '上传的文件格式不支持,请重新选择文件上传'
-            return false
-          } */
-          if (this.limitSize) {
-            let bl = this.checkImageWH2(file, this.imageWidth, this.imageHeight)
-            return bl
-          }
-        }
-        return true
-      }
-    },
-    // checkImageWH  返回一个promise  检测通过返回resolve  失败返回reject组织图片上传
-    checkImageWH2 (file, width, height) {
-      let self = this
-      return new Promise(function (resolve, reject) {
-        let filereader = new FileReader()
-        filereader.onload = e => {
-          let src = e.target.result
-          const image = new Image()
-          image.onload = function () {
-            if (width && this.width !== width && height && this.height !== height) {
-              self.$Modal.warning({
-                title: '温馨提示',
-                content: '请将' + file.name + `文件的尺寸修改为${width}*${height}再上传!`
-              })
-              reject(new Error('图片格式不对'))
-            } else {
-              resolve()
-            }
-          }
-          image.onerror = reject
-          image.src = src
-        }
-        filereader.readAsDataURL(file)
-      })
-    },
-    handleLogoFormatError () {
-      this.uploadErrorInfo = '上传的文件格式不支持,请重新选择文件上传'
-      setTimeout(() => {
-        this.uploadErrorInfo = ''
-      }, 5000)
-    }
-  }
-}
-</script>

+ 0 - 249
src/components/eloamWebSocket.vue

@@ -1,249 +0,0 @@
-<template>
-  <Modal fullscreen footer-hide scrollable :closable="true" @on-visible-change="cancelWebSocket" v-model="webSocketModel" :mask-closable="false">
-    <Row>
-      <Col span="6">
-        <div style="padding-left: 20px">
-          <Card bordered dis-hover>
-            <!--<p slot="title">通行记录</p>-->
-            <div style="display: flex;margin: 8px">
-              <div style="width: 2px;height: 20px;background-color: #FC570E;"/><span style="font-weight: 700;color: #000000;font-size: 16px;padding-left: 16px">通行记录</span>
-            </div>
-            <List>
-              <div v-for="(item,index) in visitRecords" :key="`pass-${index}`">
-                <ListItem v-if="item.url">
-                  <Col :lg='6' :md="8" :sm="12" :offset='2'>
-                    <img style="width: 80%;height: 80%" :src="item.url"/>
-                  </Col>
-                  <Col :lg='18' :md='16' :sm='12' :offset='1'>
-                    <EloamListItemMeta :title="item.nickName" :descriptions="item.descriptions"/>
-                  </Col>
-                </ListItem>
-              </div>
-            </List>
-          </Card>
-        </div>
-      </Col>
-      <Col span="10" offset="1" >
-        <Card bordered dis-hover>
-          <div style="display: flex;margin: 8px 8px 16px 8px">
-            <div style="width: 2px;height: 20px;background-color: #FC570E;"/><span style="font-weight: 700;color: #000000;font-size: 16px;padding-left: 16px">统计</span>
-          </div>
-          <Row :gutter="16" style="padding-left: 10px;padding-right: 10px">
-            <i-col :xs="12" :md="12" :lg="12" v-for="(infor, i) in inforCardData" :key="`infor-${i}`"
-                   style="height: 114px;padding: 0px 10px 20px;">
-              <infor-card shadow :color="infor.color" :icon="infor.icon" :icon-size="40">
-                <p style="color: #ffffff">{{ infor.title }}</p>
-                <ws-conut-to :end="infor.count" count-class="count-style"/>
-              </infor-card>
-            </i-col>
-          </Row>
-          <Row style="padding-top: 20px;">
-            <Card shadow>
-              <div style="display: flex;margin: 8px">
-                <div style="width: 2px;height: 20px;background-color: #FC570E;"/><span style="font-weight: 700;color: #000000;font-size: 16px;padding-left: 16px">今日访客类型</span>
-              </div>
-             <!-- <chart-pie style="height: 450px;" :value="pieData" ></chart-pie>-->
-              <chart-ws-pie ref="eloamWebSocketPie" style="height: 358px" :value="pieData"></chart-ws-pie>
-            </Card>
-            <!--<i-col>
-              <chart-ws-pie ref="eloamWebSocketPie" style="height: 358px" :value="pieData" text="今日访客类型"></chart-ws-pie>
-            </i-col>-->
-          </Row>
-        </Card>
-      </Col>
-      <Col span="6" offset="1">
-        <div style="padding-left: 20px">
-          <Card bordered dis-hover>
-            <!--<p slot="title">考勤记录</p>-->
-            <div style="display: flex;margin: 8px">
-              <div style="width: 2px;height: 20px;background-color: #FC570E;"/><span style="font-weight: 700;color: #000000;font-size: 16px;padding-left: 16px">考勤记录</span>
-            </div>
-            <List>
-              <div v-for="(item,index) in signRecords" :key="`sign-${index}`">
-                <ListItem v-if="item.url">
-                  <Col :lg='6' :md="8" :sm="12" :offset="2">
-                    <img style="width: 80%;" :src="item.url"/>
-                  </Col>
-                  <Col :lg='18' :md='16' :sm='12' :offset='1'>
-                    <EloamListItemMeta :title="item.nickName" :descriptions="item.descriptions"/>
-                  </Col>
-                </ListItem>
-              </div>
-            </List>
-          </Card>
-        </div>
-      </Col>
-    </Row>
-  </Modal>
-</template>
-<script>
-import EloamListItemMeta from './eloamListItemMeta.vue'
-import { ChartPie, ChartBar, ChartObar, ChartWsPie } from '_c/charts'
-import WsConutTo from '_c/ws-count-to'
-import InforCard from '_c/info-card'
-import EloamIcon from '_c/eloamIcon.vue'
-
-let webSocket
-export default {
-  name: 'eloamWebSocket',
-  components: {
-    InforCard,
-    EloamListItemMeta,
-    ChartPie,
-    ChartBar,
-    ChartObar,
-    WsConutTo,
-    ChartWsPie,
-    EloamIcon
-  },
-  data () {
-    return {
-      webSocketModel: false,
-      pieData: [
-        { value: 0, name: '刷脸' },
-        { value: 0, name: '二维码' },
-        { value: 0, name: '陌生人' },
-        { value: 0, name: '有证登记' },
-        { value: 0, name: '无证登记' }
-      ],
-      timer: null,
-      visitRecords: [],
-      signRecords: [],
-      maxWeight: 10000,
-      inforCardData: [
-        { isDecimal: false, title: '今日流量', icon: 'today-num', count: 0, color: '#2d8cf0' },
-        { isDecimal: false, title: '今日访客', icon: 'today-visit', count: 0, color: '#80cae4' },
-        // { isDecimal: false, title: '今日迟到人数', icon: 'md-person-add', count: 0, color: '#19be6b' },
-        { isDecimal: false, title: '员工总数', icon: 'emp', count: 0, color: '#19be6b' },
-        { isDecimal: false, title: '打卡人数', icon: 'daka', count: 0, color: '#ff9f13' },
-        { isDecimal: false, title: '迟到人数', icon: 'chidao', count: 0, color: '#9A66E4' }
-        // { isDecimal: false, title: '今日早退人数', icon: 'md-contact', count: 0, color: '#19be6b' },
-        /* { isDecimal: false, title: '考勤员工数', icon: 'md-contacts', count: 0, color: '#66dda0' },
-          { isDecimal: false, title: '在职员工', icon: 'md-contact', count: 0, color: '#f8c9a9' } */
-      ]
-
-    }
-  },
-  props: {
-    url: {
-      type: String,
-      default: 'ws://172.16.200.180:8888/eloamWs/'
-    }
-  },
-  created () {
-    this.$nextTick(_ => {
-      // 使用this.$refs 需要在 this.$nextTick 方法内使用
-      // this.startWebSocket(1)
-    })
-  },
-  methods: {
-    startWebSocket (url) {
-      if (url) {
-        if ('WebSocket' in window) {
-          webSocket = new WebSocket(url)
-        } else if ('MozWebSocket' in window) {
-          webSocket = new MozWebSocket(url)
-        } else {
-          webSocket = new SockJS(url)
-        }
-        webSocket.onopen = this.onWebOpen
-        webSocket.onmessage = this.onWebMessage
-        webSocket.onerror = this.onWebError
-      }
-    },
-    onWebOpen () {
-      // 这里获取数据
-      // this.$Message.success('webSocket 打开成功')
-      this.timer = setInterval(function () { // 每隔5秒钟发送一次心跳,避免websocket连接因超时而自动断开
-        let ping = { 'type': 'ping' }
-        webSocket.send(JSON.stringify(ping))
-      }, 25000)
-    },
-    onWebMessage (evt) {
-      let data = JSON.parse(evt.data)
-      // console.log(data)
-      // 这里是后台响应的数据
-      switch (data.tag) {
-        case '别处登入':
-          this.$Notice.warning({
-            title: '别处登入通知',
-            desc: '你在别处登人通知,请确定是自己登入,如果不是自己登入,请修改密码'
-          })
-          this.onClose(true)
-          break
-        case '访客分类':
-          this.pieDataChange(data.data)
-          break
-        case '考勤事件':
-          this.signRecordChange(data.data)
-          break
-        case '访客事件':
-          this.visitChange(data.data)
-          break
-        case '统计变化':
-          // 统计数据变化
-          this.homeTotalChange(data.data)
-          break
-        case '下线事件':
-          this.onClose(true)
-          break
-        case '登入事件':
-          this.webSocketModel = true
-          let _dt = data.data
-          this.homeTotalChange(_dt.homeTotal)
-          this.signRecords = _dt.signRecords
-          this.visitRecords = _dt.passRecords
-          this.pieDataChange(_dt.pieList)
-          break
-      }
-    },
-    pieDataChange (data) {
-      this.$refs.eloamWebSocketPie.setOptions()
-      this.pieData = data
-    },
-    signRecordChange (data) {
-      if (this.signRecords.length > 5) {
-        this.signRecords.pop()
-      }
-      this.signRecords.unshift(data)
-    },
-    visitChange (data) { // 访客数据变化
-      if (this.visitRecords.length > 5) {
-        this.visitRecords.pop()
-      }
-      this.visitRecords.unshift(data)
-    },
-    // 监控关闭
-    cancelWebSocket (s) {
-      if (!s) {
-        this.onClose(true)
-      }
-    },
-    // 统计头数据
-    homeTotalChange (data) {
-      this.inforCardData[0].count = data.todayPassTotal
-      this.inforCardData[1].count = data.todayVisitTotal
-      this.inforCardData[2].count = data.employeeTotal
-      this.inforCardData[3].count = data.signTotal
-      this.inforCardData[4].count = data.lateSignTotal
-    },
-    onWebError () {
-      // this.$Message.error('网络错误,请刷新!')
-    },
-    onClose (bl) {
-      this.webSocketModel = false
-      if (bl && webSocket) {
-        webSocket.close()
-      } else {
-        if (webSocket && !webSocket.CLOSED) {
-          webSocket.close()
-        }
-      }
-      if (this.timer) clearInterval(this.timer)
-    }
-  },
-  beforeDestroy () {
-    this.onClose()
-  }
-}
-</script>

+ 0 - 35
src/components/icons/icons.vue

@@ -1,35 +0,0 @@
-<template>
-  <i :class="`iconfont icon-${type}`" :style="styles"></i>
-</template>
-
-<script>
-export default {
-  name: 'Icons',
-  props: {
-    type: {
-      type: String,
-      required: true
-    },
-    color: {
-      type: String,
-      default: '#5c6b77'
-    },
-    size: {
-      type: Number,
-      default: 16
-    }
-  },
-  computed: {
-    styles () {
-      return {
-        fontSize: `${this.size}px`,
-        color: this.color
-      }
-    }
-  }
-}
-</script>
-
-<style>
-
-</style>

+ 0 - 2
src/components/icons/index.js

@@ -1,2 +0,0 @@
-import Icons from './icons.vue'
-export default Icons

+ 0 - 2
src/components/info-card/index.js

@@ -1,2 +0,0 @@
-import InforCard from './infor-card.vue'
-export default InforCard

+ 0 - 97
src/components/info-card/infor-card.vue

@@ -1,97 +0,0 @@
-<template>
-  <Card :shadow="shadow" class="info-card-wrapper" :padding="0">
-    <div class="content-con">
-      <div class="left-area" :style="{background: color, width: leftWidth}">
-        <!--<common-icon class="icon" :type="icon" :size="iconSize" color="#fff"/>-->
-        <eloam-icon class="icon" :icon="icon" :size="iconSize" color="#fff"/>
-      </div>
-      <div class="right-area" :style="{background: color,width: rightWidth}">
-        <div>
-          <slot></slot>
-        </div>
-      </div>
-    </div>
-  </Card>
-</template>
-
-<script>
-import CommonIcon from '_c/common-icon'
-import EloamIcon from '_c/eloamIcon.vue'
-export default {
-  name: 'InforCard',
-  components: {
-    CommonIcon,
-    EloamIcon
-  },
-  props: {
-    left: {
-      type: Number,
-      default: 36
-    },
-    color: {
-      type: String,
-      default: '#2d8cf0'
-    },
-    icon: {
-      type: String,
-      default: ''
-    },
-    iconSize: {
-      type: Number,
-      default: 20
-    },
-    shadow: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    leftWidth () {
-      return `${this.left}%`
-    },
-    rightWidth () {
-      return `${100 - this.left}%`
-    }
-  }
-}
-</script>
-
-<style lang="less">
-.common{
-  float: left;
-  height: 100%;
-  display: table;
-  text-align: center;
-}
-.size{
-  width: 100%;
-  height: 100%;
-}
-.middle-center{
-  display: table-cell;
-  vertical-align: middle;
-}
-.info-card-wrapper{
-  .size;
-  overflow: hidden;
-  .ivu-card-body{
-    .size;
-  }
-  .content-con{
-    .size;
-    position: relative;
-    .left-area{
-      .common;
-      & > .icon{
-        .middle-center;
-      }
-    }
-    .right-area{
-      .common;
-      & > div{
-        .middle-center;
-      }
-    }
-  }
-}
-</style>

+ 0 - 2
src/components/login-form/index.js

@@ -1,2 +0,0 @@
-import LoginForm from './login-form.vue'
-export default LoginForm

+ 0 - 124
src/components/login-form/login-form.vue

@@ -1,124 +0,0 @@
-<template>
-  <Form ref="loginForm" :model="form" :rules="rules" @keydown.enter.native="handleSubmit">
-    <FormItem prop="userName">
-      <Input v-model="form.userName" :maxlength="11" placeholder="请输入手机号">
-        <span slot="prepend">
-          <Icon :size="16" type="md-person"></Icon>
-        </span>
-      </Input>
-    </FormItem>
-    <FormItem prop="password">
-      <Input :type="passwordType" v-model="form.password" placeholder="请输入密码">
-        <span slot="prepend">
-          <Icon :size="14" type="md-lock"></Icon>
-        </span>
-        <span slot="append" @click="changeShow">
-          <Icon :size="14" :type="passwordType === 'password' ? 'md-eye' : 'md-eye-off'"></Icon>
-        </span>
-      </Input>
-    </FormItem>
-    <FormItem style="padding-top: 10px">
-      <Button @click="handleSubmit" type="primary" long>登录</Button>
-    </FormItem>
-   <!-- <FormItem>-->
-      <!--pdfModal-->
-      <!-- <Button style="border:0px;color: #2b98e1" to="http://confluence.eloam.net/" target="_blank" long>使用手册</Button>-->
-      <!--  <Button style="border:0px;color: #2b98e1" @click="()=>this.pdfModal = true" long>使用手册</Button>-->
-      <!--<Button style="border:0px;color: #2b98e1" @click="findCloudVersion" long>使用手册</Button>-->
-      <!--<embed src="helloworld.swf" />-->
-    <!--</FormItem>-->
-   <!-- <Modal
-      title="良田科技|PDF预览"
-      v-model="pdfModal"
-      width="100%"
-      fullscreen
-      footer-hide
-    >
-      &lt;!&ndash; <embed src="https://wac.eloam.net/data/advert/2020-09-09/3C7894C4/BA807524.pdf" type="application/pdf" style="overflow: auto; position: absolute; top: 0; right: 0; bottom: 0; left: 0; width: 100%; height: 100%;">&ndash;&gt;
-      <iframe src="https://wac.eloam.net/data/advert/2020-09-09/3C7894C4/BA807524.pdf" frameborder="0"
-              style="width: 100%; height: 100%"></iframe>
-    </Modal>-->
-  </Form>
-</template>
-<script>
-// const pwdReg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9a-zA-Z]{8,20}$/
-// const pwdValidator = (rule, value, callback) => {
-//   debugger
-//   if (value.trim() === '') {
-//     callback(new Error('请输入8-20位密码'))
-//   } else {
-//     if (value.trim().length < 8) {
-//       callback(new Error('密码长度最少为8位,请重新输入'))
-//     } else if (pwdReg.test(value)) {
-//       callback()
-//     }
-//   }
-// }
-export default {
-  name: 'LoginForm',
-  props: {
-    userNameRules: {
-      type: Array,
-      default: () => {
-        return [
-          { required: true, message: '手机号不能为空', trigger: 'blur' },
-          { pattern: /^\s*$|^1[3456789]\d{9}$|^(admin)$/, message: '请输入正确的手机号码', trigger: 'blur' }
-        ]
-      }
-    },
-    passwordRules: {
-      type: Array,
-      default: () => {
-        return [
-          { required: true, message: '密码不能为空', trigger: 'blur' },
-          { type: 'string', min: 8, max: 20, message: '请输入8-20位密码' }
-        ]
-      }
-    }
-  },
-  data () {
-    return {
-      pdfModal: false,
-      form: {
-        userName: '',
-        password: ''
-      },
-      passwordType: 'password'
-    }
-  },
-  computed: {
-    rules () {
-      return {
-        userName: this.userNameRules,
-        password: this.passwordRules
-      }
-    }
-  },
-  methods: {
-    findCloudVersion () {
-      const ele = document.createElement('a')
-      ele.setAttribute('href', 'https://wac.eloam.net/data/advert/2020-09-09/3C7894C4/BA807524.pdf') // 设置下载文件的url地址
-      ele.setAttribute('target', '_blank')// target="_blank"
-      ele.setAttribute('download', 'download')// 用于设置下载文件的文件名
-      ele.click()
-    },
-    handleSubmit () {
-      this.$refs.loginForm.validate((valid) => {
-        if (valid) {
-          this.$emit('on-success-valid', {
-            userName: this.form.userName,
-            password: this.form.password
-          })
-        }
-      })
-    },
-    changeShow () {
-      if (this.passwordType === 'password') {
-        this.passwordType = 'text'
-      } else {
-        this.passwordType = 'password'
-      }
-    }
-  }
-}
-</script>

+ 0 - 2
src/components/main/components/a-back-top/index.js

@@ -1,2 +0,0 @@
-import ABackTop from './index.vue'
-export default ABackTop

+ 0 - 90
src/components/main/components/a-back-top/index.vue

@@ -1,90 +0,0 @@
-<template>
-    <div :class="classes" :style="styles" @click="back">
-        <slot>
-            <div :class="innerClasses">
-                <i class="ivu-icon ivu-icon-ios-arrow-up"></i>
-            </div>
-        </slot>
-    </div>
-</template>
-<script>
-import { scrollTop } from '@/libs/util'
-import { on, off } from '@/libs/tools'
-const prefixCls = 'ivu-back-top'
-
-export default {
-  name: 'ABackTop',
-  props: {
-    height: {
-      type: Number,
-      default: 400
-    },
-    bottom: {
-      type: Number,
-      default: 30
-    },
-    right: {
-      type: Number,
-      default: 30
-    },
-    duration: {
-      type: Number,
-      default: 1000
-    },
-    container: {
-      type: null,
-      default: window
-    }
-  },
-  data () {
-    return {
-      backTop: false
-    }
-  },
-  mounted () {
-    // window.addEventListener('scroll', this.handleScroll, false)
-    // window.addEventListener('resize', this.handleScroll, false)
-    on(this.containerEle, 'scroll', this.handleScroll)
-    on(this.containerEle, 'resize', this.handleScroll)
-  },
-  beforeDestroy () {
-    // window.removeEventListener('scroll', this.handleScroll, false)
-    // window.removeEventListener('resize', this.handleScroll, false)
-    off(this.containerEle, 'scroll', this.handleScroll)
-    off(this.containerEle, 'resize', this.handleScroll)
-  },
-  computed: {
-    classes () {
-      return [
-        `${prefixCls}`,
-        {
-          [`${prefixCls}-show`]: this.backTop
-        }
-      ]
-    },
-    styles () {
-      return {
-        bottom: `${this.bottom}px`,
-        right: `${this.right}px`
-      }
-    },
-    innerClasses () {
-      return `${prefixCls}-inner`
-    },
-    containerEle () {
-      return this.container === window ? window : document.querySelector(this.container)
-    }
-  },
-  methods: {
-    handleScroll () {
-      this.backTop = this.containerEle.scrollTop >= this.height
-    },
-    back () {
-      let target = typeof this.container === 'string' ? this.containerEle : (document.documentElement || document.body)
-      const sTop = target.scrollTop
-      scrollTop(this.containerEle, sTop, 0, this.duration)
-      this.$emit('on-click')
-    }
-  }
-}
-</script>

+ 0 - 32
src/components/main/components/dynamic-web-socket/dynamicWebSocket.vue

@@ -1,32 +0,0 @@
-<template>
-  <div>
-    <!--<Tooltip :content="$t('动态数据')" placement="bottom">
-      <Icon @click.native="handleChange" type="md-trending-up" :size="23"></Icon>
-    </Tooltip>-->
-    <eloam-web-socket ref="eloamWebSocketRef"/>
-  </div>
-</template>
-<!--webSocket 动态数据-->
-<script>
-import { getCacheAttr } from '@/libs/util'
-import { USER_ID } from '@/libs/cacheConstant'
-import config from '@/config'
-import EloamWebSocket from '_c/eloamWebSocket.vue'
-const baseUrl = process.env.NODE_ENV === 'development' ? config.wsUrl.dev : config.wsUrl.pro
-export default {
-  name: 'DynamicWebSocket',
-  components: {
-    EloamWebSocket
-  },
-  methods: {
-    webSocketAction () {
-      let userId = getCacheAttr(USER_ID)
-      let url = `${baseUrl}${userId}`
-      this.$refs.eloamWebSocketRef.startWebSocket(url)
-    },
-    handleChange () {
-      this.webSocketAction()
-    }
-  }
-}
-</script>

+ 0 - 2
src/components/main/components/dynamic-web-socket/index.js

@@ -1,2 +0,0 @@
-import DynamicWebSocket from './dynamicWebSocket.vue'
-export default DynamicWebSocket

+ 0 - 49
src/components/main/components/error-store/error-store.vue

@@ -1,49 +0,0 @@
-<template>
-  <div class="error-store">
-    <Badge dot :count="countComputed">
-      <Button type="text" @click="openErrorLoggerPage">
-        <Icon :size="20" type="ios-bug"/>
-      </Button>
-    </Badge>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'ErrorStore',
-  props: {
-    count: {
-      type: Number,
-      default: 0
-    },
-    hasRead: {
-      type: Boolean,
-      default: false
-    }
-  },
-  computed: {
-    countComputed () {
-      return this.hasRead ? 0 : this.count
-    }
-  },
-  methods: {
-    openErrorLoggerPage () {
-      this.$router.push({
-        name: 'error_logger_page'
-      })
-    }
-  }
-}
-</script>
-
-<style lang="less">
-.error-store{
-  margin-right: 12px;
-  .ivu-badge-dot{
-    top: 20px;
-  }
-  .ivu-btn.ivu-btn-text{
-    padding: 5px 1px 6px;
-  }
-}
-</style>

+ 0 - 2
src/components/main/components/error-store/index.js

@@ -1,2 +0,0 @@
-import ErrorStore from './error-store.vue'
-export default ErrorStore

+ 0 - 90
src/components/main/components/fullscreen/fullscreen.vue

@@ -1,90 +0,0 @@
-<template>
-  <div v-if="showFullScreenBtn" class="full-screen-btn-con">
-    <Tooltip :content="value ? $t('退出全屏'): $t('全屏')" placement="bottom">
-      <Icon @click.native="handleChange" :type="value ? 'md-contract' : 'md-expand'" :size="23"></Icon>
-    </Tooltip>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'Fullscreen',
-  computed: {
-    showFullScreenBtn () {
-      return window.navigator.userAgent.indexOf('MSIE') < 0
-    }
-  },
-  props: {
-    value: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    handleFullscreen () {
-      let main = document.body
-      if (this.value) {
-        if (document.exitFullscreen) {
-          document.exitFullscreen()
-        } else if (document.mozCancelFullScreen) {
-          document.mozCancelFullScreen()
-        } else if (document.webkitCancelFullScreen) {
-          document.webkitCancelFullScreen()
-        } else if (document.msExitFullscreen) {
-          document.msExitFullscreen()
-        }
-      } else {
-        if (main.requestFullscreen) {
-          main.requestFullscreen()
-        } else if (main.mozRequestFullScreen) {
-          main.mozRequestFullScreen()
-        } else if (main.webkitRequestFullScreen) {
-          main.webkitRequestFullScreen()
-        } else if (main.msRequestFullscreen) {
-          main.msRequestFullscreen()
-        }
-      }
-    },
-    handleChange () {
-      this.handleFullscreen()
-    }
-  },
-  mounted () {
-    let isFullscreen = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen
-    isFullscreen = !!isFullscreen
-    // 全屏不能退出的bug
-    document.addEventListener('fullscreenchange', () => {
-      this.$emit('input', !this.value)
-      this.$emit('on-change', !this.value)
-    })
-    // ie 全屏可以退出
-    /* document.addEventListener('MSFullscreenChange', () => {
-      this.$emit('input', !this.value)
-      this.$emit('on-change', !this.value)
-    })
-    document.addEventListener('mozfullscreenchange', () => {
-      this.$emit('input', !this.value)
-      this.$emit('on-change', !this.value)
-    })
-    document.addEventListener('webkitfullscreenchange', () => {
-      this.$emit('input', !this.value)
-      this.$emit('on-change', !this.value)
-    })
-    document.addEventListener('msfullscreenchange', () => {
-      this.$emit('input', !this.value)
-      this.$emit('on-change', !this.value)
-    }) */
-    this.$emit('input', isFullscreen)
-  }
-}
-</script>
-
-<style lang="less">
-.full-screen-btn-con .ivu-tooltip-rel{
-  height: 64px;
-  line-height: 56px;
-  i{
-    cursor: pointer;
-  }
-}
-</style>

+ 0 - 2
src/components/main/components/fullscreen/index.js

@@ -1,2 +0,0 @@
-import Fullscreen from './fullscreen.vue'
-export default Fullscreen

+ 0 - 4
src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.less

@@ -1,4 +0,0 @@
-.custom-bread-crumb{
-  display: inline-block;
-  vertical-align: top;
-}

+ 0 - 46
src/components/main/components/header-bar/custom-bread-crumb/custom-bread-crumb.vue

@@ -1,46 +0,0 @@
-<template>
-  <div class="custom-bread-crumb">
-    <Breadcrumb :style="{fontSize: `${fontSize}px`}">
-      <BreadcrumbItem v-for="item in list" :to="item.to" :key="`bread-crumb-${item.name}`">
-        <common-icon style="margin-right: 4px;" :type="item.icon || ''"/>
-        {{ showTitle(item) }}
-      </BreadcrumbItem>
-    </Breadcrumb>
-  </div>
-</template>
-<script>
-import { showTitle } from '@/libs/util'
-import CommonIcon from '_c/common-icon'
-import './custom-bread-crumb.less'
-export default {
-  name: 'customBreadCrumb',
-  components: {
-    CommonIcon
-  },
-  props: {
-    list: {
-      type: Array,
-      default: () => []
-    },
-    fontSize: {
-      type: Number,
-      default: 14
-    },
-    showIcon: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    showTitle (item) {
-      return showTitle(item, this)
-    },
-    isCustomIcon (iconName) {
-      return iconName.indexOf('_') === 0
-    },
-    getCustomIconName (iconName) {
-      return iconName.slice(1)
-    }
-  }
-}
-</script>

+ 0 - 0
src/components/main/components/header-bar/custom-bread-crumb/index.js


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů