Browse Source

首次提交

陈鹏铭 1 year ago
commit
ac63ce6cb5
100 changed files with 11237 additions and 0 deletions
  1. 16 0
      .hbuilderx/launch.json
  2. 1 0
      .vscode/settings.json
  3. 17 0
      App.vue
  4. 0 0
      LICENSE
  5. 129 0
      README.md
  6. 0 0
      changelog.md
  7. BIN
      common/assets/image/comicon.png
  8. BIN
      common/assets/image/fangke.png
  9. BIN
      common/assets/image/gantanhao.png
  10. BIN
      common/assets/image/guanbi.png
  11. BIN
      common/assets/image/head.png
  12. BIN
      common/assets/image/homeBg.png
  13. BIN
      common/assets/image/houseSel.png
  14. BIN
      common/assets/image/houseUnSel.png
  15. BIN
      common/assets/image/logo.png
  16. BIN
      common/assets/image/logobig.png
  17. 39 0
      common/assets/image/mineBg.svg
  18. BIN
      common/assets/image/mineSel.png
  19. BIN
      common/assets/image/mineUnSel.png
  20. 12 0
      common/assets/image/pswicon.svg
  21. BIN
      common/assets/image/qiye.png
  22. BIN
      common/assets/image/quezhen.png
  23. BIN
      common/assets/image/renyuan.png
  24. BIN
      common/assets/image/right.png
  25. BIN
      common/assets/image/suo.png
  26. BIN
      common/assets/image/yichang.png
  27. 9 0
      common/assets/image/yzmicon.svg
  28. 3 0
      common/assets/js/vconsole.js
  29. 16 0
      common/style/common.scss
  30. 622 0
      common/style/index.scss
  31. 215 0
      common/style/picker.css
  32. 324 0
      common/style/reset.scss
  33. 1688 0
      common/uni.css
  34. 704 0
      components/ba-tree-picker/ba-tree-picker.vue
  35. 691 0
      components/zaiti-tree/index.vue
  36. 170 0
      components/zaiti-tree/style.css
  37. 86 0
      components/zaiti-tree/tools.js
  38. 701 0
      components/zaiti-tree2/index.vue
  39. 170 0
      components/zaiti-tree2/style.css
  40. 86 0
      components/zaiti-tree2/tools.js
  41. 37 0
      config.js
  42. 20 0
      index.html
  43. 62 0
      js_sdk/api_activity.js
  44. 155 0
      js_sdk/api_community.js
  45. 47 0
      js_sdk/api_data.js
  46. 52 0
      js_sdk/api_periphery.js
  47. 150 0
      js_sdk/auth.js
  48. 185 0
      js_sdk/common.js
  49. 173 0
      js_sdk/dateFormat.js
  50. 561 0
      js_sdk/http.js
  51. 274 0
      js_sdk/request/request.js
  52. 135 0
      js_sdk/request/requestConfig.js
  53. 546 0
      js_sdk/venueRoom.js
  54. 70 0
      main.js
  55. 162 0
      manifest.json
  56. 21 0
      node_modules/ansi-colors/LICENSE
  57. 105 0
      node_modules/ansi-colors/README.md
  58. 456 0
      node_modules/ansi-colors/index.js
  59. 176 0
      node_modules/ansi-colors/package.json
  60. 31 0
      node_modules/ansi-colors/types/index.d.ts
  61. 21 0
      node_modules/ansi-gray/LICENSE
  62. 14 0
      node_modules/ansi-gray/index.js
  63. 86 0
      node_modules/ansi-gray/package.json
  64. 74 0
      node_modules/ansi-gray/readme.md
  65. 4 0
      node_modules/ansi-regex/index.js
  66. 21 0
      node_modules/ansi-regex/license
  67. 108 0
      node_modules/ansi-regex/package.json
  68. 39 0
      node_modules/ansi-regex/readme.md
  69. 165 0
      node_modules/ansi-styles/index.js
  70. 9 0
      node_modules/ansi-styles/license
  71. 88 0
      node_modules/ansi-styles/package.json
  72. 147 0
      node_modules/ansi-styles/readme.md
  73. 21 0
      node_modules/ansi-wrap/LICENSE
  74. 89 0
      node_modules/ansi-wrap/README.md
  75. 5 0
      node_modules/ansi-wrap/index.js
  76. 60 0
      node_modules/ansi-wrap/package.json
  77. 15 0
      node_modules/anymatch/LICENSE
  78. 99 0
      node_modules/anymatch/README.md
  79. 67 0
      node_modules/anymatch/index.js
  80. 21 0
      node_modules/anymatch/node_modules/normalize-path/LICENSE
  81. 92 0
      node_modules/anymatch/node_modules/normalize-path/README.md
  82. 19 0
      node_modules/anymatch/node_modules/normalize-path/index.js
  83. 117 0
      node_modules/anymatch/node_modules/normalize-path/package.json
  84. 75 0
      node_modules/anymatch/package.json
  85. 21 0
      node_modules/append-buffer/LICENSE
  86. 95 0
      node_modules/append-buffer/README.md
  87. 41 0
      node_modules/append-buffer/index.js
  88. 84 0
      node_modules/append-buffer/package.json
  89. 4 0
      node_modules/archy/.travis.yml
  90. 18 0
      node_modules/archy/LICENSE
  91. 24 0
      node_modules/archy/examples/beep.js
  92. 25 0
      node_modules/archy/examples/multi_line.js
  93. 35 0
      node_modules/archy/index.js
  94. 83 0
      node_modules/archy/package.json
  95. 88 0
      node_modules/archy/readme.markdown
  96. 40 0
      node_modules/archy/test/beep.js
  97. 45 0
      node_modules/archy/test/multi_line.js
  98. 40 0
      node_modules/archy/test/non_unicode.js
  99. 21 0
      node_modules/arr-diff/LICENSE
  100. 0 0
      node_modules/arr-diff/README.md

+ 16 - 0
.hbuilderx/launch.json

@@ -0,0 +1,16 @@
+{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+  // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+    "version": "0.0",
+    "configurations": [{
+     	"default" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"mp-weixin" : 
+     	{
+     		"launchtype" : "local"
+     	},
+     	"type" : "uniCloud"
+     }
+    ]
+}

+ 1 - 0
.vscode/settings.json

@@ -0,0 +1 @@
+{}

+ 17 - 0
App.vue

@@ -0,0 +1,17 @@
+<script>
+export default {
+  methods: {},
+};
+</script>
+
+<style lang="scss">
+@import "./common/uni.css";
+@import "/wxcomponents/weapp/dist/common/index.wxss";
+@import "./common/style/index.scss";
+
+//@media screen and (min-width: 768px) {
+//	body {
+//		overflow-y: scroll;
+//	}
+//}
+</style>

+ 0 - 0
LICENSE


+ 129 - 0
README.md

