Bladeren bron

首次提交

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

+ 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"
+     }
+    ]
+}

+ 5 - 0
.idea/.gitignore

@@ -0,0 +1,5 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/

+ 6 - 0
.idea/vcs.xml

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

+ 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


+ 0 - 0
changelog.md


BIN
common/assets/image/comicon.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/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


BIN
common/assets/image/quezhen.png


BIN
common/assets/image/renyuan.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
+ 1693 - 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
+            })
+        }
+    }
+
+}

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


+ 86 - 0
components/zaiti-tree4/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>

+ 49 - 0
js_sdk/api_activity.js

@@ -0,0 +1,49 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+import qs from 'qs';
+
+const baseUri = ''
+const parkActivity = '/wx/parkActivity'
+
+export function list(data) {
+    return $http.post(
+        baseUri + parkActivity + '/list',
+        data, {}
+    )
+}
+
+export function getActivityById(id, userId) {
+    return $http.post(
+        baseUri + parkActivity + '/getActivityById?id=' + id + '&userId=' + userId, {}, {}
+
+    )
+}
+export function getActivityById1(id, userId) {
+    return $http.get(
+        baseUri + parkActivity + '/getActivityById?id=' + id + '&userId=' + userId, {}, {}
+
+    )
+}
+export function clickCollect(data) {
+    return $http.post(
+        baseUri + parkActivity + '/clickCollect',
+        data, {}
+    )
+}
+
+export function insertRegisSignInfo(data) {
+    return $http.post(
+        baseUri + parkActivity + '/insertRegisSignInfo',
+        data, {}
+    )
+}
+
+export function listRegisSignInfo(data) {
+    return $http.post(
+        baseUri + parkActivity + '/listRegisSignInfo',
+        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
+}

+ 642 - 0
js_sdk/http.js

@@ -0,0 +1,642 @@
+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 bindWxOpenId(data) {
+
+    return $http.post(
+        '/wx/frameUser/bindWxOpenId',
+        data, {}
+    )
+}
+export function getMeetingAppointListAppCount(data) {
+
+    return $http.post(
+        '/wx/meetingAppoint/getMeetingAppointListAppCount',
+        { states: '1,3' }, {}
+    )
+}
+export function getReadSize(data) {
+
+    return $http.post(
+        '/wx/workPaneController/getReadSize',
+        data, {}
+    )
+}
+export function getVenueAppointListAppCount(data) {
+
+    return $http.post(
+        '/wx/WxParkVenueAppointController/getVenueAppointListAppCount',
+        { states: '1,3' }, {}
+    )
+}
+export function editWanderAboutStatus(data) {
+
+    return $http.post(
+        '/wx/repair/editWanderAboutStatus',
+        data, {}
+    )
+}
+export function unbindWxId(data) {
+
+    return $http.post(
+        '/wx/frameUser/unbindWxOpenId',
+        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 getRoomNameByCompanyId(data) {
+    return $http.post(
+        '/wx/ParkContractManageController/getRoomNameByCompanyId', 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 getTreeData4(data) {
+    return $http.post(
+        '/wx/ParkInfoController/getTreeData4',
+        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/serviceList',
+        data, {}
+    )
+}
+export function repairList2(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 getWxUserById(userId) {
+    return $http.get('/wx/frameUser/getWxUserById?userId=' + userId, {})
+
+}
+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, {}, {})
+}
+export function getActivityById1(id, signInCode, userId) {
+    // /wx/parkActivity/getActivityById?id=1183797041860444160&userId=SCNjNSP7LJ9aarv1cNw
+
+    return $http.get(
+        '/wx/parkActivity/getActivityById?id=' + id + '&userId=' + userId, {}, {})
+}
+// /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, {})
+}
+export function findListBySaleManagementId(e) {
+
+    return $http.post(
+        '/wx/SaleController/findListBySaleManagementId', e, {})
+}
+export function findSuccessListBySaleManagementId(e) {
+
+    return $http.post(
+        '/wx/SaleController/findSuccessListBySaleManagementId', 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);
+        }
+    }
+}

+ 129 - 0
js_sdk/request/requestConfig.js

@@ -0,0 +1,129 @@
+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) {
+    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/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" : "wx6271d6fc90b56ff6",
+        "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.

+ 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


+ 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"
+}

+ 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);

+ 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();
+});

+ 47 - 0
node_modules/arr-diff/index.js

@@ -0,0 +1,47 @@
+/*!
+ * arr-diff <https://github.com/jonschlinkert/arr-diff>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function diff(arr/*, arrays*/) {
+  var len = arguments.length;
+  var idx = 0;
+  while (++idx < len) {
+    arr = diffArray(arr, arguments[idx]);
+  }
+  return arr;
+};
+
+function diffArray(one, two) {
+  if (!Array.isArray(two)) {
+    return one.slice();
+  }
+
+  var tlen = two.length
+  var olen = one.length;
+  var idx = -1;
+  var arr = [];
+
+  while (++idx < olen) {
+    var ele = one[idx];
+
+    var hasEle = false;
+    for (var i = 0; i < tlen; i++) {
+      var val = two[i];
+
+      if (ele === val) {
+        hasEle = true;
+        break;
+      }
+    }
+
+    if (hasEle === false) {
+      arr.push(ele);
+    }
+  }
+  return arr;
+}

+ 110 - 0
node_modules/arr-diff/package.json