@@ -0,0 +1,129 @@
+# hello-uniapp
+
+`uni-app`框架示例,一套代码,同时发行到iOS、Android、H5、小程序等多个平台,请使用手机在下方扫码快速体验`uni-app`的强大功能。[官方文档](https://uniapp.dcloud.net.cn/)
+
+## 快速上手
+hello-uniapp 示例工程可以通过两种方式创建, 一种是 HBuilderX, 配套 IDE,集成开发;另一种是 CLI 创建;推荐前者。
+### 通过 HBuilderX 可视化界面创建(推荐)
+
+可视化的方式比较简单,HBuilderX内置相关环境,开箱即用,无需配置nodejs。
+
+开始之前,开发者需先下载安装如下工具:
+
+- HBuilderX:[官方IDE下载地址](https://www.dcloud.io/hbuilderx.html)
+
+HBuilderX是通用的前端开发工具,但为`uni-app`做了特别强化,请下载App开发版。
+
+由于截图在 github 不便浏览,参见官方文档 [HBuilderX 可视化界面创建](https://uniapp.dcloud.net.cn/quickstart?id=_1-%e9%80%9a%e8%bf%87-hbuilderx-%e5%8f%af%e8%a7%86%e5%8c%96%e7%95%8c%e9%9d%a2)
+
+### 通过 vue-cli 创建
+
+```
+npm install -g @vue/cli
+```
+
+#### 创建uni-app
+
+**使用正式版**(对应HBuilderX最新正式版)
+
+```
+vue create -p dcloudio/uni-preset-vue my-project
+```
+
+**使用alpha版**(对应HBuilderX最新alpha版)
+
+```
+vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project
+```
+
+此时,会提示选择项目模板,选择 `hello uni-app` 项目模板,如下所示:
+
+<div>
+<img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/h5-cli-01.png" width="300">
+</div>
+
+创建好后,进入项目目录
+```
+cd my-project
+```
+
+执行该命令运行到 h5 端
+```
+npm run dev:h5
+```
+
+欢迎提 issues,推荐到[官方社区](https://ask.dcloud.net.cn/explore/)提问。
+
+## 扫码体验
+
+<div class="quick">
+    <p>一套代码编到10个平台,这不是梦想。眼见为实,扫描10个二维码,亲自体验最全面的跨平台效果!</p>
+    <div style="display: flex;">
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/ba7d0750-517d-11eb-bdc1-8bd33eb6adaa.png" width="160" />
+        </div>
+        <b>Android版</b>
+      </a>
+      <a href="https://itunes.apple.com/cn/app/hello-uni-app/id1417078253?mt=8" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/bb3ef7c0-517d-11eb-bdc1-8bd33eb6adaa.png" width="160" />
+        </div>
+        <b>iOS版</b>
+      </a>
+      <a href="https://hellouniapp.dcloud.net.cn/" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/bb3ef7c0-517d-11eb-bdc1-8bd33eb6adaa.png" width="160" />
+        </div>
+        <b>H5版</b>
+      </a>
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box"><img src="//img.cdn.aliyun.dcloud.net.cn/guide/uniapp/gh_33446d7f7a26_430.jpg" width="160" /></div>
+        <b>微信小程序版</b>
+      </a>
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box"><img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b131e0d0-517d-11eb-a16f-5b3e54966275.png" width="160" /></div>
+        <b>支付宝小程序版</b>
+      </a>
+    </div>
+    <div class="flex-img-group-view" style="margin-top: 20px;">
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box"><img src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b204e840-517d-11eb-8ff1-d5dcf8779628.png" width="160" /></div>
+        <b>百度小程序版</b>
+      </a>
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/mp-toutiao.png" width="160" />
+        </div>
+        <b>字节跳动小程序版</b>
+      </a>
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hello-uni-qq.png" width="160" />
+        </div>
+        <b>QQ小程序版</b>
+      </a>
+      <a href="//m3w.cn/uniapp" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hello-uni-qa-union.png" width="160" />
+        </div>
+        <b>快应用</b>
+      </a>
+      <a href="https://so.mp.360.cn/mp.html?appid=qh4j181qqtru354st6" target="_blank" class="clear-style barcode-view">
+        <div class="barcode-img-box">
+          <img src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/hello-uni-mp-360-qr.png" width="160" />
+        </div>
+        <b>360小程序</b>
+      </a>
+    </div>
+    <p>
+        <em>注:某些平台不能提交简单demo,故补充了一些其他功能;hello uni-app示例代码可从[github](https://github.com/dcloudio/hello-uniapp)获取</em></br>
+        <em>快应用仅支持 vivo 、oppo、华为</em></br>
+        <em>360小程序仅 windows平台支持,需要在360浏览器中打开</em></br>
+    </p>
+</div>
+
+`uni-app`官网文档详见[https://uniapp.dcloud.io](https://uniapp.dcloud.io)
+
+更多uni-app的模板、示例详见[插件市场](https://ext.dcloud.net.cn/)
+

+ 0 - 0
changelog.md


BIN
common/assets/image/comicon.png


BIN
common/assets/image/fangke.png


BIN
common/assets/image/gantanhao.png


BIN
common/assets/image/guanbi.png


BIN
common/assets/image/head.png


BIN
common/assets/image/homeBg.png


BIN
common/assets/image/houseSel.png


BIN
common/assets/image/houseUnSel.png


BIN
common/assets/image/logo.png


BIN
common/assets/image/logobig.png


+ 39 - 0
common/assets/image/mineBg.svg

@@ -0,0 +1,39 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="375" height="212" viewBox="0 0 375 212">
+  <defs>
+    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#fff5f5"/>
+      <stop offset="1" stop-color="#f6f6f6"/>
+    </linearGradient>
+    <clipPath id="clip-path">
+      <rect id="矩形_1648" data-name="矩形 1648" width="375" height="212" transform="translate(0 88)" fill="#2821f4"/>
+    </clipPath>
+    <clipPath id="clip-path-2">
+      <rect id="矩形_1644" data-name="矩形 1644" width="375" height="351" fill="url(#linear-gradient)"/>
+    </clipPath>
+    <linearGradient id="linear-gradient-2" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#e6eeff"/>
+      <stop offset="1" stop-color="#f6f6f6"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient-4" y1="0.342" x2="1.117" y2="0.342" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#c7d8fb" stop-opacity="0.169"/>
+      <stop offset="0.271" stop-color="#cedefd" stop-opacity="0.051"/>
+      <stop offset="0.448" stop-color="#dce8ff" stop-opacity="0.529"/>
+      <stop offset="1" stop-color="#dce8ff" stop-opacity="0.29"/>
+    </linearGradient>
+    <linearGradient id="linear-gradient-5" y1="0.342" x2="1.117" y2="0.342" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#c7d8fb" stop-opacity="0.169"/>
+      <stop offset="0.271" stop-color="#cedefd" stop-opacity="0.2"/>
+      <stop offset="0.448" stop-color="#dce8ff" stop-opacity="0.6"/>
+      <stop offset="1" stop-color="#dce8ff" stop-opacity="0.29"/>
+    </linearGradient>
+  </defs>
+  <g id="蒙版组_32" data-name="蒙版组 32" transform="translate(0 -88)" clip-path="url(#clip-path)">
+    <rect id="矩形_49" data-name="矩形 49" width="375" height="212" transform="translate(0 88)" fill="#2821f4"/>
+    <g id="组_37" data-name="组 37" transform="translate(0 88)" clip-path="url(#clip-path-2)" style="mix-blend-mode: soft-light;isolation: isolate">
+      <path id="路径_1048" data-name="路径 1048" d="M538.612,478.438l-126.2,42.756a12.719,12.719,0,0,1-16.8-12.047v-204.2a12.72,12.72,0,0,1,8.638-12.047l126.2-42.756a12.72,12.72,0,0,1,16.8,12.047v204.2A12.719,12.719,0,0,1,538.612,478.438Z" transform="translate(-406.365 -261.114)" opacity="0.53" fill="url(#linear-gradient-2)"/>
+      <path id="路径_1049" data-name="路径 1049" d="M854.448,451.949l-119.255,40.4a12.019,12.019,0,0,1-15.876-11.384V288.007a12.019,12.019,0,0,1,8.163-11.384l119.255-40.4A12.02,12.02,0,0,1,862.611,247.6v192.96A12.02,12.02,0,0,1,854.448,451.949Z" transform="translate(-524.203 -256.059)" opacity="0.53" fill="url(#linear-gradient-2)"/>
+      <path id="路径_1050" data-name="路径 1050" d="M992.594,480.632l-119.255,40.4a12.02,12.02,0,0,1-15.876-11.384V316.69a12.019,12.019,0,0,1,8.163-11.384l119.255-40.4a12.019,12.019,0,0,1,15.876,11.384v192.96A12.019,12.019,0,0,1,992.594,480.632Z" transform="translate(-574.492 -266.5)" opacity="0.53" fill="url(#linear-gradient-4)"/>
+      <path id="路径_1051" data-name="路径 1051" d="M576.758,494.6l93.721,31.751a9.446,9.446,0,0,0,12.477-8.946V365.757a9.447,9.447,0,0,0-6.415-8.946L582.82,325.059a9.446,9.446,0,0,0-12.477,8.946V485.65A9.446,9.446,0,0,0,576.758,494.6Z" transform="translate(-469.973 -288.449)" opacity="0.53" fill="url(#linear-gradient-5)"/>
+    </g>
+  </g>
+</svg>

BIN
common/assets/image/mineSel.png


BIN
common/assets/image/mineUnSel.png


+ 12 - 0
common/assets/image/pswicon.svg

@@ -0,0 +1,12 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+  <g id="组_767" data-name="组 767" transform="translate(-705.397 -368.424)">
+    <rect id="矩形_382" data-name="矩形 382" width="24" height="24" transform="translate(705.397 368.424)" fill="none"/>
+    <g id="组_766" data-name="组 766">
+      <path id="矩形_383" data-name="矩形 383" d="M714.849,373.266h5.1a1.837,1.837,0,0,1,1.838,1.837h0v2.283h-8.773V375.1a1.839,1.839,0,0,1,1.838-1.838Z" fill="none" stroke="#666" stroke-miterlimit="10" stroke-width="1"/>
+      <rect id="矩形_1568" data-name="矩形 1568" width="14.933" height="10.195" rx="3" transform="translate(709.931 377.388)" fill="none" stroke="#666" stroke-width="1"/>
+    </g>
+    <g id="椭圆_1" data-name="椭圆 1">
+      <circle id="椭圆_1-2" data-name="椭圆 1" cx="2.378" cy="2.378" r="2.378" transform="translate(715.02 379.697)" fill="none" stroke="#666" stroke-width="1"/>
+    </g>
+  </g>
+</svg>

BIN
common/assets/image/qiye.png


BIN
common/assets/image/quezhen.png


BIN
common/assets/image/renyuan.png


BIN
common/assets/image/right.png


BIN
common/assets/image/suo.png


BIN
common/assets/image/yichang.png


+ 9 - 0
common/assets/image/yzmicon.svg

@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+  <g id="组_431" data-name="组 431" transform="translate(-574.024 -308.439)">
+    <g id="组_433" data-name="组 433" transform="translate(574.024 308.439)">
+      <rect id="矩形_1566-3" data-name="矩形 1566-3" width="24" height="24" fill="none"/>
+    </g>
+    <path id="路径_20" data-name="路径 20" d="M593.486,316.625v4.362A8.094,8.094,0,0,1,589.436,328l-2.119,1.223L585.2,328a8.1,8.1,0,0,1-4.051-7.012v-4.362a34.146,34.146,0,0,0,6.17-2.893A34.148,34.148,0,0,0,593.486,316.625Z" transform="translate(-1.292 -1.143)" fill="none" stroke="#666" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+    <path id="路径_21" data-name="路径 21" d="M584.79,321.259l2.023,1.664,3.431-4.2" transform="translate(-1.111 -0.895)" fill="none" stroke="#666" stroke-linecap="round" stroke-miterlimit="10" stroke-width="1"/>
+  </g>
+</svg>

+ 3 - 0
common/assets/js/vconsole.js

@@ -0,0 +1,3 @@
+import Vconsole from 'vconsole'
+const vConsole = new Vconsole()
+export default vConsole

+ 16 - 0
common/style/common.scss

@@ -0,0 +1,16 @@
+html,
+body,
+#app {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    width: 100%;
+    height: 100%;
+    background-color: #f0f3f5;
+}
+
+#app {
+    background-color: var(--white);
+}

+ 622 - 0
common/style/index.scss

@@ -0,0 +1,622 @@
+@import './reset.scss';
+@import './common.scss';
+
+
+.second_title {
+    float: left;
+    width: 30%;
+    font-size: 28rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #777777;
+
+}
+
+.second_title_1 {
+    float: left;
+    width: 25%;
+    font-size: 28rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #777777;
+
+}
+
+.iconfont {
+    /*font-family: "iconfont" !important;*/
+    font-size: 16px;
+    font-style: normal;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+}
+
+.float_left {
+    float: left;
+}
+
+.clear_both {
+    clear: both;
+}
+
+.margin12rpx {
+    margin: 12rpx
+}
+
+.chuzu_label {
+    width: 312rpx;
+    height: 36rpx;
+    font-size: 26rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #333333;
+    line-height: 36rpx;
+}
+
+.chuzu_vlaue {
+    width: 86rpx;
+    font-size: 32rpx;
+    font-family: PingFang SC-Bold, PingFang SC;
+    font-weight: bold;
+    color: #ec7359;
+    line-height: 38rpx;
+}
+
+.mb14rpx {
+    margin-bottom: 14rpx;
+}
+
+.height34rpx {
+    height: 34rpx;
+}
+
+.height50rpx {
+    height: 50rpx;
+}
+
+.font24rpx {
+    font-size: 24rpx;
+}
+
+.fontcolor251FCA {
+    color: #251FCA
+}
+
+.roomstatus1 {
+    height: 38rpx;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+    line-height: 38rpx;
+    background: rgba(29, 24, 188, 0.05);
+    border: none;
+    padding: 0rpx 16rpx;
+    font-weight: 500;
+    color: #1d18bc;
+}
+
+.roomstatus {
+    height: 50rpx;
+    line-height: 50rpx;
+    font-size: 24rpx;
+    padding: 0rpx 16rpx;
+    float: left;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #1d18bc;
+    border: 2rpx solid #1d18bc;
+    margin-left: 16rpx;
+}
+
+.roomstatus:first-child {
+    margin-left: 0 !important;
+}
+
+.height50px {
+    height: 50rpx;
+}
+
+.mb8rpx {
+    margin-bottom: 8rpx;
+}
+
+.width100 {
+    width: 100%;
+}
+
+.width90 {
+    width: 90%;
+}
+
+.width10 {
+    width: 10%;
+}
+
+.width10imp {
+    width: 10% !important;
+}
+
+.height36rpx {
+    height: 36rpx;
+}
+
+.height40rpx {
+    height: 40rpx;
+}
+
+.list-row {
+    width: calc(100% - 64rpx);
+    padding: 32rpx 32rpx 32rpx 32rpx;
+    background: #ffffff;
+    margin-bottom: 16rpx;
+    display: flex;
+    //height: 278rpx;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+}
+
+.list {
+    width: calc(100% - 64rpx);
+
+    margin: 32rpx;
+}
+
+.mb16rpx {
+    margin-bottom: 16rpx;
+}
+
+.height66rpx {
+    height: 66rpx;
+}
+
+.height44rpx {
+    height: 44rpx;
+}
+
+.total {
+    padding: 8rpx 32rpx 8rpx 0;
+    text-align: right;
+    background: #ffffff;
+}
+
+.roomstatus {
+    height: 50rpx;
+    line-height: 50rpx;
+    font-size: 24rpx;
+    padding: 0rpx 16rpx;
+    float: left;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #1d18bc;
+    border: 2rpx solid #1d18bc;
+    margin-left: 16rpx;
+}
+
+.companystatus {
+    height: 42rpx;
+    width: 80rpx;
+    line-height: 42rpx;
+    font-size: 24rpx;
+    text-align: center;
+
+    float: left;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #1d18bc;
+    background-color: #F1f1f9;
+    border-radius: 8rpx;
+    margin-left: 16rpx;
+}
+
+.bgc1d18bc {
+    background-color: #1d18bc;
+}
+
+.van-tabs__line {
+    background-color: #1d18bc !important;
+}
+
+.mt42rpx {
+    margin-top: 42rpx;
+}
+
+.mb42rpx {
+    margin-bottom: 42rpx;
+}
+
+.pd42rpx {
+    padding-bottom: 42rpx;
+}
+
+.margint16rpx {
+    margin-top: 16rpx
+}
+
+.height554rpx {
+    height: 554rpx;
+}
+
+.height35px {
+    height: 35px;
+}
+
+.l35pxheight {
+    line-height: 35px;
+}
+
+.width622rpx {
+    width: 622rpx;
+}
+
+.pdl16 {
+    padding-left: 16rpx;
+}
+
+.mt32rpx {
+    margin-top: 32rpx;
+}
+
+.mb32rpx {
+    margin-bottom: 32rpx;
+}
+
+.mb16rpx {
+    margin-bottom: 16rpx;
+}
+
+.pdr16 {
+    padding-left: 16rpx;
+}
+
+.pdt10 {
+    padding-top: 10rpx;
+}
+
+.pdb10 {
+    padding-bottom: 10rpx;
+}
+
+.mt60rpx {
+    margin-top: 60rpx
+}
+
+.margint8rpx {
+    margin-top: 8rpx
+}
+
+.icon-arrow-up:before {
+    content: "\e685";
+}
+
+.icon-location:before {
+    content: "\e600";
+}
+
+.icon-right:before {
+    content: "\e70d";
+}
+
+.icon-radio:before {
+    content: "\e601";
+}
+
+.icon-time:before {
+    content: "\e621";
+}
+
+.icon-radio-checked:before {
+    content: "\e60c";
+}
+
+.icon-actived:before {
+    content: "\e61e";
+}
+
+.icon-arrow-down:before {
+    content: "\e602";
+}
+
+.width100 {
+    width: 100%;
+}
+
+.width30 {
+    width: 30%;
+}
+
+.width60 {
+    width: 60%;
+}
+
+.whitespacenowrap {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
+
+.first_title {
+    height: 44rpx;
+    line-height: 44rpx;
+    font-size: 32rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #333333;
+}
+
+.third_title {
+    float: left;
+    width: 60%;
+    font-size: 26rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #AAAAAA;
+
+}
+
+.third_title_1 {
+    float: left;
+    width: 40%;
+    font-size: 26rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #AAAAAA;
+
+}
+
+
+
+.yongtu_first_title {
+    width: 100%;
+    height: 44rpx;
+    font-size: 32rpx;
+    margin-bottom: 4rpx;
+    text-align: center;
+    font-weight: 500;
+    color: #333333;
+}
+
+.yongtu_second_title {
+    width: 100%;
+    height: 36rpx;
+    font-size: 26rpx;
+    text-align: center;
+    color: #AAAAAA;
+}
+
+.height28rpx {
+    height: 28rpx;
+}
+
+.width80 {
+    width: 80% !important;
+}
+
+.width70 {
+    width: 70%;
+}
+
+.width30 {
+    width: 30%;
+}
+
+.width20 {
+    width: 20% !important;
+}
+
+.width40 {
+    width: 40% !important;
+}
+
+.width40rpx {
+    width: 40rpx;
+}
+
+.width50 {
+    width: 50%;
+}
+
+.float_left {
+    float: left;
+}
+
+.float_right {
+    float: right;
+}
+
+.pdl32 {
+    padding-left: 32rpx;
+}
+
+.pdr32 {
+    padding-right: 32rpx;
+}
+
+.pdt32 {
+    padding-top: 32rpx;
+}
+
+.pdb32 {
+    padding-bottom: 32rpx;
+}
+
+.pdb16 {
+    padding-bottom: 16rpx;
+}
+
+.mgb20 {
+    margin-bottom: 20rpx;
+}
+
+.allpd32rpx {
+    padding: 32rpx;
+}
+
+.pdb20 {
+    margin-bottom: 20rpx;
+}
+
+.pdt20 {
+    padding-top: 20rpx
+}
+
+.height50rpx {
+    height: 50rpx;
+}
+
+.marginb16 {
+    margin-bottom: 16rpx;
+}
+
+.height40rpx {
+    height: 40rpx;
+}
+
+.list_date {
+    color: #AAAAAA;
+    font-size: 28rpx;
+    font-weight: 500;
+}
+
+.border_bottom_ccc {
+    border-bottom: 2rpx solid #CCCCCC;
+}
+
+.report_title {
+    font-size: 28rpx;
+    height: 40rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #333333;
+}
+
+.border_bottom_f5f5f5 {
+    border-bottom: 2rpx solid #F5F5F5;
+}
+
+.txt_center {
+    text-align: center;
+}
+
+.height300rpx {
+    height: 300rpx;
+}
+
+.bgcF9F9F9 {
+    background: #f9f9f9;
+}
+
+.height218rpx {
+    height: 218rpx;
+}
+
+.cell_1 {
+    float: left;
+    width: 100%;
+}
+
+.cell_2 {
+    float: left;
+    width: 20%;
+
+    img {
+        height: 60rpx;
+        width: 60rpx;
+        float: right;
+        margin: 96rpx 0rpx 94rpx 0;
+    }
+}
+
+.ml16 {
+    margin-left: 16rpx;
+}
+
+.ml32 {
+    margin-left: 32rpx;
+}
+
+.mt10 {
+    margin-top: 10rpx;
+}
+
+.cell_3 {
+    width: 5%;
+    float: right;
+
+    img {
+        height: 50rpx;
+        width: 50rpx;
+        float: right;
+        margin: 35rpx 0;
+    }
+}
+
+.width50 {
+    width: 50%;
+}
+
+.marginl8 .ml8 {
+    margin-left: 8rpx;
+}
+
+.lh40rpx {
+    line-height: 40rpx;
+}
+
+.lh50rpx {
+    line-height: 50rpx;
+}
+
+.disflex {
+    display: flex;
+}
+
+.align_items_center {
+    align-items: center;
+}
+
+.height44rpx {
+    height: 44rpx;
+}
+
+.disblock {
+    display: block;
+}
+
+.marginauto {
+    margin: auto;
+}
+
+.font28rpx {
+    font-size: 28rpx;
+}
+
+.color292d98 {
+    color: #292d98;
+}
+
+.colorfffff {
+    color: #FFFFFF;
+}
+
+.bgcFFFFFF {
+    background-color: #FFFFFF;
+}
+
+.mt24rpx {
+    margin-top: 24rpx;
+}
+
+.mb24rpx {
+    margin-bottom: 24rpx;
+}
+
+.padb24rpx {
+    padding-bottom: 24rpx;
+}
+
+.height80rpx {
+    height: 80rpx;
+}
+
+.height24rpx {
+    height: 24rpx;
+}

+ 215 - 0
common/style/picker.css

@@ -0,0 +1,215 @@
+.weui-mask {
+  position: fixed;
+  z-index: 1000;
+  top: 0;
+  right: 0;
+  left: 0;
+  bottom: 0;
+  background: rgba(0, 0, 0, 0.6);
+}
+.weui-mask_transparent {
+  position: fixed;
+  z-index: 1000;
+  top: 0;
+  right: 0;
+  left: 0;
+  bottom: 0;
+}
+.weui-picker {
+  position: fixed;
+  width: 100%;
+  left: 0;
+  bottom: 0;
+  z-index: 5000;
+  -webkit-backface-visibility: hidden;
+  backface-visibility: hidden;
+  -webkit-transform: translate(0, 100%);
+  transform: translate(0, 100%);
+  -webkit-transition: -webkit-transform 0.3s;
+  transition: -webkit-transform 0.3s;
+  transition: transform 0.3s;
+  transition: transform 0.3s, -webkit-transform 0.3s;
+}
+.weui-picker__hd {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  padding: 9px 15px;
+  background-color: var(--White);
+  position: relative;
+  text-align: center;
+  font-size: 17px;
+}
+.weui-picker__hd:after {
+  content: ' ';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  height: 1px;
+  border-bottom: 1px solid #e5e5e5;
+  color: #e5e5e5;
+  -webkit-transform-origin: 0 100%;
+  transform-origin: 0 100%;
+  -webkit-transform: scaleY(0.5);
+  transform: scaleY(0.5);
+}
+.weui-picker__action {
+  display: block;
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+  flex: 1;
+  color: #1aad19;
+}
+.weui-picker__action:first-child {
+  text-align: left;
+  color: #888;
+}
+.weui-picker__action:last-child {
+  text-align: right;
+}
+.weui-picker__bd {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  position: relative;
+  background-color: var(--White);
+  height: 238px;
+  overflow: hidden;
+}
+.weui-picker__group {
+  -webkit-box-flex: 1;
+  -webkit-flex: 1;
+  flex: 1;
+  position: relative;
+  height: 100%;
+}
+.weui-picker__mask {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0 auto;
+  z-index: 3;
+  background: -webkit-linear-gradient(
+      top,
+      rgba(255, 255, 255, 0.95),
+      rgba(255, 255, 255, 0.6)
+    ),
+    -webkit-linear-gradient(bottom, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6));
+  background: linear-gradient(
+      180deg,
+      rgba(255, 255, 255, 0.95),
+      rgba(255, 255, 255, 0.6)
+    ),
+    linear-gradient(0deg, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6));
+  background-position: top, bottom;
+  background-size: 100% 102px;
+  background-repeat: no-repeat;
+  -webkit-transform: translateZ(0);
+  transform: translateZ(0);
+}
+.weui-picker__indicator {
+  width: 100%;
+  height: 34px;
+  position: absolute;
+  left: 0;
+  top: 102px;
+  z-index: 3;
+}
+.weui-picker__indicator:before {
+  content: ' ';
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  height: 1px;
+  border-top: 1px solid #e5e5e5;
+  color: #e5e5e5;
+  -webkit-transform-origin: 0 0;
+  transform-origin: 0 0;
+  -webkit-transform: scaleY(0.5);
+  transform: scaleY(0.5);
+}
+.weui-picker__indicator:after {
+  content: ' ';
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  height: 1px;
+  border-bottom: 1px solid #e5e5e5;
+  color: #e5e5e5;
+  -webkit-transform-origin: 0 100%;
+  transform-origin: 0 100%;
+  -webkit-transform: scaleY(0.5);
+  transform: scaleY(0.5);
+}
+.weui-picker__content {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+}
+.weui-picker__item {
+  padding: 0;
+  height: 34px;
+  line-height: 34px;
+  text-align: center;
+  color: var(--DarkBlack);
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  overflow: hidden;
+}
+.weui-picker__item_disabled {
+  color: #808080;
+}
+@-webkit-keyframes slideUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+@keyframes slideUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+.weui-animate-slide-up {
+  -webkit-animation: slideUp ease 0.3s forwards;
+  animation: slideUp ease 0.3s forwards;
+}
+@-webkit-keyframes slideDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+  to {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+@keyframes slideDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+  to {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+.weui-animate-slide-down {
+  -webkit-animation: slideDown ease 0.3s forwards;
+  animation: slideDown ease 0.3s forwards;
+}

+ 324 - 0
common/style/reset.scss

@@ -0,0 +1,324 @@
+html {
+    line-height: 1.15;
+
+    -ms-text-size-adjust: 100%;
+
+    -webkit-text-size-adjust: 100%;
+
+}
+
+body {
+    margin: 0;
+}
+
+
+
+article,
+aside,
+footer,
+header,
+nav,
+section {
+    display: block;
+}
+
+
+
+h1 {
+    font-size: 2em;
+    margin: 0.67em 0;
+}
+
+
+
+figcaption,
+figure,
+main {
+
+    display: block;
+}
+
+
+
+
+
+
+hr {
+    box-sizing: content-box;
+
+    height: 0;
+
+    overflow: visible;
+
+}
+
+
+pre {
+    font-family: DINPro-Regular, Roboto;
+    font-size: 1em;
+
+}
+
+
+a {
+    background-color: transparent;
+
+    -webkit-text-decoration-skip: objects;
+
+}
+
+
+
+abbr[title] {
+    border-bottom: none;
+
+    text-decoration: underline;
+
+    text-decoration: underline dotted;
+
+}
+
+
+b,
+strong {
+    font-weight: inherit;
+}
+
+
+b,
+strong {
+    font-weight: bolder;
+}
+
+
+code,
+kbd,
+samp {
+    font-family: monospace, monospace;
+
+    font-size: 1em;
+
+}
+
+dfn {
+    font-style: italic;
+}
+
+
+mark {
+    background-color: #ff0;
+    color: #000;
+}
+
+
+
+small {
+    font-size: 80%;
+}
+
+
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline;
+}
+
+sub {
+    bottom: -0.25em;
+}
+
+sup {
+    top: -0.5em;
+}
+
+audio,
+video {
+    display: inline-block;
+}
+
+audio:not([controls]) {
+    display: none;
+    height: 0;
+}
+
+
+
+img {
+    border-style: none;
+}
+
+
+svg:not(:root) {
+    overflow: hidden;
+}
+
+
+button,
+input,
+optgroup,
+select,
+textarea {
+    font-family: sans-serif;
+
+    font-size: 100%;
+
+    line-height: 1.15;
+
+    margin: 0;
+
+}
+
+
+button,
+input {
+
+    overflow: visible;
+}
+
+
+
+button,
+select {
+
+    text-transform: none;
+}
+
+
+button,
+html [type="button"],
+
+[type="reset"],
+[type="submit"] {
+    -webkit-appearance: button;
+
+}
+
+
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+    border-style: none;
+    padding: 0;
+}
+
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+    outline: 1px dotted ButtonText;
+}
+
+
+
+fieldset {
+    padding: 0.35em 0.75em 0.625em;
+}
+
+
+
+legend {
+    box-sizing: border-box;
+
+    color: inherit;
+
+    display: table;
+
+    max-width: 100%;
+
+    padding: 0;
+
+    white-space: normal;
+
+}
+
+progress {
+    display: inline-block;
+
+    vertical-align: baseline;
+
+}
+
+
+
+textarea {
+    overflow: auto;
+}
+
+
+
+[type="checkbox"],
+[type="radio"] {
+    box-sizing: border-box;
+
+    padding: 0;
+
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+    height: auto;
+}
+
+
+[type="search"] {
+    -webkit-appearance: textfield;
+
+    outline-offset: -2px;
+
+}
+
+
+[type="search"]::-webkit-search-cancel-button,
+[type="search"]::-webkit-search-decoration {
+    -webkit-appearance: none;
+}
+
+
+
+::-webkit-file-upload-button {
+    -webkit-appearance: button;
+
+    font: inherit;
+
+}
+
+
+
+details,
+
+menu {
+    display: block;
+}
+
+
+
+summary {
+    display: list-item;
+}
+
+
+
+canvas {
+    display: inline-block;
+}
+
+
+
+template {
+    display: none;
+}
+
+
+[hidden] {
+    display: none;
+}

File diff suppressed because it is too large
+ 1688 - 0
common/uni.css


+ 704 - 0
components/ba-tree-picker/ba-tree-picker.vue

@@ -0,0 +1,704 @@
+<!-- 树形层级选择器-->
+<!-- 1、支持单选、多选 -->
+<template>
+  <view>
+    <view
+      class="tree-cover"
+      :class="{ show: showDialog }"
+      @tap="_cancel"
+    ></view>
+    <view class="tree-dialog" :class="{ show: showDialog }">
+      <view class="tree-bar">
+        <view
+          class="tree-bar-cancel"
+          :style="{ color: cancelColor }"
+          hover-class="hover-c"
+          @tap="_cancel"
+          >取消
+        </view>
+        <view class="tree-bar-title" :style="{ color: titleColor }">{{
+          title
+        }}</view>
+        <view
+          class="tree-bar-confirm"
+          :style="{ color: confirmColor }"
+          hover-class="hover-c"
+          @tap="_confirm"
+        >
+          {{ multiple ? "确定" : "" }}
+        </view>
+      </view>
+      <view class="tree-view">
+        <scroll-view class="tree-list" :scroll-y="true">
+          <block v-for="(item, index) in treeList" :key="index">
+            <view
+              class="tree-item"
+              :style="[
+                {
+                  paddingLeft: item.level * 30 + 'rpx',
+                },
+              ]"
+              :class="{
+                itemBorder: border === true,
+                show: item.isShow,
+              }"
+            >
+              <view class="item-label">
+                <view
+                  class="item-icon uni-inline-item"
+                  @tap.stop="_onItemSwitch(item, index)"
+                >
+                  <view
+                    v-if="!item.isLastLevel && item.isShowChild"
+                    class="switch-on"
+                    :style="{ 'border-left-color': switchColor }"
+                  >
+                  </view>
+                  <view
+                    v-else-if="!item.isLastLevel && !item.isShowChild"
+                    class="switch-off"
+                    :style="{ 'border-top-color': switchColor }"
+                  >
+                  </view>
+                  <view
+                    v-else
+                    class="item-last-dot"
+                    :style="{ 'border-top-color': switchColor }"
+                  >
+                  </view>
+                </view>
+                <view
+                  class="uni-flex-item uni-inline-item"
+                  @tap.stop="_onItemSelect(item, index)"
+                >
+                  <view class="item-name">
+                    {{
+                      item.name +
+                      (item.childCount ? "(" + item.childCount + ")" : "")
+                    }}
+                  </view>
+                  <view
+                    class="item-check"
+                    v-if="selectParent ? true : item.isLastLevel"
+                  >
+                    <view
+                      class="item-check-yes"
+                      v-if="item.checkStatus == 1"
+                      :class="{ radio: !multiple }"
+                      :style="{ 'border-color': confirmColor }"
+                    >
+                      <view
+                        class="item-check-yes-part"
+                        :style="{ 'background-color': confirmColor }"
+                      >
+                      </view>
+                    </view>
+                    <view
+                      class="item-check-yes"
+                      v-else-if="item.checkStatus == 2"
+                      :class="{ radio: !multiple }"
+                      :style="{ 'border-color': confirmColor }"
+                    >
+                      <view
+                        class="item-check-yes-all"
+                        :style="{ 'background-color': confirmColor }"
+                      >
+                      </view>
+                    </view>
+                    <view
+                      class="item-check-no"
+                      v-else
+                      :class="{ radio: !multiple }"
+                      :style="{ 'border-color': confirmColor }"
+                    ></view>
+                  </view>
+                </view>
+              </view>
+            </view>
+          </block>
+        </scroll-view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  emits: ["select-change"],
+  name: "ba-tree-picker",
+  props: {
+    valueKey: {
+      type: String,
+      default: "id",
+    },
+    textKey: {
+      type: String,
+      default: "name",
+    },
+    childrenKey: {
+      type: String,
+      default: "children",
+    },
+    localdata: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    localTreeList: {
+      //在已经格式化好的数据
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    selectedData: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    title: {
+      type: String,
+      default: "",
+    },
+    multiple: {
+      // 是否可以多选
+      type: Boolean,
+      default: true,
+    },
+    selectParent: {
+      //是否可以选父级
+      type: Boolean,
+      default: true,
+    },
+    confirmColor: {
+      // 确定按钮颜色
+      type: String,
+      default: "", // #0055ff
+    },
+    cancelColor: {
+      // 取消按钮颜色
+      type: String,
+      default: "", // #757575
+    },
+    titleColor: {
+      // 标题颜色
+      type: String,
+      default: "", //
+    },
+    switchColor: {
+      // 节点切换图标颜色
+      type: String,
+      default: "", // #666
+    },
+    border: {
+      // 是否有分割线
+      type: Boolean,
+      default: false,
+    },
+  },
+  data() {
+    return {
+      showDialog: false,
+      treeList: [],
+    };
+  },
+  computed: {},
+  methods: {
+    _show() {
+      this.showDialog = true;
+    },
+    _hide() {
+      this.showDialog = false;
+    },
+    _cancel() {
+      this._hide();
+      this.$emit("cancel", "");
+    },
+    _confirm() {
+      //多选
+      let selectedList = []; //如果子集全部选中,只返回父级 id
+      let selectedNames;
+      let currentLevel = -1;
+      this.treeList.forEach((item, index) => {
+        if (currentLevel >= 0 && item.level > currentLevel) {
+        } else {
+          if (item.checkStatus === 2) {
+            currentLevel = item.level;
+            selectedList.push(item.id);
+            selectedNames = selectedNames
+              ? selectedNames + " / " + item.name
+              : item.name;
+          } else {
+            currentLevel = -1;
+          }
+        }
+      });
+      //console.log('_confirm', selectedList);
+      console.log(selectedList);
+      this._hide();
+      this.$emit("select-change", selectedList, selectedNames);
+    },
+    //格式化原数据(原数据为tree结构)
+    _formatTreeData(list = [], level = 0, parentItem, isShowChild = true) {
+      let nextIndex = 0;
+      let parentId = -1;
+      let initCheckStatus = 0;
+      if (parentItem) {
+        nextIndex =
+          this.treeList.findIndex((item) => item.id === parentItem.id) + 1;
+        parentId = parentItem.id;
+        if (!this.multiple) {
+          //单选
+          initCheckStatus = 0;
+        } else initCheckStatus = parentItem.checkStatus == 2 ? 2 : 0;
+      }
+      list.forEach((item) => {
+        let isLastLevel = true;
+        if (item && item[this.childrenKey]) {
+          let children = item[this.childrenKey];
+          if (Array.isArray(children) && children.length > 0) {
+            isLastLevel = false;
+          }
+        }
+
+        let itemT = {
+          id: item[this.valueKey],
+          name: item[this.textKey],
+          level,
+          isLastLevel,
+          isShow: isShowChild,
+          isShowChild: false,
+          checkStatus: initCheckStatus,
+          orCheckStatus: 0,
+          parentId,
+          children: item[this.childrenKey],
+          childCount: item[this.childrenKey]
+            ? item[this.childrenKey].length
+            : 0,
+          childCheckCount: 0,
+          childCheckPCount: 0,
+        };
+
+        if (this.selectedData.indexOf(itemT.id) >= 0) {
+          itemT.checkStatus = 2;
+          itemT.orCheckStatus = 2;
+          itemT.childCheckCount = itemT.children ? itemT.children.length : 0;
+          this._onItemParentSelect(itemT, nextIndex);
+        }
+
+        this.treeList.splice(nextIndex, 0, itemT);
+        nextIndex++;
+      });
+      //console.log(this.treeList);
+    },
+    // 节点打开、关闭切换
+    _onItemSwitch(item, index) {
+      // console.log(item)
+      //console.log('_itemSwitch')
+      if (item.isLastLevel === true) {
+        return;
+      }
+      item.isShowChild = !item.isShowChild;
+      if (item.children) {
+        this._formatTreeData(item.children, item.level + 1, item);
+        item.children = undefined;
+      } else {
+        this._onItemChildSwitch(item, index);
+      }
+    },
+    _onItemChildSwitch(item, index) {
+      //console.log('_onItemChildSwitch')
+      const firstChildIndex = index + 1;
+      if (firstChildIndex > 0)
+        for (var i = firstChildIndex; i < this.treeList.length; i++) {
+          let itemChild = this.treeList[i];
+          if (itemChild.level > item.level) {
+            if (item.isShowChild) {
+              if (itemChild.parentId === item.id) {
+                itemChild.isShow = item.isShowChild;
+                if (!itemChild.isShow) {
+                  itemChild.isShowChild = false;
+                }
+              }
+            } else {
+              itemChild.isShow = item.isShowChild;
+              itemChild.isShowChild = false;
+            }
+          } else {
+            return;
+          }
+        }
+    },
+    // 节点选中、取消选中
+    _onItemSelect(item, index) {
+      //console.log('_onItemSelect')
+      //console.log(item)
+      if (!this.multiple) {
+        //单选
+        item.checkStatus = item.checkStatus == 0 ? 2 : 0;
+
+        this.treeList.forEach((v, i) => {
+          if (i != index) {
+            this.treeList[i].checkStatus = 0;
+          } else {
+            this.treeList[i].checkStatus = 2;
+          }
+        });
+
+        let selectedList = [];
+        let selectedNames;
+        selectedList.push(item.id);
+        selectedNames = item.name;
+        this._hide();
+        this.$emit("select-change", selectedList, selectedNames);
+        return;
+      }
+
+      let oldCheckStatus = item.checkStatus;
+      switch (oldCheckStatus) {
+        case 0:
+          item.checkStatus = 2;
+          item.childCheckCount = item.childCount;
+          item.childCheckPCount = 0;
+          break;
+        case 1:
+        case 2:
+          item.checkStatus = 0;
+          item.childCheckCount = 0;
+          item.childCheckPCount = 0;
+          break;
+        default:
+          break;
+      }
+      //子节点 全部选中
+      this._onItemChildSelect(item, index);
+      //父节点 选中状态变化
+      this._onItemParentSelect(item, index, oldCheckStatus);
+    },
+    _onItemChildSelect(item, index) {
+      //console.log('_onItemChildSelect')
+      let allChildCount = 0;
+      if (item.childCount && item.childCount > 0) {
+        index++;
+        while (
+          index < this.treeList.length &&
+          this.treeList[index].level > item.level
+        ) {
+          let itemChild = this.treeList[index];
+          itemChild.checkStatus = item.checkStatus;
+          if (itemChild.checkStatus == 2) {
+            itemChild.childCheckCount = itemChild.childCount;
+            itemChild.childCheckPCount = 0;
+          } else if (itemChild.checkStatus == 0) {
+            itemChild.childCheckCount = 0;
+            itemChild.childCheckPCount = 0;
+          }
+          // console.log('>>>>index:', index, 'item:', itemChild.name, '  status:', itemChild
+          // 	.checkStatus)
+          index++;
+        }
+      }
+    },
+    _onItemParentSelect(item, index, oldCheckStatus) {
+      //console.log('_onItemParentSelect')
+      //console.log(item)
+      const parentIndex = this.treeList.findIndex(
+        (itemP) => itemP.id == item.parentId
+      );
+      //console.log('parentIndex:' + parentIndex)
+      if (parentIndex >= 0) {
+        let itemParent = this.treeList[parentIndex];
+        let count = itemParent.childCheckCount;
+        let oldCheckStatusParent = itemParent.checkStatus;
+
+        if (oldCheckStatus == 1) {
+          itemParent.childCheckPCount -= 1;
+        } else if (oldCheckStatus == 2) {
+          itemParent.childCheckCount -= 1;
+        }
+        if (item.checkStatus == 1) {
+          itemParent.childCheckPCount += 1;
+        } else if (item.checkStatus == 2) {
+          itemParent.childCheckCount += 1;
+        }
+
+        if (
+          itemParent.childCheckCount <= 0 &&
+          itemParent.childCheckPCount <= 0
+        ) {
+          itemParent.childCheckCount = 0;
+          itemParent.childCheckPCount = 0;
+          itemParent.checkStatus = 0;
+        } else if (itemParent.childCheckCount >= itemParent.childCount) {
+          itemParent.childCheckCount = itemParent.childCount;
+          itemParent.childCheckPCount = 0;
+          itemParent.checkStatus = 2;
+        } else {
+          itemParent.checkStatus = 1;
+        }
+        //console.log('itemParent:', itemParent)
+        this._onItemParentSelect(itemParent, parentIndex, oldCheckStatusParent);
+      }
+    },
+    // 重置数据
+    _reTreeList() {
+      this.treeList.forEach((v, i) => {
+        this.treeList[i].checkStatus = v.orCheckStatus;
+      });
+    },
+    _initTree() {
+      this.treeList = [];
+      this._formatTreeData(this.localdata);
+    },
+  },
+  watch: {
+    localdata() {
+      this._initTree();
+    },
+    localTreeList() {
+      this.treeList = this.localTreeList;
+    },
+  },
+  mounted() {
+    this._initTree();
+  },
+};
+</script>
+
+<style scoped>
+.tree-cover {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  z-index: 100;
+  background-color: rgba(0, 0, 0, 0.4);
+  opacity: 0;
+  transition: all 0.3s ease;
+  visibility: hidden;
+}
+
+.tree-cover.show {
+  visibility: visible;
+  opacity: 1;
+}
+
+.tree-dialog {
+  position: fixed;
+  top: 0rpx;
+  right: 0rpx;
+  bottom: 0rpx;
+  left: 0rpx;
+  background-color: #fff;
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: column;
+  z-index: 102;
+  top: 20%;
+  transition: all 0.3s ease;
+  transform: translateY(100%);
+}
+
+.tree-dialog.show {
+  transform: translateY(0);
+}
+
+.tree-bar {
+  /* background-color: #fff; */
+  height: 90rpx;
+  padding-left: 25rpx;
+  padding-right: 25rpx;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  box-sizing: border-box;
+  border-bottom-width: 1rpx !important;
+  border-bottom-style: solid;
+  border-bottom-color: #f5f5f5;
+  font-size: 32rpx;
+  color: #757575;
+  line-height: 1;
+}
+
+.tree-bar-confirm {
+  color: #0055ff;
+  padding: 15rpx;
+}
+
+.tree-bar-title {
+}
+
+.tree-bar-cancel {
+  color: #757575;
+  padding: 15rpx;
+}
+
+.tree-view {
+  flex: 1;
+  padding: 20rpx;
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: column;
+  overflow: hidden;
+  height: 100%;
+}
+
+.tree-list {
+  flex: 1;
+  height: 100%;
+  overflow: hidden;
+}
+
+.tree-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  line-height: 1;
+  height: 0;
+  opacity: 0;
+  transition: 0.2s;
+  overflow: hidden;
+}
+
+.tree-item.show {
+  height: 90rpx;
+  opacity: 1;
+}
+
+.tree-item.showchild:before {
+  transform: rotate(90deg);
+}
+
+.tree-item.last:before {
+  opacity: 0;
+}
+
+.switch-on {
+  width: 0;
+  height: 0;
+  border-left: 10rpx solid transparent;
+  border-right: 10rpx solid transparent;
+  border-top: 15rpx solid #666;
+}
+
+.switch-off {
+  width: 0;
+  height: 0;
+  border-bottom: 10rpx solid transparent;
+  border-top: 10rpx solid transparent;
+  border-left: 15rpx solid #666;
+}
+
+.item-last-dot {
+  position: absolute;
+  width: 10rpx;
+  height: 10rpx;
+  border-radius: 100%;
+  background: #666;
+}
+
+.item-icon {
+  width: 26rpx;
+  height: 26rpx;
+  margin-right: 8rpx;
+  padding-right: 20rpx;
+  padding-left: 20rpx;
+}
+
+.item-label {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  height: 100%;
+  line-height: 1.2;
+}
+
+.item-name {
+  flex: 1;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  width: 450rpx;
+}
+
+.item-check {
+  width: 40px;
+  height: 40px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.item-check-yes,
+.item-check-no {
+  width: 20px;
+  height: 20px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  border-top-width: 1rpx;
+  border-left-width: 1rpx;
+  border-bottom-width: 1rpx;
+  border-right-width: 1rpx;
+  border-style: solid;
+  border-color: #0055ff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  box-sizing: border-box;
+}
+
+.item-check-yes-part {
+  width: 12px;
+  height: 12px;
+  border-top-left-radius: 20%;
+  border-top-right-radius: 20%;
+  border-bottom-right-radius: 20%;
+  border-bottom-left-radius: 20%;
+  background-color: #0055ff;
+}
+
+.item-check-yes-all {
+  margin-bottom: 5px;
+  border: 2px solid #007aff;
+  border-left: 0;
+  border-top: 0;
+  height: 12px;
+  width: 6px;
+  transform-origin: center;
+  /* #ifndef APP-NVUE */
+  transition: all 0.3s;
+  /* #endif */
+  transform: rotate(45deg);
+}
+
+.item-check .radio {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+
+.item-check .radio .item-check-yes-b {
+  border-top-left-radius: 50%;
+  border-top-right-radius: 50%;
+  border-bottom-right-radius: 50%;
+  border-bottom-left-radius: 50%;
+}
+
+.hover-c {
+  opacity: 0.6;
+}
+
+.itemBorder {
+  border-bottom: 1px solid #e5e5e5;
+}
+</style>

File diff suppressed because it is too large
+ 691 - 0
components/zaiti-tree/index.vue


+ 170 - 0
components/zaiti-tree/style.css

@@ -0,0 +1,170 @@
+.tkitree-mask {
+    position: fixed;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    z-index: 9998;
+    background-color: rgba(0, 0, 0, 0.6);
+    opacity: 0;
+    transition: all 0.3s ease;
+    visibility: hidden;
+}
+
+.tkitree-mask.show {
+    visibility: visible;
+    opacity: 1;
+}
+
+.tkitree-cnt {
+    position: fixed;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    z-index: 9999;
+    top: 225rpx;
+    transition: all 0.3s ease;
+    transform: translateY(100%);
+}
+
+.tkitree-cnt.show {
+    transform: translateY(0);
+}
+
+.tkitree-bar {
+    background-color: #fff;
+    height: 72rpx;
+    padding-left: 20rpx;
+    padding-right: 20rpx;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    box-sizing: border-box;
+    border-bottom-width: 1rpx !important;
+    border-bottom-style: solid;
+    border-bottom-color: #f5f5f5;
+    font-size: 32rpx;
+    color: #757575;
+    line-height: 1;
+}
+
+.tkitree-bar-confirm {
+    color: #07bb07;
+}
+
+.tkitree-view {
+    position: absolute;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    top: 72rpx;
+    background-color: #fff;
+    padding-top: 20rpx;
+    padding-right: 20rpx;
+    padding-bottom: 20rpx;
+    padding-left: 20rpx;
+}
+
+.tkitree-view-sc {
+    height: 100%;
+    overflow: hidden;
+}
+
+.tkitree-item {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: 26rpx;
+    color: #757575;
+    line-height: 1;
+    height: 0;
+    opacity: 0;
+    transition: 0.2s;
+    position: relative;
+    overflow: hidden;
+}
+
+.tkitree-item.show {
+    height: 80rpx;
+    opacity: 1;
+}
+
+.tkitree-item.showchild:before {
+    transform: rotate(90deg);
+}
+
+.tkitree-item.last:before {
+    opacity: 0;
+}
+
+.tkitree-icon {
+    width: 26rpx;
+    height: 26rpx;
+    margin-right: 8rpx;
+}
+
+.tkitree-label {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    height: 100%;
+    line-height: 1.2;
+}
+
+.tkitree-check {
+    width: 40px;
+    height: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.tkitree-check-yes,
+.tkitree-check-no {
+    width: 20px;
+    height: 20px;
+    border-top-left-radius: 20%;
+    border-top-right-radius: 20%;
+    border-bottom-right-radius: 20%;
+    border-bottom-left-radius: 20%;
+    border-top-width: 1rpx;
+    border-left-width: 1rpx;
+    border-bottom-width: 1rpx;
+    border-right-width: 1rpx;
+    border-style: solid;
+    border-color: #07bb07;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    box-sizing: border-box;
+}
+
+.tkitree-check-yes-b {
+    width: 12px;
+    height: 12px;
+    border-top-left-radius: 20%;
+    border-top-right-radius: 20%;
+    border-bottom-right-radius: 20%;
+    border-bottom-left-radius: 20%;
+    background-color: #07bb07;
+}
+
+.tkitree-check .radio {
+    border-top-left-radius: 50%;
+    border-top-right-radius: 50%;
+    border-bottom-right-radius: 50%;
+    border-bottom-left-radius: 50%;
+}
+
+.tkitree-check .radio .tkitree-check-yes-b {
+    border-top-left-radius: 50%;
+    border-top-right-radius: 50%;
+    border-bottom-right-radius: 50%;
+    border-bottom-left-radius: 50%;
+}
+
+.hover-c {
+    opacity: 0.6;
+}

+ 86 - 0
components/zaiti-tree/tools.js

@@ -0,0 +1,86 @@
+export default {
+    /** 将平面树json转为带children的json
+     * @param {Object} a
+     * @param {Object} idStr
+     * @param {Object} pidStr
+     * @param {Object} childrenStr
+     */
+    transData(a, idStr, pidStr, childrenStr) {
+        var r = [],
+            hash = {},
+            id = idStr,
+            pid = pidStr,
+            children = childrenStr,
+            i = 0,
+            j = 0,
+            len = a.length;
+        for (; i < len; i++) {
+            hash[a[i][id]] = a[i];
+        }
+        for (; j < len; j++) {
+            var aVal = a[j],
+                hashVP = hash[aVal[pid]];
+            if (hashVP) {
+                !hashVP[children] && (hashVP[children] = []);
+                hashVP[children].push(aVal);
+            } else {
+                r.push(aVal);
+            }
+        }
+        return r;
+    },
+    /**从字典缓存中返回数组用于页面上作下拉,
+     * @param {Object} k 字典名称
+     * @param {Object} v value取哪个字典属性
+     * @param {Object} t
+     */
+    arrByDic(k, v, t) {
+        var map = uni.getStorageSync("dic");
+        var arr = map[k];
+        var r = [];
+        arr.forEach(obj => {
+            r.push({
+                value: obj[v],
+                text: obj[t]
+            });
+        })
+        return r;
+    },
+
+    dateFmtyyyyMMddHHmmss(target) {
+        let date = new Date(target);
+        let y = date.getFullYear(); // 年
+        let MM = date.getMonth() + 1; // 月
+        MM = MM < 10 ? ('0' + MM) : MM;
+        let d = date.getDate(); // 日
+        d = d < 10 ? ('0' + d) : d;
+        let h = date.getHours(); // 时
+        h = h < 10 ? ('0' + h) : h;
+        let m = date.getMinutes(); // 分
+        m = m < 10 ? ('0' + m) : m;
+        let s = date.getSeconds(); // 秒
+        s = s < 10 ? ('0' + s) : s;
+        return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
+    },
+    // 比较时间大小
+    compareDate(date1, date2) {
+        var oDate1 = new Date(date1);
+        var oDate2 = new Date(date2);
+        if (oDate1.getTime() > oDate2.getTime()) {
+            return true; //第一个大
+        } else {
+            return false; //第二个大
+        }
+    },
+    uploadPreview(url, lists, name) {
+        var ext = url.substring(url.lastIndexOf(".") + 1);
+        ext = ext.toLowerCase();
+        console.log(ext);
+        if (ext == "pdf") {
+            uni.navigateTo({
+                url: "/pages/pdf/index?url=" + url
+            })
+        }
+    }
+
+}

File diff suppressed because it is too large
+ 701 - 0
components/zaiti-tree2/index.vue


+ 170 - 0
components/zaiti-tree2/style.css

@@ -0,0 +1,170 @@
+.tkitree-mask {
+    position: fixed;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    z-index: 9998;
+    background-color: rgba(0, 0, 0, 0.6);
+    opacity: 0;
+    transition: all 0.3s ease;
+    visibility: hidden;
+}
+
+.tkitree-mask.show {
+    visibility: visible;
+    opacity: 1;
+}
+
+.tkitree-cnt {
+    position: fixed;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    z-index: 9999;
+    top: 225rpx;
+    transition: all 0.3s ease;
+    transform: translateY(100%);
+}
+
+.tkitree-cnt.show {
+    transform: translateY(0);
+}
+
+.tkitree-bar {
+    background-color: #fff;
+    height: 72rpx;
+    padding-left: 20rpx;
+    padding-right: 20rpx;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    box-sizing: border-box;
+    border-bottom-width: 1rpx !important;
+    border-bottom-style: solid;
+    border-bottom-color: #f5f5f5;
+    font-size: 32rpx;
+    color: #757575;
+    line-height: 1;
+}
+
+.tkitree-bar-confirm {
+    color: #07bb07;
+}
+
+.tkitree-view {
+    position: absolute;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    top: 72rpx;
+    background-color: #fff;
+    padding-top: 20rpx;
+    padding-right: 20rpx;
+    padding-bottom: 20rpx;
+    padding-left: 20rpx;
+}
+
+.tkitree-view-sc {
+    height: 100%;
+    overflow: hidden;
+}
+
+.tkitree-item {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: 26rpx;
+    color: #757575;
+    line-height: 1;
+    height: 0;
+    opacity: 0;
+    transition: 0.2s;
+    position: relative;
+    overflow: hidden;
+}
+
+.tkitree-item.show {
+    height: 80rpx;
+    opacity: 1;
+}
+
+.tkitree-item.showchild:before {
+    transform: rotate(90deg);
+}
+
+.tkitree-item.last:before {
+    opacity: 0;
+}
+
+.tkitree-icon {
+    width: 26rpx;
+    height: 26rpx;
+    margin-right: 8rpx;
+}
+
+.tkitree-label {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    height: 100%;
+    line-height: 1.2;
+}
+
+.tkitree-check {
+    width: 40px;
+    height: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.tkitree-check-yes,
+.tkitree-check-no {
+    width: 20px;
+    height: 20px;
+    border-top-left-radius: 20%;
+    border-top-right-radius: 20%;
+    border-bottom-right-radius: 20%;
+    border-bottom-left-radius: 20%;
+    border-top-width: 1rpx;
+    border-left-width: 1rpx;
+    border-bottom-width: 1rpx;
+    border-right-width: 1rpx;
+    border-style: solid;
+    border-color: #07bb07;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    box-sizing: border-box;
+}
+
+.tkitree-check-yes-b {
+    width: 12px;
+    height: 12px;
+    border-top-left-radius: 20%;
+    border-top-right-radius: 20%;
+    border-bottom-right-radius: 20%;
+    border-bottom-left-radius: 20%;
+    background-color: #07bb07;
+}
+
+.tkitree-check .radio {
+    border-top-left-radius: 50%;
+    border-top-right-radius: 50%;
+    border-bottom-right-radius: 50%;
+    border-bottom-left-radius: 50%;
+}
+
+.tkitree-check .radio .tkitree-check-yes-b {
+    border-top-left-radius: 50%;
+    border-top-right-radius: 50%;
+    border-bottom-right-radius: 50%;
+    border-bottom-left-radius: 50%;
+}
+
+.hover-c {
+    opacity: 0.6;
+}

+ 86 - 0
components/zaiti-tree2/tools.js

@@ -0,0 +1,86 @@
+export default {
+    /** 将平面树json转为带children的json
+     * @param {Object} a
+     * @param {Object} idStr
+     * @param {Object} pidStr
+     * @param {Object} childrenStr
+     */
+    transData(a, idStr, pidStr, childrenStr) {
+        var r = [],
+            hash = {},
+            id = idStr,
+            pid = pidStr,
+            children = childrenStr,
+            i = 0,
+            j = 0,
+            len = a.length;
+        for (; i < len; i++) {
+            hash[a[i][id]] = a[i];
+        }
+        for (; j < len; j++) {
+            var aVal = a[j],
+                hashVP = hash[aVal[pid]];
+            if (hashVP) {
+                !hashVP[children] && (hashVP[children] = []);
+                hashVP[children].push(aVal);
+            } else {
+                r.push(aVal);
+            }
+        }
+        return r;
+    },
+    /**从字典缓存中返回数组用于页面上作下拉,
+     * @param {Object} k 字典名称
+     * @param {Object} v value取哪个字典属性
+     * @param {Object} t
+     */
+    arrByDic(k, v, t) {
+        var map = uni.getStorageSync("dic");
+        var arr = map[k];
+        var r = [];
+        arr.forEach(obj => {
+            r.push({
+                value: obj[v],
+                text: obj[t]
+            });
+        })
+        return r;
+    },
+
+    dateFmtyyyyMMddHHmmss(target) {
+        let date = new Date(target);
+        let y = date.getFullYear(); // 年
+        let MM = date.getMonth() + 1; // 月
+        MM = MM < 10 ? ('0' + MM) : MM;
+        let d = date.getDate(); // 日
+        d = d < 10 ? ('0' + d) : d;
+        let h = date.getHours(); // 时
+        h = h < 10 ? ('0' + h) : h;
+        let m = date.getMinutes(); // 分
+        m = m < 10 ? ('0' + m) : m;
+        let s = date.getSeconds(); // 秒
+        s = s < 10 ? ('0' + s) : s;
+        return y + '-' + MM + '-' + d + ' ' + h + ':' + m + ':' + s;
+    },
+    // 比较时间大小
+    compareDate(date1, date2) {
+        var oDate1 = new Date(date1);
+        var oDate2 = new Date(date2);
+        if (oDate1.getTime() > oDate2.getTime()) {
+            return true; //第一个大
+        } else {
+            return false; //第二个大
+        }
+    },
+    uploadPreview(url, lists, name) {
+        var ext = url.substring(url.lastIndexOf(".") + 1);
+        ext = ext.toLowerCase();
+        console.log(ext);
+        if (ext == "pdf") {
+            uni.navigateTo({
+                url: "/pages/pdf/index?url=" + url
+            })
+        }
+    }
+
+}

+ 37 - 0
config.js

@@ -0,0 +1,37 @@
+import {
+    BASE_URI
+} from "./pages/utils/constant.js";
+
+// console.log(BASE_URI)
+var baseUrl = BASE_URI
+
+let device, platform;
+device = uni.getSystemInfoSync().brand + ' ' + uni.getSystemInfoSync().model;
+
+// #ifdef MP-WEIXIN
+platform = 'wxmini';
+// #endif
+
+// #ifdef APP-PLUS
+platform = uni.getSystemInfoSync().platform;
+// #endif
+
+
+// #ifndef APP-PLUS||MP-WEIXIN
+device = 'h5';
+// #endif
+
+
+// app版本
+const version = "1.0";
+// 高德地图 key
+const key = "53ea64b17287b1f7323e9f29870af813";
+
+
+export default {
+    device,
+    version,
+    platform,
+    key,
+    baseUrl,
+}

+ 20 - 0
index.html

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

+ 62 - 0
js_sdk/api_activity.js

@@ -0,0 +1,62 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+
+const baseUri = '/smartParkH5Server'
+const controller = '/wx/periphery'
+
+export function list(data) {
+    return $http.post(
+        BASE_URI + controller + '/list',
+        data, {}
+    )
+}
+
+export function getActivityById(id, userId) {
+    return $http.post(
+        BASE_URI + controller + '/getActivityById?id=' + id + '&userId=' + userId,
+        {}, {}
+    )
+}
+
+export function clickCollect(data) {
+    return $http.post(
+        BASE_URI + controller + '/clickCollect', data, {}
+    )
+}
+
+export function insertRegisSignInfo(data) {
+    return $http.post(
+        BASE_URI + controller + '/insertRegisSignInfo',
+        data, {}
+    )
+}
+
+export function listRegisSignInfo(data) {
+    return $http.post(
+        BASE_URI + controller + '/listRegisSignInfo',
+        data, {}
+    )
+}
+
+export function updatePublishStatus(data) {
+    return $http.post(
+        BASE_URI + controller + '/updatePublishStatus',
+        data, {}
+    )
+}
+
+export function add(data) {
+    return $http.post(
+        BASE_URI + controller + '/add',
+        data, {}
+    )
+}
+
+export function richScanActivity(data) {
+    return $http.post(
+        BASE_URI + controller + '/richScan',
+        data, {}
+    )
+}

+ 155 - 0
js_sdk/api_community.js

@@ -0,0 +1,155 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+const pubCommunity = '/wx/PubCommunity'
+const auth = '/wx/homeActivity'
+const controller = '/wx/periphery'
+export function list(data) {
+    return $http.post(
+        BASE_URI + auth + '/list',
+
+        data, {}
+    )
+}
+export function searchAllInfo(data) {
+    return $http.post(
+        BASE_URI + auth + '/searchAllInfo',
+
+        data, {}
+    )
+}
+
+export function getCommunityActivityById(id, createdBy) {
+    return $http.post(
+        BASE_URI + auth + '/getCommunityActivityById?id=' + id + '&createdBy=' + createdBy,
+        {}, {}
+    )
+}
+
+export function clickCollect(data) {
+    return $http.post(
+        BASE_URI + auth + '/clickCollect',
+
+        data, {}
+    )
+}
+
+export function listPubCommunity(data) {
+    return $http.post(
+        BASE_URI + pubCommunity + '/listPubCommunity',
+
+        data, {}
+    )
+}
+
+export function listPubCommunityByFrameUser(data) {
+    return $http.post(
+        BASE_URI + pubCommunity + '/listPubCommunityByFrameUser',
+
+        data, {}
+    )
+}
+
+
+export function selectStreetCommunityByFrameUser(data) {
+    return $http.post(
+        BASE_URI + pubCommunity + '/selectStreetCommunityByFrameUser',
+
+        data, {}
+    )
+}
+
+
+export function selectCommunityEstateByFrameUser(data) {
+    return $http.post(
+        BASE_URI + pubCommunity + '/selectCommunityEstateByFrameUser',
+
+        data, {}
+    )
+}
+
+
+export function updateRegistration(data) {
+    return $http.post(
+        BASE_URI + auth + '/updateRegistration',
+
+        data, {}
+    )
+}
+
+export function updateSignIn(data) {
+    return $http.post(
+        BASE_URI + auth + '/updateSignIn',
+
+        data, {}
+    )
+}
+
+export function getListByUserId(data) {
+    return $http.post(
+        BASE_URI + auth + '/getListByUserId',
+
+        data, {}
+    )
+}
+export function getBmListByUserId(data) {
+    return $http.post(
+        BASE_URI + auth + '/getBmListByUserId',
+
+        data, {}
+    )
+}
+export function updateSignInEvaluate(data) {
+    return $http.post(
+        BASE_URI + auth + '/updateSignInEvaluate',
+
+        data, {}
+    )
+}
+export function insertHomeCommunityActivity(data) {
+    return $http.post(
+        BASE_URI + auth + '/insertHomeCommunityActivity',
+
+        data, {}
+    )
+}
+export function getHomeCommunityActivityIsValid(data) {
+    return $http.post(
+        BASE_URI + auth + '/getHomeCommunityActivityIsValid',
+
+        data, {}
+    )
+}
+
+export function getHomeCommunityActivityById(data) {
+    return $http.post(
+        BASE_URI + auth + '/getHomeCommunityActivityById',
+
+        data, {}
+    )
+}
+
+export function editHomeCommunityActivity(data) {
+    return $http.post(
+        BASE_URI + auth + '/editHomeCommunityActivity',
+
+        data, {}
+    )
+}
+export function listHomeCommunityActivity(data) {
+
+    return $http.post(
+        BASE_URI + auth + '/listHomeCommunityActivity',
+        data, {}
+    )
+}
+export function compareDate(start, end) {
+    const startDate = new Date(start)
+    const endDate = new Date(end)
+    if (startDate.getTime() > endDate.getTime()) {
+        return true
+    } else {
+        return false
+    }
+}

+ 47 - 0
js_sdk/api_data.js

@@ -0,0 +1,47 @@
+import { request } from './request'
+
+const baseUri = ''
+const dictUri = '/wx/dictController'
+const controller = '/wx/data'
+const pub = '/wx/public'
+
+export function listBizAll(userId) {
+    return request({
+        url: baseUri + controller + '/listBizAll/' + userId,
+        method: 'post'
+    })
+}
+
+export function listProjectAll(data) {
+    return request({
+        url: baseUri + pub + '/listProjectAll',
+        method: 'post',
+        data
+    })
+}
+
+export function getByCodes(data) {
+    return request({
+        url: baseUri + dictUri + '/getByCodes',
+        method: 'post',
+        data
+    })
+}
+
+export function getDictData(code) {
+    const codes = []
+    for (let i = 0; i < code.length; i++) {
+        codes.push(code[i])
+    }
+    const postData = {
+        codes: JSON.stringify(codes)
+    }
+    return new Promise((resolve, reject) => {
+        getByCodes(postData).then((res) => {
+            resolve(res)
+        }).catch((err, x) => {
+            reject(err, x)
+        })
+    })
+}
+

+ 52 - 0
js_sdk/api_periphery.js

@@ -0,0 +1,52 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+
+const baseUri = '/smartParkH5Server'
+const controller = '/wx/periphery'
+
+export function login(data) {
+    return $http.post(
+        '/wx/auth/login_by_app_main?' + qs.stringify(data), {}, {})
+
+}
+export function add(data) {
+
+    return $http.post(
+        BASE_URI + controller + '/add',
+        data, {}
+    )
+}
+
+export function list(data) {
+
+    return $http.post(
+        BASE_URI + controller + '/list',
+        data, {}
+    )
+}
+
+export function getById(data) {
+    return $http.post(
+        BASE_URI + controller + '/getById',
+        data, {}
+    )
+}
+
+export function edit(data) {
+    console.log(BASE_URI + controller)
+    return $http.post(
+        BASE_URI + controller + '/edit',
+        data, {}
+    )
+}
+
+export function remove(data) {
+    return $http.post({
+        url: BASE_URI + baseUri + controller + '/remove',
+        method: 'post',
+        data: data
+    })
+}
+

+ 150 - 0
js_sdk/auth.js

@@ -0,0 +1,150 @@
+import common from './common.js'
+
+export default {
+
+    TYPE_FRAME: 'FRAME',
+
+    TYPE_BIZ: 'BIZ',
+
+    TYPE_USER: 'USER',
+
+    TYPE_PERSON_BIZ: 'BIZ_PERSON',
+
+    // ------------------------------ User -----------------------------------
+
+    uid: function () {
+        return this.currUser() ? this.currUser().id : null
+    },
+
+    setUser: function (value) {
+        uni.setStorage({
+            key: 'laocui_user_token',
+            data: value,
+            success: function () {}
+        });
+    },
+    setUserInfo(value) {
+        uni.setStorage({
+            key: 'laocui_user_info',
+            data: JSON.stringify(value),
+            success: function () {}
+        });
+    },
+    currUser: function () {
+        return common.castEval(localStorage.getItem(this.userKey()) || '')
+    },
+
+    removeUser: function () {
+        uni.removeStorage(this.userKey())
+    },
+
+    // ------------------------------ Biz -----------------------------------
+
+    bid: function () {
+        return this.currBiz() ? this.currBiz().id : null
+    },
+
+    setBiz: function (value) {
+        sessionStorage.setItem(this.bizKey(), JSON.stringify(value))
+    },
+
+    removeBiz: function () {
+        sessionStorage.removeItem(this.bizKey())
+    },
+
+    currBiz: function () {
+        return common.castEval(sessionStorage.getItem(this.bizKey()) || null)
+    },
+
+    // ------------------------------ Token -----------------------------------
+
+    setToken: function (token) {
+        localStorage.setItem(this.tokenKey(), token)
+    },
+
+    getToken: function () {
+        return localStorage.getItem(this.tokenKey()) || null
+    },
+
+    removeToken: function () {
+        localStorage.removeItem(this.tokenKey())
+    },
+
+    // ------------------------------ key -----------------------------------
+
+    // bizKey: function() {
+    //   const key = this.hashCode(window.location.host + '_biz_' + this.getUserType())
+    //   return key
+    // },
+    //
+    // userKey: function() {
+    //   const key = this.hashCode(window.location.host + '_user_' + this.getUserType())
+    //   return key
+    // },
+    //
+    // tokenKey: function() {
+    //   const key = this.hashCode(window.location.host + '_token_' + this.getUserType())
+    //   return key
+    // },
+
+    // Frame
+    setLoginInfo: function (value) {
+        localStorage.setItem('KEY_ADMIN_USER_LOGIN_INFO', JSON.stringify(value))
+    },
+    getLoginInfo: function () {
+        return common.castEval(localStorage.getItem('KEY_ADMIN_USER_LOGIN_INFO') || null)
+    },
+    removeLoginInfo: function () {
+        localStorage.removeItem('KEY_ADMIN_USER_LOGIN_INFO')
+    },
+
+    // Biz
+    setBizLoginInfo: function (value) {
+        localStorage.setItem('KEY_BIZ_USER_LOGIN_INFO', JSON.stringify(value))
+    },
+    getBizLoginInfo: function () {
+        return common.castEval(localStorage.getItem('KEY_BIZ_USER_LOGIN_INFO') || null)
+    },
+    removeBizLoginInfo: function () {
+        localStorage.removeItem('KEY_BIZ_USER_LOGIN_INFO')
+    },
+
+    setUserType: function (value) {
+        localStorage.setItem('KEY_USER_TYPE', value)
+    },
+    getUserType: function () {
+        return localStorage.getItem('KEY_USER_TYPE') || 'TYPE_FRAME'
+    },
+
+    hashCode: function (str) {
+        let hash = 0
+        if (str.length === 0) return hash
+        for (let i = 0; i < str.length; i++) {
+            const char = str.charCodeAt(i)
+            hash = ((hash << 5) - hash) + char
+            hash = hash & hash // Convert to 32bit integer
+        }
+        return hash
+    },
+    /*
+        定时缓存
+     */
+    setTimingLocalStorage: function (key, value, ttl_ms) {
+        var data = {
+            value: value,
+            expirse: new Date(ttl_ms).getTime()
+        }
+        localStorage.setItem(key, JSON.stringify(data))
+    },
+    getTimingLocalStorage: function (key) {
+        var data = JSON.parse(localStorage.getItem(key))
+        if (data !== null) {
+            if (data.expirse == null || (data.expirse != null && data.expirse < new Date().getTime())) {
+                localStorage.removeItem(key)
+            } else {
+                return JSON.parse(data.value)
+            }
+        }
+        return null
+    }
+}

+ 185 - 0
js_sdk/common.js

@@ -0,0 +1,185 @@
+/**
+ * 获取url参数值
+ * @param {*} url
+ * @param {*} name
+ */
+export function getUrlParameter(url, name) {
+    var regexSearch = '[\\?&#]' + name + '=([^&#]*)'
+    var regex = new RegExp(regexSearch)
+    var results = regex.exec(url)
+    return results ? window.decodeURIComponent(results[1]) : ''
+}
+export function showToast(e) {
+    uni.showToast({
+        title: e,
+        icon: 'none',
+        mask: true,
+        duration: 1000
+    });
+}
+export default {
+
+    transDate: function (val, pattern) {
+        if (val) {
+            let time = new Date()
+            time.setTime(val)
+            if (Date.parse(val)) {
+                time = new Date(val)
+            }
+            if (time instanceof Date) {
+                return this.formatDate((pattern) || 'yyyy-MM-dd', time)
+            }
+        }
+        return ''
+    },
+    transBaseDateTime: function (val, pattern) {
+        if (val) {
+            let time = new Date()
+            time.setTime(val)
+            if (Date.parse(val)) {
+                time = new Date(val)
+            }
+            if (time instanceof Date) {
+                return this.formatDate((pattern) || 'yyyy年MM月dd日 hh:mm', time)
+            }
+        }
+        return ''
+    },
+    transBaseToDateTime: function (val, pattern) {
+        if (val) {
+            let time = new Date()
+            time.setTime(val)
+            if (Date.parse(val)) {
+                time = new Date(val)
+            }
+            if (time instanceof Date) {
+                return this.formatDate((pattern) || 'MM月dd日 hh:mm', time)
+            }
+        }
+        return ''
+    },
+    transServDate: function (val) {
+        return this.transDate(val, 'yyyy-MM-dd hh:mm:ss')
+    },
+    transServDay: function (val) {
+        return this.transDate(val, 'yyyy-MM-dd')
+    },
+    isArrayFn: function (value) {
+        if (typeof Array.isArray === 'function') {
+            return Array.isArray(value)
+        } else {
+            return Object.prototype.toString.call(value) === '[object Array]'
+        }
+    },
+
+    transDcMap: function (arr) {
+        const tMap = {}
+        arr.forEach(item => {
+            tMap[item.value] = item.label
+        })
+        return tMap
+    },
+
+    castEval: function (val) {
+        // return JSON.parse(val)
+        if (val) {
+            return eval('(' + val + ')')
+        } else {
+            return ''
+        }
+    },
+
+    castString: function (val) {
+        return JSON.stringify(val)
+    },
+
+    // 金额格式化,整数部分每3位用逗号分隔,支持带有正负号以及小数部分
+    formatMoney: function (amt) {
+        if (!amt) return ''
+        if (amt.length <= 3) {
+            return amt
+        }
+
+        if (!/^(\+|-)?(\d+)(\.\d+)?$/.test(amt)) {
+            return amt
+        }
+
+        var a = RegExp.$1;
+        var b = RegExp.$2;
+        var c = RegExp.$3
+        var re = new RegExp()
+        re.compile('(\\d)(\\d{3})(,|$)')
+        while (re.test(b)) {
+            b = b.replace(re, '$1,$2$3')
+        }
+        return a + '' + b + '' + c
+    },
+
+    formatDate: function (fmt, date) { // author: meizz
+        var o = {
+            'M+': date.getMonth() + 1, // 月份
+            'd+': date.getDate(), // 日
+            'h+': date.getHours(), // 小时
+            'm+': date.getMinutes(), // 分
+            's+': date.getSeconds(), // 秒
+            'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+            'S': date.getMilliseconds() // 毫秒
+        }
+        if (/(y+)/.test(fmt)) {
+            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+        }
+        for (var k in o) {
+            if (new RegExp('(' + k + ')').test(fmt)) {
+                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
+            }
+        }
+        return fmt
+    },
+
+    replaceThumbnail: function (urlPath) {
+        if (urlPath != null) {
+            urlPath = urlPath.replace('/server/FileController/download/', this.$constant.BASE_URI + '/wx/fileController/downloadThumbnail/')
+        }
+        if (urlPath != null) {
+            urlPath = urlPath.replace('/h5Server/FileController/download/', this.$constant.BASE_URI + '/wx/fileController/downloadThumbnail/')
+        }
+        return urlPath
+    },
+
+    goBack: function () {
+        // window.history.go(-1)
+        // self.location = document.referrer
+        history.back()
+    },
+
+    uuid: function (len, radix) {
+        const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
+        const uuid = []
+        let i
+        radix = radix || chars.length
+
+        if (len) {
+            // Compact form
+            for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
+        } else {
+            // rfc4122, version 4 form
+            let r
+
+            // rfc4122 requires these characters
+            uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
+            uuid[14] = '4'
+
+            // Fill in random data.  At i==19 set the high bits of clock sequence as
+            // per rfc4122, sec. 4.1.5
+            for (i = 0; i < 36; i++) {
+                if (!uuid[i]) {
+                    r = 0 | Math.random() * 16
+                    uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
+                }
+            }
+        }
+
+        return uuid.join('')
+    },
+
+}

+ 173 - 0
js_sdk/dateFormat.js

@@ -0,0 +1,173 @@
+/*若小于10,前面加0*/
+function isZero(m) {
+    return m < 10 ? '0' + m : m
+}
+
+function friendlyDate(timestamp) {
+    let formats = {
+        'year': '%n% 年前',
+        'month': '%n% 月前',
+        'day': '%n% 天前',
+        'hour': '%n% 小时前',
+        'minute': '%n% 分钟前',
+        'second': '%n% 秒前',
+    };
+
+    let now = Date.now();
+    let seconds = Math.floor((now - timestamp) / 1000);
+    let minutes = Math.floor(seconds / 60);
+    let hours = Math.floor(minutes / 60);
+    let days = Math.floor(hours / 24);
+    let months = Math.floor(days / 30);
+    let years = Math.floor(months / 12);
+
+    let diffType = '';
+    let diffValue = 0;
+    if (years > 0) {
+        diffType = 'year';
+        diffValue = years;
+    } else {
+        if (months > 0) {
+            diffType = 'month';
+            diffValue = months;
+        } else {
+            if (days > 0) {
+                diffType = 'day';
+                diffValue = days;
+            } else {
+                if (hours > 0) {
+                    diffType = 'hour';
+                    diffValue = hours;
+                } else {
+                    if (minutes > 0) {
+                        diffType = 'minute';
+                        diffValue = minutes;
+                    } else {
+                        diffType = 'second';
+                        diffValue = seconds === 0 ? (seconds = 1) : seconds;
+                    }
+                }
+            }
+        }
+    }
+    return formats[diffType].replace('%n%', diffValue);
+}
+/*
+ * 时间格式转换
+ * @param timestamp 时间 String || Date (123456 && 1978-10-25 10:25:20 && data对象)
+ * @param format 输出格式 String (slash: 1978/10/25 10:25:20  horizontal: 1978-10-25 10:25:20 minute:10:25 second:10:25)
+ */
+function formatDate(timestamp, format = 'slash') {
+    //时间戳是整数,否则要parseInt转换
+    let time = '';
+    console.log(timestamp.constructor);
+    if (timestamp.constructor === Date) {
+        time = timestamp;
+    } else {
+        time = (parseFloat(timestamp) + 946684800).toString();
+        if (time.indexOf('-') != -1 || time.indexOf('/') != -1 || time.indexOf(':') != -1) {
+            //将时间字符串转成时间戳
+            time = time.replace(/-/g, '/') //为了兼容IOS,需先将字符串转换为'2018/9/11 9:11:23'
+            time = new Date(time);
+        } else {
+            if (time.length == 10) {
+                time = new Date(parseInt(time) * 1000);
+            } else if (time.length == 13) {
+                time = new Date(parseInt(time));
+            }
+        }
+    }
+    let y = time.getFullYear();
+    let m = time.getMonth() + 1;
+    let d = time.getDate();
+    let h = time.getHours();
+    let mm = time.getMinutes();
+    let s = time.getSeconds();
+    let now = new Date();
+    let seconds = Math.floor((now - time));
+    let minutes = Math.floor(seconds / 60);
+    let hours = Math.floor(minutes / 60);
+    let days = Math.floor(hours / 24);
+    let months = Math.floor(days / 30);
+    let years = Math.floor(months / 12);
+    let NowY = (new Date()).getFullYear();
+    let dayTime = 24 * 60 * 60;
+    //当前时间
+    let td = new Date();
+    td = new Date(td.getFullYear(), td.getMonth(), td.getDate());
+    //传递时间
+    let od = new Date(time);
+    od = new Date(od.getFullYear(), od.getMonth(), od.getDate());
+    //当前时间与传递时间的差值
+    let xc = (od - td) / 1000 / 60 / 60 / 24;
+    //return y+'/'+isZero(m)+'/'+isZero(d)+' '+isZero(h)+':'+isZero(mm)+':'+isZero(s);
+    switch (format) {
+        case "horizontal":
+            return y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s);
+            break;
+        case "day":
+            return y + '-' + isZero(m) + '-' + isZero(d);
+            break;
+        case "minute":
+            let result = '';
+            if (NowY === y) {
+                if (xc < -1) {
+                    result = isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm)
+                } else if (xc < 0) {
+                    result = '昨天' + ' ' + isZero(h) + ':' + isZero(mm)
+                } else if (xc == 0) {
+                    result = isZero(h) + ':' + isZero(mm)
+                };
+            } else {
+                result = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm)
+            }
+            return result;
+            break;
+        case "second":
+            let result2 = '';
+            if (NowY === y) {
+                if (xc < -1) {
+                    result2 = isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
+                } else if (xc < 0) {
+                    result2 = '昨天' + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
+                } else if (xc == 0) {
+                    result2 = isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
+                };
+            } else {
+                result2 = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
+            }
+            return result2;
+            break;
+        case "spot":
+            let result3 = '';
+            result3 = y + '.' + isZero(m) + '.' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s)
+            return result3;
+            break;
+        case "date":
+            let result4 = '';
+            result4 = y + '.' + isZero(m) + '.' + isZero(d);
+            return result4;
+            break;
+        case "time":
+            let result5 = '';
+            result5 = isZero(h) + ':' + isZero(mm);
+            return result5;
+            break;
+        case "dateTime":
+            let result6 = '';
+            result6 = y + '-' + isZero(m) + '-' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm);
+            return result6;
+            break;
+        case "bvcTime":
+            return isZero(h) + ':' + isZero(mm) + ':' + isZero(s) + ' ' + isZero(d) + '/' + isZero(m) + '/' + y;
+            break;
+        default:
+            return y + '/' + isZero(m) + '/' + isZero(d) + ' ' + isZero(h) + ':' + isZero(mm) + ':' + isZero(s);
+
+    }
+
+}
+export {
+    friendlyDate,
+    formatDate
+}

+ 561 - 0
js_sdk/http.js

@@ -0,0 +1,561 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+import qs from 'qs';
+
+const baseUri = '/smartParkH5Server'
+const parkActivity = '/wx/meetingAppoint'
+export function login(data) {
+    return $http.post(
+        '/wx/auth/login_by_app_main?' + qs.stringify(data), {}, {})
+
+}
+
+export function addRectificationManagement(data) {
+
+    return $http.post(
+        '/wx/RectificationController/addRectificationManagement',
+        data, {}
+    )
+}
+export function getUserLocalStorageInfo() {
+    const userInfo = JSON.parse(
+        uni.getStorageSync("laocui_user_info"));
+    return userInfo
+}
+export function uploadPDF() {
+    uni.showLoading({
+        title: '加载中',
+        mask: true
+    });
+    return new Promise((resolve, reject) => {
+        uni.chooseMessageFile({
+            count: 1, //默认100
+            type: 'file',
+            success: (res) => {
+                uni.uploadFile({
+                    url: BASE_URI + "/wx/fileController/upload",
+                    filePath: res.tempFiles[0].path,
+                    name: "file",
+                    formData: {
+                        user: "test"
+                    },
+                    success(successRes) {
+                        // 上传完成需要更新 fileList
+                        let data = JSON.parse(successRes.data);
+                        uni.showToast({
+                            title: '提交成功',
+                            duration: 500
+                        });
+                        resolve({
+                            url: data.data[0],
+                            name: res.tempFiles[0].name
+                        })
+
+                    },
+                    fail(res) { },
+                });
+
+            },
+            fail(e) {
+                uni.showToast({
+                    title: '提交成功',
+                    duration: 0
+                });
+            }
+        });
+    })
+}
+export function getBuildDetails(data) {
+    return $http.post(
+        '/wx/MnpBuildingController/getById',
+        data, {}
+    )
+}
+
+export function addZaiti(data) {
+    return $http.post(
+        '/wx/ParkRoomController/add',
+        data, {}
+    )
+}
+
+
+export function getPartyBranchList(data) {
+    return $http.post(
+        '/wx/partyBranch/getPartyBranchList',
+        data, {}
+    )
+}
+export function selectByCompanyId(data) {
+    return $http.post(
+        '/wx/SocialCarrierController/selectByCompanyId',
+        data, {}
+    )
+}
+export function getTreeData2(data) {
+    return $http.post(
+        '/wx/ParkInfoController/getTreeData2',
+        data, {}
+    )
+}
+export function getTreeData6(data) {
+    return $http.post(
+        '/wx/ParkInfoController/getTreeData6',
+        data, {}
+    )
+}
+export function getActivationRanking(data) {
+    return $http.post(
+        '/wx/partyBranch/getActivationRanking',
+        data, {}
+    )
+}
+export function findRectificationManagementInOutList(data) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutList',
+        data, {}
+    )
+}
+
+export function findRectificationManagementInOutById(e) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutById', {
+        id: e
+    }, {}
+    )
+}
+export function repairList(data) {
+    return $http.post(
+        '/wx/repair/list',
+        data, {}
+    )
+}
+
+export function addSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/addSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function updateSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/updateSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function editRepair(data) {
+    return $http.post(
+        '/wx/repair/edit',
+        data, {}
+    )
+}
+export function addRepair(data) {
+    return $http.post(
+        '/wx/repair/add',
+        data, {}
+    )
+}
+export function getRepairDispatchById(id) {
+    return $http.post(
+        '/wx/repair/getById', {
+        id: id
+    }, {}
+    )
+}
+export function getDispatchToPerson(data) {
+    return $http.post(
+        '/wx/repair/getDispatchToPerson',
+        data, {}
+    )
+}
+export function getCompanyById(data) {
+    return $http.post(
+        '/wx/repair/getCompanyById', data, {},
+
+    )
+}
+
+export function getWxCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList', e, {}
+    )
+}
+
+export function tagsBind(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/bind', e, {}
+    )
+}
+export function getDetial(e) {
+    return $http.post(
+        '/wx/meetingAppoint/meetingAppointDetail', e, {}
+    )
+}
+export function saleControllerGetById(e) {
+    return $http.post(
+        '/wx/SaleController/getById', {
+        id: e
+    }, {}
+    )
+}
+
+export function getAppUserMain(data) {
+    return $http.post(
+        '/wx/company/getById',
+        data, {}
+    )
+}
+
+export function confirmAudit(data) {
+    return $http.post(
+        '/wx/meetingAppoint/confirmAudit',
+        data, {}
+    )
+
+}
+export function getCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTags', e, {}
+    )
+}
+export function getCompanyTagsByQybq(qybq) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTagsByQybq', {
+        qybq: qybq
+    }, {})
+}
+export function companyECdit(data) {
+    return $http.post(
+        '/wx/company/edit', data, {})
+}
+
+export function tagInfoList(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList',
+        e, {})
+}
+export function findDeptList() {
+
+    return $http.post(
+        '/wx/SaleController/findDeptList', {}, {})
+
+}
+export function tagCategoryList() {
+    return $http.post(
+        '/wx/MnpTagController/tagCategoryList', {}, {}
+    )
+}
+export function interviewEscalationListAll(id) {
+    return $http.post('/wx/interviewEscalation/listAll', {
+        companyId: id
+    }, {})
+}
+export function getUserInfo(data) {
+    let laocui_user_info = JSON.parse(uni.getStorageSync('laocui_user_info'))
+    return $http.post(
+        '/wx/frameUser/getMyInfo?userId=' + laocui_user_info.user.id, {}, {})
+
+}
+
+export function getRoomInfo(e) {
+    return $http.post(
+        '/wx/ParkRoomController/getById', {
+        id: e
+    }, {})
+}
+export function getCompanyHouseDetails(e) {
+    return $http.post(
+        '/wx/company/getById', {
+        id: e
+    }, {})
+}
+export function handleList(e) {
+    return $http.post(
+        '/wx/workPaneController/handleList',
+        e, {})
+}
+export function readList(e) {
+    return $http.post(
+        '/wx/workPaneController/readList',
+        e, {})
+}
+// handleList?
+export function findCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTags/' + e, {}, {})
+}
+export function removeTagsBind(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/removeBind', e, {}
+    )
+}
+export function addInterview(e) {
+
+    return $http.post(
+        "/wx/interviewEscalation/add", e, {})
+}
+export function editInterview(e) {
+    return $http.post(
+        "/wx/interviewEscalation/edit", e, {})
+}
+export function getInterviewList(e) {
+    return $http.post(
+        "/wx/interviewEscalation/list", e, {})
+}
+export function getInterviewDetails(e) {
+    return $http.post(
+        "/wx/interviewEscalation/getById", {
+        id: e
+    }, {})
+}
+export function findSafetySelfCheckingPlanById(e) {
+    return $http.post(
+        "/wx/SafetyController/findSafetySelfCheckingPlanById", {
+        id: e
+    }, {})
+}
+// 
+export function findSafetySelfCheckingPlanList(e) {
+    return $http.post(
+        "/wx/SafetyController/findSafetySelfCheckingPlanList",
+        e, {})
+}
+export function getBySaveStatus(e) {
+    return $http.post(
+        "/wx/interviewEscalation/getBySaveStatus", {
+        createdBy: e
+    }, {})
+}
+export function companyExamineAdd(e) {
+    return $http.post(
+        "/wx/company/add", e, {})
+}
+export function listByModel(e) {
+    return $http.post(
+        '/wx/SaleController/findSaleManagementListByRoomId',
+        e, {})
+}
+export function listVo(e) {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/company/listVo', e, {})
+}
+// /wx/SafetyController/addSafetySelfCheckingPlan
+export function addSafetySelfCheckingPlan(e) {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/addSafetySelfCheckingPlan', {
+        ...e
+    }, {})
+}
+export function findSafetySelfCheckingManagetById(e) {
+
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/findSafetySelfCheckingManagetById', {
+        id: e
+    }, {})
+}
+export function findSafetySelfCheckingManageList(e) {
+
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/findSafetySelfCheckingManageList', e, {})
+}
+export function findYuanQuList() {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SaleController/findYuanQuList', {}, {})
+}
+export function findLongPanList(id) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findLouPanList', {
+        id: id
+    }, {})
+}
+export function findLouDongList(id) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findLouDongList', {
+        id: id
+    }, {})
+}
+export function clickCollect(e) {
+    return $http.post(
+        '/wx/parkActivity/clickCollect',
+        e, {})
+}
+export function insertRegisSignInfo(e) {
+    return $http.post(
+        '/wx/parkActivity/insertRegisSignInfo',
+        e, {})
+}
+
+export function richScan(e) {
+    return $http.post(
+        '/wx/parkActivity/richScan',
+        e, {})
+}
+export function getActivityById(id, signInCode, userId) {
+    return $http.get(
+        '/wx/parkActivity/getBySignInCode?id=' + id + '&userId=' + userId + "&signInCode=" + signInCode, {}, {})
+}
+// /wx/userPower/getUserPower?userId=1088765543780974592
+export function getUserPower(e) {
+    return $http.post(
+        '/wx/userPower/getUserPower', {
+        userId: e
+    }, {})
+}
+export function editPassword(e) {
+    return $http.post(
+        '/wx/frameUser/editPassword', e, {})
+}
+
+export function updateListRectificationManagement(e) {
+
+    return $http.post(
+        '/wx/RectificationController/updateListRectificationManagement', e, {})
+}
+// /wx/RectificationController/findUserListByRoleWuye
+export function findUserListByRoleWuye() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/RectificationController/findUserListByRoleWuye',
+
+        {}, {})
+}
+export function listAllUserMain() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/UserMainExpandController/listAllUserMain',
+
+        {}, {})
+}
+export function userList(e) {
+    // http://192.168.2.112:9011/wx/frameUser/userList
+    return $http.post(
+        '/wx/frameUser/userList',
+        e
+        , {})
+}
+export function findAllSimpleCompanies(e) {
+    // http://192.168.2.112:9011/wx/frameUser/userList
+    return $http.post(
+        '/wx/company/findAllSimpleCompanies', { searchInfo: e.qymc, pageNum: 1, pageSize: 10000 }, {})
+}
+
+export function findTrackUserList() {
+    // http://192.168.2.112:9011/wx/frameUser/userList
+    return $http.post(
+        '/wx/SaleController/findTrackUserList', {}, {})
+}
+export function getSelectUserTwo(e) {
+
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/frameUser/getSelectUserTwo', {
+        searchName: e
+    }, {})
+}
+export function getSelectDeptTwo(e) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/frameUser/getSelectDeptTwo',
+
+        {
+            searchName: e
+        }, {})
+}
+export function findRoomInfoListByIds(e) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findRoomInfoListByIds',
+
+        {
+            ids: e
+        }, {})
+}
+export function findCompanyList() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findCompanyList', {}, {})
+}
+
+export function addyixiang(e) {
+    return $http.post(
+        '/wx/SaleController/add',
+        e, {})
+}
+export function editSave(e) {
+    return $http.post(
+        '/wx/SaleController/editSave',
+        e, {})
+}
+export function findCompanyInfoList(data) {
+    return $http.post(
+        "/wx/SaleController/findCompanyInfoList",
+        data, {}
+    )
+}
+export function findRoomByCondition(params) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findRoomByCondition', params, {})
+
+}
+export function getCompanyAll(qymc) {
+    return $http.post(
+        '/wx/company/listAll', {
+        qymc: qymc ? qymc : ""
+    }, {})
+
+}
+export function getByCodes(params) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/sysDict/getByCodes',
+
+        {
+            codes: params
+        }, {})
+}
+
+
+
+export function list(data) {
+    return $http.post(
+        parkActivity + '/getMeetingAppointList',
+        data, {}
+    )
+}
+
+export function listApp(data) {
+    return $http.post(
+        parkActivity + '/getMeetingAppointListApp',
+        data, {}
+    )
+}
+
+
+
+
+
+export function cancelAppoint(data) {
+    return $http.post(
+        parkActivity + '/cancelAppoint',
+        data, {}
+    )
+}
+
+
+// /wx/SaleController/
+export function getRepairList(data) {
+    return $http.post(
+        '/wx/repair/list',
+        data, {}
+    )
+}