@@ -0,0 +1,110 @@
+{
+  "_from": "arr-diff@^4.0.0",
+  "_id": "arr-diff@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+  "_location": "/arr-diff",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "arr-diff@^4.0.0",
+    "name": "arr-diff",
+    "escapedName": "arr-diff",
+    "rawSpec": "^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.0"
+  },
+  "_requiredBy": [
+    "/micromatch",
+    "/nanomatch",
+    "/plugin-error"
+  ],
+  "_resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz",
+  "_shasum": "d6461074febfec71e7e15235761a329a5dc7c520",
+  "_spec": "arr-diff@^4.0.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/micromatch",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/arr-diff/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Jon Schlinkert",
+      "email": "jon.schlinkert@sellside.com",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "name": "Paul Miller",
+      "email": "paul+gh@paulmillr.com",
+      "url": "paulmillr.com"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.",
+  "devDependencies": {
+    "ansi-bold": "^0.1.1",
+    "arr-flatten": "^1.0.1",
+    "array-differ": "^1.0.0",
+    "benchmarked": "^0.2.4",
+    "gulp-format-md": "^0.1.9",
+    "minimist": "^1.2.0",
+    "mocha": "^2.4.5"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/arr-diff",
+  "keywords": [
+    "arr",
+    "array",
+    "array differ",
+    "array-differ",
+    "diff",
+    "differ",
+    "difference"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "arr-diff",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/arr-diff.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "arr-flatten",
+        "array-filter",
+        "array-intersection"
+      ]
+    },
+    "reflinks": [
+      "array-differ",
+      "verb"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "4.0.0"
+}

+ 21 - 0
node_modules/arr-filter/LICENSE

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


+ 33 - 0
node_modules/arr-filter/index.js

@@ -0,0 +1,33 @@
+/*!
+ * arr-filter <https://github.com/jonschlinkert/arr-filter>
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var makeIterator = require('make-iterator');
+
+module.exports = function filter(arr, fn, thisArg) {
+  if (arr == null) {
+    return [];
+  }
+
+  if (typeof fn !== 'function') {
+    throw new TypeError('expected callback to be a function');
+  }
+
+  var iterator = makeIterator(fn, thisArg);
+  var len = arr.length;
+  var res = arr.slice();
+  var i = -1;
+
+  while (len--) {
+    if (!iterator(arr[len], i++)) {
+      res.splice(len, 1);
+    }
+  }
+  return res;
+};
+

File diff suppressed because it is too large
+ 86 - 0
node_modules/arr-flatten/README.md


+ 22 - 0
node_modules/arr-flatten/index.js

@@ -0,0 +1,22 @@
+/*!
+ * arr-flatten <https://github.com/jonschlinkert/arr-flatten>
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function (arr) {
+  return flat(arr, []);
+};
+
+function flat(arr, res) {
+  var i = 0, cur;
+  var len = arr.length;
+  for (; i < len; i++) {
+    cur = arr[i];
+    Array.isArray(cur) ? flat(cur, res) : res.push(cur);
+  }
+  return res;
+}

+ 115 - 0
node_modules/arr-flatten/package.json

@@ -0,0 +1,115 @@
+{
+  "_from": "arr-flatten@^1.1.0",
+  "_id": "arr-flatten@1.1.0",
+  "_inBundle": false,
+  "_integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+  "_location": "/arr-flatten",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "arr-flatten@^1.1.0",
+    "name": "arr-flatten",
+    "escapedName": "arr-flatten",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/bach",
+    "/braces",
+    "/undertaker"
+  ],
+  "_resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz",
+  "_shasum": "36048bbff4e7b47e136644316c99669ea5ae91f1",
+  "_spec": "arr-flatten@^1.1.0",
+  "_where": "/Users/chenpengming/代码/微纳园管理端/node_modules/braces",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/arr-flatten/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "name": "Luke Edwards",
+      "url": "https://lukeed.com"
+    }
+  ],
+  "deprecated": false,
+  "description": "Recursively flatten an array or arrays.",
+  "devDependencies": {
+    "ansi-bold": "^0.1.1",
+    "array-flatten": "^2.1.1",
+    "array-slice": "^1.0.0",
+    "benchmarked": "^1.0.0",
+    "compute-flatten": "^1.0.0",
+    "flatit": "^1.1.1",
+    "flatten": "^1.0.2",
+    "flatten-array": "^1.0.0",
+    "glob": "^7.1.1",
+    "gulp-format-md": "^0.1.12",
+    "just-flatten-it": "^1.1.23",
+    "lodash.flattendeep": "^4.4.0",
+    "m_flattened": "^1.0.1",
+    "mocha": "^3.2.0",
+    "utils-flatten": "^1.0.0",
+    "write": "^0.3.3"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/arr-flatten",
+  "keywords": [
+    "arr",
+    "array",
+    "elements",
+    "flat",
+    "flatten",
+    "nested",
+    "recurse",
+    "recursive",
+    "recursively"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "arr-flatten",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/arr-flatten.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "arr-filter",
+        "arr-union",
+        "array-each",
+        "array-unique"
+      ]
+    },
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "1.1.0"
+}

+ 21 - 0
node_modules/arr-map/LICENSE

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 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
+ 78 - 0
node_modules/arr-map/README.md


+ 23 - 0
node_modules/arr-map/index.js

@@ -0,0 +1,23 @@
+/*!
+ * arr-map <https://github.com/jonschlinkert/arr-map>
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var iterator = require('make-iterator');
+
+module.exports = function map(arr, fn, thisArg) {
+  if (arr == null) return [];
+  fn = iterator(fn, thisArg);
+
+  var len = arr.length;
+  var res = new Array(len);
+
+  for (var i = 0; i < len; i++) {
+    res[i] = fn(arr[i], i, arr);
+  }
+  return res;
+};

+ 0 - 0
node_modules/arr-map/package.json


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