+ 274 - 0
js_sdk/request/request.js

@@ -0,0 +1,274 @@
+export default class request {
+    constructor(options) {
+        //请求公共地址
+        this.baseUrl = options.baseUrl || "";
+        //公共文件上传请求地址
+        this.fileUrl = options.fileUrl || "";
+        //默认请求头
+        this.headers = options.headers || {};
+        //默认配置
+        this.config = {
+            isPrompt: options.isPrompt === false ? false : true,
+            load: options.load === false ? false : true,
+            isFactory: options.isFactory === false ? false : true,
+            loadMore: options.loadMore === false ? false : true
+        };
+    }
+    // 获取默认信息
+    getDefault(url, options, type) {
+        //判断url是不是链接
+        var urlType = /^([hH][tT]{2}[pP]:\/\/|[hH][tT]{2}[pP][sS]:\/\/)(([A-Za-z0-9-~]+).)+([A-Za-z0-9-~/])+$/.test(url);
+        let httpUrl;
+        if (type == "file") {
+            httpUrl = urlType ? url : this.fileUrl + url;
+        } else {
+            httpUrl = urlType ? url : this.baseUrl + url;
+        }
+        let config = Object.assign({}, this.config, options);
+        //请求地址
+        config.httpUrl = httpUrl;
+        //请求头
+        config.headers = Object.assign(this.headers, options.headers);
+        return config;
+    }
+
+    //post请求
+    post(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "data");
+        requestInfo.data = data;
+        return new Promise((resolve, reject) => {
+            this.getRequest("POST", requestInfo, (state, response) => {
+                //是否用外部的数据处理方法
+                if (state && requestInfo.isFactory && this.dataFactory) {
+
+                    //数据处理
+
+                    var factoryInfo = this.dataFactory(requestInfo, response);
+                    // console.log(factoryInfo)
+                    return resolve(factoryInfo.result)
+                    // factoryInfo.success ? resolve(factoryInfo.result) : reject(factoryInfo.result);
+                } else {
+                    // console.log(response, response)
+                    state ? resolve(response) : reject(response);
+                }
+            });
+        });
+    }
+    //get请求
+    get(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "data");
+        requestInfo.data = data;
+        return new Promise((resolve, reject) => {
+            this.getRequest("GET", requestInfo, (state, response) => {
+                //是否用外部的数据处理方法
+                if (state && requestInfo.isFactory && this.dataFactory) {
+                    //数据处理
+                    var factoryInfo = this.dataFactory(requestInfo, response);
+                    factoryInfo.success ? resolve(factoryInfo.result) : reject(factoryInfo.result);
+                } else {
+                    state ? resolve(response) : reject(response);
+                }
+            });
+        });
+    }
+    //put请求
+    put(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "data");
+        requestInfo.data = data;
+        return new Promise((resolve, reject) => {
+            this.getRequest("PUT", requestInfo, (state, response) => {
+                //是否用外部的数据处理方法
+                if (state && requestInfo.isFactory && this.dataFactory) {
+                    //数据处理
+                    var factoryInfo = this.dataFactory(requestInfo, response);
+                    factoryInfo.success ? resolve(factoryInfo.result) : reject(factoryInfo.result);
+                } else {
+                    state ? resolve(response) : reject(response);
+                }
+            });
+        });
+    }
+    //delete请求
+    delete(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "data");
+        requestInfo.data = data;
+        return new Promise((resolve, reject) => {
+            this.getRequest("DELETE", requestInfo, (state, response) => {
+                //是否用外部的数据处理方法
+                if (state && requestInfo.isFactory && this.dataFactory) {
+                    //数据处理
+                    var factoryInfo = this.dataFactory(requestInfo, response);
+                    factoryInfo.success ? resolve(factoryInfo.result) : reject(factoryInfo.result);
+                } else {
+                    state ? resolve(response) : reject(response);
+                }
+            });
+        });
+    }
+
+    //接口请求方法
+    getRequest(ajaxType, options, callback) {
+        //请求前回调
+        if (this.requestStart) {
+            options.method = ajaxType;
+            var requestStart = this.requestStart(options);
+            if (typeof requestStart == "object") {
+                options.data = requestStart.data;
+                options.headers = requestStart.headers;
+                options.isPrompt = requestStart.isPrompt;
+                options.load = requestStart.load;
+                options.isFactory = requestStart.isFactory;
+            } else {
+                callback(false, "请求开始拦截器未通过");
+                return;
+            }
+        }
+        // console.log(options.data)
+        uni.request({
+            url: options.httpUrl,
+            data: options.data,
+            method: ajaxType, //请求类型
+            header: options.headers, //加入请求头
+            success: (res) => {
+                // ;
+                //请求完成回调
+                this.requestEnd && this.requestEnd(options, res);
+                callback(true, res);
+            },
+            fail: (err) => {
+                // console.log(err);
+                //请求完成回调
+                this.requestEnd && this.requestEnd(options, err);
+                callback(false, err);
+            }
+        });
+    }
+    //jsonp请求(只限于H5使用)
+    jsonp(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "data");
+        let dataStr = '';
+        Object.keys(data).forEach(key => {
+            dataStr += key + '=' + data[key] + '&';
+        });
+        //匹配最后一个&并去除
+        if (dataStr !== '') {
+            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
+        }
+        requestInfo.httpUrl = requestInfo.httpUrl + '?' + dataStr;
+        const _this = this;
+        return new Promise((resolve, reject) => {
+            let callbackName = "callback" + Math.ceil(Math.random() * 1000000);
+            if (_this.requestStart) {
+                requestInfo.data = data;
+                var requestStart = _this.requestStart(requestInfo);
+                if (typeof requestStart == "object") {
+                    requestInfo.data = requestStart.data;
+                    requestInfo.headers = requestStart.headers;
+                    requestInfo.isPrompt = requestStart.isPrompt;
+                    requestInfo.load = requestStart.load;
+                    requestInfo.isFactory = requestStart.isFactory;
+                } else {
+                    reject("请求开始拦截器未通过");
+                    return;
+                }
+            }
+            window[callbackName] = function (data) {
+                resolve(data);
+            }
+            var script = document.createElement("script");
+            script.src = requestInfo.httpUrl + "&callback=" + callbackName;
+            document.head.appendChild(script);
+            // 及时删除,防止加载过多的JS
+            document.head.removeChild(script);
+            //请求完成回调
+            _this.requestEnd && _this.requestEnd(requestInfo, {});
+        });
+    }
+    //本地服务器图片上传
+    urlImgUpload(url = '', data = {}, options = {}) {
+        let requestInfo = this.getDefault(url, options, "file");
+        requestInfo.data = data;
+        const _this = this;
+        return new Promise((resolve, reject) => {
+            uni.chooseImage({
+                count: data.count || 9, //默认9
+                sizeType: data.sizeType || ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
+                sourceType: data.sourceType || ['album', 'camera'], //从相册选择
+                success: function (res) {
+                    _this.urlFileUpload(requestInfo, res.tempFiles, (state, response) => {
+                        state ? resolve(response) : reject(response);
+                    });
+                }
+            });
+        });
+    }
+    //本地服务器文件上传方法
+    urlFileUpload(options, files, callback) {
+        const _this = this;
+        //请求前回调
+        if (this.requestStart) {
+            options.method = "FILE";
+            var requestStart = this.requestStart(options);
+            if (typeof requestStart == "object") {
+                if (typeof requestStart == "object") {
+                    options.data = requestStart.data;
+                    options.headers = requestStart.headers;
+                    options.isPrompt = requestStart.isPrompt;
+                    options.load = requestStart.load;
+                    options.isFactory = requestStart.isFactory;
+                } else {
+                    callback(false, "请求开始拦截器未通过");
+                    return;
+                }
+            }
+        }
+        const len = files.length - 1;
+        let fileList = new Array;
+        fileUpload(0);
+
+        function fileUpload(i) {
+            var config = {
+                url: options.httpUrl,
+                filePath: files[i].path,
+                header: options.headers, //加入请求头
+                name: options.name || "file",
+                success: (response) => {
+                    response.data = JSON.parse(response.data);
+                    //请求完成回调
+                    _this.requestEnd && _this.requestEnd(options, response);
+                    //是否用外部的数据处理方法
+                    if (options.isFactory && _this.dataFactory) {
+                        //数据处理
+                        var factoryInfo = _this.dataFactory(options, response);
+                        if (factoryInfo.success) {
+                            fileList.push(factoryInfo.result);
+                            if (len <= i) {
+                                callback(true, fileList);
+                            } else {
+                                fileUpload(i + 1);
+                            }
+                        } else {
+                            callback(false, factoryInfo.result);
+                        }
+                    } else {
+                        fileList.push(response.data);
+                        if (len <= i) {
+                            callback(true, fileList);
+                        } else {
+                            fileUpload(i + 1);
+                        }
+                    }
+                },
+                fail: (err) => {
+                    //请求完成回调
+                    _this.requestEnd && _this.requestEnd(options, err);
+                    callback(false, err);
+                }
+            };
+            if (options.data) {
+                config.formData = options.data;
+            }
+            uni.uploadFile(config);
+        }
+    }
+}

+ 135 - 0
js_sdk/request/requestConfig.js

@@ -0,0 +1,135 @@
+import request from "./request";
+import config from "config";
+// import store from "../../store/index.js";
+uni.getStorage({
+    key: 'storage_key',
+    success: function (res) {
+        console.log(res.data);
+    }
+});
+
+//可以new多个request来支持多个域名请求
+let $http = new request({
+    //接口请求地址
+    baseUrl: config.baseUrl,
+    //服务器本地上传文件地址
+    fileUrl: config.baseUrl,
+    //设置请求头
+    headers: {
+        'Content-Type': 'application/x-www-form-urlencoded;',
+        'ApiVersion': config.version,
+        'Device': config.device,
+        'Platform': config.platform,
+        "Authorization": 'Bearer ' + uni.getStorageSync('laocui_user_token')
+    },
+    //以下是默认值可不写
+    //是否提示--默认提示
+    isPrompt: true,
+    //是否显示请求动画
+    load: true,
+    //是否使用处理数据模板
+    isFactory: true,
+    //列表接口是否有加载判断
+    loadMore: true,
+});
+//当前接口请求数
+let requestNum = 0;
+//请求开始拦截器
+$http.requestStart = function (options) {
+
+    for (const key in options.data) {
+        if (options.data[key] == null) {
+            delete options.data[key]
+        }
+    }
+    if (requestNum <= 0) {
+        uni.showNavigationBarLoading();
+        if (options.load) {
+            //打开加载动画
+            uni.showLoading({
+                title: '加载中',
+                mask: true
+            });
+        }
+    }
+    requestNum += 1;
+    //请求前加入token
+    options.headers['Authorization'] = 'Bearer ' + uni.getStorageSync('laocui_user_token');
+    // console.log("请求开始前", options);
+    return options;
+}
+//请求结束
+$http.requestEnd = function (options, resolve) {
+    //判断当前接口是否需要加载动画
+    requestNum = requestNum - 1;
+    if (requestNum <= 0) {
+        uni.hideLoading();
+        uni.hideNavigationBarLoading();
+    }
+    if (resolve.errMsg && (resolve.errMsg != "request:ok" || resolve.statusCode && resolve.statusCode != 200)) {
+        uni.showToast({
+            title: "网络错误,请检查一下网络",
+            mask: true,
+            icon: "none"
+        });
+    }
+}
+//登录弹窗次数
+let loginPopupNum = 0;
+//所有接口数据处理(可在接口里设置不调用此方法)
+$http.dataFactory = function (options, resolve) {
+    //设置回调默认值
+    var callback = {
+        //success数据是否请求成功状态
+        success: false,
+        //这里返回的数据就是调用请求方法收到的数据
+        result: ""
+    };
+    // 特殊接口处理  接口报请先登录  跳转登录
+    if (resolve.data.code === 101) {
+        uni.showModal({
+            title: '提示',
+            content: resolve.data.msg,
+            showCancel: false,
+            success: () => {
+                uni.setStorageSync('token', null);
+                uni.navigateTo({
+                    url: '/pages/login/login'
+                });
+            }
+        });
+        return false;
+    }
+    //判断数据是否请求成功
+    if (resolve.data.errmsg == "成功") {
+        callback.success = true;
+        callback.result = resolve.data;
+    } else if (resolve.data.errno == 303) {
+        uni.redirectTo({
+            url: '/pages/subPackages/pages/login/login'
+        });
+        this.$showToast('令牌过期,请重新登陆')
+    } else {
+        uni.showToast({
+            title: resolve.data.errmsg,
+            icon: "none",
+            mask: true,
+            duration: 2000
+        });
+        //设置可以提示的时候
+        // if (options.isPrompt) {
+        // 	setTimeout(function () {
+        //提示后台接口抛出的错误信息
+        // uni.showToast({
+        // 	title: resolve.data.msg,
+        // 	icon: "none",
+        // 	duration: 3000
+        // });
+        // 	}, 500);
+        // }
+        callback.result = resolve.data;
+    }
+    uni.stopPullDownRefresh();
+    return callback;
+};
+export default $http;

+ 546 - 0
js_sdk/venueRoom.js

@@ -0,0 +1,546 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+import qs from 'qs';
+
+const baseUri = '/smartParkH5Server'
+const parkActivity = '/wx/WxParkVenueAppointController'
+export function login(data) {
+    return $http.post(
+        '/wx/auth/login_by_app_main?' + qs.stringify(data), {}, {})
+
+}
+
+export function addRectificationManagement(data) {
+
+    return $http.post(
+        '/wx/RectificationController/addRectificationManagement',
+        data, {}
+    )
+}
+export function getUserLocalStorageInfo() {
+    const userInfo = JSON.parse(
+        uni.getStorageSync("laocui_user_info"));
+    return userInfo
+}
+export function uploadPDF() {
+    uni.showLoading({
+        title: '加载中',
+        mask: true
+    });
+    return new Promise((resolve, reject) => {
+        uni.chooseMessageFile({
+            count: 1, //默认100
+            type: 'file',
+            success: (res) => {
+                uni.uploadFile({
+                    url: BASE_URI + "/wx/fileController/upload",
+                    filePath: res.tempFiles[0].path,
+                    name: "file",
+                    formData: {
+                        user: "test"
+                    },
+                    success(successRes) {
+                        // 上传完成需要更新 fileList
+                        let data = JSON.parse(successRes.data);
+                        uni.showToast({
+                            title: '提交成功',
+                            duration: 500
+                        });
+                        resolve({
+                            url: data.data[0],
+                            name: res.tempFiles[0].name
+                        })
+
+                    },
+                    fail(res) {},
+                });
+
+            },
+            fail(e) {
+                uni.showToast({
+                    title: '提交成功',
+                    duration: 0
+                });
+            }
+        });
+    })
+}
+export function getBuildDetails(data) {
+    return $http.post(
+        '/wx/MnpBuildingController/getById',
+        data, {}
+    )
+}
+
+export function addZaiti(data) {
+    return $http.post(
+        '/wx/ParkRoomController/add',
+        data, {}
+    )
+}
+
+
+export function getPartyBranchList(data) {
+    return $http.post(
+        '/wx/partyBranch/getPartyBranchList',
+        data, {}
+    )
+}
+export function selectByCompanyId(data) {
+    return $http.post(
+        '/wx/SocialCarrierController/selectByCompanyId',
+        data, {}
+    )
+}
+export function getTreeData2(data) {
+    return $http.post(
+        '/wx/ParkInfoController/getTreeData2',
+        data, {}
+    )
+}
+export function getTreeData6(data) {
+    return $http.post(
+        '/wx/ParkInfoController/getTreeData6',
+        data, {}
+    )
+}
+export function getActivationRanking(data) {
+    return $http.post(
+        '/wx/partyBranch/getActivationRanking',
+        data, {}
+    )
+}
+export function findRectificationManagementInOutList(data) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutList',
+        data, {}
+    )
+}
+
+export function findRectificationManagementInOutById(e) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutById', {
+            id: e
+        }, {}
+    )
+}
+export function repairList(data) {
+    return $http.post(
+        '/wx/repair/list',
+        data, {}
+    )
+}
+
+export function addSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/addSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function updateSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/updateSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function editRepair(data) {
+    return $http.post(
+        '/wx/repair/edit',
+        data, {}
+    )
+}
+export function addRepair(data) {
+    return $http.post(
+        '/wx/repair/add',
+        data, {}
+    )
+}
+export function getRepairDispatchById(id) {
+    return $http.post(
+        '/wx/repair/getById', {
+            id: id
+        }, {}
+    )
+}
+export function getDispatchToPerson(data) {
+    return $http.post(
+        '/wx/repair/getDispatchToPerson',
+        data, {}
+    )
+}
+export function getCompanyById(data) {
+    return $http.post(
+        '/wx/repair/getCompanyById', data, {},
+
+    )
+}
+
+export function getWxCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList', e, {}
+    )
+}
+
+export function tagsBind(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/bind', e, {}
+    )
+}
+export function getDetial(e) {
+    return $http.post(
+        '/wx/WxParkVenueAppointController/VenueAppointDetail', e, {}
+    )
+}
+export function saleControllerGetById(e) {
+    return $http.post(
+        '/wx/SaleController/getById', {
+            id: e
+        }, {}
+    )
+}
+
+export function getAppUserMain(data) {
+    return $http.post(
+        '/wx/company/getById',
+        data, {}
+    )
+}
+
+export function confirmAudit(data) {
+    return $http.post(
+        '/wx/WxParkVenueAppointController/confirmAudit',
+        data, {}
+    )
+
+}
+export function getCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTags', e, {}
+    )
+}
+export function getCompanyTagsByQybq(qybq) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTagsByQybq', {
+            qybq: qybq
+        }, {})
+}
+export function companyECdit(data) {
+    return $http.post(
+        '/wx/company/edit', data, {})
+}
+
+export function tagInfoList(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList',
+        e, {})
+}
+export function findDeptList() {
+
+    return $http.post(
+        '/wx/SaleController/findDeptList', {}, {})
+
+}
+export function tagCategoryList() {
+    return $http.post(
+        '/wx/MnpTagController/tagCategoryList', {}, {}
+    )
+}
+export function interviewEscalationListAll(id) {
+    return $http.post('/wx/interviewEscalation/listAll', {
+        companyId: id
+    }, {})
+}
+export function getUserInfo(data) {
+    let laocui_user_info = JSON.parse(uni.getStorageSync('laocui_user_info'))
+    return $http.post(
+        '/wx/frameUser/getMyInfo?userId=' + laocui_user_info.user.id, {}, {})
+
+}
+
+export function getRoomInfo(e) {
+    return $http.post(
+        '/wx/ParkRoomController/getById', {
+            id: e
+        }, {})
+}
+export function getCompanyHouseDetails(e) {
+    return $http.post(
+        '/wx/company/getById', {
+            id: e
+        }, {})
+}
+export function handleList(e) {
+    return $http.post(
+        '/wx/workPaneController/handleList',
+        e, {})
+}
+export function readList(e) {
+    return $http.post(
+        '/wx/workPaneController/readList',
+        e, {})
+}
+// handleList?
+export function findCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTags/' + e, {}, {})
+}
+export function removeTagsBind(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/removeBind', e, {}
+    )
+}
+export function addInterview(e) {
+
+    return $http.post(
+        "/wx/interviewEscalation/add", e, {})
+}
+export function editInterview(e) {
+    return $http.post(
+        "/wx/interviewEscalation/edit", e, {})
+}
+export function getInterviewList(e) {
+    return $http.post(
+        "/wx/interviewEscalation/list", e, {})
+}
+export function getInterviewDetails(e) {
+    return $http.post(
+        "/wx/interviewEscalation/getById", {
+            id: e
+        }, {})
+}
+export function findSafetySelfCheckingPlanById(e) {
+    return $http.post(
+        "/wx/SafetyController/findSafetySelfCheckingPlanById", {
+            id: e
+        }, {})
+}
+// 
+export function findSafetySelfCheckingPlanList(e) {
+    return $http.post(
+        "/wx/SafetyController/findSafetySelfCheckingPlanList",
+        e, {})
+}
+export function getBySaveStatus(e) {
+    return $http.post(
+        "/wx/interviewEscalation/getBySaveStatus", {
+            createdBy: e
+        }, {})
+}
+export function companyExamineAdd(e) {
+    return $http.post(
+        "/wx/company/add", e, {})
+}
+export function listByModel(e) {
+    return $http.post(
+        '/wx/SaleController/findSaleManagementListByRoomId',
+        e, {})
+}
+export function listVo(e) {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/company/listVo', e, {})
+}
+// /wx/SafetyController/addSafetySelfCheckingPlan
+export function addSafetySelfCheckingPlan(e) {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/addSafetySelfCheckingPlan', {
+            ...e
+        }, {})
+}
+export function findSafetySelfCheckingManagetById(e) {
+
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/findSafetySelfCheckingManagetById', {
+            id: e
+        }, {})
+}
+export function findSafetySelfCheckingManageList(e) {
+
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SafetyController/findSafetySelfCheckingManageList', e, {})
+}
+export function findYuanQuList() {
+    // 查询园区列表,不需要参数
+    return $http.post(
+        '/wx/SaleController/findYuanQuList', {}, {})
+}
+export function findLongPanList(id) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findLouPanList', {
+            id: id
+        }, {})
+}
+export function findLouDongList(id) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findLouDongList', {
+            id: id
+        }, {})
+}
+export function clickCollect(e) {
+    return $http.post(
+        '/wx/parkActivity/clickCollect',
+        e, {})
+}
+export function insertRegisSignInfo(e) {
+    return $http.post(
+        '/wx/parkActivity/insertRegisSignInfo',
+        e, {})
+}
+
+export function richScan(e) {
+    return $http.post(
+        '/wx/parkActivity/richScan',
+        e, {})
+}
+export function getActivityById(id, signInCode, userId) {
+    return $http.get(
+        '/wx/parkActivity/getBySignInCode?id=' + id + '&userId=' + userId + "&signInCode=" + signInCode, {}, {})
+}
+// /wx/userPower/getUserPower?userId=1088765543780974592
+export function getUserPower(e) {
+    return $http.post(
+        '/wx/userPower/getUserPower', {
+            userId: e
+        }, {})
+}
+export function editPassword(e) {
+    return $http.post(
+        '/wx/frameUser/editPassword', e, {})
+}
+
+export function updateListRectificationManagement(e) {
+
+    return $http.post(
+        '/wx/RectificationController/updateListRectificationManagement', e, {})
+}
+// /wx/RectificationController/findUserListByRoleWuye
+export function findUserListByRoleWuye() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/RectificationController/findUserListByRoleWuye',
+
+        {}, {})
+}
+export function listAllUserMain() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/UserMainExpandController/listAllUserMain',
+
+        {}, {})
+}
+export function userList() {
+    // http://192.168.2.112:9011/wx/frameUser/userList
+    return $http.post(
+        '/wx/frameUser/userList',
+
+        {}, {})
+}
+
+export function getSelectUserTwo(e) {
+
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/frameUser/getSelectUserTwo', {
+            searchName: e
+        }, {})
+}
+export function getSelectDeptTwo(e) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/frameUser/getSelectDeptTwo',
+
+        {
+            searchName: e
+        }, {})
+}
+export function findRoomInfoListByIds(e) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findRoomInfoListByIds',
+
+        {
+            ids: e
+        }, {})
+}
+export function findCompanyList() {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findCompanyList', {}, {})
+}
+
+export function addyixiang(e) {
+    return $http.post(
+        '/wx/SaleController/add',
+        e, {})
+}
+export function findCompanyInfoList(data) {
+    return $http.post(
+        "/wx/SaleController/findCompanyInfoList",
+        data, {}
+    )
+}
+export function findRoomByCondition(params) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/SaleController/findRoomByCondition', params, {})
+
+}
+export function getCompanyAll(qymc) {
+    return $http.post(
+        '/wx/company/listAll', {
+            qymc: qymc ? qymc : ""
+        }, {})
+
+}
+export function getByCodes(params) {
+    // 用园区ID查询楼盘列表
+    return $http.post(
+        '/wx/sysDict/getByCodes',
+
+        {
+            codes: params
+        }, {})
+}
+
+
+
+export function list(data) {
+    return $http.post(
+        parkActivity + '/getVenueAppointList',
+        data, {}
+    )
+}
+
+export function listApp(data) {
+    return $http.post(
+        parkActivity + '/getVenueAppointListApp',
+        data, {}
+    )
+}
+
+
+
+
+
+export function cancelAppoint(data) {
+    return $http.post(
+        parkActivity + '/cancelAppoint',
+        data, {}
+    )
+}
+
+
+// /wx/SaleController/
+export function getRepairList(data) {
+    return $http.post(
+        '/wx/repair/list',
+        data, {}
+    )
+}

+ 70 - 0
main.js

@@ -0,0 +1,70 @@
+import App from './App'
+import store from './store'
+import common from './pages/utils/common.js'
+import constant from './pages/utils/constant.js'
+Vue.prototype.$gaodeKey = 'OJ7BZ-ULH6V-XBLPV-ULIMK-APS3H-QHFIP'; //高德地图key
+
+import {
+    showToast,
+    transDate
+} from './js_sdk/common.js'
+// #ifndef VUE3
+import Vue from 'vue'
+import auth from './js_sdk/auth'
+Vue.prototype.$auth = auth
+// import "./vite.config"
+Vue.prototype.$constant = constant
+Vue.prototype.$common = common
+Vue.config.productionTip = false
+Vue.prototype.$store = store
+Vue.prototype.$transDate = transDate
+Vue.prototype.$showToast = showToast
+import $http from './js_sdk/request/requestConfig';
+Vue.prototype.$http = $http;
+
+// 全局引入  是否登录判断
+// uni.getStorage({
+//     key: 'laocui_user_token',
+//     success: function (res) {
+//         uni.switchTab({
+//             url: "/pages/index/index"
+//         })
+//     },
+//     fail(res) {
+//         uni.showToast({
+//             title: "请重新登陆",
+//             mask: true,
+//             icon: "none"
+//         });
+//         uni.redirectTo({
+//             url: "/pages/login/login"
+//         })
+//     }
+// });
+
+App.mpType = 'app'
+const app = new Vue({
+    store,
+    ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import {
+    createSSRApp
+} from 'vue'
+export function createApp() {
+    const app = createSSRApp(App)
+    app.use(store)
+    app.config.globalProperties.$adpid = "1111111111"
+    app.config.globalProperties.$backgroundAudioData = {
+        playing: false,
+        playTime: 0,
+        formatedPlayTime: '00:00:00'
+    }
+    return {
+        app
+    }
+}
+// #endif

+ 162 - 0
manifest.json

@@ -0,0 +1,162 @@
+{
+    "name" : "产品化管理端",
+    "appid" : "__UNI__8C5F0F6",
+    "description" : "应用描述",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueCompiler" : "uni-app",
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "nvueLaunchMode" : "fast",
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        "modules" : {
+            "OAuth" : {},
+            "Payment" : {},
+            "Push" : {},
+            "Share" : {},
+            "Speech" : {},
+            "VideoPlayer" : {}
+        },
+        "distribute" : {
+            "android" : {
+                "permissions" : []
+            },
+            "ios" : {
+                "UIBackgroundModes" : [ "audio" ],
+                "urlschemewhitelist" : [ "baidumap", "iosamap" ]
+            },
+            "sdkConfigs" : {
+                "speech" : {
+                    "ifly" : {}
+                }
+            },
+            "orientation" : [ "portrait-primary" ]
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "quickapp" : {},
+    "quickapp-native" : {
+        "icon" : "/static/logo.png",
+        "package" : "com.example.demo",
+        "features" : [
+            {
+                "name" : "system.clipboard"
+            }
+        ]
+    },
+    "quickapp-webview" : {
+        "icon" : "/static/logo.png",
+        "package" : "com.example.demo",
+        "minPlatformVersion" : 1070,
+        "versionName" : "1.0.0",
+        "versionCode" : 100
+    },
+    "mp-weixin" : {
+        "libVersion" : "latest",
+        "appid" : "wxf7ff06df2bc1f1f2",
+        "optimization" : {
+            "subPackages" : true
+        },
+        "setting" : {
+            "urlCheck" : true,
+            "es6" : true,
+            "postcss" : false,
+            "minified" : true
+        },
+        "usingComponents" : true,
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "查询用户地理位置"
+            }
+        },
+        "requiredPrivateInfos" : [ "getLocation" ],
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-alipay" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-baidu" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-jd" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "h5" : {
+        "template" : "template.h5.html",
+        "router" : {
+            "mode" : "history",
+            "base" : ""
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "TKUBZ-D24AF-GJ4JY-JDVM2-IBYKK-KEBCU"
+                }
+            }
+        },
+        "async" : {
+            "timeout" : 20000
+        },
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "vueVersion" : "2",
+    "mp-kuaishou" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-lark" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "mp-qq" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "quickapp-webview-huawei" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "quickapp-webview-union" : {
+        "uniStatistics" : {
+            "enable" : false
+        }
+    },
+    "uniStatistics" : {
+        "version" : "2",
+        "enable" : false
+    },
+    "locale" : "zh-Hans"
+}

+ 21 - 0
node_modules/ansi-colors/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Brian Woodward.
+
+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.

File diff suppressed because it is too large
+ 105 - 0
node_modules/ansi-colors/README.md


+ 456 - 0
node_modules/ansi-colors/index.js

@@ -0,0 +1,456 @@
+/*!
+ * ansi-colors <https://github.com/doowb/ansi-colors>
+ *
+ * Copyright (c) 2015-2017, Brian Woodward.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var wrap = require('ansi-wrap');
+
+/**
+ * Wrap a string with ansi codes to create a black background.
+ *
+ * ```js
+ * console.log(colors.bgblack('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgblack
+ */
+
+exports.bgblack = function bgblack(message) {
+  return wrap(40, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a blue background.
+ *
+ * ```js
+ * console.log(colors.bgblue('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgblue
+ */
+
+exports.bgblue = function bgblue(message) {
+  return wrap(44, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a cyan background.
+ *
+ * ```js
+ * console.log(colors.bgcyan('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgcyan
+ */
+
+exports.bgcyan = function bgcyan(message) {
+  return wrap(46, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a green background.
+ *
+ * ```js
+ * console.log(colors.bggreen('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bggreen
+ */
+
+exports.bggreen = function bggreen(message) {
+  return wrap(42, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a magenta background.
+ *
+ * ```js
+ * console.log(colors.bgmagenta('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgmagenta
+ */
+
+exports.bgmagenta = function bgmagenta(message) {
+  return wrap(45, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a red background.
+ *
+ * ```js
+ * console.log(colors.bgred('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgred
+ */
+
+exports.bgred = function bgred(message) {
+  return wrap(41, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a white background.
+ *
+ * ```js
+ * console.log(colors.bgwhite('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgwhite
+ */
+
+exports.bgwhite = function bgwhite(message) {
+  return wrap(47, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a yellow background.
+ *
+ * ```js
+ * console.log(colors.bgyellow('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bgyellow
+ */
+
+exports.bgyellow = function bgyellow(message) {
+  return wrap(43, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create black text.
+ *
+ * ```js
+ * console.log(colors.black('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  black
+ */
+
+exports.black = function black(message) {
+  return wrap(30, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create blue text.
+ *
+ * ```js
+ * console.log(colors.blue('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  blue
+ */
+
+exports.blue = function blue(message) {
+  return wrap(34, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create bold text.
+ *
+ * ```js
+ * console.log(colors.bold('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  bold
+ */
+
+exports.bold = function bold(message) {
+  return wrap(1, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create cyan text.
+ *
+ * ```js
+ * console.log(colors.cyan('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  cyan
+ */
+
+exports.cyan = function cyan(message) {
+  return wrap(36, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create dim text.
+ *
+ * ```js
+ * console.log(colors.dim('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  dim
+ */
+
+exports.dim = function dim(message) {
+  return wrap(2, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create gray text.
+ *
+ * ```js
+ * console.log(colors.gray('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  gray
+ */
+
+exports.gray = function gray(message) {
+  return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create green text.
+ *
+ * ```js
+ * console.log(colors.green('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  green
+ */
+
+exports.green = function green(message) {
+  return wrap(32, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create grey text.
+ *
+ * ```js
+ * console.log(colors.grey('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  grey
+ */
+
+exports.grey = function grey(message) {
+  return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create hidden text.
+ *
+ * ```js
+ * console.log(colors.hidden('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  hidden
+ */
+
+exports.hidden = function hidden(message) {
+  return wrap(8, 28, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create inverse text.
+ *
+ * ```js
+ * console.log(colors.inverse('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  inverse
+ */
+
+exports.inverse = function inverse(message) {
+  return wrap(7, 27, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create italic text.
+ *
+ * ```js
+ * console.log(colors.italic('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  italic
+ */
+
+exports.italic = function italic(message) {
+  return wrap(3, 23, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create magenta text.
+ *
+ * ```js
+ * console.log(colors.magenta('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  magenta
+ */
+
+exports.magenta = function magenta(message) {
+  return wrap(35, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create red text.
+ *
+ * ```js
+ * console.log(colors.red('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  red
+ */
+
+exports.red = function red(message) {
+  return wrap(31, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to reset ansi colors currently on the string.
+ *
+ * ```js
+ * console.log(colors.reset('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  reset
+ */
+
+exports.reset = function reset(message) {
+  return wrap(0, 0, message);
+};
+
+/**
+ * Wrap a string with ansi codes to add a strikethrough to the text.
+ *
+ * ```js
+ * console.log(colors.strikethrough('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  strikethrough
+ */
+
+exports.strikethrough = function strikethrough(message) {
+  return wrap(9, 29, message);
+};
+
+/**
+ * Wrap a string with ansi codes to underline the text.
+ *
+ * ```js
+ * console.log(colors.underline('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  underline
+ */
+
+exports.underline = function underline(message) {
+  return wrap(4, 24, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create white text.
+ *
+ * ```js
+ * console.log(colors.white('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  white
+ */
+
+exports.white = function white(message) {
+  return wrap(37, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create yellow text.
+ *
+ * ```js
+ * console.log(colors.yellow('some string'));
+ * ```
+ *
+ * @param  {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name  yellow
+ */
+
+exports.yellow = function yellow(message) {
+  return wrap(33, 39, message);
+};

+ 176 - 0
node_modules/ansi-colors/package.json

@@ -0,0 +1,176 @@
+{
+  "_from": "ansi-colors@^1.0.1",
+  "_id": "ansi-colors@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+  "_location": "/ansi-colors",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ansi-colors@^1.0.1",
+    "name": "ansi-colors",
+    "escapedName": "ansi-colors",
+    "rawSpec": "^1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.1"
+  },
+  "_requiredBy": [
+    "/gulp/gulp-cli",
+    "/plugin-error"
+  ],
+  "_resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-1.1.0.tgz",
+  "_shasum": "6374b4dd5d4718ff3ce27a671a3b1cad077132a9",
+  "_spec": "ansi-colors@^1.0.1",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/gulp/node_modules/gulp-cli",
+  "author": {
+    "name": "Brian Woodward",
+    "url": "https://github.com/doowb"
+  },
+  "bugs": {
+    "url": "https://github.com/doowb/ansi-colors/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Brian Woodward",
+      "url": "https://twitter.com/doowb"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    }
+  ],
+  "dependencies": {
+    "ansi-wrap": "^0.1.0"
+  },
+  "deprecated": false,
+  "description": "Collection of ansi colors and styles.",
+  "devDependencies": {
+    "gulp-format-md": "^1.0.0",
+    "mocha": "^3.5.3",
+    "typescript": "^2.7.1"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js",
+    "types/index.d.ts"
+  ],
+  "homepage": "https://github.com/doowb/ansi-colors",
+  "keywords": [
+    "ansi-bgblack",
+    "ansi-bgblue",
+    "ansi-bgcyan",
+    "ansi-bggreen",
+    "ansi-bgmagenta",
+    "ansi-bgred",
+    "ansi-bgwhite",
+    "ansi-bgyellow",
+    "ansi-black",
+    "ansi-blue",
+    "ansi-bold",
+    "ansi-cyan",
+    "ansi-dim",
+    "ansi-gray",
+    "ansi-green",
+    "ansi-grey",
+    "ansi-hidden",
+    "ansi-inverse",
+    "ansi-italic",
+    "ansi-magenta",
+    "ansi-red",
+    "ansi-reset",
+    "ansi-strikethrough",
+    "ansi-underline",
+    "ansi-white",
+    "ansi-yellow",
+    "bgblack",
+    "bgblue",
+    "bgcyan",
+    "bggreen",
+    "bgmagenta",
+    "bgred",
+    "bgwhite",
+    "bgyellow",
+    "black",
+    "blue",
+    "bold",
+    "cyan",
+    "dim",
+    "gray",
+    "green",
+    "grey",
+    "hidden",
+    "inverse",
+    "italic",
+    "magenta",
+    "red",
+    "reset",
+    "strikethrough",
+    "underline",
+    "white",
+    "yellow"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "ansi-colors",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/doowb/ansi-colors.git"
+  },
+  "scripts": {
+    "test": "mocha && tsc --project types"
+  },
+  "types": "./types/index.d.ts",
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    },
+    "reflinks": [
+      "verb-readme-generator",
+      "verb"
+    ],
+    "related": {
+      "list": [
+        "ansi-bgblack",
+        "ansi-bgblue",
+        "ansi-bgcyan",
+        "ansi-bggreen",
+        "ansi-bgmagenta",
+        "ansi-bgred",
+        "ansi-bgwhite",
+        "ansi-bgyellow",
+        "ansi-black",
+        "ansi-blue",
+        "ansi-bold",
+        "ansi-cyan",
+        "ansi-dim",
+        "ansi-gray",
+        "ansi-green",
+        "ansi-grey",
+        "ansi-hidden",
+        "ansi-inverse",
+        "ansi-italic",
+        "ansi-magenta",
+        "ansi-red",
+        "ansi-reset",
+        "ansi-strikethrough",
+        "ansi-underline",
+        "ansi-white",
+        "ansi-wrap",
+        "ansi-yellow"
+      ]
+    }
+  },
+  "version": "1.1.0"
+}

+ 31 - 0
node_modules/ansi-colors/types/index.d.ts

@@ -0,0 +1,31 @@
+// Imported from from DefinitelyTyped project.
+// TypeScript definitions for ansi-colors
+// Definitions by: Rogier Schouten <https://github.com/rogierschouten>
+// Integrated by: Jordan Mele <https://github.com/Silic0nS0ldier>
+
+export function bgblack(message: string): string;
+export function bgblue(message: string): string;
+export function bgcyan(message: string): string;
+export function bggreen(message: string): string;
+export function bgmagenta(message: string): string;
+export function bgred(message: string): string;
+export function bgwhite(message: string): string;
+export function bgyellow(message: string): string;
+export function black(message: string): string;
+export function blue(message: string): string;
+export function bold(message: string): string;
+export function cyan(message: string): string;
+export function dim(message: string): string;
+export function gray(message: string): string;
+export function green(message: string): string;
+export function grey(message: string): string;
+export function hidden(message: string): string;
+export function inverse(message: string): string;
+export function italic(message: string): string;
+export function magenta(message: string): string;
+export function red(message: string): string;
+export function reset(message: string): string;
+export function strikethrough(message: string): string;
+export function underline(message: string): string;
+export function white(message: string): string;
+export function yellow(message: string): string;

+ 21 - 0
node_modules/ansi-gray/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) <%= year() %>, Jon Schlinkert.
+
+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.

+ 14 - 0
node_modules/ansi-gray/index.js

@@ -0,0 +1,14 @@
+/*!
+ * ansi-gray <https://github.com/jonschlinkert/ansi-gray>
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var wrap = require('ansi-wrap');
+
+module.exports = function gray(message) {
+  return wrap(90, 39, message);
+};

+ 86 - 0
node_modules/ansi-gray/package.json

@@ -0,0 +1,86 @@
+{
+  "_from": "ansi-gray@^0.1.1",
+  "_id": "ansi-gray@0.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
+  "_location": "/ansi-gray",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ansi-gray@^0.1.1",
+    "name": "ansi-gray",
+    "escapedName": "ansi-gray",
+    "rawSpec": "^0.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^0.1.1"
+  },
+  "_requiredBy": [
+    "/fancy-log"
+  ],
+  "_resolved": "https://registry.npmmirror.com/ansi-gray/-/ansi-gray-0.1.1.tgz",
+  "_shasum": "2962cf54ec9792c48510a3deb524436861ef7251",
+  "_spec": "ansi-gray@^0.1.1",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/fancy-log",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/ansi-gray/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "ansi-wrap": "0.1.0"
+  },
+  "deprecated": false,
+  "description": "The color gray, in ansi.",
+  "devDependencies": {
+    "mocha": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/ansi-gray",
+  "keywords": [
+    "gray",
+    "256",
+    "ansi",
+    "cli",
+    "color",
+    "colors",
+    "colour",
+    "command",
+    "command-line",
+    "console",
+    "format",
+    "formatting",
+    "iterm",
+    "log",
+    "logging",
+    "rgb",
+    "shell",
+    "string",
+    "style",
+    "styles",
+    "styling",
+    "terminal",
+    "text",
+    "tty",
+    "xterm"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "ansi-gray",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/ansi-gray.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "0.1.1"
+}

+ 74 - 0
node_modules/ansi-gray/readme.md

@@ -0,0 +1,74 @@
+# ansi-gray [![NPM version](https://badge.fury.io/js/ansi-gray.svg)](http://badge.fury.io/js/ansi-gray)
+
+> The color gray, in ansi.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-gray --save
+```
+
+## Usage
+
+```js
+var gray = require('ansi-gray');
+```
+
+## Related projects
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-gray/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._

+ 4 - 0
node_modules/ansi-regex/index.js

@@ -0,0 +1,4 @@
+'use strict';
+module.exports = function () {
+	return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
+};

+ 21 - 0
node_modules/ansi-regex/license

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.

+ 108 - 0
node_modules/ansi-regex/package.json

@@ -0,0 +1,108 @@
+{
+  "_from": "ansi-regex@^2.0.0",
+  "_id": "ansi-regex@2.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+  "_location": "/ansi-regex",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ansi-regex@^2.0.0",
+    "name": "ansi-regex",
+    "escapedName": "ansi-regex",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/strip-ansi"
+  ],
+  "_resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz",
+  "_shasum": "c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+  "_spec": "ansi-regex@^2.0.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/strip-ansi",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-regex/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Regular expression for matching ANSI escape codes",
+  "devDependencies": {
+    "ava": "0.17.0",
+    "xo": "0.16.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/chalk/ansi-regex#readme",
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "command-line",
+    "text",
+    "regex",
+    "regexp",
+    "re",
+    "match",
+    "test",
+    "find",
+    "pattern"
+  ],
+  "license": "MIT",
+  "maintainers": [
+    {
+      "name": "Sindre Sorhus",
+      "email": "sindresorhus@gmail.com",
+      "url": "sindresorhus.com"
+    },
+    {
+      "name": "Joshua Appelman",
+      "email": "jappelman@xebia.com",
+      "url": "jbnicolai.com"
+    },
+    {
+      "name": "JD Ballard",
+      "email": "i.am.qix@gmail.com",
+      "url": "github.com/qix-"
+    }
+  ],
+  "name": "ansi-regex",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-regex.git"
+  },
+  "scripts": {
+    "test": "xo && ava --verbose",
+    "view-supported": "node fixtures/view-codes.js"
+  },
+  "version": "2.1.1",
+  "xo": {
+    "rules": {
+      "guard-for-in": 0,
+      "no-loop-func": 0
+    }
+  }
+}

File diff suppressed because it is too large
+ 39 - 0
node_modules/ansi-regex/readme.md


+ 165 - 0
node_modules/ansi-styles/index.js

@@ -0,0 +1,165 @@
+'use strict';
+const colorConvert = require('color-convert');
+
+const wrapAnsi16 = (fn, offset) => function () {
+	const code = fn.apply(colorConvert, arguments);
+	return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => function () {
+	const code = fn.apply(colorConvert, arguments);
+	return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => function () {
+	const rgb = fn.apply(colorConvert, arguments);
+	return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+function assembleStyles() {
+	const codes = new Map();
+	const styles = {
+		modifier: {
+			reset: [0, 0],
+			// 21 isn't widely supported and 22 does the same thing
+			bold: [1, 22],
+			dim: [2, 22],
+			italic: [3, 23],
+			underline: [4, 24],
+			inverse: [7, 27],
+			hidden: [8, 28],
+			strikethrough: [9, 29]
+		},
+		color: {
+			black: [30, 39],
+			red: [31, 39],
+			green: [32, 39],
+			yellow: [33, 39],
+			blue: [34, 39],
+			magenta: [35, 39],
+			cyan: [36, 39],
+			white: [37, 39],
+			gray: [90, 39],
+
+			// Bright color
+			redBright: [91, 39],
+			greenBright: [92, 39],
+			yellowBright: [93, 39],
+			blueBright: [94, 39],
+			magentaBright: [95, 39],
+			cyanBright: [96, 39],
+			whiteBright: [97, 39]
+		},
+		bgColor: {
+			bgBlack: [40, 49],
+			bgRed: [41, 49],
+			bgGreen: [42, 49],
+			bgYellow: [43, 49],
+			bgBlue: [44, 49],
+			bgMagenta: [45, 49],
+			bgCyan: [46, 49],
+			bgWhite: [47, 49],
+
+			// Bright color
+			bgBlackBright: [100, 49],
+			bgRedBright: [101, 49],
+			bgGreenBright: [102, 49],
+			bgYellowBright: [103, 49],
+			bgBlueBright: [104, 49],
+			bgMagentaBright: [105, 49],
+			bgCyanBright: [106, 49],
+			bgWhiteBright: [107, 49]
+		}
+	};
+
+	// Fix humans
+	styles.color.grey = styles.color.gray;
+
+	for (const groupName of Object.keys(styles)) {
+		const group = styles[groupName];
+
+		for (const styleName of Object.keys(group)) {
+			const style = group[styleName];
+
+			styles[styleName] = {
+				open: `\u001B[${style[0]}m`,
+				close: `\u001B[${style[1]}m`
+			};
+
+			group[styleName] = styles[styleName];
+
+			codes.set(style[0], style[1]);
+		}
+
+		Object.defineProperty(styles, groupName, {
+			value: group,
+			enumerable: false
+		});
+
+		Object.defineProperty(styles, 'codes', {
+			value: codes,
+			enumerable: false
+		});
+	}
+
+	const ansi2ansi = n => n;
+	const rgb2rgb = (r, g, b) => [r, g, b];
+
+	styles.color.close = '\u001B[39m';
+	styles.bgColor.close = '\u001B[49m';
+
+	styles.color.ansi = {
+		ansi: wrapAnsi16(ansi2ansi, 0)
+	};
+	styles.color.ansi256 = {
+		ansi256: wrapAnsi256(ansi2ansi, 0)
+	};
+	styles.color.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 0)
+	};
+
+	styles.bgColor.ansi = {
+		ansi: wrapAnsi16(ansi2ansi, 10)
+	};
+	styles.bgColor.ansi256 = {
+		ansi256: wrapAnsi256(ansi2ansi, 10)
+	};
+	styles.bgColor.ansi16m = {
+		rgb: wrapAnsi16m(rgb2rgb, 10)
+	};
+
+	for (let key of Object.keys(colorConvert)) {
+		if (typeof colorConvert[key] !== 'object') {
+			continue;
+		}
+
+		const suite = colorConvert[key];
+
+		if (key === 'ansi16') {
+			key = 'ansi';
+		}
+
+		if ('ansi16' in suite) {
+			styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+			styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+		}
+
+		if ('ansi256' in suite) {
+			styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+			styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+		}
+
+		if ('rgb' in suite) {
+			styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+			styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+		}
+	}
+
+	return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+	enumerable: true,
+	get: assembleStyles
+});

+ 9 - 0
node_modules/ansi-styles/license

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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.

+ 88 - 0
node_modules/ansi-styles/package.json

@@ -0,0 +1,88 @@
+{
+  "_from": "ansi-styles@^3.2.1",
+  "_id": "ansi-styles@3.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+  "_location": "/ansi-styles",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ansi-styles@^3.2.1",
+    "name": "ansi-styles",
+    "escapedName": "ansi-styles",
+    "rawSpec": "^3.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^3.2.1"
+  },
+  "_requiredBy": [
+    "/chalk"
+  ],
+  "_resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
+  "_shasum": "41fbb20243e50b12be0f04b8dedbf07520ce841d",
+  "_spec": "ansi-styles@^3.2.1",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/chalk",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "ava": {
+    "require": "babel-polyfill"
+  },
+  "bugs": {
+    "url": "https://github.com/chalk/ansi-styles/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "color-convert": "^1.9.0"
+  },
+  "deprecated": false,
+  "description": "ANSI escape codes for styling strings in the terminal",
+  "devDependencies": {
+    "ava": "*",
+    "babel-polyfill": "^6.23.0",
+    "svg-term-cli": "^2.1.1",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=4"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/chalk/ansi-styles#readme",
+  "keywords": [
+    "ansi",
+    "styles",
+    "color",
+    "colour",
+    "colors",
+    "terminal",
+    "console",
+    "cli",
+    "string",
+    "tty",
+    "escape",
+    "formatting",
+    "rgb",
+    "256",
+    "shell",
+    "xterm",
+    "log",
+    "logging",
+    "command-line",
+    "text"
+  ],
+  "license": "MIT",
+  "name": "ansi-styles",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/chalk/ansi-styles.git"
+  },
+  "scripts": {
+    "screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor",
+    "test": "xo && ava"
+  },
+  "version": "3.2.1"
+}

+ 147 - 0
node_modules/ansi-styles/readme.md

@@ -0,0 +1,147 @@
+# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
+
+> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+
+You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
+
+<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
+
+
+## Install
+
+```
+$ npm install ansi-styles
+```
+
+
+## Usage
+
+```js
+const style = require('ansi-styles');
+
+console.log(`${style.green.open}Hello world!${style.green.close}`);
+
+
+// Color conversion between 16/256/truecolor
+// NOTE: If conversion goes to 16 colors or 256 colors, the original color
+//       may be degraded to fit that color palette. This means terminals
+//       that do not support 16 million colors will best-match the
+//       original color.
+console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
+console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
+```
+
+## API
+
+Each style has an `open` and `close` property.
+
+
+## Styles
+
+### Modifiers
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(Not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(Not widely supported)*
+
+### Colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray` ("bright black")
+- `redBright`
+- `greenBright`
+- `yellowBright`
+- `blueBright`
+- `magentaBright`
+- `cyanBright`
+- `whiteBright`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+- `bgBlackBright`
+- `bgRedBright`
+- `bgGreenBright`
+- `bgYellowBright`
+- `bgBlueBright`
+- `bgMagentaBright`
+- `bgCyanBright`
+- `bgWhiteBright`
+
+
+## Advanced usage
+
+By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
+
+- `style.modifier`
+- `style.color`
+- `style.bgColor`
+
+###### Example
+
+```js
+console.log(style.color.green.open);
+```
+
+Raw escape codes (i.e. without the CSI escape prefix `\u001B[` and render mode postfix `m`) are available under `style.codes`, which returns a `Map` with the open codes as keys and close codes as values.
+
+###### Example
+
+```js
+console.log(style.codes.get(36));
+//=> 39
+```
+
+
+## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
+
+`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
+
+To use these, call the associated conversion function with the intended output, for example:
+
+```js
+style.color.ansi.rgb(100, 200, 15); // RGB to 16 color ansi foreground code
+style.bgColor.ansi.rgb(100, 200, 15); // RGB to 16 color ansi background code
+
+style.color.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+style.bgColor.ansi256.hsl(120, 100, 60); // HSL to 256 color ansi foreground code
+
+style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground code
+style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
+```
+
+
+## Related
+
+- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+## License
+
+MIT

+ 21 - 0
node_modules/ansi-wrap/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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.

+ 89 - 0
node_modules/ansi-wrap/README.md

@@ -0,0 +1,89 @@
+# ansi-wrap [![NPM version](https://badge.fury.io/js/ansi-wrap.svg)](http://badge.fury.io/js/ansi-wrap)
+
+> Create ansi colors by passing the open and close codes.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-wrap --save
+```
+
+## Usage
+
+```js
+var wrap = require('ansi-wrap');
+```
+
+**Example**
+
+Pass codes for [ansi magenta background](https://github.com/jonschlinkert/ansi-bgmagenta):
+
+```js
+console.log(wrap(45, 49, 'This is a message...'));
+//=> '\u001b[45mfoo\u001b[49m'
+```
+
+Which prints out...
+
+[![screen shot 2015-05-21 at 8 28 32 pm](https://cloud.githubusercontent.com/assets/383994/7761769/12488afa-fff8-11e4-9cc1-71a8a6ec14a4.png)](https://www.npmjs.com/)
+
+## Related projects
+
+This is used in these projects:
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-wrap/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._

+ 5 - 0
node_modules/ansi-wrap/index.js

@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function(a, b, msg) {
+  return '\u001b['+ a + 'm' + msg + '\u001b[' + b + 'm';
+};

+ 60 - 0
node_modules/ansi-wrap/package.json

@@ -0,0 +1,60 @@
+{
+  "_from": "ansi-wrap@^0.1.0",
+  "_id": "ansi-wrap@0.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
+  "_location": "/ansi-wrap",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "ansi-wrap@^0.1.0",
+    "name": "ansi-wrap",
+    "escapedName": "ansi-wrap",
+    "rawSpec": "^0.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.1.0"
+  },
+  "_requiredBy": [
+    "/ansi-colors",
+    "/ansi-gray"
+  ],
+  "_resolved": "https://registry.npmmirror.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+  "_shasum": "a82250ddb0015e9a27ca82e82ea603bbfa45efaf",
+  "_spec": "ansi-wrap@^0.1.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/ansi-colors",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/ansi-wrap/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Create ansi colors by passing the open and close codes.",
+  "devDependencies": {},
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/ansi-wrap",
+  "keywords": [],
+  "license": {
+    "type": "MIT",
+    "url": "https://github.com/jonschlinkert/ansi-wrap/blob/master/LICENSE"
+  },
+  "main": "index.js",
+  "name": "ansi-wrap",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/ansi-wrap.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "version": "0.1.0"
+}

+ 15 - 0
node_modules/anymatch/LICENSE

@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2014 Elan Shanker
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

+ 99 - 0
node_modules/anymatch/README.md

@@ -0,0 +1,99 @@
+anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master)
+======
+Javascript module to match a string against a regular expression, glob, string,
+or function that takes the string as an argument and returns a truthy or falsy
+value. The matcher can also be an array of any or all of these. Useful for
+allowing a very flexible user-defined config to define things like file paths.
+
+__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__
+
+[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/)
+[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/)
+
+Usage
+-----
+```sh
+npm install anymatch --save
+```
+
+#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex])
+* __matchers__: (_Array|String|RegExp|Function_)
+String to be directly matched, string with glob patterns, regular expression
+test, function that takes the testString as an argument and returns a truthy
+value if it should be matched, or an array of any number and mix of these types.
+* __testString__: (_String|Array_) The string to test against the matchers. If
+passed as an array, the first element of the array will be used as the
+`testString` for non-function matchers, while the entire array will be applied
+as the arguments for function matchers.
+* __returnIndex__: (_Boolean [optional]_) If true, return the array index of
+the first matcher that that testString matched, or -1 if no match, instead of a
+boolean result.
+* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a
+subset out of the array of provided matchers to test against. Can be useful
+with bound matcher functions (see below). When used with `returnIndex = true`
+preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e.
+includes array members up to, but not including endIndex).
+
+```js
+var anymatch = require('anymatch');
+
+var matchers = [
+	'path/to/file.js',
+	'path/anyjs/**/*.js',
+	/foo\.js$/,
+	function (string) {
+		return string.indexOf('bar') !== -1 && string.length > 10
+	}
+];
+
+anymatch(matchers, 'path/to/file.js'); // true
+anymatch(matchers, 'path/anyjs/baz.js'); // true
+anymatch(matchers, 'path/to/foo.js'); // true
+anymatch(matchers, 'path/to/bar.js'); // true
+anymatch(matchers, 'bar.js'); // false
+
+// returnIndex = true
+anymatch(matchers, 'foo.js', true); // 2
+anymatch(matchers, 'path/anyjs/foo.js', true); // 1
+
+// skip matchers
+anymatch(matchers, 'path/to/file.js', false, 1); // false
+anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2
+anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1
+
+// using globs to match directories and their children
+anymatch('node_modules', 'node_modules'); // true
+anymatch('node_modules', 'node_modules/somelib/index.js'); // false
+anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true
+anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false
+anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true
+```
+
+#### anymatch (matchers)
+You can also pass in only your matcher(s) to get a curried function that has
+already been bound to the provided matching criteria. This can be used as an
+`Array.prototype.filter` callback.
+
+```js
+var matcher = anymatch(matchers);
+
+matcher('path/to/file.js'); // true
+matcher('path/anyjs/baz.js', true); // 1
+matcher('path/anyjs/baz.js', true, 2); // -1
+
+['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
+```
+
+Change Log
+----------
+[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)
+
+NOTE: As of v2.0.0, [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).
+
+NOTE: As of v1.2.0, anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)
+for glob pattern matching. Issues with glob pattern matching should be
+reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).
+
+License
+-------
+[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)

+ 67 - 0
node_modules/anymatch/index.js

@@ -0,0 +1,67 @@
+'use strict';
+
+var micromatch = require('micromatch');
+var normalize = require('normalize-path');
+var path = require('path'); // required for tests.
+var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); };
+
+var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) {
+  criteria = arrify(criteria);
+  value = arrify(value);
+  if (arguments.length === 1) {
+    return anymatch.bind(null, criteria.map(function(criterion) {
+      return typeof criterion === 'string' && criterion[0] !== '!' ?
+        micromatch.matcher(criterion) : criterion;
+    }));
+  }
+  startIndex = startIndex || 0;
+  var string = value[0];
+  var altString, altValue;
+  var matched = false;
+  var matchIndex = -1;
+  function testCriteria(criterion, index) {
+    var result;
+    switch (Object.prototype.toString.call(criterion)) {
+    case '[object String]':
+      result = string === criterion || altString && altString === criterion;
+      result = result || micromatch.isMatch(string, criterion);
+      break;
+    case '[object RegExp]':
+      result = criterion.test(string) || altString && criterion.test(altString);
+      break;
+    case '[object Function]':
+      result = criterion.apply(null, value);
+      result = result || altValue && criterion.apply(null, altValue);
+      break;
+    default:
+      result = false;
+    }
+    if (result) {
+      matchIndex = index + startIndex;
+    }
+    return result;
+  }
+  var crit = criteria;
+  var negGlobs = crit.reduce(function(arr, criterion, index) {
+    if (typeof criterion === 'string' && criterion[0] === '!') {
+      if (crit === criteria) {
+        // make a copy before modifying
+        crit = crit.slice();
+      }
+      crit[index] = null;
+      arr.push(criterion.substr(1));
+    }
+    return arr;
+  }, []);
+  if (!negGlobs.length || !micromatch.any(string, negGlobs)) {
+    if (path.sep === '\\' && typeof string === 'string') {
+      altString = normalize(string);
+      altString = altString === string ? null : altString;
+      if (altString) altValue = [altString].concat(value.slice(1));
+    }
+    matched = crit.slice(startIndex, endIndex).some(testCriteria);
+  }
+  return returnIndex === true ? matchIndex : matched;
+};
+
+module.exports = anymatch;

+ 21 - 0
node_modules/anymatch/node_modules/normalize-path/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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.

File diff suppressed because it is too large
+ 92 - 0
node_modules/anymatch/node_modules/normalize-path/README.md


+ 19 - 0
node_modules/anymatch/node_modules/normalize-path/index.js

@@ -0,0 +1,19 @@
+/*!
+ * normalize-path <https://github.com/jonschlinkert/normalize-path>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var removeTrailingSeparator = require('remove-trailing-separator');
+
+module.exports = function normalizePath(str, stripTrailing) {
+  if (typeof str !== 'string') {
+    throw new TypeError('expected a string');
+  }
+  str = str.replace(/[\\\/]+/g, '/');
+  if (stripTrailing !== false) {
+    str = removeTrailingSeparator(str);
+  }
+  return str;
+};

+ 117 - 0
node_modules/anymatch/node_modules/normalize-path/package.json

@@ -0,0 +1,117 @@
+{
+  "_from": "normalize-path@^2.1.1",
+  "_id": "normalize-path@2.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+  "_location": "/anymatch/normalize-path",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "normalize-path@^2.1.1",
+    "name": "normalize-path",
+    "escapedName": "normalize-path",
+    "rawSpec": "^2.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^2.1.1"
+  },
+  "_requiredBy": [
+    "/anymatch"
+  ],
+  "_resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz",
+  "_shasum": "1ab28b556e198363a8c1a6f7e6fa20137fe6aed9",
+  "_spec": "normalize-path@^2.1.1",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/anymatch",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/normalize-path/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com",
+      "url": "https://twitter.com/BlaineBublitz"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "email": "jon.schlinkert@sellside.com",
+      "url": "http://twitter.com/jonschlinkert"
+    }
+  ],
+  "dependencies": {
+    "remove-trailing-separator": "^1.0.1"
+  },
+  "deprecated": false,
+  "description": "Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled.",
+  "devDependencies": {
+    "benchmarked": "^0.1.1",
+    "gulp-format-md": "^0.1.11",
+    "minimist": "^1.2.0",
+    "mocha": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/normalize-path",
+  "keywords": [
+    "backslash",
+    "file",
+    "filepath",
+    "fix",
+    "forward",
+    "fp",
+    "fs",
+    "normalize",
+    "path",
+    "slash",
+    "slashes",
+    "trailing",
+    "unix",
+    "urix"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "normalize-path",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/normalize-path.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "related": {
+      "list": [
+        "contains-path",
+        "ends-with",
+        "is-absolute",
+        "is-relative",
+        "parse-filepath",
+        "path-ends-with",
+        "path-segments",
+        "rewrite-ext",
+        "unixify"
+      ],
+      "description": "Other useful libraries for working with paths in node.js:"
+    },
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "2.1.1"
+}

+ 75 - 0
node_modules/anymatch/package.json

@@ -0,0 +1,75 @@
+{
+  "_from": "anymatch@^2.0.0",
+  "_id": "anymatch@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+  "_location": "/anymatch",
+  "_phantomChildren": {
+    "remove-trailing-separator": "1.1.0"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "anymatch@^2.0.0",
+    "name": "anymatch",
+    "escapedName": "anymatch",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/chokidar",
+    "/glob-watcher"
+  ],
+  "_resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz",
+  "_shasum": "bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb",
+  "_spec": "anymatch@^2.0.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/glob-watcher",
+  "author": {
+    "name": "Elan Shanker",
+    "url": "http://github.com/es128"
+  },
+  "bugs": {
+    "url": "https://github.com/micromatch/anymatch/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "micromatch": "^3.1.4",
+    "normalize-path": "^2.1.1"
+  },
+  "deprecated": false,
+  "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions",
+  "devDependencies": {
+    "coveralls": "^2.7.0",
+    "istanbul": "^0.4.5",
+    "mocha": "^3.0.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/micromatch/anymatch",
+  "keywords": [
+    "match",
+    "any",
+    "string",
+    "file",
+    "fs",
+    "list",
+    "glob",
+    "regex",
+    "regexp",
+    "regular",
+    "expression",
+    "function"
+  ],
+  "license": "ISC",
+  "name": "anymatch",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/micromatch/anymatch.git"
+  },
+  "scripts": {
+    "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls"
+  },
+  "version": "2.0.0"
+}

+ 21 - 0
node_modules/append-buffer/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017, Brian Woodward.
+
+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.

File diff suppressed because it is too large
+ 95 - 0
node_modules/append-buffer/README.md


+ 41 - 0
node_modules/append-buffer/index.js

@@ -0,0 +1,41 @@
+'use strict';
+
+var os = require('os');
+var equals = require('buffer-equal');
+var cr = new Buffer('\r\n');
+var nl = new Buffer('\n');
+
+/**
+ * Append a buffer to another buffer ensuring to preserve line ending characters.
+ *
+ * ```js
+ * console.log([appendBuffer(new Buffer('abc\r\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\r\ndef\r\n' ]
+ *
+ * console.log([appendBuffer(new Buffer('abc\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef\n' ]
+ *
+ * // uses os.EOL when a line ending is not found
+ * console.log([appendBuffer(new Buffer('abc'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef' ]
+ * * ```
+ * @param  {Buffer} `buf` Buffer that will be used to check for an existing line ending. The suffix is appended to this.
+ * @param  {Buffer} `suffix` Buffer that will be appended to the buf.
+ * @return {Buffer} Final Buffer
+ * @api public
+ */
+
+module.exports = function appendBuffer(buf, suffix) {
+  if (!suffix || !suffix.length) {
+    return buf;
+  }
+  var eol;
+  if (equals(buf.slice(-2), cr)) {
+    eol = cr;
+  } else if (equals(buf.slice(-1), nl)) {
+    eol = nl;
+  } else {
+    return Buffer.concat([buf, new Buffer(os.EOL), new Buffer(suffix)]);
+  }
+  return Buffer.concat([buf, new Buffer(suffix), eol]);
+};

+ 84 - 0
node_modules/append-buffer/package.json

@@ -0,0 +1,84 @@
+{
+  "_from": "append-buffer@^1.0.2",
+  "_id": "append-buffer@1.0.2",
+  "_inBundle": false,
+  "_integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==",
+  "_location": "/append-buffer",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "append-buffer@^1.0.2",
+    "name": "append-buffer",
+    "escapedName": "append-buffer",
+    "rawSpec": "^1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.2"
+  },
+  "_requiredBy": [
+    "/vinyl-sourcemap"
+  ],
+  "_resolved": "https://registry.npmmirror.com/append-buffer/-/append-buffer-1.0.2.tgz",
+  "_shasum": "d8220cf466081525efea50614f3de6514dfa58f1",
+  "_spec": "append-buffer@^1.0.2",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/vinyl-sourcemap",
+  "author": {
+    "name": "Brian Woodward",
+    "url": "https://doowb.com"
+  },
+  "bugs": {
+    "url": "https://github.com/doowb/append-buffer/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "buffer-equal": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "Append a buffer to another buffer ensuring to preserve line ending characters.",
+  "devDependencies": {
+    "gulp-format-md": "^1.0.0",
+    "mocha": "^3.5.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/doowb/append-buffer",
+  "keywords": [
+    "append",
+    "append-buffer",
+    "concat",
+    "concat-buffer",
+    "eol",
+    "join",
+    "join-buffer",
+    "normalize",
+    "buffer"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "append-buffer",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/doowb/append-buffer.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "1.0.2"
+}

+ 4 - 0
node_modules/archy/.travis.yml

@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+  - 0.6
+  - 0.8

+ 18 - 0
node_modules/archy/LICENSE

@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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.

+ 24 - 0
node_modules/archy/examples/beep.js

@@ -0,0 +1,24 @@
+var archy = require('../');
+var s = archy({
+  label : 'beep',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny' ]
+            },
+            'human'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);

+ 25 - 0
node_modules/archy/examples/multi_line.js

@@ -0,0 +1,25 @@
+var archy = require('../');
+
+var s = archy({
+  label : 'beep\none\ntwo',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O\nwheee',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny\nmeat' ]
+            },
+            'creature'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);

+ 35 - 0
node_modules/archy/index.js

@@ -0,0 +1,35 @@
+module.exports = function archy (obj, prefix, opts) {
+    if (prefix === undefined) prefix = '';
+    if (!opts) opts = {};
+    var chr = function (s) {
+        var chars = {
+            '│' : '|',
+            '└' : '`',
+            '├' : '+',
+            '─' : '-',
+            '┬' : '-'
+        };
+        return opts.unicode === false ? chars[s] : s;
+    };
+    
+    if (typeof obj === 'string') obj = { label : obj };
+    
+    var nodes = obj.nodes || [];
+    var lines = (obj.label || '').split('\n');
+    var splitter = '\n' + prefix + (nodes.length ? chr('│') : ' ') + ' ';
+    
+    return prefix
+        + lines.join(splitter) + '\n'
+        + nodes.map(function (node, ix) {
+            var last = ix === nodes.length - 1;
+            var more = node.nodes && node.nodes.length;
+            var prefix_ = prefix + (last ? ' ' : chr('│')) + ' ';
+            
+            return prefix
+                + (last ? chr('└') : chr('├')) + chr('─')
+                + (more ? chr('┬') : chr('─')) + ' '
+                + archy(node, prefix_, opts).slice(prefix.length + 2)
+            ;
+        }).join('')
+    ;
+};

+ 83 - 0
node_modules/archy/package.json

@@ -0,0 +1,83 @@
+{
+  "_from": "archy@^1.0.0",
+  "_id": "archy@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
+  "_location": "/archy",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "archy@^1.0.0",
+    "name": "archy",
+    "escapedName": "archy",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/gulp/gulp-cli"
+  ],
+  "_resolved": "https://registry.npmmirror.com/archy/-/archy-1.0.0.tgz",
+  "_shasum": "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40",
+  "_spec": "archy@^1.0.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/gulp/node_modules/gulp-cli",
+  "author": {
+    "name": "James Halliday",
+    "email": "mail@substack.net",
+    "url": "http://substack.net"
+  },
+  "bugs": {
+    "url": "https://github.com/substack/node-archy/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "render nested hierarchies `npm ls` style with unicode pipes",
+  "devDependencies": {
+    "tap": "~0.3.3",
+    "tape": "~0.1.1"
+  },
+  "homepage": "https://github.com/substack/node-archy#readme",
+  "keywords": [
+    "hierarchy",
+    "npm ls",
+    "unicode",
+    "pretty",
+    "print"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "archy",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/substack/node-archy.git"
+  },
+  "scripts": {
+    "test": "tap test"
+  },
+  "testling": {
+    "files": "test/*.js",
+    "browsers": {
+      "iexplore": [
+        "6.0",
+        "7.0",
+        "8.0",
+        "9.0"
+      ],
+      "chrome": [
+        "20.0"
+      ],
+      "firefox": [
+        "10.0",
+        "15.0"
+      ],
+      "safari": [
+        "5.1"
+      ],
+      "opera": [
+        "12.0"
+      ]
+    }
+  },
+  "version": "1.0.0"
+}

+ 88 - 0
node_modules/archy/readme.markdown

@@ -0,0 +1,88 @@
+# archy
+
+Render nested hierarchies `npm ls` style with unicode pipes.
+
+[![browser support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)
+
+[![build status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)
+
+# example
+
+``` js
+var archy = require('archy');
+var s = archy({
+  label : 'beep',
+  nodes : [
+    'ity',
+    {
+      label : 'boop',
+      nodes : [
+        {
+          label : 'o_O',
+          nodes : [
+            {
+              label : 'oh',
+              nodes : [ 'hello', 'puny' ]
+            },
+            'human'
+          ]
+        },
+        'party\ntime!'
+      ]
+    }
+  ]
+});
+console.log(s);
+```
+
+output
+
+```
+beep
+├── ity
+└─┬ boop
+  ├─┬ o_O
+  │ ├─┬ oh
+  │ │ ├── hello
+  │ │ └── puny
+  │ └── human
+  └── party
+      time!
+```
+
+# methods
+
+var archy = require('archy')
+
+## archy(obj, prefix='', opts={})
+
+Return a string representation of `obj` with unicode pipe characters like how
+`npm ls` looks.
+
+`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields.
+`'label'` is a string of text to display at a node level and `'nodes'` is an
+array of the descendents of the current node.
+
+If a node is a string, that string will be used as the `'label'` and an empty
+array of `'nodes'` will be used.
+
+`prefix` gets prepended to all the lines and is used by the algorithm to
+recursively update.
+
+If `'label'` has newlines they will be indented at the present indentation level
+with the current prefix.
+
+To disable unicode results in favor of all-ansi output set `opts.unicode` to
+`false`.
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install archy
+```
+
+# license
+
+MIT

+ 40 - 0
node_modules/archy/test/beep.js

@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+    var s = archy({
+      label : 'beep',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny' ]
+                },
+                'human'
+              ]
+            },
+            'party!'
+          ]
+        }
+      ]
+    });
+    t.equal(s, [
+        'beep',
+        '├── ity',
+        '└─┬ boop',
+        '  ├─┬ o_O',
+        '  │ ├─┬ oh',
+        '  │ │ ├── hello',
+        '  │ │ └── puny',
+        '  │ └── human',
+        '  └── party!',
+        ''
+    ].join('\n'));
+    t.end();
+});

+ 45 - 0
node_modules/archy/test/multi_line.js

@@ -0,0 +1,45 @@
+var test = require('tape');
+var archy = require('../');
+
+test('multi-line', function (t) {
+    var s = archy({
+      label : 'beep\none\ntwo',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O\nwheee',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny\nmeat' ]
+                },
+                'creature'
+              ]
+            },
+            'party\ntime!'
+          ]
+        }
+      ]
+    });
+    t.equal(s, [
+        'beep',
+        '│ one',
+        '│ two',
+        '├── ity',
+        '└─┬ boop',
+        '  ├─┬ o_O',
+        '  │ │ wheee',
+        '  │ ├─┬ oh',
+        '  │ │ ├── hello',
+        '  │ │ └── puny',
+        '  │ │     meat',
+        '  │ └── creature',
+        '  └── party',
+        '      time!',
+        ''
+    ].join('\n'));
+    t.end();
+});

+ 40 - 0
node_modules/archy/test/non_unicode.js

@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+    var s = archy({
+      label : 'beep',
+      nodes : [
+        'ity',
+        {
+          label : 'boop',
+          nodes : [
+            {
+              label : 'o_O',
+              nodes : [
+                {
+                  label : 'oh',
+                  nodes : [ 'hello', 'puny' ]
+                },
+                'human'
+              ]
+            },
+            'party!'
+          ]
+        }
+      ]
+    }, '', { unicode : false });
+    t.equal(s, [
+        'beep',
+        '+-- ity',
+        '`-- boop',
+        '  +-- o_O',
+        '  | +-- oh',
+        '  | | +-- hello',
+        '  | | `-- puny',
+        '  | `-- human',
+        '  `-- party!',
+        ''
+    ].join('\n'));
+    t.end();
+});

+ 21 - 0
node_modules/arr-diff/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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 - 0
node_modules/arr-diff/README.md


Some files were not shown because too many files changed in this diff