Selaa lähdekoodia

蒲公英管理端提交代码

陈鹏铭 2 vuotta sitten
vanhempi
commit
a16f4327a0
100 muutettua tiedostoa jossa 24567 lisäystä ja 0 poistoa
  1. 16 0
      .hbuilderx/launch.json
  2. 17 0
      App.vue
  3. 0 0
      LICENSE
  4. 129 0
      README.md
  5. 0 0
      changelog.md
  6. BIN
      common/assets/image/comicon.png
  7. BIN
      common/assets/image/fangke.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/houseUnSel.png
  14. BIN
      common/assets/image/logo.png
  15. BIN
      common/assets/image/logobig.jpg
  16. 39 0
      common/assets/image/mineBg.svg
  17. BIN
      common/assets/image/mineSel.png
  18. BIN
      common/assets/image/mineUnSel.png
  19. 12 0
      common/assets/image/pswicon.svg
  20. BIN
      common/assets/image/qiye.png
  21. BIN
      common/assets/image/quezhen.png
  22. BIN
      common/assets/image/renyuan.png
  23. BIN
      common/assets/image/right.png
  24. BIN
      common/assets/image/suo.png
  25. BIN
      common/assets/image/yichang.png
  26. 9 0
      common/assets/image/yzmicon.svg
  27. 3 0
      common/assets/js/vconsole.js
  28. 16 0
      common/style/common.scss
  29. 622 0
      common/style/index.scss
  30. 215 0
      common/style/picker.css
  31. 324 0
      common/style/reset.scss
  32. 1688 0
      common/uni.css
  33. 37 0
      config.js
  34. 20 0
      index.html
  35. 150 0
      js_sdk/auth.js
  36. 185 0
      js_sdk/common.js
  37. 173 0
      js_sdk/dateFormat.js
  38. 500 0
      js_sdk/http.js
  39. 274 0
      js_sdk/request/request.js
  40. 118 0
      js_sdk/request/request.md
  41. 129 0
      js_sdk/request/requestConfig.js
  42. 72 0
      main.js
  43. 195 0
      manifest.json
  44. 2905 0
      package-lock.json
  45. 25 0
      package.json
  46. 1416 0
      pages.json
  47. 188 0
      pages/index/index.vue
  48. 252 0
      pages/login/login.vue
  49. 179 0
      pages/mine/mine.vue
  50. 43 0
      pages/subPackages/activity/api_activity.js
  51. 233 0
      pages/subPackages/activity/apply-popup.vue
  52. 13 0
      pages/subPackages/activity/code.vue
  53. 397 0
      pages/subPackages/activity/index.vue
  54. 1 0
      pages/subPackages/activity/pdf.svg
  55. 96 0
      pages/subPackages/activity/wxMap.vue
  56. 1175 0
      pages/subPackages/addCompany/addCompany.vue
  57. 161 0
      pages/subPackages/addCompany/isSelectedTags.vue
  58. 530 0
      pages/subPackages/addCompany/momo-multipleSelect.vue
  59. 8 0
      pages/subPackages/addcompanyHouse/addcompanyHouse.vue
  60. 1058 0
      pages/subPackages/addintention/addintention.vue
  61. 82 0
      pages/subPackages/addintention/chooseTime.vue
  62. 40 0
      pages/subPackages/buildmap/formatWeeks.js
  63. 318 0
      pages/subPackages/buildmap/index.vue
  64. BIN
      pages/subPackages/buildmap/markerone.png
  65. BIN
      pages/subPackages/buildmap/top1.png
  66. BIN
      pages/subPackages/buildmap/top2.png
  67. BIN
      pages/subPackages/buildmap/top3.png
  68. BIN
      pages/subPackages/buildmap/topfirst3.png
  69. 143 0
      pages/subPackages/chooseCompanyTags/componets/chooseTime.vue
  70. 104 0
      pages/subPackages/chooseCompanyTags/componets/isSelectedTags.vue
  71. 338 0
      pages/subPackages/chooseCompanyTags/index.vue
  72. 820 0
      pages/subPackages/chosseHouse/chosseHouse.vue
  73. 1018 0
      pages/subPackages/companyDetails/companyDetails.vue
  74. 1158 0
      pages/subPackages/companyDetailsEdit/companyDetailsEdit.vue
  75. 161 0
      pages/subPackages/companyDetailsEdit/isSelectedTags.vue
  76. 530 0
      pages/subPackages/companyDetailsEdit/momo-multipleSelect.vue
  77. 234 0
      pages/subPackages/companyHouse/companyHouse.vue
  78. 143 0
      pages/subPackages/companyTagsDelete/componets/chooseTime.vue
  79. 98 0
      pages/subPackages/companyTagsDelete/componets/isSelectedTags.vue
  80. 191 0
      pages/subPackages/companyTagsDelete/index.vue
  81. 159 0
      pages/subPackages/companyreport/companyreport.vue
  82. 437 0
      pages/subPackages/companyreport/components/goReport.vue
  83. 162 0
      pages/subPackages/companyreport/components/handlereport.vue
  84. 427 0
      pages/subPackages/companyreport/components/reportDetails.vue
  85. 275 0
      pages/subPackages/companyreport/components/reportHistory.vue
  86. 330 0
      pages/subPackages/components/momo-multipleSelect/momo-multipleSelect.vue
  87. 170 0
      pages/subPackages/components/selectGenzongDep/style.css
  88. 679 0
      pages/subPackages/components/selectGenzongDep/tkitree.vue
  89. 78 0
      pages/subPackages/components/selectGenzongDep/tools.js
  90. 170 0
      pages/subPackages/components/selectXiangguanDep/style.css
  91. 679 0
      pages/subPackages/components/selectXiangguanDep/tkitree.vue
  92. 78 0
      pages/subPackages/components/selectXiangguanDep/tools.js
  93. 170 0
      pages/subPackages/components/select_dengjiren/style.css
  94. 678 0
      pages/subPackages/components/select_dengjiren/tkitree.vue
  95. 78 0
      pages/subPackages/components/select_dengjiren/tools.js
  96. 170 0
      pages/subPackages/components/select_dengjiyuan/style.css
  97. 675 0
      pages/subPackages/components/select_dengjiyuan/tkitree.vue
  98. 78 0
      pages/subPackages/components/select_dengjiyuan/tools.js
  99. 73 0
      pages/subPackages/components/tel-number/index.vue
  100. 0 0
      pages/subPackages/components/tkitree/style.css

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

+ 17 - 0
App.vue

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

+ 0 - 0
LICENSE


+ 129 - 0
README.md

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

+ 0 - 0
changelog.md


BIN
common/assets/image/comicon.png


BIN
common/assets/image/fangke.png


BIN
common/assets/image/gantanhao.png


BIN
common/assets/image/guanbi.png


BIN
common/assets/image/head.png


BIN
common/assets/image/homeBg.png


BIN
common/assets/image/houseSel.png


BIN
common/assets/image/houseUnSel.png


BIN
common/assets/image/logo.png


BIN
common/assets/image/logobig.jpg


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

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

BIN
common/assets/image/mineSel.png


BIN
common/assets/image/mineUnSel.png


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

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

BIN
common/assets/image/qiye.png


BIN
common/assets/image/quezhen.png


BIN
common/assets/image/renyuan.png


BIN
common/assets/image/right.png


BIN
common/assets/image/suo.png


BIN
common/assets/image/yichang.png


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

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

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

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

+ 16 - 0
common/style/common.scss

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

+ 622 - 0
common/style/index.scss

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

+ 215 - 0
common/style/picker.css

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

+ 324 - 0
common/style/reset.scss

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

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1688 - 0
common/uni.css


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

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

+ 500 - 0
js_sdk/http.js

@@ -0,0 +1,500 @@
+import $http from "./request/requestConfig"
+import {
+    BASE_URI
+} from "../pages/utils/constant.js";
+import qs from 'qs';
+
+const baseUri = '/smartParkH5Server'
+const parkActivity = '/wx/meetingAppoint'
+export function login(data) {
+    return $http.post(
+        '/wx/auth/login_by_app_main?' + qs.stringify(data), {}, {})
+
+}
+
+export function addRectificationManagement(data) {
+
+    return $http.post(
+        '/wx/RectificationController/addRectificationManagement',
+        data, {}
+    )
+}
+export function getUserLocalStorageInfo() {
+    const userInfo = JSON.parse(
+        uni.getStorageSync("laocui_user_info"));
+    return userInfo
+}
+export function uploadPDF() {
+    uni.showLoading({
+        title: '加载中',
+        mask: true
+    });
+    return new Promise((resolve, reject) => {
+        uni.chooseMessageFile({
+            count: 1, //默认100
+            type: 'file',
+            success: (res) => {
+                uni.uploadFile({
+                    url: BASE_URI + "/wx/fileController/upload",
+                    filePath: res.tempFiles[0].path,
+                    name: "file",
+                    formData: {
+                        user: "test"
+                    },
+                    success(successRes) {
+                        // 上传完成需要更新 fileList
+                        let data = JSON.parse(successRes.data);
+                        uni.showToast({
+                            title: '提交成功',
+                            duration: 500
+                        });
+                        resolve({
+                            url: data.data[0],
+                            name: res.tempFiles[0].name
+                        })
+
+                    },
+                    fail(res) {},
+                });
+
+            },
+            fail(e) {
+                uni.showToast({
+                    title: '提交成功',
+                    duration: 0
+                });
+            }
+        });
+    })
+}
+
+export function getPartyBranchList(data) {
+    return $http.post(
+        '/wx/partyBranch/getPartyBranchList',
+        data, {}
+    )
+}
+export function getActivationRanking(data) {
+    return $http.post(
+        '/wx/partyBranch/getActivationRanking',
+        data, {}
+    )
+}
+export function findRectificationManagementInOutList(data) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutList',
+        data, {}
+    )
+}
+
+export function findRectificationManagementInOutById(e) {
+    return $http.post(
+        '/wx/RectificationController/findRectificationManagementInOutById', {
+            id: e
+        }, {}
+    )
+}
+export function repairList(data) {
+    return $http.post(
+        '/wx/repair/list',
+        data, {}
+    )
+}
+
+export function addSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/addSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function updateSafetySelfCheckingManage(data) {
+    return $http.post(
+        '/wx/SafetyController/updateSafetySelfCheckingManage',
+        data, {}
+    )
+}
+export function editRepair(data) {
+    return $http.post(
+        '/wx/repair/edit',
+        data, {}
+    )
+}
+export function addRepair(data) {
+    return $http.post(
+        '/wx/repair/add',
+        data, {}
+    )
+}
+export function getRepairDispatchById(id) {
+    return $http.post(
+        '/wx/repair/getById', {
+            id: id
+        }, {}
+    )
+}
+export function getDispatchToPerson(data) {
+    return $http.post(
+        '/wx/repair/getDispatchToPerson',
+        data, {}
+    )
+}
+export function getCompanyById(data) {
+    return $http.post(
+        '/wx/repair/getCompanyById', data, {},
+
+    )
+}
+
+export function getWxCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList', e, {}
+    )
+}
+
+export function tagsBind(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/bind', e, {}
+    )
+}
+export function getDetial(e) {
+    return $http.post(
+        '/wx/meetingAppoint/meetingAppointDetail', e, {}
+    )
+}
+export function saleControllerGetById(e) {
+    return $http.post(
+        '/wx/SaleController/getById', {
+            id: e
+        }, {}
+    )
+}
+
+export function getAppUserMain(data) {
+    return $http.post(
+        '/wx/company/getById',
+        data, {}
+    )
+}
+
+export function confirmAudit(data) {
+    return $http.post(
+        '/wx/meetingAppoint/confirmAudit',
+        data, {}
+    )
+
+}
+export function getCompanyTags(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTags', e, {}
+    )
+}
+export function getCompanyTagsByQybq(qybq) {
+    return $http.post(
+        '/wx/MnpTagInfoController/getCompanyTagsByQybq', {
+            qybq: qybq
+        }, {})
+}
+export function companyECdit(data) {
+    return $http.post(
+        '/wx/company/edit', data, {})
+}
+
+export function tagInfoList(e) {
+    return $http.post(
+        '/wx/MnpTagInfoController/tagInfoList',
+        e, {})
+}
+export function findDeptList() {
+
+    return $http.post(
+        '/wx/SaleController/findDeptList', {}, {})
+
+}
+export function tagCategoryList() {
+    return $http.post(
+        '/wx/MnpTagController/tagCategoryList', {}, {}
+    )
+}
+export function interviewEscalationListAll(id) {
+    debugger
+    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 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 + '/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);
+        }
+    }
+}

+ 118 - 0
js_sdk/request/request.md

@@ -0,0 +1,118 @@
+# request 请求、配置简单、源码清晰注释多、超强的适应性(很方便的支持多域名请求)
+
+1. 配置简单、源码清晰注释多、适用于一项目多域名请求、第三方请求、七牛云图片上传、本地服务器图片上传等等
+2. 支持请求`get`、`post`、`put`、`delete`
+3. 自动显示请求加载动画(可单个接口关闭)
+4. 全局`api`数据处理函数,只回调请求正确的数据(可单个接口关闭)
+5. 未登录或登录失效自动拦截并调用登录方法(可单个接口关闭)
+6. 全局自动提示接口抛出的错误信息(可单个接口关闭)
+7. 支持 Promise
+8. 支持拦截器
+
+# 文件说明
+
+1. `request.js` 源码文件
+2. `requestConfig.js` 请求配置文件(具体看代码)
+3. `qiniuUploader.js` 七牛云官方上传文件
+
+# 在 main.js 引入并挂在 Vue 上
+
+```
+import $http from '@/zhouWei-request/requestConfig';
+Vue.prototype.$http = $http;
+```
+
+# get 请求 正常写法
+
+```
+this.$http.get('aid/region',{pid:0}).
+then(function (response) {
+	//这里只会在接口是成功状态返回
+}).catch(function (error) {
+	//这里只会在接口是失败状态返回,不需要去处理错误提示
+
+});
+```
+
+# post 请求 async 写法
+
+```
+let data = await this.$http.post('aid/region',{pid:0});
+;
+```
+
+# 其他功能配置项
+
+```
+let data = await this.$http.post(
+	'http://www.aaa.com/aid/region', //可以直接放链接(将不启用全局定义域名)
+	{
+		pid:0
+	},
+	{
+		isPrompt: true,//(默认 true 说明:本接口抛出的错误是否提示)
+		load: true,//(默认 true 说明:本接口是否提示加载动画)
+		headers: { //默认 无 说明:请求头
+			'Content-Type': 'application/x-www-form-urlencoded'
+		},
+		isFactory: true //(默认 true 说明:本接口是否调用公共的数据处理方法,设置false后isPrompt参数奖失去作用)
+	}
+);
+```
+
+# 本地服务器图片上传(支持多张上传)
+
+```
+let data = await this.$http.urlImgUpload('flie/upload',{
+	name:"后台接受文件key名称", //默认 file
+	count:"最大选择数",//默认 9
+	sizeType:"选择压缩图原图,默认两个都选",//默认 ['original', 'compressed']
+	sourceType:"选择相机拍照或相册上传 默认两个都选",//默认 ['album','camera']
+	data:"而外参数" //可不填
+});
+```
+
+# 本地服务器文件上传(支持多张上传)
+
+```
+this.$http.urlFileUpload({
+		data:"向服务器传递的参数", //可不填
+		name:"后台接受文件key名称", //默认 file
+	},
+	[], // 必填 临时文件路径
+	(res) => {
+		//这里是上传完成了数据数组
+	}
+);
+```
+
+# 七牛云图片上传(支持多张上传)
+
+```
+let data = await this.$http.qnImgUpload({
+		count:"最大选择数",//默认 9
+		sizeType:"选择压缩图原图,默认两个都选",//默认 ['original', 'compressed']
+		sourceType:"选择相机拍照或相册上传 默认两个都选",//默认 ['album','camera']
+	},
+	(res) => {
+		//这里是每上传一张都返回一张图片地址
+	}
+);
+```
+
+# 七牛云文件上传(支持多张上传)
+
+```
+let data = await this.$http.qnFileUpload(
+	[], // 必填 临时文件路径
+	(res) => {
+		//这里是每上传一张都返回一张图片地址
+	}
+);
+```
+
+# jsonp 跨域请求(只支持 H5)
+
+```
+let data = await this.$http.jsonp('http://www.aaa.com/aid/region',{pid:0});
+```

+ 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/subPackages/pages/login/login'
+        });
+        this.$showToast('令牌过期,请重新登陆')
+    } else {
+        uni.showToast({
+            title: resolve.data.errmsg,
+            icon: "none",
+            mask: true,
+            duration: 2000
+        });
+        //设置可以提示的时候
+        // if (options.isPrompt) {
+        // 	setTimeout(function () {
+        //提示后台接口抛出的错误信息
+        // uni.showToast({
+        // 	title: resolve.data.msg,
+        // 	icon: "none",
+        // 	duration: 3000
+        // });
+        // 	}, 500);
+        // }
+        callback.result = resolve.data;
+    }
+    uni.stopPullDownRefresh();
+    return callback;
+};
+export default $http;

+ 72 - 0
main.js

@@ -0,0 +1,72 @@
+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;
+
+// 全局mixin引入  是否登录判断
+// import {isLoginMixin} from "./common/mixins";
+// Vue.mixin(isLoginMixin);
+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

+ 195 - 0
manifest.json

@@ -0,0 +1,195 @@
+{
+    "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" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_TASKS\"/>",
+                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
+                    "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+                    "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
+                    "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",
+                    "<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\"/>"
+                ]
+            },
+            "ios" : {
+                "UIBackgroundModes" : [ "audio" ],
+                "urlschemewhitelist" : [ "baidumap", "iosamap" ]
+            },
+            "sdkConfigs" : {
+                "speech" : {
+                    "ifly" : {}
+                }
+            },
+            "orientation" : [ "portrait-primary" ]
+        },
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "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" : {
+        "appid" : "wxcfa83b07b1dbd591",
+        "optimization" : {
+            "subPackages" : true
+        },
+        "setting" : {
+            "urlCheck" : true,
+            "es6" : true,
+            "postcss" : true,
+            "minified" : true
+        },
+        "usingComponents" : true,
+        "permission" : {
+            "scope.userLocation" : {
+                "desc" : "查询用户地理位置"
+            }
+        },
+        "requiredPrivateInfos" : [ "getLocation" ],
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-alipay" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-baidu" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-jd" : {
+        "usingComponents" : true,
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "h5" : {
+        "template" : "template.h5.html",
+        "router" : {
+            "mode" : "history",
+            "base" : ""
+        },
+        "sdkConfigs" : {
+            "maps" : {
+                "qqmap" : {
+                    "key" : "TKUBZ-D24AF-GJ4JY-JDVM2-IBYKK-KEBCU"
+                }
+            }
+        },
+        "async" : {
+            "timeout" : 20000
+        },
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "vueVersion" : "2",
+    "mp-kuaishou" : {
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-lark" : {
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "mp-qq" : {
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "quickapp-webview-huawei" : {
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "quickapp-webview-union" : {
+        "uniStatistics" : {
+            "enable" : true
+        }
+    },
+    "uniStatistics" : {
+        "version" : "2",
+        "enable" : true
+    },
+    "locale" : "zh-Hans"
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 2905 - 0
package-lock.json


+ 25 - 0
package.json

@@ -0,0 +1,25 @@
+{
+    "id": "qian-tree",
+    "name": "",
+    "version": "1.0.1",
+    "description": "",
+    "keywords": [
+        "tree",
+        "",
+        ""
+    ],
+    "dcloudext": {
+        "category": [
+            "",
+            ""
+        ]
+    },
+    "devDependencies": {
+        "gulp": "^4.0.2",
+        "gulp-postcss": "^9.0.1",
+        "postcss-px2units": "^0.2.0"
+    },
+    "dependencies": {
+        "axios": "^1.4.0"
+    }
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1416 - 0
pages.json


+ 188 - 0
pages/index/index.vue

@@ -0,0 +1,188 @@
+<template>
+  <view>
+    <image src="../../static/index/banner.png" class="banner"></image>
+    <div class="map">
+      <div
+        class="mapdom"
+        style="float: left"
+        v-for="(item, index) in mapList"
+        :key="index"
+        @click="jumpPage(item.path)"
+      >
+        <img class="mapIcon" :src="item.url" />
+        <div class="maptxt">{{ item.label }}</div>
+      </div>
+    </div>
+  </view>
+</template>
+<script>
+// import {demo} from "@/js_sdk/http"
+import { getUserPower, getUserLocalStorageInfo } from "@/js_sdk/http";
+export default {
+  data() {
+    return {
+      mapList: [
+        // {
+        //   label: "党建地图",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/1@2x.png",
+        //   path: "/pages/subPackages/buildmap/index",
+        // },
+        // {
+        //   label: "经发填报",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/1@2x.png",
+        //   path: "/pages/subPackages/companyHouse/companyHouse",
+        // },
+        {
+          label: "企业库",
+          url: "https://hswkxc.idea-sf.com/fileService/static/slices/2@2x.png",
+          path: "/pages/subPackages/companyHouse/companyHouse",
+        },
+        {
+          label: "走访上报",
+          url: "https://hswkxc.idea-sf.com/fileService/static/slices/3@2x.png",
+          path: "/pages/subPackages/companyreport/companyreport",
+        },
+        // {
+        //   label: "上市跟进",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/4@2x.png",
+        // },
+
+        {
+          label: "招商管理",
+          url: "https://hswkxc.idea-sf.com/fileService/static/slices/5@2x.png",
+          path: "/pages/subPackages/merchants/merchants",
+        },
+        // {
+        //   label: "我的待办",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/7@2x.png",
+        //   path: "/pages/subPackages/todo/index",
+        // },
+        {
+          label: "我的待阅",
+          url: "https://hswkxc.idea-sf.com/fileService/static/slices/6@2x.png",
+          path: "/pages/subPackages/toread/index",
+        },
+        // {
+        //   label: "会议室审核",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/12@2x.png",
+        //   path: "/pages/subPackages/meetingroom/meetingroom",
+        // },
+
+        // {
+        //   label: "安全自检管理",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/8@2x.png",
+        //   path: "/pages/subPackages/secureselftest/index",
+        // },
+        // {
+        //   label: "安全自检计划",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/9@2x.png",
+        //   path: "/pages/subPackages/secureselfplan/index",
+        // },
+
+        // {
+        //   label: "报修派单",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/11@2x.png",
+        //   path: "/pages/subPackages/repairDispatch-app/index",
+        // },
+        // {
+        //   label: "报修处理",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/10@2x.png",
+        //   path: "/pages/subPackages/repairprocessing-app/index",
+        // },
+
+        // {
+        //   label: "整改填报",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/15@2x.png",
+        //   path: "/pages/subPackages/modifyReport/index",
+        // },
+        // {
+        //   label: "整改派单",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/14@2x.png",
+        //   path: "/pages/subPackages/modifySend/index",
+        // },
+        // {
+        //   label: "整改处理",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/13@2x.png",
+        //   path: "/pages/subPackages/modifyHandle/index",
+        // },
+        // {
+        //   label: "活动核销",
+        //   url: "https://hswkxc.idea-sf.com/fileService/static/slices/1@2x.png",
+        //   path: "/pages/subPackages/activity/index",
+        // },
+      ],
+    };
+  },
+  onShareAppMessage() {},
+  mounted() {
+    // demo();
+  },
+  onLoad() {
+    this.getUserPower();
+  },
+  methods: {
+    // getUserLocalStorageInfo
+    async getUserPower() {
+      if (getUserLocalStorageInfo().user.id == 1) return;
+      let that = this;
+      let newList = [];
+      let { data } = await getUserPower(getUserLocalStorageInfo().user.id);
+      for (let i = 0; i < that.mapList.length; i++) {
+        let index = data.findIndex((e) => e == that.mapList[i].label);
+        if (index != -1) {
+          newList.push(that.mapList[i]);
+        }
+      }
+      that.mapList = newList;
+    },
+    jumpPage(path) {
+      uni.navigateTo({
+        url: path,
+        fail: (fail) => {},
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+page {
+  background: white;
+}
+.banner {
+  width: 100%;
+  height: 450rpx;
+  position: absolute;
+  z-index: 1;
+}
+.mapdom {
+  width: 25%;
+  height: 184rpx;
+}
+.maptxt {
+  width: 100%;
+  height: 34rpx;
+  font-size: 24rpx;
+  font-family: PingFang SC-Medium, PingFang SC;
+  font-weight: 500;
+  color: #333333;
+  text-align: center;
+}
+.mapIcon {
+  width: 160rpx;
+  height: 160rpx;
+  //background: linear-gradient(141deg, #89BCFF 0%, #2782FA 100%);
+  display: block;
+  margin: auto;
+}
+.map {
+  position: absolute;
+  z-index: 2;
+  width: calc(100% - 64rpx);
+  height: 450rpx;
+  border-radius: 48rpx 48rpx 0rpx 0rpx;
+  background: white;
+  margin-top: 402rpx;
+  padding: 48rpx 32rpx;
+}
+</style>

+ 252 - 0
pages/login/login.vue

@@ -0,0 +1,252 @@
+<template>
+  <div class="login">
+    <img src="../../common/assets/image/logobig.jpg" alt="" class="logobig" />
+    <div class="logTit">
+      <span class="titletxt">微纳园蒲公英平台</span>
+      <p class="titletxt2">(管理端)</p>
+    </div>
+    <div class="loginBox">
+      <div class="inputBox">
+        <img
+          src="../../common/assets/image/comicon.png"
+          alt=""
+          style="height: 60rpx"
+        />
+        <input
+          type="text"
+          placeholder="请输入账号"
+          v-model="loginForm.userName"
+        />
+      </div>
+      <div class="inputBox">
+        <img src="../../common/assets/image/pswicon.svg" alt="" />
+        <input
+          type="password"
+          placeholder="请输入密码"
+          v-model="loginForm.password"
+        />
+      </div>
+      <div class="inputBox">
+        <img src="../../common/assets/image/yzmicon.svg" alt="" />
+        <input
+          type="text"
+          placeholder="验证码"
+          class="yanzhengma"
+          v-model="loginForm.code"
+        />
+        <img
+          :src="loginForm.captchaImage"
+          @click="captchaImageRefresh(loginForm)"
+          class="yanzhengImg"
+        />
+      </div>
+      <div class="pswBox" @click="forgetPsw()">
+        <p>忘记密码?</p>
+      </div>
+      <div>
+        <van-button type="default" size="large" color="#1f1fbe" @click="login"
+          >登 录</van-button
+        >
+      </div>
+    </div>
+    <div class="bottomTips">
+      2022@copyrigtht IOT - Park-tech. supported by 中国移动
+    </div>
+    <van-dialog id="van-toast" />
+  </div>
+</template>
+<script>
+import Dialog from "../..//wxcomponents/weapp/dist/dialog/dialog.js";
+import { login } from "@/js_sdk/http.js";
+
+export default {
+  data() {
+    return {
+      loginForm: {
+        userName: "",
+        password: "",
+        code: "",
+        type: "FRAME",
+        captchaId: "",
+        captchaImage: "",
+        rememberMe: true,
+      },
+    };
+  },
+  mounted() {
+    // login()
+    this.captchaImageRefresh(this.loginForm);
+  },
+  methods: {
+    captchaImageRefresh: function (_form) {
+      _form.captchaId = this.$common.uuid(8);
+      _form.captchaImage =
+        this.$constant.BASE_URI +
+        "/captcha/captchaImage?type=math&captchaId=" +
+        _form.captchaId +
+        "&s=" +
+        Math.random();
+    },
+    forgetPsw() {
+      wx.showModal({
+        title: "提示!",
+        content: "管理端修改密码需要拨打客服电话咨询,是否拨打?",
+        success: function (res) {
+          if (res.confirm) {
+            uni.makePhoneCall({
+              phoneNumber: "13921516068", //电话号码
+              success: function (e) {},
+              fail: function (e) {},
+            });
+          }
+        },
+      });
+    },
+    login() {
+      const _this = this;
+      if (!this.loginForm.userName || !this.loginForm.password) {
+        uni.showModal({
+          title: "提示",
+          content: "请输入账号和密码",
+          icon: "error",
+          showCancel: false,
+        });
+        return;
+      }
+      login(this.loginForm).then((res) => {
+        if (res.errmsg == "成功") {
+          uni.showToast({
+            title: "登录成功",
+            icon: "none",
+            mask: true,
+            duration: 2000,
+          });
+          this.$auth.setUser(res.data.token);
+          this.$auth.setUserInfo(res.data);
+          uni.switchTab({
+            url: "/pages/index/index",
+          });
+        } else {
+          this.captchaImageRefresh(this.loginForm);
+        }
+      });
+
+      // this.$auth.setUserType(this.$auth.TYPE_FRAME);
+    },
+    onShareAppMessage: function () {},
+  },
+};
+</script>
+<style lang="scss">
+.login {
+  background: white;
+  height: 100%;
+  overflow: hidden;
+  .logTit {
+    width: 80vw;
+    left: 10vw;
+    top: 60vw;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    position: absolute;
+    z-index: 1;
+    color: rgba(51, 51, 51, 1);
+    font-size: 4vw;
+    p {
+      color: rgba(102, 102, 102, 1);
+      font-size: 4vw;
+      margin-top: 0.5vw;
+    }
+
+    .titletxt {
+      font-size: 48rpx;
+      font-family: Taipei Sans TC Beta-Bold, Taipei Sans TC Beta;
+      font-weight: bold;
+      color: #333333;
+    }
+    .titletxt2 {
+      font-size: 32rpx;
+      font-family: PingFang SC-Regular, PingFang SC;
+      font-weight: 400;
+      color: #666666;
+    }
+  }
+  .logobig {
+    width: 100vw;
+    height: 100vh;
+    position: absolute;
+    left: 0;
+    z-index: 0;
+  }
+
+  .loginBox {
+    width: 70vw;
+    left: 15vw;
+    padding-top: 75vw;
+    position: absolute;
+  }
+  .inputBox {
+    position: relative;
+    display: flex;
+    align-items: center;
+    img {
+      position: absolute;
+      width: 7vw;
+      // padding-top: 40px;
+    }
+    .yanzhengImg {
+      right: 0;
+      width: 20vw;
+      height: 10vw;
+    }
+    .yanzhengImgBox {
+      height: 50px;
+      display: flex;
+      align-items: center;
+    }
+    input {
+      background: black;
+      width: 100%;
+      height: 76rpx;
+      padding: 5rpx 0 5rpx 70rpx;
+      background-color: rgba(255, 255, 255, 1);
+      border: 1rpx solid rgba(29, 24, 188, 0.05);
+      margin: 5rpx 0;
+      font-size: 4vw;
+    }
+    input::-webkit-input-placeholder {
+      color: rgba(153, 153, 153, 1);
+    }
+    .yanzhengma {
+      width: 60%;
+    }
+  }
+  .pswBox {
+    width: 100%;
+    display: flex;
+    justify-content: flex-end;
+    margin: 20px 0;
+    color: rgba(29, 24, 188, 1);
+  }
+  .van-button {
+    border-radius: 60px;
+
+    margin-top: 50px;
+  }
+  .bottomTips {
+    width: 100vw;
+    position: fixed;
+    bottom: 15px;
+    text-align: center;
+    color: #999999;
+    font-size: 2vw;
+  }
+  @media screen and (max-height: 454px) {
+    .bottomTips {
+      display: none;
+    }
+  }
+}
+</style>

+ 179 - 0
pages/mine/mine.vue

@@ -0,0 +1,179 @@
+<template>
+  <view>
+    <img src="../../static/mine/banner.png" class="banner" />
+    <div class="info">
+      <div class="headerandwelcome">
+        <img src="../../static/mine/head.png" alt="" class="header" />
+        <div class="weltxt">
+          {{ getUserLocalStorageInfo.user.truename }},欢迎您!
+        </div>
+      </div>
+      <div class="labelpage">
+        <div class="labelpage_row">
+          <img height="44rpx" src="../../static/mine/versionicon.png" alt="" />
+          <div class="labelpage_text">
+            <div class="labelpage_name">当前版本号</div>
+            <div class="labelpage_value">v1.0.1</div>
+            <div class="border"></div>
+          </div>
+        </div>
+        <div
+          class="labelpage_row"
+          style="margin-top: 48rpx"
+          @click="editPassWord()"
+        >
+          <img height="44rpx" src="../../static/mine/editpassword.png" alt="" />
+          <div class="labelpage_text">
+            <div class="labelpage_name">密码修改</div>
+            <div class="labelpage_value">
+              <img
+                src="../../static/mine/youjiantou.png"
+                style="width: 44rpx; height: 44rpx"
+                alt=""
+              />
+            </div>
+            <div class="border"></div>
+          </div>
+        </div>
+        <div
+          class="labelpage_row"
+          style="margin-top: 48rpx"
+          @click="outLogin()"
+        >
+          <img height="44rpx" src="../../static/mine/outicon.png" alt="" />
+          <div class="labelpage_text">
+            <div class="labelpage_name">退出账号</div>
+            <div class="labelpage_value">
+              <img
+                src="../../static/mine/youjiantou.png"
+                style="width: 44rpx; height: 44rpx"
+                alt=""
+              />
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </view>
+</template>
+<script>
+import { getUserInfo, getUserLocalStorageInfo } from "@/js_sdk/http";
+export default {
+  data() {
+    return {
+      userInfo: {},
+      getUserLocalStorageInfo: getUserLocalStorageInfo(),
+    };
+  },
+  onLoad() {
+    //option为object类型,会序列化上个页面传递的参数
+    // this.getUserInfo(); //打印出上个页面传递的参数。
+  },
+
+  methods: {
+    outLogin() {
+      wx.showModal({
+        title: "提示!",
+        content: "是否确认退出登录?",
+        success: function (res) {
+          if (res.confirm) {
+            uni.clearStorageSync();
+            uni.reLaunch({
+              url: "/pages/login/login",
+            });
+          }
+        },
+      });
+    },
+    editPassWord() {
+      uni.navigateTo({
+        url: "/pages/subPackages/password/index",
+      });
+    },
+    async getUserInfo() {
+      let data = await getUserInfo();
+      this.userInfo = data.data;
+    },
+  },
+};
+</script>
+<style scoped lang="scss">
+.banner {
+  width: 100%;
+  height: 424rpx;
+  position: absolute;
+  z-index: 1;
+}
+.headerandwelcome {
+  margin-bottom: 60rpx;
+  height: 120rpx;
+  width: 100%;
+}
+.info {
+  position: absolute;
+  width: calc(100% - 64rpx);
+  margin: 60rpx 32rpx 0 32rpx;
+  z-index: 2;
+}
+.header {
+  height: 120rpx;
+  width: 120rpx;
+  margin-left: 15rpx;
+  border-radius: 50%;
+  float: left;
+}
+.weltxt {
+  height: 120rpx;
+  line-height: 120rpx;
+  color: #ffffff;
+  margin-left: 32rpx;
+  float: left;
+}
+.labelpage {
+  width: calc(100% - 96rpx);
+  height: 308rpx;
+  padding: 96rpx 48rpx;
+  border-radius: 12rpx 12rpx 12rpx 12rpx;
+  background: #ffffff;
+}
+.labelpage_row {
+  height: 83rpx;
+  width: 100%;
+  img {
+    height: 44rpx;
+    width: 44rpx;
+    float: left;
+    margin-right: 12rpx;
+  }
+  .labelpage_text {
+    width: calc(100% - 64rpx);
+    height: 44rpx;
+    line-height: 44rpx;
+    float: left;
+  }
+  .labelpage_name {
+    height: 44rpx;
+    line-height: 44rpx;
+    float: left;
+    font-size: 28rpx;
+    color: #081640;
+    font-weight: 400;
+  }
+  .labelpage_value {
+    height: 44rpx;
+    line-height: 44rpx;
+    float: right;
+    font-size: 28rpx;
+    color: #1d18bc;
+    font-weight: 400;
+  }
+  .border {
+    margin-top: 48rpx;
+    width: 100%;
+    height: 1rpx;
+    border-bottom: 2rpx solid #e6e6e6;
+    float: left;
+  }
+}
+</style>
+

+ 43 - 0
pages/subPackages/activity/api_activity.js

@@ -0,0 +1,43 @@
+import { request } from './request'
+
+const baseUri = ''
+const parkActivity = '/wx/parkActivity'
+
+export function list(data) {
+    return request({
+        url: baseUri + parkActivity + '/list',
+        method: 'post',
+        data: data
+    })
+}
+
+export function getActivityById(id, userId) {
+    return request({
+        url: baseUri + parkActivity + '/getActivityById?id=' + id + '&userId=' + userId,
+        method: 'get'
+    })
+}
+
+export function clickCollect(data) {
+    return request({
+        url: baseUri + parkActivity + '/clickCollect',
+        method: 'post',
+        data: data
+    })
+}
+
+export function insertRegisSignInfo(data) {
+    return request({
+        url: baseUri + parkActivity + '/insertRegisSignInfo',
+        method: 'post',
+        data: data
+    })
+}
+
+export function listRegisSignInfo(data) {
+    return request({
+        url: baseUri + parkActivity + '/listRegisSignInfo',
+        method: 'post',
+        data: data
+    })
+}

+ 233 - 0
pages/subPackages/activity/apply-popup.vue

@@ -0,0 +1,233 @@
+<template>
+  <div class="apply">
+    <van-popup :show="show" class="form-popup">
+      <div class="popup-body">
+        <div class="popup-header">
+          <div class="title">请确认企业签到信息</div>
+          <div class="close" @click="close">
+            <i class="iconfont icon-guanbi"></i>
+          </div>
+        </div>
+        <div class="popup-center">
+          <van-form>
+            <van-field
+              readonly
+              class="input-item"
+              label="*公司名称"
+              placeholder="请填写公司名称"
+              :value="signInfo.companyName"
+            />
+            <van-field
+              readonly
+              class="input-item"
+              label="*参与人姓名"
+              placeholder="请填写参与人姓名"
+              :value="signInfo.participants"
+            />
+            <van-field
+              readonly
+              class="input-item"
+              label="*参与人职位"
+              placeholder="请填写参与人职位"
+              :value="signInfo.participantsPosition"
+            />
+            <van-field
+              readonly
+              class="input-item"
+              label="*参与总人数"
+              placeholder="请填写参与总人数"
+              :value="signInfo.participantsNumber"
+            />
+            <van-field
+              readonly
+              class="input-item"
+              label="说明"
+              :value="signInfo.remark"
+              type="textarea"
+              autosize
+            />
+          </van-form>
+        </div>
+        <div class="popup-foot-but">
+          <div class="cancel" @click="cancel()">取消</div>
+          <div class="gb" @click="confirm">确认</div>
+        </div>
+      </div></van-popup
+    >
+  </div>
+</template>
+  
+  <script>
+import { richScan } from "@/js_sdk/http";
+import vanPopup from "../../../wxcomponents/weapp/dist/popup/index";
+import vanField from "../../../wxcomponents/weapp/dist/field/index";
+export default {
+  props: {
+    referenceId: {
+      // 关联id
+      type: String,
+      default: "",
+    },
+    referenceType: {
+      // 关联类型
+      type: String,
+      default: "",
+    },
+  },
+  components: {
+    vanPopup,
+    vanField,
+  },
+  data() {
+    return {
+      signInfo: {},
+      show: false,
+      companyName: "",
+      participants: "",
+      participantsPosition: "",
+      participantsPhone: "",
+      partakeNumber: "",
+      remark: "",
+    };
+  },
+  mounted() {},
+  methods: {
+    cancel() {
+      uni.navigateBack({});
+    },
+    init(signInfo) {
+      this.signInfo = signInfo;
+      this.show = true;
+    },
+    close() {
+      this.show = false;
+      this.initData();
+    },
+    initData() {
+      this.companyName = "";
+      this.participants = "";
+      this.participantsPosition = "";
+      this.participantsPhone = "";
+      this.partakeNumber = "";
+      this.remark = "";
+    },
+    confirm() {
+      const _this = this;
+
+      richScan({
+        signInCode: _this.signInfo.signInCode,
+      }).then((res) => {
+        if (res.errmsg == "成功") {
+          this.$showToast(res.data);
+          if (res.data == "签到成功") {
+            uni.navigateBack({});
+          }
+        }
+      });
+      _this.show = false;
+      _this.initData();
+    },
+  },
+};
+</script>
+  
+  <style lang="scss" type="text/scss">
+.form-popup {
+  top: 50%;
+  width: 644rpx;
+  border-radius: 15rpx;
+  .popup-body {
+    padding-bottom: 100rpx;
+    position: relative;
+    .popup-header {
+      padding: 30rpx 40rpx;
+      @include flex;
+      .title {
+        font-size: 28rpx;
+        color: #a1a1a1;
+      }
+      .close {
+        width: 80rpx;
+        text-align: right;
+        i {
+          font-size: 30rpx;
+          color: $color4;
+        }
+      }
+    }
+    .popup-center {
+      padding: 0 40rpx;
+      width: 700rpx;
+      .input-item {
+        margin-top: 30rpx;
+        .van-field__label {
+          font-size: 28rpx;
+          color: #333;
+          line-height: 60rpx;
+        }
+        .van-field__body {
+          input {
+            line-height: 60rpx;
+          }
+        }
+      }
+    }
+    .popup-foot-but {
+      box-sizing: border-box;
+      position: absolute;
+      width: 100%;
+      bottom: 0;
+      left: 0;
+      padding: 0 0 20rpx 0rpx;
+      display: flex;
+      .gb {
+        text-align: center;
+        width: 152rpx;
+        font-size: 28rpx;
+        color: #fff;
+        background: $main;
+        line-height: 64rpx;
+        border-radius: 6rpx;
+        float: right;
+        margin-left: 295rpx;
+      }
+      .cancel {
+        text-align: center;
+        width: 152rpx;
+        font-size: 28rpx;
+        color: rgb(51, 51, 51);
+        border: 2rpx solid #ccc;
+        background: white;
+        line-height: 64rpx;
+        border-radius: 6rpx;
+        margin-left: 100rpx;
+        float: left;
+      }
+    }
+  }
+}
+
+.apply {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 700rpx;
+}
+.popup-foot-but {
+  position: absolute;
+  width: 100%;
+  bottom: 0;
+  left: 0;
+  text-align: center;
+  padding: 0 0 30rpx;
+  .gb {
+    width: 284rpx;
+    font-size: 28rpx;
+    color: #fff;
+    background: $blue;
+    line-height: 92rpx;
+    border-radius: 10rpx;
+  }
+}
+</style>
+  

+ 13 - 0
pages/subPackages/activity/code.vue

@@ -0,0 +1,13 @@
+<template></template>
+
+<script>
+export default {
+  onLoad() {
+    this.getScanCode();
+  },
+  methods: {},
+};
+</script>
+
+<style>
+</style>

+ 397 - 0
pages/subPackages/activity/index.vue

@@ -0,0 +1,397 @@
+<template>
+  <div class="detail">
+    <div class="detail-body">
+      <div class="img-text">
+        <img :src="activityDetail.annexArray[0]" alt="" />
+      </div>
+
+      <div class="collect-part">
+        <div
+          class="normal-tip by y-bg"
+          v-if="activityDetail.registrationStatus === '1'"
+        >
+          报名中
+        </div>
+        <div class="normal-tip by h-bg" v-else>报名已结束</div>
+        <div class="right">
+          <span class="num">{{ activityDetail.partakeNumber }}人参与</span>
+          <div class="icon-collect" @click="changeCollectorsStatus()">
+            <i
+              :class="[
+                'iconfont icon-wujiaoxingxingxingshoucangdianji',
+                active && 'blue',
+              ]"
+            ></i>
+          </div>
+        </div>
+      </div>
+
+      <div class="tel-part">
+        <div class="tel-name" style="line-height: 74rpx; width: 300rpx">
+          联系电话
+        </div>
+        <TelNum :num="activityDetail.contactPhone" style="width: 60%" />
+      </div>
+
+      <div class="info-part">
+        <div class="info-item">
+          <div class="custom-item-tit">
+            <span class="tit">活动举办</span>
+          </div>
+          <div class="text">{{ activityDetail.activityHold }}</div>
+        </div>
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">活动内容</span></div>
+          <div class="text vhtml" v-html="activityDetail.activityContent"></div>
+        </div>
+
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">活动时间</span></div>
+          <div class="text">
+            {{ activityDetail.activityStartTime }} —
+            {{ activityDetail.activityEndTime }}
+          </div>
+        </div>
+
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">活动地址</span></div>
+          <div class="text">
+            <span class="add">{{ activityDetail.activityAddress }}</span>
+            <!-- <span class="dh" @click="goAddress(activityDetail.activityAddress)"
+              >导航</span
+            > -->
+          </div>
+        </div>
+        <!-- 
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">报名条件</span></div>
+          <div class="text">
+            {{
+              !activityDetail.registrationConditions
+                ? "无条件"
+                : activityDetail.registrationConditions
+            }}
+          </div>
+        </div> -->
+
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">报名时间</span></div>
+          <div class="text">
+            {{ activityDetail.registrationStartTime }} —
+            {{ activityDetail.registrationEndTime }}
+          </div>
+        </div>
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">活动参与</span></div>
+          <div class="text">还有 {{ number }} 个名额</div>
+        </div>
+
+        <div class="info-item">
+          <div class="custom-item-tit"><span class="tit">附件</span></div>
+          <div class="text" style="16rpx 0px">
+            <div
+              v-for="item in activityDetail.activityFile"
+              :key="item.uid"
+              @click="openFile(item.url)"
+            >
+              {{ item.name }}
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div
+      class="but-bottom"
+      @click="getApply()"
+      :signInfo="signInfo"
+      v-if="signInfo.signInStatus == 1"
+    >
+      到场签到
+    </div>
+
+    <!-- 申请弹框 -->
+    <apply-popup ref="apply" />
+  </div>
+</template>
+  
+  <script>
+import TelNum from "../../subPackages/components/tel-number";
+import ApplyPopup from "./apply-popup.vue";
+import {
+  getActivityById,
+  clickCollect,
+  getUserLocalStorageInfo,
+} from "@/js_sdk/http";
+export default {
+  components: {
+    TelNum,
+    ApplyPopup,
+  },
+
+  data() {
+    return {
+      signInfo: {},
+      signInCode: "",
+      active: false,
+      id: "",
+      activityDetail: {
+        referenceId: "",
+      },
+      number: 0,
+    };
+  },
+
+  onLoad() {
+    this.getScanCode();
+  },
+  methods: {
+    getScanCode() {
+      let that = this;
+      uni.scanCode({
+        success: (e) => {
+          that.signInCode = e.result;
+          that.getActivityById();
+        },
+        fail: (fail) => {
+          uni.navigateBack({});
+        },
+      });
+    },
+    openFile(url) {
+      uni.downloadFile({
+        url: url, // 网络文档地址
+        success: (data) => {
+          if (data.statusCode === 200) {
+            uni.saveFile({
+              tempFilePath: data.tempFilePath, //临时路径
+              success: function (res) {
+                // 保存路径
+
+                setTimeout(() => {
+                  //打开文档查看
+                  uni.openDocument({
+                    filePath: res.savedFilePath,
+                    success: function (res) {},
+                  });
+                }, 3000);
+              },
+            });
+          }
+        },
+        fail: (err) => {
+          uni.showToast({
+            title: "失败请重新下载",
+          });
+        },
+      });
+    },
+    getActivityById(a, b, c) {
+      const _this = this;
+      getActivityById(
+        "1126547436026724352",
+        _this.signInCode,
+        getUserLocalStorageInfo().user.id
+      ).then((res) => {
+        if (res.data.info) {
+          _this.annexArray = res.data.info.annexArray;
+          _this.activityDetail = res.data.info;
+          _this.activityDetail.activityContent =
+            res.data.info.activityContent.replace(
+              "<img",
+              `<img style="max-width:100%;"`
+            );
+          _this.activityDetail.registrationStartTime =
+            this.$common.transBaseDateTime(
+              _this.activityDetail.registrationStartTime
+            );
+          _this.activityDetail.registrationEndTime =
+            this.$common.transBaseToDateTime(
+              _this.activityDetail.registrationEndTime
+            );
+          _this.activityDetail.activityStartTime =
+            this.$common.transBaseDateTime(
+              _this.activityDetail.activityStartTime
+            );
+          _this.activityDetail.activityEndTime =
+            this.$common.transBaseToDateTime(
+              _this.activityDetail.activityEndTime
+            );
+          if (_this.activityDetail.collectorsStatus === "2") {
+            _this.active = true;
+          } else {
+            _this.active = false;
+          }
+          _this.number =
+            _this.activityDetail.limitPersonNumber -
+            _this.activityDetail.partakeNumber;
+          _this.activityDetail.activityFile = JSON.parse(
+            res.data.info.activityFile
+          );
+        }
+        if (res.data.signInfo) {
+          this.signInfo = res.data.signInfo;
+          if (res.data.signInfo == 2) {
+            this.$showToast("该企业已签到");
+          }
+          this.signInfo.signInCode = _this.signInCode;
+        }
+      });
+    },
+    getApply() {
+      this.$refs.apply.init(this.signInfo);
+    },
+    goAddress(address) {
+      if (address === null || undefined === address || address === "") {
+        this.$showToast("地址不能为空");
+        return false;
+      } else {
+        this.navigation(address);
+      }
+    },
+    changeCollectorsStatus() {
+      if (this.active) {
+        const _this = this;
+        clickCollect({
+          id: this.id,
+          userId: getUserLocalStorageInfo().user.id,
+          collectorsStatus: "1",
+        }).then((res) => {
+          _this.getActivityById();
+        });
+      } else {
+        const _this = this;
+        clickCollect({
+          id: this.id,
+          userId: getUserLocalStorageInfo().user.id,
+          collectorsStatus: "2",
+        }).then((res) => {
+          _this.getActivityById();
+        });
+      }
+    },
+  },
+};
+</script>
+  
+  <style lang="scss" type="text/scss" >
+// 底部按钮
+.but-bottom {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  line-height: 120rpx;
+  background: $main;
+  color: #fff;
+  font-size: 36rpx;
+  text-align: center;
+}
+
+.text {
+  font-size: 24rpx;
+  color: $text5;
+  margin-top: 32rpx;
+}
+.detail {
+  box-sizing: border-box;
+  background-color: #f2f2f2;
+  padding: 0 0 140rpx;
+  overflow-y: auto;
+
+  .detail-body {
+    .img-text {
+      img {
+        height: 420rpx;
+        width: 100%;
+      }
+    }
+    .collect-part {
+      background-color: #fff;
+      height: 120rpx;
+      padding: 0 30rpx;
+      margin-bottom: 10rpx;
+      @include flex;
+      .normal-tip {
+      }
+      .right {
+        @include flex;
+        .num {
+          margin-right: 20rpx;
+          font-size: 24rpx;
+          color: #333333;
+        }
+      }
+    }
+    .tel-part {
+      display: flex;
+      width: 100%;
+      background-color: #fff;
+      margin-bottom: 10rpx;
+      padding: 0 30rpx;
+      .tel-name {
+        color: #333;
+        font-size: 32rpx;
+        font-weight: 700;
+      }
+      .custom-tel-component {
+        width: 400rpx;
+        .left {
+          font-size: 26rpx;
+        }
+      }
+    }
+  }
+  .info-part {
+    background-color: #fff;
+    overflow-y: auto;
+    height: calc(100vh - 700rpx);
+    box-sizing: border-box;
+    padding: 40rpx 30rpx;
+    .tit {
+      padding-left: 2.667vw;
+      position: relative;
+      font-size: 4.267vw;
+      &::after {
+        content: "";
+        width: 0.8vw;
+        height: 90%;
+        background-color: #976dec;
+        border-radius: 0.4vw;
+        position: absolute;
+        left: 0;
+        top: 50%;
+        -webkit-transform: translateY(-50%);
+        transform: translateY(-50%);
+      }
+    }
+    .info-item {
+      padding: 10rpx 0rpx;
+      margin-bottom: 20rpx;
+      .custom-item-tit {
+        font-size: 32rpx;
+        font-weight: 700;
+      }
+      .text {
+        font-size: 24rpx;
+        color: $text5;
+        margin-top: 32rpx;
+        .add {
+          margin-right: 40rpx;
+        }
+        .dh {
+          width: 100rpx;
+          text-align: center;
+          display: inline-block;
+          color: $main;
+          border-left: 1rpx solid #666666;
+        }
+      }
+      &:last-child {
+        margin-bottom: 0rpx;
+      }
+    }
+  }
+}
+</style>
+  <style lang="scss">
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
pages/subPackages/activity/pdf.svg


+ 96 - 0
pages/subPackages/activity/wxMap.vue

@@ -0,0 +1,96 @@
+<template />
+<script>
+import wx from 'weixin-js-sdk'
+import { getSignature, getLonAndLat } from "@/api/wechat";
+
+export default {
+  name: 'WxSignature',
+  data() {
+    return {};
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    //jsSDK 签名验证
+    getJsApiSign(mapParam){
+      let reqData = {}
+      var system = this.isIosOrAndroid()
+      if (system == 1) {
+          // 安卓
+          reqData.url = encodeURI(window.location.href.split('#')[0]);
+      } else if (system == 2) {
+          // iOS
+          // let url = window.location.href.split('smartParkH5')[0]+"smartParkH5/home";
+          reqData.url = encodeURI(window.entryUrl?window.entryUrl:window.location.href.split('#')[0])
+      }
+      
+      getSignature(reqData).then((res) => {
+        if(res.key == 200){
+          wx.config({
+              "debug": false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
+              "appId": 'wx7302e8b315a9a6f3', // 必填,公众号的唯一标识
+              "timestamp": res.data.timestamp, // 必填,生成签名的时间戳
+              "nonceStr": res.data.noncestr, // 必填,生成签名的随机串
+              "signature": res.data.signature, // 必填,签名,见附录1
+              "jsApiList": ['openLocation'], // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
+          });
+          //通过ready接口处理成功验证
+          wx.ready(function () {
+            //导航
+            wx.openLocation({
+              latitude: mapParam.latitude, // 纬度,浮点数,范围为90 ~ -90
+              longitude: mapParam.longitude, // 经度,浮点数,范围为180 ~ -180。
+              name: mapParam.name, // 位置名
+              address: mapParam.address, // 地址详情说明
+              scale: mapParam.scale, // 地图缩放级别,整型值,范围从1~28。默认为最大
+              infoUrl: mapParam.infoUrl // 在查看位置界面底部显示的超链接,可点击跳转
+            });
+          })
+
+          wx.error(function(res){
+          });
+
+        }
+      });
+    },
+
+    // 导航
+    navigation(address){
+      let data = {
+        address : address
+      } 
+      getLonAndLat(data).then((res) => {
+        if(res.key == 200){
+          if(res.data.status == 0){
+            let mapParam = {
+              name: res.data.result.title,
+              latitude: res.data.result.location.lat,
+              longitude: res.data.result.location.lng,
+              scale: 28,
+              address: data.address,
+              infoUrl: '#'
+            }
+            this.getJsApiSign(mapParam);
+          }
+        }
+      });
+    },
+
+    //判断是iOS还是android
+    isIosOrAndroid() {
+      var isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Adr') > -1; //android终端
+      var isIos = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
+      if(isAndroid){
+          // 相关逻辑代码
+          return 1
+      }
+      if(isIos){
+          // 相关逻辑代码
+          return 2
+      }
+      return 0;
+    }
+
+  },
+};
+</script>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1175 - 0
pages/subPackages/addCompany/addCompany.vue


+ 161 - 0
pages/subPackages/addCompany/isSelectedTags.vue

@@ -0,0 +1,161 @@
+<template>
+  <van-popup :show="show" @close="onClose" position="bottom" round>
+    <div class="vanpoup_1">
+      <div style="display: flex">
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333"
+            >已选择({{ isSelectedList.length }})</span
+          >
+          <span
+            @click="clearAll()"
+            style="float: right; color: #1d18bc; font-size: 30rpx"
+          >
+            清空</span
+          >
+        </div>
+      </div>
+      <scroll-view scroll-y="true" style="height: 50vh">
+        <div
+          style="display: flex"
+          v-for="(item, index) in isSelectedList"
+          :key="index"
+        >
+          <div class="vanpoup_1_1">
+            <span style="font-size: 30rpx; color: #333333">
+              {{ item.label }}
+            </span>
+
+            <span
+              @click="spiliceIsSelectedList(item, index)"
+              style="float: right; color: #1d18bc; font-size: 30rpx"
+            >
+              <van-icon name="cross"
+            /></span>
+          </div>
+        </div>
+      </scroll-view>
+      <view class="btn-view">
+        <button
+          class="btn"
+          @click="closeTagsDialog()"
+          style="
+            border-top-left-radius: 5rem;
+            border-bottom-left-radius: 5rem;
+            background: white;
+            color: #1d18bc;
+            border: 1px solid;
+          "
+        >
+          已选择({{ isSelectedList.length }})<van-icon name="arrow-down" />
+        </button>
+        <button
+          style="
+            border-radius: 0;
+            border: 1px solid #1d18bc;
+            border-top-right-radius: 5rem;
+            border-bottom-right-radius: 5rem;
+          "
+          class="btn"
+          @click="updown()"
+        >
+          确认提交
+        </button>
+      </view>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  props: {
+    isSelectedList: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {
+      show: false,
+    };
+  },
+  methods: {
+    closeTagsDialog() {
+      this.show = false;
+    },
+    updown() {
+      this.$emit("updown");
+    },
+    cancel() {
+      this.show = false;
+    },
+    onOpen(e) {
+      this.show = true;
+    },
+    spiliceIsSelectedList(item, index) {
+      this.$emit("spiliceIsSelectedList", item, index);
+    },
+    clearAll() {
+      this.$emit("clearAll");
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style lang="scss">
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+  button {
+    &::after {
+      border: none;
+    }
+  }
+}
+.btn {
+  width: 40%;
+  height: 90rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+  float: left;
+}
+.vanpoup_1 {
+  height: 50vh;
+  width: 100%;
+  width: calc(100% - 128rpx);
+  margin-bottom: 74rpx;
+  padding: 64rpx;
+}
+.vanpoup_1_1 {
+  width: 100%;
+  border-bottom: 2rpx solid #cccccc;
+  height: 64rpx;
+  line-height: 64rpx;
+}
+</style>

+ 530 - 0
pages/subPackages/addCompany/momo-multipleSelect.vue

@@ -0,0 +1,530 @@
+<template>
+  <view class="select-container" v-show="show" @touchmove.stop.prevent>
+    <view
+      class="mask"
+      :class="activeClass ? 'mask-show' : ''"
+      @tap="onCancel(true)"
+    ></view>
+    <view class="select-box" :class="activeClass ? 'select-box-show' : ''">
+      <div style="height: 900rpx">
+        <div style="display: flex">
+          <uni-easyinput
+            type="text"
+            class="searchinput"
+            v-model="formData.qymc"
+            placeholder="输入关联企业名称(模糊查询)"
+            style="height: 70rpx"
+          />
+          <van-button
+            class="searchbutton"
+            style="height: 70rpx"
+            type="primary"
+            @click="getCompaynList()"
+            >搜索</van-button
+          >
+        </div>
+        <div class="chooseCompanyTags">
+          <scroll-view
+            class="body"
+            scroll-y="true"
+            style="position: absolute; z-index: 1000"
+          >
+            <div
+              v-for="(item, index) in companyList"
+              :key="index"
+              class="selectlist"
+            >
+              <div class="title_2">
+                {{ item.label }}
+              </div>
+              <div
+                v-if="!item.isSelected"
+                class="title_1"
+                @click="chosseTags(item, index)"
+              >
+                <uni-icons type="plusempty" size="30rpx"></uni-icons>
+              </div>
+            </div>
+          </scroll-view>
+        </div>
+      </div>
+
+      <view class="btn-view">
+        <button
+          class="btn"
+          @click="openTagsDialog()"
+          style="
+            border-top-left-radius: 5rem;
+            border-bottom-left-radius: 5rem;
+            background: white;
+            color: #1d18bc;
+            border: 1px solid;
+          "
+        >
+          已选择({{ isSelectedList.length }})<van-icon name="arrow-down" />
+        </button>
+        <button
+          style="
+            border-radius: 0;
+            border: 1px solid #1d18bc;
+            border-top-right-radius: 5rem;
+            border-bottom-right-radius: 5rem;
+          "
+          class="btn"
+          @click="updown()"
+        >
+          确认提交
+        </button>
+      </view>
+    </view>
+    <is-selected-tags
+      ref="isSelectedTags"
+      :isSelectedList="isSelectedList"
+      @clearAll="clearAll"
+      @updown="updown"
+      @spiliceIsSelectedList="spiliceIsSelectedList"
+    />
+  </view>
+</template>
+<!-- 多选组件 -->
+<script>
+import isSelectedTags from "./isSelectedTags.vue";
+export default {
+  data() {
+    return {
+      isSelectedList: [],
+      companyList: [],
+      isSelectList: [],
+      formData: {},
+      show: false, //是否显示
+      activeClass: false, //激活样式状态
+      selectedArr: [], //选择对照列表
+      selectedArrOld: [], //选择对照列表上一次的数据
+    };
+  },
+  components: {
+    isSelectedTags,
+  },
+  onShow() {
+    this.show = this.value;
+  },
+  methods: {
+    async updown() {
+      console.log(this.isSelectedList);
+      this.$emit("confirm", this.isSelectedList);
+      this.show = false;
+    },
+    clearAll() {
+      this.isSelectedList = [];
+      this.companyList.forEach((e) => {
+        e.isSelected = false;
+        this.$forceUpdate();
+      });
+    },
+    spiliceIsSelectedList(item, index) {
+      this.isSelectedList.splice(index, 1);
+      let changeIndex = this.companyList.findIndex(
+        (e) => e.tagCategoryId == item.tagCategoryId
+      );
+      this.companyList[changeIndex].isSelected = false;
+      this.$forceUpdate();
+    },
+    chosseTags(item, index) {
+      let filterIndex = this.isSelectedList.findIndex(
+        (e) => e.value == item.value
+      );
+      if (filterIndex != -1) {
+        this.$showToast("该标签与已选择标签重复");
+        return;
+      }
+      if (item.isEffective == 1) {
+        this.openChooseTimeDialog(item, index);
+      } else {
+        this.isSelectedList.push(this.companyList[index]);
+        this.companyList[index].isSelected = true;
+        this.companyList = [...this.companyList];
+      }
+    },
+    openTagsDialog() {
+      this.$refs.isSelectedTags.onOpen([]);
+    },
+    getAllList(data) {
+      this.companyList = data;
+    },
+    getCompaynList() {
+      console.log(this.companyList);
+      console.log(this.selectedArr);
+      this.$emit("getCompanyAll", this.formData.qymc);
+    },
+    // 设置默认选中通用办法
+    setItemActiveState() {
+      if (this.companyList.length && this.defaultSelected.length) {
+        this.companyList.forEach((item, i) => {
+          for (let n = 0; n < this.defaultSelected.length; n++) {
+            if (
+              !item.disabled &&
+              item[this.valueName] === this.defaultSelected[n]
+            ) {
+              this.selectedArr.splice(i, 1, true);
+              break;
+            }
+          }
+        });
+      }
+    },
+    /**
+     * 选择事件
+     * @index {Number} 点击下标
+     */
+    onSelected(index) {
+      if (this.companyList[index].disabled) return;
+      console.log(this.companyList[index]);
+      if (!this.companyList[index].isSelect) {
+        this.isSelectList.push(this.companyList[index].value);
+        this.companyList[index].isSelect = true;
+      } else {
+        let deleteIndex = this.isSelectList.findIndex(
+          (e) => e.value == this.companyList[index].value
+        );
+        this.isSelectList.splice(deleteIndex, 1);
+        this.companyList[index].isSelect = false;
+      }
+      this.$forceUpdate();
+      this.companyList = [...this.companyList];
+      //   let index2Active = this.selectedArr[index];
+      //   this.selectedArr.splice(index, 1, !index2Active);
+    },
+    // 取消事件
+    onCancel(isMask) {
+      if (!isMask || this.maskCloseAble) {
+        this.show = false;
+        this.selectedArr = JSON.parse(JSON.stringify(this.selectedArrOld));
+      } else {
+        return;
+      }
+      this.$emit("cancel");
+    },
+    // 返回去除了disabled状态后的对照列表
+    returnWipeDisabledList() {
+      let arr = [];
+      this.selectedArr.forEach((el, index) => {
+        if (!this.companyList[index].disabled) arr.push(el);
+      });
+      return arr;
+    },
+    // 全选/非全选事件
+    onAllToggle() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      // 如果去除了disabled的对照列表有false的数据,代表未全选
+      if (wipeDisabledList.includes(false)) {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.companyList[index].disabled)
+            this.selectedArr.splice(index, 1, true);
+        });
+      } else {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.companyList[index].disabled)
+            el = this.selectedArr.splice(index, 1, false);
+        });
+      }
+    },
+    // 确定事件
+    onConfirm() {
+      this.show = false;
+      let selectedData = [];
+      this.companyList.forEach((e, index) => {
+        if (e.isSelect) {
+          selectedData.push(this.companyList[index]);
+        }
+      });
+      if (this.mode === "multiple") {
+        this.$emit("confirm", selectedData);
+      } else {
+        let backData = selectedData[0] || {};
+        this.$emit("confirm", backData);
+      }
+    },
+  },
+  computed: {
+    // 返回是否全选
+    isAll() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      if (!wipeDisabledList.length) return false;
+      return !wipeDisabledList.includes(false);
+    },
+  },
+  props: {
+    // 双向绑定
+    value: {
+      type: Boolean,
+      default: false,
+    },
+    // 取消按钮文字
+    cancelText: {
+      type: String,
+      default: "取消",
+    },
+    // 确认按钮文字
+    confirmText: {
+      type: String,
+      default: "确认",
+    },
+    // label对应的key名称
+    labelName: {
+      type: String,
+      default: "label",
+    },
+    // value对应的key名称
+    valueName: {
+      type: String,
+      default: "value",
+    },
+    // 是否允许点击遮罩层关闭
+    maskCloseAble: {
+      type: Boolean,
+      default: true,
+    },
+    // 是否显示全选
+    allShow: {
+      type: Boolean,
+      default: true,
+    },
+    // 模式
+    mode: {
+      type: String,
+      default: "multiple",
+    },
+    // 默认选中值
+    defaultSelected: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    // 数据源
+    // data: {
+    //   type: Array,
+    //   required: true,
+    //   default: () => {
+    //     return [];
+    //   },
+    // },
+  },
+  watch: {
+    async value(newVal) {
+      this.show = newVal;
+      await this.$nextTick();
+      this.activeClass = newVal;
+      if (newVal) {
+        this.selectedArrOld = JSON.parse(JSON.stringify(this.selectedArr));
+      }
+    },
+    show(newVal) {
+      this.$emit("input", newVal);
+      this.$emit("change", newVal);
+    },
+
+    defaultSelected: {
+      handler() {
+        this.setItemActiveState();
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+};
+</script>
+<style lang="scss">
+.searchbutton {
+  button {
+    height: 69rpx;
+    line-height: 69rpx;
+  }
+}
+.searchinput {
+  .uni-easyinput__content-input {
+    height: 70rpx;
+  }
+}
+
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+  button {
+    &::after {
+      border: none;
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.selectlist {
+  border-bottom: 2rpx solid #cccccc;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.chooseCompanyTags {
+  .title_1 {
+    font-size: 28rpx;
+    font-weight: 500;
+    color: #333333;
+    text-align: right;
+    height: 64rpx;
+    line-height: 64rpx;
+  }
+  .title_2 {
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+    height: 64rpx;
+    line-height: 64rpx;
+    text-align: left;
+  }
+  .title_3 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+  }
+  .cell_1 {
+    float: left;
+    width: 10%;
+  }
+  .checkbox {
+    border: 1px solid #cccccc;
+    border-radius: 4rpx  4rpx  4rpx  4rpx;
+    height: 30rpx;
+    width: 30rpx;
+  }
+  .cell_2 {
+    float: left;
+    width: 90%;
+
+    img {
+      height: 60rpx;
+      width: 60rpx;
+      float: right;
+      margin: 96rpx 0rpx 94rpx 0;
+    }
+  }
+
+  .btn {
+    width: 40%;
+    height: 90rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+    float: left;
+  }
+  .jichuback {
+    width: calc(100% - 64rpx);
+    margin: 32rpx;
+    background: white;
+    border-bottom: 2rpx solid #cccccc;
+  }
+  .tags_type {
+    width: calc(100% - 64rpx);
+    margin: 16rpx;
+  }
+}
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+}
+.btn {
+  width: 40%;
+  height: 90rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+  float: left;
+}
+.select-container {
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  left: 0;
+  top: 0;
+  z-index: 999;
+  $paddingLR: 18rpx;
+  .mask {
+    width: 100%;
+    height: 100%;
+    background-color: $uni-bg-color-mask;
+    opacity: 0;
+    transition: opacity 0.3s;
+    &.mask-show {
+      opacity: 1;
+    }
+  }
+  // 选择器内容区域
+  .select-box {
+    width: 100%;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    transform: translate3d(0px, 100%, 0px);
+    background-color: $uni-bg-color;
+    transition: all 0.3s;
+    &.select-box-show {
+      transform: translateZ(0);
+    }
+    .header {
+      display: flex;
+      box-sizing: border-box;
+      width: 100%;
+      justify-content: space-between;
+      border-bottom: 1px solid $uni-border-color;
+      line-height: 76rpx;
+      font-size: 30rpx;
+      padding: 0 $paddingLR;
+      .cancel {
+        color: $uni-text-color-grey;
+      }
+      .all {
+        .all-active {
+          &::after {
+            display: inline-block;
+            content: "✔";
+            padding-left: 8rpx;
+          }
+        }
+      }
+      .confirm {
+        color: $uni-color-primary;
+      }
+    }
+    .body-warp {
+      width: 100%;
+      height: 30vh;
+      box-sizing: border-box;
+      padding: 20rpx $paddingLR;
+    }
+    .body {
+      width: 96%;
+      height: 70%;
+      overflow-y: auto;
+      padding: 2%;
+      .empty-tips {
+        margin-top: 25%;
+        text-align: center;
+        font-size: 26rpx;
+        color: $uni-color-error;
+      }
+    }
+  }
+}
+</style>

+ 8 - 0
pages/subPackages/addcompanyHouse/addcompanyHouse.vue

@@ -0,0 +1,8 @@
+<template></template>
+
+<script>
+export default {};
+</script>
+
+<style>
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1058 - 0
pages/subPackages/addintention/addintention.vue


+ 82 - 0
pages/subPackages/addintention/chooseTime.vue

@@ -0,0 +1,82 @@
+<template>
+  <van-popup
+    :show="show"
+    @close="onClose"
+    position="bottom"
+    round
+    closeable
+    :close-on-click-overlay="false"
+  >
+    <van-datetime-picker
+      type="date"
+      :value="currentDate"
+      bind:change="onInput"
+      @confirm="confirm1"
+      @cancel="cancel"
+      :min-date="minDate"
+      :formatter="formatter"
+    />
+  </van-popup>
+</template>
+
+<script>
+import vanPopup from "../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  data() {
+    return {
+      show: false,
+      chooseIndex: null,
+      currentDate: new Date().getTime(),
+      minDate: new Date().getTime(),
+      type: null,
+      formatter(type, value) {
+        if (type === "year") {
+          return `${value}年`;
+        }
+        if (type === "month") {
+          return `${value}月`;
+        }
+        return value;
+      },
+    };
+  },
+  methods: {
+    cancel() {
+      this.show = false;
+    },
+    onOpen(i, type) {
+      this.chooseIndex = i;
+      this.type = type;
+      this.show = true;
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.$emit(
+        "getEndTime",
+        this.chooseIndex,
+        this.$common.transDate(this.currentDate),
+        this.type
+      );
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+
+<style>
+</style>

+ 40 - 0
pages/subPackages/buildmap/formatWeeks.js

@@ -0,0 +1,40 @@
+//项目所需以每周五为周第一天  周四结束   可在createYear 方法中修改
+let dayTime = 1000 * 60 * 60 * 24;
+
+export const createYear = (year) => {
+    let arr = [];
+    let yearStart = new Date(`${year}-01-01`);
+    let yearEnd = new Date(`${year}-12-31`);
+    let startTime;
+    if (yearStart.getDay() < 5) {
+        startTime = yearStart.getTime() + (5 - yearStart.getDay()) * dayTime;
+    } else if (yearStart.getDay() > 5) {
+        startTime = yearStart.getTime() + 6 * dayTime;
+    } else {
+        startTime = yearStart.getTime();
+    }
+    let endTime = yearEnd.getDay() < 4 ? yearEnd.getTime() + (4 - yearEnd.getDay()) * dayTime : yearEnd
+        .getTime();
+    formatWeek(startTime, endTime, arr, 0);
+    return arr
+}
+
+function formatWeek(start, end, weeks, index) {
+    let currentTimes = new Date().getTime();
+    weeks.push({
+        week: index + 1,
+        value: `${formatDate(start)}至${formatDate(start  + 6 * dayTime)}`,
+        weekValue: `第${index+1}周`,
+        start: formatDate(start),
+        end: formatDate(start + 6 * dayTime)
+    })
+    if (start + 6 * dayTime < currentTimes && start + 6 * dayTime < end) {
+        formatWeek(start + 7 * dayTime, end, weeks, index + 1)
+    }
+}
+
+function formatDate(timer) {
+    let times = new Date(timer);
+    let [y, m, d] = [times.getFullYear(), times.getMonth() + 1, times.getDate()];
+    return `${y}-${m<10?'0'+m:m}-${d<10?'0'+d:d}`
+}

+ 318 - 0
pages/subPackages/buildmap/index.vue

@@ -0,0 +1,318 @@
+<template>
+  <div class="buildmap">
+    <van-tabs :active="active" @change="onChange">
+      <van-tab title="活跃度排行"> </van-tab>
+      <van-tab title="党支部地图">
+        <view class="page-main">
+          <div>
+            <uni-search-bar
+              :radius="100"
+              style="
+                position: absolute;
+                z-index: 10000;
+                width: 96vw;
+                padding: 0 2vw;
+              "
+              placeholder="搜索党支部"
+              v-model="searchName"
+              @cancel="cancel"
+              @confirm="searchMap"
+            />
+          </div>
+
+          <liu-easy-map
+            ref="liuEasyMap"
+            :scale="14"
+            :markerData="markerData"
+            @clickMarker="markerClick"
+          />
+        </view>
+      </van-tab>
+    </van-tabs>
+    <div style="position: absolute; width: 100%">
+      <div class="bluebg">
+        <div
+          @click="showTimePicker = true"
+          style="
+            display: flex;
+            width: 344rpx;
+            display: flex;
+            height: 60rpx;
+            justify-content: space-around;
+            line-height: 60rpx;
+            color: white;
+            border-radius: 32rpx;
+            border: 2rpx solid rgba(255, 255, 255, 0.53);
+            background: rgba(255, 255, 255, 0.2);
+            margin-top: 32rpx;
+            float: right;
+            margin-right: 70rpx;
+          "
+        >
+          <div>{{ week }}</div>
+          <uni-icons type="bottom" size="20"></uni-icons>
+        </div>
+      </div>
+      <div class="top3">
+        <div class="top3first">
+          <div
+            :class="index == list.lenght ? 'top3-row' : 'top3-row top3borderbt'"
+            v-for="(item, index) in list"
+            :key="index"
+            v-if="index == 0 || index == 1 || index == 2"
+          >
+            <img :src="require(`./top${index + 1}.png`)" width="40rpx" alt="" />
+            <div class="depname">{{ item.branchName }}</div>
+            <div class="bili">{{ item.activationRate + "%" }}</div>
+          </div>
+        </div>
+
+        <div
+          class="top3-1"
+          style="background: white; padding: 10rpx 0; margin-top: 22rpx"
+        >
+          <div
+            :class="index == list.lenght ? 'top3-row' : 'top3-row top3borderbt'"
+            v-for="(item, index) in list"
+            :key="index"
+            v-if="index != 0 && index != 1 && index != 2"
+          >
+            <div
+              style="
+                height: 40rpx;
+                width: 40rpx;
+                text-align: center;
+                line-height: 40rpx;
+                color: #777777;
+              "
+            >
+              {{ index + 1 }}
+            </div>
+            <div class="depname">{{ item.branchName }}</div>
+            <div class="bili">{{ item.activationRate + "%" }}</div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <lys-date
+      ref="lysdate"
+      v-if="showTimePicker"
+      :type="2"
+      :time="time"
+      @cancleTime="showTimePicker = false"
+      @submitTime="submitTime"
+    />
+  </div>
+</template>
+
+<script>
+// import * as lys from "../../../uni_modules/lys-jsUtils.js";
+// uni.$lys = lys;
+import { getPartyBranchList, getActivationRanking } from "@/js_sdk/http.js";
+export default {
+  data() {
+    return {
+      showTimePicker: false,
+      searchName: "",
+      markerData: [],
+      //展示区域点位信息
+      polygons: [],
+      list: [],
+      week: "",
+    };
+  },
+  onShow() {
+    const date = new Date();
+    console.log("第几年", date.getFullYear());
+
+    let week =
+      date.getFullYear() +
+      "第" +
+      this.getYearWeek(
+        date.getFullYear(),
+        Number(date.getMonth()) + 1,
+        date.getDate()
+      ) +
+      "周";
+    console.log(week);
+    this.week = week;
+    this.getActivationRanking(week);
+  },
+  methods: {
+    async getActivationRanking(e) {
+      let { data } = await getActivationRanking({ week: e });
+      console.log(data);
+      this.list = data;
+    },
+    getYearWeek(a, b, c) {
+      //a为年 b为月 c为日
+      /*  
+         date1是当前日期  
+         date2是当年第一天  
+         d是当前日期是今年第多少天  
+         用d + 当前年的第一天的周差距的和在除以7就是本年第几周  
+     */
+      var date1 = new Date(a, parseInt(b) - 1, c),
+        date2 = new Date(a, 0, 1),
+        d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);
+      return Math.ceil((d + (date2.getDay() + 1 - 1)) / 7);
+    },
+    submitTime(e) {
+      this.week = e;
+      this.showTimePicker = false;
+      console.log(e);
+      this.getActivationRanking(e);
+    },
+    onChange(e) {
+      console.log(e.detail.name);
+      if (e.detail.name == 1) {
+        this.getPartyBranchList();
+      }
+    },
+    cancel() {
+      this.searchName = "";
+      this.getPartyBranchList();
+    },
+    async searchMap() {
+      // changeCenter
+      let { data } = await getPartyBranchList({ searchName: this.searchName });
+      this.markerData = data.map((e, index, array) => {
+        return {
+          latitude: e.branchLat,
+          longitude: e.branchLng,
+          name: e.branchName,
+          mapid: e.id,
+          id: index,
+          address: e.branchName,
+          iconWidth: 32, //标记点图标宽度
+          iconHeight: 32, //标记点图标高度
+          calloutColor: "#798DF3", //气泡窗口 文本颜色
+          calloutFontSize: 16, //气泡窗口 文本大小
+          calloutBorderRadius: 6, //气泡窗口 边框圆角
+          calloutPadding: 8, //气泡窗口 文本边缘留白
+          calloutBgColor: "#00000000", //气泡窗口 背景颜色
+          calloutDisplay: "ALWAYS", //气泡窗口 展示类型 默认常显 'ALWAYS' 常显 'BYCLICK' 点击显示
+          markerUrl: require("./markerone.png"),
+        };
+      });
+      this.$refs.liuEasyMap.changeCenter({
+        latitude: this.markerData[0].latitude,
+        longitude: this.markerData[0].longitude,
+      });
+      this.$refs.liuEasyMap.showMarkers();
+    },
+    async getPartyBranchList() {
+      let { data } = await getPartyBranchList({ searchName: this.searchName });
+      console.log(data);
+      this.markerData = data.map((e, index, array) => {
+        return {
+          latitude: e.branchLat,
+          longitude: e.branchLng,
+          name: e.branchName,
+          mapid: e.id,
+          id: index,
+          address: e.branchName,
+          iconWidth: 32, //标记点图标宽度
+          iconHeight: 32, //标记点图标高度
+          calloutColor: "#798DF3", //气泡窗口 文本颜色
+          calloutFontSize: 16, //气泡窗口 文本大小
+          calloutBorderRadius: 6, //气泡窗口 边框圆角
+          calloutPadding: 8, //气泡窗口 文本边缘留白
+          calloutBgColor: "#00000000", //气泡窗口 背景颜色
+          calloutDisplay: "ALWAYS", //气泡窗口 展示类型 默认常显 'ALWAYS' 常显 'BYCLICK' 点击显示
+          markerUrl: require("./markerone.png"),
+        };
+      });
+      this.$refs.liuEasyMap.showMarkers();
+    },
+    //点击标记点
+    markerClick(e) {
+      console.log("点击标记点信息:", e);
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+.top3first {
+  background: url(./topfirst3.png) no-repeat;
+  border-radius: 1rem;
+  background-size: 100% 100%;
+  padding: 10rpx;
+}
+.page-main {
+  width: 100%;
+  height: 100vh;
+}
+.buildmap {
+  .top3borderbt {
+    border-bottom: 2rpx solid rgba(204, 204, 204, 0.4);
+  }
+  .top3-1 {
+    background: url(./topfirst3.png) no-repeat;
+    background-size: 100% 100%;
+    width: 100%;
+    border-radius: 1rem;
+  }
+  .top3 {
+    // height: 343rpx;
+    background-size: 100% 100%;
+    width: 80%;
+    position: relative;
+    top: 115rpx;
+    left: 10%;
+    border-radius: 1rem;
+
+    .top3-row {
+      display: flex;
+      margin: 32rpx 32rpx 0 32rpx;
+      padding-bottom: 24rpx;
+
+      img {
+        width: 40rpx;
+        height: 40rpx;
+        margin-right: 24rpx;
+      }
+      .depname {
+        color: #162485;
+        /* height: 40rpx; */
+        line-height: 40rpx;
+        font-size: 28rpx;
+        width: 80%;
+      }
+      .bili {
+        width: 116rpx;
+        text-align: center;
+        border-radius: 15rem;
+        height: 40rpx;
+        line-height: 40rpx;
+        font-weight: 400;
+        background: rgba(33, 85, 244, 0.05);
+        color: #798df3;
+        margin-left: auto;
+      }
+    }
+  }
+  .bluebg {
+    width: 100%;
+    height: 260rpx;
+    background: linear-gradient(132deg, #3c53f0 0%, #1026c3 100%);
+    position: absolute;
+  }
+  .uni-searchbar {
+    background: white;
+    padding: 0;
+    margin-top: 10rpx;
+    border-radius: 100rpx;
+    .uni-searchbar__box {
+      background: white !important;
+    }
+    .uni-searchbar__cancel {
+      padding: 0 !important;
+      text-align: left !important;
+      width: 75rpx !important;
+    }
+  }
+}
+</style>

BIN
pages/subPackages/buildmap/markerone.png


BIN
pages/subPackages/buildmap/top1.png


BIN
pages/subPackages/buildmap/top2.png


BIN
pages/subPackages/buildmap/top3.png


BIN
pages/subPackages/buildmap/topfirst3.png


+ 143 - 0
pages/subPackages/chooseCompanyTags/componets/chooseTime.vue

@@ -0,0 +1,143 @@
+<template>
+  <van-popup
+    :z-index="1000"
+    :show="show"
+    @close="onClose"
+    position="bottom"
+    round
+    class="chosseTime"
+  >
+    <div class="vanpoup_1">
+      <div class="choostimetitle">有效期选择</div>
+
+      <div
+        class="choostimetitle"
+        style="color: #333333; margin-top: 32rpx; border: none"
+      >
+        标签开始生效年月
+      </div>
+      <picker
+        mode="date"
+        :value="form.effectiveDate"
+        fields="month"
+        @change="bindDateChange"
+      >
+        <input
+          disabled="true"
+          class="pickerclass"
+          v-model="form.effectiveDate"
+          placeholder="请选择月份"
+        />
+      </picker>
+      <div style="margin-top: 16rpx; width: 100%">
+        <van-button type="default" class="button100" @click="closeDialog()"
+          >取消</van-button
+        >
+        <van-button
+          type="info"
+          class="button100"
+          custom-class="userinfobtn"
+          @click="pushIsCheckItem()"
+          >确定</van-button
+        >
+      </div>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  data() {
+    return {
+      form: {
+        effectiveDate: "",
+        checkIndex: null,
+      },
+      checkIndex: null,
+      show: false,
+      isSelectedList: [],
+    };
+  },
+  methods: {
+    closeDialog() {
+      this.show = false;
+    },
+    pushIsCheckItem() {
+      if (this.form.effectiveDate == "") {
+        this.$showToast("该标签需要效期,请选择");
+      } else {
+        this.$emit("pushIsCheckItem", this.form);
+        this.show = false;
+      }
+    },
+    bindDateChange(event) {
+      this.form.effectiveDate = event.detail.value;
+      this.$forceUpdate();
+    },
+    cancel() {
+      this.show = false;
+    },
+    onOpen(item, index) {
+      this.form = { ...item };
+      this.form.effectiveDate = "";
+      this.form.checkIndex = index;
+      this.show = true;
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style lang="scss">
+.button100 {
+  button {
+    width: 100% !important;
+    margin-top: 32rpx;
+  }
+  .van-button--info {
+  }
+}
+.userinfobtn {
+  background: #1d18bc !important;
+  border: none;
+}
+.chosseTime {
+  .choostimetitle {
+    padding-bottom: 32rpx;
+    color: #1d18bc;
+    font-size: 30rpx;
+    border-bottom: 2px solid #cccccc;
+  }
+  .vanpoup_1 {
+    width: 100%;
+    width: calc(100% - 128rpx);
+
+    padding: 64rpx;
+  }
+  .vanpoup_1_1 {
+    width: 100%;
+    border-bottom: 2rpx solid #cccccc;
+    height: 104rpx;
+    line-height: 104rpx;
+  }
+}
+</style>

+ 104 - 0
pages/subPackages/chooseCompanyTags/componets/isSelectedTags.vue

@@ -0,0 +1,104 @@
+<template>
+  <van-popup :show="show" @close="onClose" position="bottom" round>
+    <div class="vanpoup_1">
+      <div style="display: flex">
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333"
+            >已选择({{ isSelectedList.length }})</span
+          >
+          <span
+            @click="clearAll()"
+            style="float: right; color: #1d18bc; font-size: 30rpx"
+          >
+            清空</span
+          >
+        </div>
+      </div>
+      <div
+        style="display: flex"
+        v-for="(item, index) in isSelectedList"
+        :key="index"
+      >
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333">
+            {{ item.tagName }}
+            {{ !item.effectiveDate ? "" : item.effectiveDate }}
+          </span>
+
+          <span
+            @click="spiliceIsSelectedList(item, index)"
+            style="float: right; color: #1d18bc; font-size: 30rpx"
+          >
+            <van-icon name="cross"
+          /></span>
+        </div>
+      </div>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  props: {
+    isSelectedList: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {
+      show: false,
+    };
+  },
+  methods: {
+    cancel() {
+      this.show = false;
+    },
+    onOpen(e) {
+      this.show = true;
+    },
+    spiliceIsSelectedList(item, index) {
+      this.$emit("spiliceIsSelectedList", item, index);
+    },
+    clearAll() {
+      this.$emit("clearAll");
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style>
+.vanpoup_1 {
+  height: 50vh;
+  width: 100%;
+  width: calc(100% - 128rpx);
+  margin-bottom: 74rpx;
+  padding: 64rpx;
+}
+.vanpoup_1_1 {
+  width: 100%;
+  border-bottom: 2rpx solid #cccccc;
+  height: 104rpx;
+  line-height: 104rpx;
+}
+</style>

+ 338 - 0
pages/subPackages/chooseCompanyTags/index.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="chooseCompanyTags">
+    <div class="jichuback">
+      <div class="tags_type">
+        <uni-data-checkbox
+          v-model="form.groupIds"
+          mode="tag"
+          :localdata="yuanqu_loacldata"
+          selectedTextColor="#1D18BC"
+          selectedColor="rgba(29,24,188,0.05);"
+          @change="getSelectedYuanqu"
+        >
+        </uni-data-checkbox>
+      </div>
+
+      <div
+        v-for="(item, index) in tagsList"
+        @click="chosseTags(item, index)"
+        :key="index"
+        style="
+          height: 130rpx;
+          padding-left: 32rpx;
+          padding-top: 24rpx;
+          border-bottom: 2rpx solid #cccccc;
+        "
+      >
+        <div class="cell_1">
+          <div
+            class="checkbox"
+            :style="{ background: !item.isSelected ? '' : '#2527aa' }"
+          >
+            <van-icon name="success" style="font-size: 30rpx; color: white" />
+          </div>
+        </div>
+        <div class="cell_2">
+          <div class="title_1">{{ item.tagName }}</div>
+          <div class="title_2">
+            有无效期:{{ item.isEffective == 1 ? "有" : "无" }}
+          </div>
+          <div class="title_3">
+            标签说明:{{
+              item.remark == "null" || !item.remark ? "暂无说明" : item.remark
+            }}
+          </div>
+        </div>
+      </div>
+    </div>
+    <view class="btn-view">
+      <button
+        class="btn"
+        @click="openTagsDialog()"
+        style="
+          border-top-left-radius: 5rem;
+          border-bottom-left-radius: 5rem;
+          background: white;
+          color: #1d18bc;
+          border: 1px solid;
+        "
+      >
+        已选择({{ isSelectedList.length }})<van-icon name="arrow-down" />
+      </button>
+      <button
+        style="
+          border-radius: 0;
+          border: 1px solid #1d18bc;
+          border-top-right-radius: 5rem;
+          border-bottom-right-radius: 5rem;
+        "
+        class="btn"
+        @click="updown()"
+      >
+        确认提交
+      </button>
+    </view>
+
+    <is-selected-tags
+      ref="isSelectedTags"
+      :isSelectedList="isSelectedList"
+      @clearAll="clearAll"
+      @spiliceIsSelectedList="spiliceIsSelectedList"
+    />
+    <choose-time ref="chooseTime" @pushIsCheckItem="pushIsCheckItem" />
+  </div>
+</template>
+
+<script>
+const form = {
+  groupIds: "",
+  id: "",
+};
+import isSelectedTags from "./componets/isSelectedTags.vue";
+import chooseTime from "./componets/chooseTime.vue";
+import {
+  tagCategoryList,
+  getWxCompanyTags,
+  getCompanyTags,
+  tagsBind,
+} from "@/js_sdk/http";
+export default {
+  data() {
+    return {
+      isSelectedList: [],
+      form: { ...form },
+      tagsList: [],
+      yuanqu_loacldata: [
+        { value: 1, text: "通用属性" },
+        { value: 2, text: "商务属性" },
+        { value: 3, text: "科技属性" },
+        { value: 4, text: "规模属性" },
+        { value: 5, text: "人才属性" },
+        { value: 6, text: "其他属性" },
+      ],
+    };
+  },
+  components: {
+    isSelectedTags,
+    chooseTime,
+  },
+  watch: {
+    isSelectedList(newValue, oldValue) {
+      let that = this;
+      for (let i = 0; i < that.tagsList.length; i++) {
+        for (let j = 0; j < that.isSelectedList.length; j++) {
+          if (
+            that.tagsList[i].tagCategoryId ==
+            that.isSelectedList[j].tagCategoryId
+          ) {
+            that.tagsList[i].isSelected = true;
+            that.$forceUpdate();
+          }
+        }
+      }
+    },
+    tagsList(newValue, oldValue) {
+      let that = this;
+      for (let i = 0; i < that.tagsList.length; i++) {
+        for (let j = 0; j < that.isSelectedList.length; j++) {
+          if (
+            that.tagsList[i].tagCategoryId ==
+            that.isSelectedList[j].tagCategoryId
+          ) {
+            that.tagsList[i].isSelected = true;
+            that.$forceUpdate();
+          }
+        }
+      }
+    },
+  },
+  onLoad(option) {
+    this.form.id = option.id;
+    this.tagCategoryList();
+  },
+
+  methods: {
+    async getSelectedYuanqu2() {
+      let data = await getWxCompanyTags({
+        tagCategoryId: this.yuanqu_loacldata[0].value,
+      });
+      that.form.groupIds = this.yuanqu_loacldata[0].value;
+      this.tagsList = data.map((e) => {
+        return {
+          tagCategoryId: e.id,
+          tagName: e.tagName,
+          isEffective: e.isEffective,
+          isSelected: false,
+        };
+      });
+    },
+    spiliceIsSelectedList(item, index) {
+      this.isSelectedList.splice(index, 1);
+      let changeIndex = this.tagsList.findIndex(
+        (e) => e.tagCategoryId == item.tagCategoryId
+      );
+      this.tagsList[changeIndex].isSelected = false;
+      this.$forceUpdate();
+    },
+    clearAll() {
+      this.isSelectedList = [];
+      this.tagsList.forEach((e) => {
+        e.isSelected = false;
+        this.$forceUpdate();
+      });
+    },
+    pushIsCheckItem(form) {
+      this.tagsList[form.checkIndex].isSelected = true;
+      this.tagsList = [...this.tagsList];
+      this.isSelectedList.push(form);
+    },
+    async updown() {
+      let that = this;
+      let tagInfo = that.isSelectedList.map((e) => {
+        return {
+          isEffective: e.isEffective == "1" ? "有" : "无",
+          tagName: e.tagName,
+          id: e.tagCategoryId,
+          effectiveDate: e.isEffective == "1" ? e.effectiveDate : "",
+        };
+      });
+      let data = {
+        tagInfo: JSON.stringify(tagInfo),
+        enterpriseId: that.form.id,
+      };
+      let backdata = await tagsBind(data);
+      if (backdata.code == 200) {
+        this.$showToast("添加成功");
+        uni.navigateBack({});
+      } else {
+        this.$showToast(backdata.msg);
+      }
+    },
+    chosseTags(item, index) {
+      let filterIndex = this.isSelectedList.findIndex(
+        (e) => e.tagCategoryId == item.tagCategoryId
+      );
+      if (filterIndex != -1) {
+        this.$showToast("该标签与已选择标签重复");
+        return;
+      }
+      if (item.isEffective == 1) {
+        this.openChooseTimeDialog(item, index);
+      } else {
+        this.isSelectedList.push(this.tagsList[index]);
+        this.tagsList[index].isSelected = true;
+        this.tagsList = [...this.tagsList];
+      }
+    },
+    async getSelectedYuanqu(event) {
+      let data = await getWxCompanyTags({
+        tagCategoryId: event.detail.data.value,
+      });
+      this.tagsList = data.map((e) => {
+        return {
+          tagCategoryId: e.id,
+          tagName: e.tagName,
+          isEffective: e.isEffective,
+          isSelected: false,
+        };
+      });
+    },
+    async tagCategoryList() {
+      let data = await tagCategoryList();
+      this.yuanqu_loacldata = data.map((e) => {
+        return {
+          text: e.name,
+          value: e.id,
+        };
+      });
+      this.getSelectedYuanqu2();
+    },
+    takeParamsGoBack() {},
+    openTagsDialog() {
+      this.$refs.isSelectedTags.onOpen([]);
+    },
+    openChooseTimeDialog(item, index) {
+      this.$refs.isSelectedTags.onClose();
+      this.$refs.chooseTime.onOpen(item, index);
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+.chooseCompanyTags {
+  .title_1 {
+    margin-bottom: 12rpx;
+    font-size: 28rpx;
+
+    font-weight: 500;
+    color: #333333;
+  }
+  .title_2 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+
+    font-weight: 500;
+
+    color: #777777;
+  }
+  .title_3 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+  }
+  .cell_1 {
+    float: left;
+    width: 10%;
+  }
+  .checkbox {
+    border: 1px solid #cccccc;
+    border-radius: 4rpx  4rpx  4rpx  4rpx;
+    height: 30rpx;
+    width: 30rpx;
+  }
+  .cell_2 {
+    float: left;
+    width: 90%;
+
+    img {
+      height: 60rpx;
+      width: 60rpx;
+      float: right;
+      margin: 96rpx 0rpx 94rpx 0;
+    }
+  }
+  button::after {
+    border: none;
+  }
+  .btn-view {
+    width: 100%;
+    height: 100rpx;
+    padding: 20rpx 10%;
+    background-color: #ffffff;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    z-index: 1000;
+  }
+  .btn {
+    width: 40%;
+    height: 90rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+    float: left;
+  }
+  .jichuback {
+    width: calc(100% - 64rpx);
+    margin: 32rpx;
+    background: white;
+    border-bottom: 2rpx solid #cccccc;
+  }
+  .tags_type {
+    width: calc(100% - 64rpx);
+    margin: 16rpx;
+  }
+}
+</style>

+ 820 - 0
pages/subPackages/chosseHouse/chosseHouse.vue

@@ -0,0 +1,820 @@
+<template>
+  <div class="chosseHouse">
+    <div class="chosseHouse">
+      <div class="form">
+        <van-row>
+          <van-col :span="4">
+            <div class="label">园区</div>
+          </van-col>
+          <van-col :span="20">
+            <uni-data-checkbox
+              v-model="form.groupIds"
+              mode="tag"
+              :localdata="yuanqu_loacldata"
+              selectedTextColor="#1D18BC"
+              selectedColor="rgba(29,24,188,0.05);"
+              @change="getSelectedYuanqu"
+            >
+            </uni-data-checkbox>
+          </van-col>
+        </van-row>
+        <van-row v-if="form.groupIds != null">
+          <van-col class="labelcolmt26" :span="4">
+            <div class="label">楼盘</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="20">
+            <uni-data-checkbox
+              v-model="form.loupan_value"
+              mode="tag"
+              :localdata="loupan_loacldata"
+              selectedTextColor="#1D18BC"
+              selectedColor="rgba(29,24,188,0.05);"
+              @change="getSelectedLoupan"
+            >
+            </uni-data-checkbox>
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="4">
+            <div class="label">状态</div>
+          </van-col>
+          <van-col class="labelcolmt26 status" :span="20">
+            <uni-data-checkbox
+              v-model="form.statusArray"
+              :localdata="statusList"
+              :multiple="true"
+              selectedTextColor="#1D18BC"
+              selectedColor="rgba(29,24,188,0.05);"
+              @change="getSelectedStatus"
+            >
+            </uni-data-checkbox>
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="4">
+            <div class="label">朝向</div>
+          </van-col>
+          <van-col class="labelcolmt26 status" :span="20">
+            <uni-data-checkbox
+              v-model="form.chaoxiangArray"
+              :localdata="fangxiangList"
+              :multiple="true"
+              selectedTextColor="#1D18BC"
+              selectedColor="rgba(29,24,188,0.05);"
+              @change="getChaoxiang"
+            >
+            </uni-data-checkbox>
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="6">
+            <div class="label">载体性质</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="18">
+            <uni-data-checkbox
+              v-model="form.zaitiTypeArray"
+              mode="tag"
+              :localdata="xinzhiList"
+              selectedTextColor="#1D18BC"
+              selectedColor="rgba(29,24,188,0.05);"
+              @change="getSelectedXingZhi"
+            >
+            </uni-data-checkbox>
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="5">
+            <div class="label">指导价</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="9">
+            <input
+              v-model="form.guidePrice1"
+              type="number"
+              placeholder="最低价"
+            />
+          </van-col>
+          <van-col :span="1">
+            <div class="width100 txt_center" style="margin-top: 30rpx">-</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="9">
+            <input
+              v-model="form.guidePrice2"
+              type="number"
+              placeholder="最高价"
+            />
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="5">
+            <div class="label">面积</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="9">
+            <input
+              v-model="form.roomSize1"
+              type="number"
+              placeholder="最小面积"
+            />
+          </van-col>
+          <van-col :span="1">
+            <div class="width100 txt_center" style="margin-top: 30rpx">-</div>
+          </van-col>
+          <van-col class="labelcolmt26" :span="9">
+            <input
+              v-model="form.roomSize2"
+              type="number"
+              placeholder="最大面积"
+            />
+          </van-col>
+        </van-row>
+        <van-row>
+          <van-col class="labelcolmt26" :span="6">
+            <van-button color="#F1F2F9" custom-class="reset_btn" @click="reast"
+              >重置</van-button
+            >
+          </van-col>
+          <van-col class="labelcolmt26" :span="18">
+            <van-button
+              color="#2527AA"
+              custom-class="search_btn"
+              @click="search"
+            >
+              <van-icon name="search" />
+              搜索
+            </van-button>
+          </van-col>
+        </van-row>
+      </div>
+      <div class="list" style="padding-bottom: 200rpx">
+        <div v-if="vamTabStatus">
+          <van-tabs
+            id="tabs"
+            @change="getSelectedLoudong"
+            @before-change="onBeforeChange"
+            line-width="80rpx"
+            title-active-color="#1D18BC"
+          >
+            <van-tab
+              v-for="(item, index) in loudongList"
+              :title="item.ldmc"
+              :name="item.id"
+              :key="index"
+            >
+            </van-tab>
+          </van-tabs>
+        </div>
+        <div class="total" v-if="roomList.length != 0">
+          共
+          <span style="color: #1d18bc">{{ form.total }}</span>
+          间
+        </div>
+        <van-checkbox-group :value="result" @change="onChange">
+          <div
+            class="list-row"
+            v-if="roomList.length != 0"
+            v-for="item in roomList"
+            :key="item.id"
+          >
+            <div class="cell_0">
+              <van-checkbox :name="item.id"> </van-checkbox>
+            </div>
+            <div class="cell_1">
+              <div class="width100 height44rpx mb8rpx">
+                <div class="first_title">
+                  {{
+                    item.yuanquName +
+                    item.quyuName +
+                    item.loudongName +
+                    item.roomNo
+                  }}
+                </div>
+              </div>
+              <div class="width100 height40rpx mb8rpx">
+                <div class="second_title">
+                  用途:{{
+                    getDicType("roomUse", item.roomUse) == undefined
+                      ? "未知"
+                      : getDicType("roomUse", item.roomUse)
+                  }}
+                </div>
+                <div class="second_title_1 width50 chaochuyincang">
+                  装修情况:{{
+                    !item.decorationSituation
+                      ? "未知"
+                      : item.decorationSituation
+                  }}
+                </div>
+              </div>
+              <div class="width100 height36rpx mb14rpx">
+                <div class="third_title" v-if="item.roomSize">
+                  面积(㎡):{{ item.roomSize }}平米
+                </div>
+                <div class="third_title" v-if="!item.roomSize">
+                  面积(㎡):未知
+                </div>
+                <div class="third_title_1">
+                  朝向:{{ item.roomDirection ? item.roomDirection : "未知" }}
+                </div>
+              </div>
+              <div class="width100 height50rpx mb14rpx">
+                <div
+                  class="roomstatus"
+                  v-if="getDicType('zaiti', item.zaitiType)"
+                >
+                  {{ getDicType("zaiti", item.zaitiType) }}
+                </div>
+                <div class="roomstatus" v-if="item.currentState == 1">空置</div>
+                <div class="roomstatus" v-if="item.currentState == 2">锁定</div>
+                <div class="roomstatus" v-if="item.currentState == 3">预约</div>
+                <div class="roomstatus" v-if="item.currentState == 4">临期</div>
+                <div class="roomstatus" v-if="item.currentState == 5">已租</div>
+                <div class="roomstatus" v-if="item.currentState == 6">到期</div>
+              </div>
+              <div class="width100 height36rpx">
+                <div class="float_left chuzu_label">
+                  出租指导价(元/㎡/月):
+                </div>
+                <span class="float_left chuzu_vlaue">
+                  <span class="float_left chuzu_vlaue">
+                    {{ !item.guidePrice ? "未知" : item.guidePrice }}
+                  </span>
+                </span>
+              </div>
+            </div>
+            <div class="cell_2" @click="jumpPage(item.id)">
+              <img src="../../../static/mine/youjiantou.png" alt="" />
+            </div>
+          </div>
+          <div class="list-row" v-if="roomList.length == 0">
+            <van-empty
+              class="disblock marginauto"
+              style="background: white"
+              description="暂无数据"
+            />
+          </div>
+        </van-checkbox-group>
+      </div>
+    </div>
+    <view class="‘btn-view‘">
+      <button class="btn" @click="takeParamsGoBack()">添加</button>
+    </view>
+  </div>
+</template>
+
+<script>
+import vanTab from "../../../wxcomponents/weapp/dist/tab/index";
+import vanTabs from "../../../wxcomponents/weapp/dist/tabs/index";
+import vanEmpty from "../../../wxcomponents/weapp/dist/empty/index";
+import {
+  findYuanQuList,
+  findLongPanList,
+  findLouDongList,
+  findRoomByCondition,
+  getByCodes,
+} from "@/js_sdk/http.js";
+
+const form = {
+  isFromApp: 1,
+  status: [],
+  chaoxiang: [],
+  statusArray: [],
+  chaoxiangArray: [],
+  zaitiTypeArray: [],
+  roomSize1: "",
+  roomSize2: "",
+  guidePrice1: "",
+  guidePrice2: "",
+  loupan_value: null,
+  groupIds: null,
+  pageNum: 1,
+  pageSize: 10,
+  total: 0,
+  mnpBuildingIds: "",
+  currentState: "",
+};
+
+export default {
+  components: {
+    vanTab,
+    vanTabs,
+    vanEmpty,
+  },
+  name: "chosseHouser.vue",
+  data() {
+    return {
+      result: [],
+      copy_result: [],
+      dic_key: ["PROPERTY_NATURE", "HOUSE_USAGE"],
+      dic_SelectList: {},
+      loudongList: [],
+      activezhaoshang: "0",
+      form: {
+        ...form,
+      },
+      active: 0,
+      formData: {},
+      value: 0,
+      vamTabStatus: false,
+      yuanqu_loacldata: [],
+      loupan_loacldata: [],
+      range: [
+        {
+          value: 0,
+          text: "科教产业园",
+        },
+        {
+          value: 1,
+          text: "红沙湾",
+        },
+        {
+          value: 2,
+          text: "胡埭",
+        },
+      ],
+      loupanList: [
+        {
+          value: 0,
+          text: "一期",
+        },
+        {
+          value: 1,
+          text: "二期",
+        },
+        {
+          value: 2,
+          text: "三期",
+        },
+        {
+          value: 3,
+          text: "四期",
+        },
+        {
+          value: 4,
+          text: "五期",
+        },
+        {
+          value: 5,
+          text: "六期",
+        },
+        {
+          value: 6,
+          text: "七期",
+        },
+        {
+          value: 7,
+          text: "八期",
+        },
+        {
+          value: 8,
+          text: "九期",
+        },
+      ],
+      statusList: [
+        {
+          value: 1,
+          text: "空置",
+        },
+
+        {
+          value: 3,
+          text: "预约",
+        },
+        {
+          value: 4,
+          text: "临期",
+        },
+
+        {
+          value: 6,
+          text: "到期",
+        },
+      ],
+      roomList: [],
+      fangxiangList: [
+        {
+          value: 0,
+          text: "东",
+        },
+        {
+          value: 1,
+          text: "南",
+        },
+        {
+          value: 2,
+          text: "西",
+        },
+        {
+          value: 3,
+          text: "北",
+        },
+      ],
+      xinzhiList: [
+        {
+          value: 1,
+          text: "自有物业",
+        },
+        {
+          value: 2,
+          text: "社会物业",
+        },
+      ],
+    };
+  },
+
+  mounted() {
+    this.findYuanQuList();
+    this.getByCodes();
+  },
+
+  methods: {
+    reast() {
+      this.roomList = [];
+      this.form = { ...form };
+      this.findYuanQuList();
+      this.getByCodes();
+    },
+    async search() {
+      if (!this.form.groupIds && !this.form.loupan_value) {
+        return this.$showToast("请选择园区和楼盘后重试");
+      }
+      if (!this.form.groupIds) {
+        return this.$showToast("请选择园区后重试");
+      }
+      if (!this.form.loupan_value) {
+        return this.$showToast("请选择楼盘后重试");
+      }
+      this.form.pageNum = 1;
+      this.form.pageSize = 10;
+      this.form.total = 0;
+      let data = await findRoomByCondition(this.form);
+      this.roomList = data.rows;
+      this.form.total = data.total;
+    },
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+    },
+    onBeforeChange() {
+      this.copy_result = [...this.result];
+    },
+    getSelectedLoudong(event) {
+      let that = this;
+      let result = [...that.result];
+      that.result = [];
+      that.roomList = [];
+      this.form.mnpBuildingIds =
+        event.detail.title == "全部" ? "" : event.detail.name;
+      // this.form
+
+      findRoomByCondition(that.form).then((res) => {
+        res.rows.forEach((element) => {
+          that.roomList.push(element);
+        });
+        that.form.total = res.total;
+
+        // setTimeout(() => {
+        that.result = result;
+        // }, 200);
+      });
+    },
+    async getSelectedYuanqu() {
+      let data = await findLongPanList(this.form.groupIds);
+      this.roomList = [];
+
+      this.loudongList = [];
+      if (data.length > 0) {
+        this.loupan_loacldata = data.map((e) => {
+          return {
+            value: e.id,
+            text: e.name,
+          };
+        });
+      } else {
+        this.loupan_loacldata = [{ value: null, text: "暂无" }];
+      }
+      console.log(this.loupan_loacldata);
+    },
+    async getSelectedLoupan() {
+      try {
+        let data = await findLouDongList(this.form.loupan_value);
+        this.vamTabStatus = false;
+        console.log(data);
+        if (data.length == 0) {
+          this.loudongList = [];
+          this.roomList = [];
+          this.tabsStatus = !this.tabsStatus;
+          return;
+        } else {
+          console.log("我tm有数据的", data);
+          this.loudongList = [...data];
+          this.form.mnpBuildingIds = data[0].id;
+          this.roomList = [];
+        }
+
+        let row = await findRoomByCondition(this.form);
+        console.log("我是row", row);
+        this.roomList = row.rows;
+        this.form.total = row.total;
+        this.vamTabStatus = true;
+        console.log(row);
+      } catch (e) {
+        console.log("e这天真热", e);
+      }
+    },
+    findYuanQuList() {
+      findYuanQuList().then((data) => {
+        let yuanqu_list = [...data];
+        let yuanqu_loacldata = yuanqu_list.map((e) => {
+          return {
+            value: e.id,
+            text: e.groupName,
+          };
+        });
+        this.yuanqu_loacldata = yuanqu_loacldata;
+      });
+
+      // console.log(yuanqu_loacldata)
+    },
+    jumpPage(id) {
+      uni.navigateTo({
+        url: "/pages/subPackages/housedetails/housedetails?id=" + id,
+      });
+    },
+    getDicType(type, value) {
+      if (!value) return;
+      if (type == "zaiti") {
+        let PROPERTY_NATURE = this.dic_SelectList.PROPERTY_NATURE;
+        let index = PROPERTY_NATURE.findIndex((e) => e.value == value);
+        return PROPERTY_NATURE[index].label;
+      }
+      if (type == "roomUse") {
+        let HOUSE_USAGE = this.dic_SelectList.HOUSE_USAGE;
+        let index = HOUSE_USAGE.findIndex((e) => e.value == value);
+        return HOUSE_USAGE[index].label;
+      }
+    },
+    onLoadMore() {},
+    onLoad: function (option) {
+      //option为object类型,会序列化上个页面传递的参数
+      this.type = option.type; //打印出上个页面传递的参数。
+    },
+    getChaoxiang() {
+      this.form.roomDirection = this.form.chaoxiangArray.join(",");
+    },
+    getSelectedStatus(e) {
+      this.form.currentState = this.form.statusArray.join(",");
+    },
+    getSelectedXingZhi() {
+      this.form.zaitiType = this.form.zaitiTypeArray.join(",");
+    },
+    takeParamsGoBack() {
+      let params = {
+        type: this.type,
+        result: this.result,
+      };
+      uni.$emit("getuser", params);
+      uni.navigateBack();
+    },
+
+    change(e) {},
+
+    getStatus() {},
+    onChange(event) {
+      this.result = event.detail;
+    },
+  },
+  onPullDownRefresh: function () {
+    // 加载数据
+  },
+  onReachBottom() {}, //下拉执行的时候触发 (下拉刷新)
+};
+</script>
+
+<style lang="scss">
+.chaochuyincang {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+/deep/.van-cell {
+  padding: 0 0 0 28rpx !important;
+}
+.inputClass {
+  padding: 0 0 0 28rpx !important;
+}
+.chosseHouse {
+  .search_btn {
+    margin-left: 18rpx;
+    width: calc(100% - 18rpx);
+    height: 60rpx;
+  }
+  .reset_btn {
+    color: #2628a9 !important;
+    width: 100%;
+    height: 60rpx;
+  }
+  .btn-view {
+    width: 100%;
+    height: 100rpx;
+    padding: 20rpx 10%;
+    background-color: #ffffff;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+  }
+  .btn {
+    width: 80%;
+    height: 90rpx;
+    border-radius: 50rpx 50rpx 50rpx 50rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+  }
+  .float_left {
+    float: left;
+  }
+  .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;
+  }
+  .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%;
+  }
+  .height36rpx {
+    height: 36rpx;
+  }
+  .height40rpx {
+    height: 40rpx;
+  }
+  .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;
+  }
+  .roomstatus:first-child {
+    margin-left: 0 !important;
+  }
+  .list-row {
+    width: calc(100% - 64rpx);
+    padding: 16rpx 32rpx 18rpx 32rpx;
+    background: #ffffff;
+    margin-bottom: 16rpx;
+    display: flex;
+    //height: 278rpx;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+  }
+  .second_title {
+    float: left;
+    width: 40%;
+    font-size: 28rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #777777;
+  }
+  .second_title_1 {
+    float: left;
+    width: 60%;
+    font-size: 28rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #777777;
+  }
+  .cell_0 {
+    float: left;
+    width: 10%;
+  }
+  .cell_1 {
+    float: left;
+    width: 80%;
+  }
+  .cell_2 {
+    float: left;
+    width: 10%;
+    img {
+      height: 60rpx;
+      width: 60rpx;
+      float: right;
+      margin: 96rpx 0rpx 94rpx 0;
+    }
+  }
+  .list {
+    width: calc(100% - 64rpx);
+
+    margin: 32rpx;
+  }
+
+  .form {
+    width: calc(100% - 128rpx);
+    margin: 32rpx;
+    background: #ffffff;
+    padding: 32rpx;
+
+    .label {
+      height: 53rpx;
+      line-height: 53rpx;
+    }
+  }
+
+  .checklist-box {
+    margin-right: 16rpx !important;
+  }
+
+  .labelcolmt26 {
+    input {
+      font-size: 24rpx;
+      border-radius: 8rpx 8rpx 8rpx 8rpx;
+      border: 2rpx solid #cccccc;
+      text-align: center;
+    }
+    .van-col {
+      margin-top: 26rpx !important;
+    }
+
+    label {
+      color: #333333;
+      font-size: 30rpx;
+      margin-top: 10rpx !important;
+    }
+
+    .uni-data-checklist {
+      margin-top: -10rpx !important;
+    }
+  }
+
+  .status {
+    .uni-data-checklist {
+      margin-top: 0rpx !important;
+    }
+
+    label {
+      color: #333333;
+      font-size: 30rpx;
+      padding-right: 0rpx !important;
+    }
+  }
+}
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1018 - 0
pages/subPackages/companyDetails/companyDetails.vue


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1158 - 0
pages/subPackages/companyDetailsEdit/companyDetailsEdit.vue


+ 161 - 0
pages/subPackages/companyDetailsEdit/isSelectedTags.vue

@@ -0,0 +1,161 @@
+<template>
+  <van-popup :show="show" @close="onClose" position="bottom" round>
+    <div class="vanpoup_1">
+      <div style="display: flex">
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333"
+            >已选择({{ isSelectedList.length }})</span
+          >
+          <span
+            @click="clearAll()"
+            style="float: right; color: #1d18bc; font-size: 30rpx"
+          >
+            清空</span
+          >
+        </div>
+      </div>
+      <scroll-view scroll-y="true" style="height: 50vh">
+        <div
+          style="display: flex"
+          v-for="(item, index) in isSelectedList"
+          :key="index"
+        >
+          <div class="vanpoup_1_1">
+            <span style="font-size: 30rpx; color: #333333">
+              {{ item.label }}
+            </span>
+
+            <span
+              @click="spiliceIsSelectedList(item, index)"
+              style="float: right; color: #1d18bc; font-size: 30rpx"
+            >
+              <van-icon name="cross"
+            /></span>
+          </div>
+        </div>
+      </scroll-view>
+      <view class="btn-view">
+        <button
+          class="btn"
+          @click="closeTagsDialog()"
+          style="
+            border-top-left-radius: 5rem;
+            border-bottom-left-radius: 5rem;
+            background: white;
+            color: #1d18bc;
+            border: 1px solid;
+          "
+        >
+          已选择({{ isSelectedList.length }})<van-icon name="arrow-down" />
+        </button>
+        <button
+          style="
+            border-radius: 0;
+            border: 1px solid #1d18bc;
+            border-top-right-radius: 5rem;
+            border-bottom-right-radius: 5rem;
+          "
+          class="btn"
+          @click="updown()"
+        >
+          确认提交
+        </button>
+      </view>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  props: {
+    isSelectedList: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {
+      show: false,
+    };
+  },
+  methods: {
+    closeTagsDialog() {
+      this.show = false;
+    },
+    updown() {
+      this.$emit("updown");
+    },
+    cancel() {
+      this.show = false;
+    },
+    onOpen(e) {
+      this.show = true;
+    },
+    spiliceIsSelectedList(item, index) {
+      this.$emit("spiliceIsSelectedList", item, index);
+    },
+    clearAll() {
+      this.$emit("clearAll");
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style lang="scss">
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+  button {
+    &::after {
+      border: none;
+    }
+  }
+}
+.btn {
+  width: 40%;
+  height: 90rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+  float: left;
+}
+.vanpoup_1 {
+  height: 50vh;
+  width: 100%;
+  width: calc(100% - 128rpx);
+  margin-bottom: 74rpx;
+  padding: 64rpx;
+}
+.vanpoup_1_1 {
+  width: 100%;
+  border-bottom: 2rpx solid #cccccc;
+  height: 64rpx;
+  line-height: 64rpx;
+}
+</style>

+ 530 - 0
pages/subPackages/companyDetailsEdit/momo-multipleSelect.vue

@@ -0,0 +1,530 @@
+<template>
+  <view class="select-container" v-show="show" @touchmove.stop.prevent>
+    <view
+      class="mask"
+      :class="activeClass ? 'mask-show' : ''"
+      @tap="onCancel(true)"
+    ></view>
+    <view class="select-box" :class="activeClass ? 'select-box-show' : ''">
+      <div style="height: 900rpx">
+        <div style="display: flex">
+          <uni-easyinput
+            type="text"
+            class="searchinput"
+            v-model="formData.qymc"
+            placeholder="输入关联企业名称(模糊查询)"
+            style="height: 70rpx"
+          />
+          <van-button
+            class="searchbutton"
+            style="height: 70rpx"
+            type="primary"
+            @click="getCompaynList()"
+            >搜索</van-button
+          >
+        </div>
+        <div class="chooseCompanyTags">
+          <scroll-view
+            class="body"
+            scroll-y="true"
+            style="position: absolute; z-index: 1000"
+          >
+            <div
+              v-for="(item, index) in companyList"
+              :key="index"
+              class="selectlist"
+            >
+              <div class="title_2">
+                {{ item.label }}
+              </div>
+              <div
+                v-if="!item.isSelected"
+                class="title_1"
+                @click="chosseTags(item, index)"
+              >
+                <uni-icons type="plusempty" size="30rpx"></uni-icons>
+              </div>
+            </div>
+          </scroll-view>
+        </div>
+      </div>
+
+      <view class="btn-view">
+        <button
+          class="btn"
+          @click="openTagsDialog()"
+          style="
+            border-top-left-radius: 5rem;
+            border-bottom-left-radius: 5rem;
+            background: white;
+            color: #1d18bc;
+            border: 1px solid;
+          "
+        >
+          已选择({{ isSelectedList.length }})<van-icon name="arrow-down" />
+        </button>
+        <button
+          style="
+            border-radius: 0;
+            border: 1px solid #1d18bc;
+            border-top-right-radius: 5rem;
+            border-bottom-right-radius: 5rem;
+          "
+          class="btn"
+          @click="updown()"
+        >
+          确认提交
+        </button>
+      </view>
+    </view>
+    <is-selected-tags
+      ref="isSelectedTags"
+      :isSelectedList="isSelectedList"
+      @clearAll="clearAll"
+      @updown="updown"
+      @spiliceIsSelectedList="spiliceIsSelectedList"
+    />
+  </view>
+</template>
+<!-- 多选组件 -->
+<script>
+import isSelectedTags from "./isSelectedTags.vue";
+export default {
+  data() {
+    return {
+      isSelectedList: [],
+      companyList: [],
+      isSelectList: [],
+      formData: {},
+      show: false, //是否显示
+      activeClass: false, //激活样式状态
+      selectedArr: [], //选择对照列表
+      selectedArrOld: [], //选择对照列表上一次的数据
+    };
+  },
+  components: {
+    isSelectedTags,
+  },
+  onShow() {
+    this.show = this.value;
+  },
+  methods: {
+    async updown() {
+      console.log(this.isSelectedList);
+      this.$emit("confirm", this.isSelectedList);
+      this.show = false;
+    },
+    clearAll() {
+      this.isSelectedList = [];
+      this.companyList.forEach((e) => {
+        e.isSelected = false;
+        this.$forceUpdate();
+      });
+    },
+    spiliceIsSelectedList(item, index) {
+      this.isSelectedList.splice(index, 1);
+      let changeIndex = this.companyList.findIndex(
+        (e) => e.tagCategoryId == item.tagCategoryId
+      );
+      this.companyList[changeIndex].isSelected = false;
+      this.$forceUpdate();
+    },
+    chosseTags(item, index) {
+      let filterIndex = this.isSelectedList.findIndex(
+        (e) => e.value == item.value
+      );
+      if (filterIndex != -1) {
+        this.$showToast("该标签与已选择标签重复");
+        return;
+      }
+      if (item.isEffective == 1) {
+        this.openChooseTimeDialog(item, index);
+      } else {
+        this.isSelectedList.push(this.companyList[index]);
+        this.companyList[index].isSelected = true;
+        this.companyList = [...this.companyList];
+      }
+    },
+    openTagsDialog() {
+      this.$refs.isSelectedTags.onOpen([]);
+    },
+    getAllList(data) {
+      this.companyList = data;
+    },
+    getCompaynList() {
+      console.log(this.companyList);
+      console.log(this.selectedArr);
+      this.$emit("getCompanyAll", this.formData.qymc);
+    },
+    // 设置默认选中通用办法
+    setItemActiveState() {
+      if (this.companyList.length && this.defaultSelected.length) {
+        this.companyList.forEach((item, i) => {
+          for (let n = 0; n < this.defaultSelected.length; n++) {
+            if (
+              !item.disabled &&
+              item[this.valueName] === this.defaultSelected[n]
+            ) {
+              this.selectedArr.splice(i, 1, true);
+              break;
+            }
+          }
+        });
+      }
+    },
+    /**
+     * 选择事件
+     * @index {Number} 点击下标
+     */
+    onSelected(index) {
+      if (this.companyList[index].disabled) return;
+      console.log(this.companyList[index]);
+      if (!this.companyList[index].isSelect) {
+        this.isSelectList.push(this.companyList[index].value);
+        this.companyList[index].isSelect = true;
+      } else {
+        let deleteIndex = this.isSelectList.findIndex(
+          (e) => e.value == this.companyList[index].value
+        );
+        this.isSelectList.splice(deleteIndex, 1);
+        this.companyList[index].isSelect = false;
+      }
+      this.$forceUpdate();
+      this.companyList = [...this.companyList];
+      //   let index2Active = this.selectedArr[index];
+      //   this.selectedArr.splice(index, 1, !index2Active);
+    },
+    // 取消事件
+    onCancel(isMask) {
+      if (!isMask || this.maskCloseAble) {
+        this.show = false;
+        this.selectedArr = JSON.parse(JSON.stringify(this.selectedArrOld));
+      } else {
+        return;
+      }
+      this.$emit("cancel");
+    },
+    // 返回去除了disabled状态后的对照列表
+    returnWipeDisabledList() {
+      let arr = [];
+      this.selectedArr.forEach((el, index) => {
+        if (!this.companyList[index].disabled) arr.push(el);
+      });
+      return arr;
+    },
+    // 全选/非全选事件
+    onAllToggle() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      // 如果去除了disabled的对照列表有false的数据,代表未全选
+      if (wipeDisabledList.includes(false)) {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.companyList[index].disabled)
+            this.selectedArr.splice(index, 1, true);
+        });
+      } else {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.companyList[index].disabled)
+            el = this.selectedArr.splice(index, 1, false);
+        });
+      }
+    },
+    // 确定事件
+    onConfirm() {
+      this.show = false;
+      let selectedData = [];
+      this.companyList.forEach((e, index) => {
+        if (e.isSelect) {
+          selectedData.push(this.companyList[index]);
+        }
+      });
+      if (this.mode === "multiple") {
+        this.$emit("confirm", selectedData);
+      } else {
+        let backData = selectedData[0] || {};
+        this.$emit("confirm", backData);
+      }
+    },
+  },
+  computed: {
+    // 返回是否全选
+    isAll() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      if (!wipeDisabledList.length) return false;
+      return !wipeDisabledList.includes(false);
+    },
+  },
+  props: {
+    // 双向绑定
+    value: {
+      type: Boolean,
+      default: false,
+    },
+    // 取消按钮文字
+    cancelText: {
+      type: String,
+      default: "取消",
+    },
+    // 确认按钮文字
+    confirmText: {
+      type: String,
+      default: "确认",
+    },
+    // label对应的key名称
+    labelName: {
+      type: String,
+      default: "label",
+    },
+    // value对应的key名称
+    valueName: {
+      type: String,
+      default: "value",
+    },
+    // 是否允许点击遮罩层关闭
+    maskCloseAble: {
+      type: Boolean,
+      default: true,
+    },
+    // 是否显示全选
+    allShow: {
+      type: Boolean,
+      default: true,
+    },
+    // 模式
+    mode: {
+      type: String,
+      default: "multiple",
+    },
+    // 默认选中值
+    defaultSelected: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    // 数据源
+    // data: {
+    //   type: Array,
+    //   required: true,
+    //   default: () => {
+    //     return [];
+    //   },
+    // },
+  },
+  watch: {
+    async value(newVal) {
+      this.show = newVal;
+      await this.$nextTick();
+      this.activeClass = newVal;
+      if (newVal) {
+        this.selectedArrOld = JSON.parse(JSON.stringify(this.selectedArr));
+      }
+    },
+    show(newVal) {
+      this.$emit("input", newVal);
+      this.$emit("change", newVal);
+    },
+
+    defaultSelected: {
+      handler() {
+        this.setItemActiveState();
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+};
+</script>
+<style lang="scss">
+.searchbutton {
+  button {
+    height: 69rpx;
+    line-height: 69rpx;
+  }
+}
+.searchinput {
+  .uni-easyinput__content-input {
+    height: 70rpx;
+  }
+}
+
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+  button {
+    &::after {
+      border: none;
+    }
+  }
+}
+</style>
+<style lang="scss" scoped>
+.selectlist {
+  border-bottom: 2rpx solid #cccccc;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.chooseCompanyTags {
+  .title_1 {
+    font-size: 28rpx;
+    font-weight: 500;
+    color: #333333;
+    text-align: right;
+    height: 64rpx;
+    line-height: 64rpx;
+  }
+  .title_2 {
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+    height: 64rpx;
+    line-height: 64rpx;
+    text-align: left;
+  }
+  .title_3 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+  }
+  .cell_1 {
+    float: left;
+    width: 10%;
+  }
+  .checkbox {
+    border: 1px solid #cccccc;
+    border-radius: 4rpx  4rpx  4rpx  4rpx;
+    height: 30rpx;
+    width: 30rpx;
+  }
+  .cell_2 {
+    float: left;
+    width: 90%;
+
+    img {
+      height: 60rpx;
+      width: 60rpx;
+      float: right;
+      margin: 96rpx 0rpx 94rpx 0;
+    }
+  }
+
+  .btn {
+    width: 40%;
+    height: 90rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+    float: left;
+  }
+  .jichuback {
+    width: calc(100% - 64rpx);
+    margin: 32rpx;
+    background: white;
+    border-bottom: 2rpx solid #cccccc;
+  }
+  .tags_type {
+    width: calc(100% - 64rpx);
+    margin: 16rpx;
+  }
+}
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  z-index: 1000;
+}
+.btn {
+  width: 40%;
+  height: 90rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+  float: left;
+}
+.select-container {
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  left: 0;
+  top: 0;
+  z-index: 999;
+  $paddingLR: 18rpx;
+  .mask {
+    width: 100%;
+    height: 100%;
+    background-color: $uni-bg-color-mask;
+    opacity: 0;
+    transition: opacity 0.3s;
+    &.mask-show {
+      opacity: 1;
+    }
+  }
+  // 选择器内容区域
+  .select-box {
+    width: 100%;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    transform: translate3d(0px, 100%, 0px);
+    background-color: $uni-bg-color;
+    transition: all 0.3s;
+    &.select-box-show {
+      transform: translateZ(0);
+    }
+    .header {
+      display: flex;
+      box-sizing: border-box;
+      width: 100%;
+      justify-content: space-between;
+      border-bottom: 1px solid $uni-border-color;
+      line-height: 76rpx;
+      font-size: 30rpx;
+      padding: 0 $paddingLR;
+      .cancel {
+        color: $uni-text-color-grey;
+      }
+      .all {
+        .all-active {
+          &::after {
+            display: inline-block;
+            content: "✔";
+            padding-left: 8rpx;
+          }
+        }
+      }
+      .confirm {
+        color: $uni-color-primary;
+      }
+    }
+    .body-warp {
+      width: 100%;
+      height: 30vh;
+      box-sizing: border-box;
+      padding: 20rpx $paddingLR;
+    }
+    .body {
+      width: 96%;
+      height: 70%;
+      overflow-y: auto;
+      padding: 2%;
+      .empty-tips {
+        margin-top: 25%;
+        text-align: center;
+        font-size: 26rpx;
+        color: $uni-color-error;
+      }
+    }
+  }
+}
+</style>

+ 234 - 0
pages/subPackages/companyHouse/companyHouse.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="companyhouse">
+    <div class="searchbox">
+      <van-row>
+        <van-col :span="22">
+          <uni-search-bar
+            placeholder="请输入公司名称"
+            @confirm="confirm"
+            clearButton="none"
+            cancelButton="none"
+            v-model="search.qymc"
+          ></uni-search-bar>
+        </van-col>
+        <van-col :span="2">
+          <img
+            @click="jumpAddCompanyPage()"
+            src="../../../static/add_company.png"
+            style="height: 50rpx; width: 50rpx; margin-top: 25rpx"
+            alt=""
+          />
+        </van-col>
+      </van-row>
+    </div>
+    <van-tabs :active="active" @change="onChange">
+      <van-tab title="全部" :name="null"></van-tab>
+      <van-tab title="在园" :name="1"></van-tab>
+      <van-tab title="挂靠" :name="2"></van-tab>
+      <van-tab title="异地生产" :name="3"></van-tab>
+      <van-tab title="飞地" :name="4"></van-tab>
+    </van-tabs>
+    <div style="display: flex; background: white; padding: 0rpx 16rpx">
+      <uni-data-checkbox
+        v-model="entryArray"
+        mode="tag"
+        :multiple="true"
+        :localdata="dic_SelectList.SETTLE_IN_STATUS"
+        selectedTextColor="#1D18BC"
+        selectedColor="rgba(29,24,188,0.05);"
+        @change="getCompanyList"
+      >
+      </uni-data-checkbox>
+    </div>
+    <div class="list">
+      <div v-if="companyList.length != 0">
+        <div class="list-row" v-for="(item, index) in companyList" :key="index">
+          <div class="cell_1 width90">
+            <div class="width70 height44rpx mb8rpx float_left">
+              <div class="first_title chaochuyincang">{{ item.qymc }}</div>
+            </div>
+            <div class="width30 height44rpx mb8rpx float_left">
+              <div class="roomstatus1 txt_center" style="font-size: 24rpx">
+                {{ getDicType(item.settleInType) }}
+              </div>
+            </div>
+            <div class="width100 height40rpx mb8rpx clear_both">
+              <div class="second_title width50 height40rpx float_left">
+                所属楼盘:{{
+                  item.area == null || !item.area ? "未知" : item.area
+                }}
+              </div>
+              <div class="second_title_1 width50 height40rpx float_left">
+                注册资本:{{ !item.zczj ? "暂无" : item.zczj + "万" }}
+              </div>
+            </div>
+            <div
+              class="width100 height28rpx font24rpx fontcolor251FCA chaochuyincang"
+            >
+              {{ item.qybq == null || !item.qybq ? "暂无标签" : item.qybq }}
+            </div>
+          </div>
+          <div class="cell_3 width10" @click="jumpPage(item.id)">
+            <img src="../../../static/mine/youjiantou.png" alt="" />
+          </div>
+        </div>
+      </div>
+      <div v-else>
+        <van-empty
+          class="disblock marginauto"
+          style="background: white"
+          description="暂无数据"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+  
+  <script>
+import { listVo, getByCodes } from "@/js_sdk/http";
+import vanEmpty from "../../../wxcomponents/weapp/dist/empty/index";
+
+export default {
+  components: {
+    vanEmpty,
+  },
+  data() {
+    return {
+      entryArray: [],
+      dic_key: ["MNP_BUILDING_TYPE", "SETTLE_IN_STATUS"],
+      dic_SelectList: {},
+      active: 0,
+      form: {
+        entryStatus: [],
+      },
+      statusList: [
+        { label: "全部", value: null },
+        { label: "在园", value: "1" },
+        { label: "挂靠", value: "2" },
+        { label: "异地生产", value: "3" },
+        { label: "飞地", value: "4" },
+      ],
+      companyList: [],
+      search: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+    };
+  },
+  onShow() {
+    this.getByCodes();
+    this.getCompanyList();
+  },
+  methods: {
+    async getMoreListData() {
+      let that = this;
+
+      that.search.pageNum = that.search.pageNum + 1;
+      let list = await listVo(that.search);
+
+      if (list.rows == 0) {
+        that.$showToast("没有更多数据了");
+      } else {
+        list.rows.forEach((e) => {
+          that.companyList.push(e);
+        });
+      }
+    },
+    onReachBottom() {
+      this.getMoreListData();
+    }, //下拉执行的时候触发 (下拉刷新)
+    onChange(e) {
+      this.search.settleInType = e.detail.name == null ? "" : e.detail.name;
+      this.getCompanyList();
+    },
+    getDicType(value) {
+      if (this.dic_SelectList.MNP_BUILDING_TYPE) {
+        let MNP_BUILDING_TYPE = this.dic_SelectList.MNP_BUILDING_TYPE;
+        let index = MNP_BUILDING_TYPE.findIndex((e) => e.value == value);
+
+        if (index != -1) return MNP_BUILDING_TYPE[index].label;
+        else return "暂无";
+      }
+    },
+    async getByCodes() {
+      this.search.pageNum = 1;
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+      this.dic_SelectList.SETTLE_IN_STATUS =
+        this.dic_SelectList.SETTLE_IN_STATUS.map((e) => {
+          return {
+            text: e.label,
+            value: e.value,
+          };
+        });
+    },
+    async getCompanyList() {
+      this.search.entryStatus = this.entryArray.toString();
+      this.search.pageSize = 10;
+      this.search.pageNum = 1;
+      let list = await listVo(this.search);
+
+      this.companyList = list.rows;
+    },
+    jumpAddCompanyPage() {
+      uni.navigateTo({
+        url: "/pages/subPackages/addCompany/addCompany",
+      });
+    },
+    blur(e) {},
+    focus(e) {
+      //   pages / subPackages / merchants / merchants;
+    },
+    input(e) {},
+    cancel(e) {},
+    change(e) {},
+    clear(e) {},
+    confirm(e) {
+      this.getCompanyList();
+    },
+    jumpPage(e) {
+      uni.navigateTo({
+        url: "/pages/subPackages/companyDetails/companyDetails?id=" + e,
+      });
+    },
+  },
+};
+</script>
+  
+  
+  <style lang="scss">
+.searchbox {
+  display: block;
+  background: white;
+}
+.chaochuyincang {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.labelcolmt26 {
+  input {
+    font-size: 24rpx;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+    border: 2rpx solid #cccccc;
+    text-align: center;
+  }
+  .van-col {
+    margin-top: 26rpx !important;
+  }
+
+  label {
+    color: #333333;
+    font-size: 30rpx;
+    margin: 0;
+    margin-top: 0 !important;
+  }
+
+  .uni-data-checklist {
+    margin-top: -10rpx !important;
+  }
+}
+</style>
+  
+  
+  

+ 143 - 0
pages/subPackages/companyTagsDelete/componets/chooseTime.vue

@@ -0,0 +1,143 @@
+<template>
+  <van-popup
+    :z-index="1000"
+    :show="show"
+    @close="onClose"
+    position="bottom"
+    round
+    class="chosseTime"
+  >
+    <div class="vanpoup_1">
+      <div class="choostimetitle">有效期选择</div>
+
+      <div
+        class="choostimetitle"
+        style="color: #333333; margin-top: 32rpx; border: none"
+      >
+        标签开始生效年月
+      </div>
+      <picker
+        mode="date"
+        :value="form.effectiveDate"
+        fields="month"
+        @change="bindDateChange"
+      >
+        <input
+          disabled="true"
+          class="pickerclass"
+          v-model="form.effectiveDate"
+          placeholder="请选择月份"
+        />
+      </picker>
+      <div style="margin-top: 16rpx; width: 100%">
+        <van-button type="default" class="button100" @click="closeDialog()"
+          >取消</van-button
+        >
+        <van-button
+          type="info"
+          class="button100"
+          custom-class="userinfobtn"
+          @click="pushIsCheckItem()"
+          >确定</van-button
+        >
+      </div>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  data() {
+    return {
+      form: {
+        effectiveDate: "",
+        checkIndex: null,
+      },
+      checkIndex: null,
+      show: false,
+      isSelectedList: [],
+    };
+  },
+  methods: {
+    closeDialog() {
+      this.show = false;
+    },
+    pushIsCheckItem() {
+      if (this.form.effectiveDate == "") {
+        this.$showToast("该标签需要效期,请选择");
+      } else {
+        this.$emit("pushIsCheckItem", this.form);
+        this.show = false;
+      }
+    },
+    bindDateChange(event) {
+      this.form.effectiveDate = event.detail.value;
+      this.$forceUpdate();
+    },
+    cancel() {
+      this.show = false;
+    },
+    onOpen(item, index) {
+      this.form = { ...item };
+      this.form.effectiveDate = "";
+      this.form.checkIndex = index;
+      this.show = true;
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style lang="scss">
+.button100 {
+  button {
+    width: 100% !important;
+    margin-top: 32rpx;
+  }
+  .van-button--info {
+  }
+}
+.userinfobtn {
+  background: #1d18bc !important;
+  border: none;
+}
+.chosseTime {
+  .choostimetitle {
+    padding-bottom: 32rpx;
+    color: #1d18bc;
+    font-size: 30rpx;
+    border-bottom: 2px solid #cccccc;
+  }
+  .vanpoup_1 {
+    width: 100%;
+    width: calc(100% - 128rpx);
+
+    padding: 64rpx;
+  }
+  .vanpoup_1_1 {
+    width: 100%;
+    border-bottom: 2rpx solid #cccccc;
+    height: 104rpx;
+    line-height: 104rpx;
+  }
+}
+</style>

+ 98 - 0
pages/subPackages/companyTagsDelete/componets/isSelectedTags.vue

@@ -0,0 +1,98 @@
+<template>
+  <van-popup :show="show" @close="onClose" position="bottom" round>
+    <div class="vanpoup_1">
+      <div style="display: flex">
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333"
+            >已选择({{ isSelectedList.length }})</span
+          >
+          <span style="float: right; color: #1d18bc; font-size: 30rpx">
+            清空</span
+          >
+        </div>
+      </div>
+      <div
+        style="display: flex"
+        v-for="(item, index) in isSelectedList"
+        :key="index"
+      >
+        <div class="vanpoup_1_1">
+          <span style="font-size: 30rpx; color: #333333">
+            {{ item.tagName }}
+            {{ !item.effectiveDate ? "" : item.effectiveDate }}
+          </span>
+
+          <span
+            @click="spiliceIsSelectedList(item, index)"
+            style="float: right; color: #1d18bc; font-size: 30rpx"
+          >
+            <van-icon name="cross"
+          /></span>
+        </div>
+      </div>
+    </div>
+  </van-popup>
+</template>
+  
+  <script>
+import vanPopup from "../../../../wxcomponents/weapp/dist/popup/index";
+import vanDatetimePicker from "../../../../wxcomponents/weapp/dist/datetime-picker/index";
+export default {
+  components: {
+    vanPopup,
+    vanDatetimePicker,
+  },
+  props: {
+    isSelectedList: {
+      type: Array,
+      default: [],
+    },
+  },
+  data() {
+    return {
+      show: false,
+    };
+  },
+  methods: {
+    cancel() {
+      this.show = false;
+    },
+    onOpen(e) {
+      this.show = true;
+    },
+    spiliceIsSelectedList(item, index) {
+      this.$emit("spiliceIsSelectedList", item, index);
+    },
+    formatTime(date) {
+      date = new Date(date);
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      var day = date.getDate();
+      return [year, month, day].map(this.formatNumber).join("/");
+    },
+
+    onClose() {
+      this.show = false;
+    },
+    confirm1(value) {
+      //   this.currentDate = event.detail;
+    },
+  },
+};
+</script>
+  
+  <style>
+.vanpoup_1 {
+  height: 50vh;
+  width: 100%;
+  width: calc(100% - 128rpx);
+  margin-bottom: 74rpx;
+  padding: 64rpx;
+}
+.vanpoup_1_1 {
+  width: 100%;
+  border-bottom: 2rpx solid #cccccc;
+  height: 104rpx;
+  line-height: 104rpx;
+}
+</style>

+ 191 - 0
pages/subPackages/companyTagsDelete/index.vue

@@ -0,0 +1,191 @@
+<template>
+  <div class="companyTagsDelete">
+    <div class="jichuback">
+      <div
+        class="isSelectedList"
+        v-if="tagsList.length != 0"
+        v-for="(item, index) in tagsList"
+        :key="index"
+      >
+        <div class="cell_2">
+          <div class="title_1">{{ item.tagName }}</div>
+          <div class="title_2">
+            效期:{{ item.effectiveDate == null ? "无" : item.effectiveDate }}
+          </div>
+          <div class="title_2">
+            有无效期:{{ item.isEffective == 1 ? "有" : "无" }}
+          </div>
+          <div class="title_3">
+            标签说明:{{
+              item.remark == "null" || !item.remark ? "暂无说明" : item.remark
+            }}
+          </div>
+        </div>
+        <div class="cell_1">
+          <van-icon
+            @click="tgasSpilice(index)"
+            name="delete-o"
+            style="
+              color: #1d18bc;
+              line-height: 89rpx;
+              margin: 52rpx 0;
+              font-size: 36rpx;
+              float: right;
+            "
+          />
+        </div>
+      </div>
+      <van-empty
+        v-if="tagsList.length == 0"
+        class="disblock marginauto"
+        style="background: white"
+        description="暂无数据"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+const form = {
+  groupIds: "",
+  id: "",
+};
+import { findCompanyTags, removeTagsBind } from "@/js_sdk/http";
+export default {
+  data() {
+    return {
+      isSelectedList: [],
+      form: { ...form },
+      tagsList: [],
+      yuanqu_loacldata: [
+        { value: 1, text: "通用属性" },
+        { value: 2, text: "商务属性" },
+        { value: 3, text: "科技属性" },
+        { value: 4, text: "规模属性" },
+        { value: 5, text: "人才属性" },
+        { value: 6, text: "其他属性" },
+      ],
+    };
+  },
+
+  watch: {},
+  onLoad(option) {
+    this.form.id = option.id;
+    this.findCompanyTags();
+  },
+
+  methods: {
+    async tgasSpilice(i) {
+      let that = this;
+      uni.showModal({
+        title: "提示",
+        content: "是否确认删除?",
+        cancelText: "取消", // 取消按钮的文字
+        confirmText: "确认", // 确认按钮的文字
+        showCancel: true, // 是否显示取消按钮,默认为 true
+        async success(res) {
+          if (res.confirm) {
+            let tagsList = [...that.tagsList];
+            tagsList.splice(i, 1);
+            let form = {
+              tagInfo: JSON.stringify(tagsList),
+              enterpriseId: that.form.id,
+            };
+            let data = await removeTagsBind(form);
+            that.$showToast("已删除");
+            that.findCompanyTags();
+          } else {
+          }
+        },
+      });
+    },
+    async findCompanyTags() {
+      let data = await findCompanyTags(this.form.id);
+      this.tagsList = data;
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+.companyTagsDelete {
+  .title_1 {
+    margin-bottom: 12rpx;
+    font-size: 32rpx;
+
+    font-weight: 500;
+    color: #333333;
+  }
+  .title_2 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+
+    font-weight: 500;
+
+    color: #777777;
+  }
+  .title_3 {
+    margin-bottom: 12rpx;
+    font-size: 26rpx;
+    font-weight: 500;
+    color: #777777;
+  }
+  .cell_1 {
+    float: left;
+    width: 15%;
+  }
+  .checkbox {
+    border: 1px solid #cccccc;
+    border-radius: 4rpx  4rpx  4rpx  4rpx;
+    height: 30rpx;
+    width: 30rpx;
+  }
+  .cell_2 {
+    float: left;
+    width: 85%;
+
+    img {
+      height: 60rpx;
+      width: 60rpx;
+      float: right;
+      margin: 96rpx 0rpx 94rpx 0;
+    }
+  }
+  button::after {
+    border: none;
+  }
+  .btn-view {
+    width: 100%;
+    height: 100rpx;
+    padding: 20rpx 10%;
+    background-color: #ffffff;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    z-index: 1000;
+  }
+  .btn {
+    width: 40%;
+    height: 90rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+    float: left;
+  }
+  .jichuback {
+    width: calc(100% - 32rpx);
+    margin: 16rpx;
+  }
+  .tags_type {
+    width: calc(100% - 64rpx);
+    margin: 16rpx;
+  }
+}
+.isSelectedList {
+  display: flex;
+  background: white;
+  padding: 32rpx;
+  margin: 32rpx;
+  border-bottom: 2rpx solid #cccccc;
+}
+</style>

+ 159 - 0
pages/subPackages/companyreport/companyreport.vue

@@ -0,0 +1,159 @@
+<template>
+  <div>
+    <van-tabs
+      class="companyreport"
+      :active="active"
+      @change="onChange"
+      title-active-color="#1D18BC"
+    >
+      <van-tab title="走访上报" class="housemange">
+        <go-report ref="goReport" @changeActive="changeActive" />
+      </van-tab>
+      <van-tab title="上报历史">
+        <report-history ref="reportHistory" />
+      </van-tab>
+    </van-tabs>
+  </div>
+</template>
+  
+  <script>
+import goReport from "./components/goReport.vue";
+import reportHistory from "./components/reportHistory.vue";
+import { findYuanQuList } from "@/js_sdk/http.js";
+const form = {
+  status: [],
+  chaoxiang: [],
+};
+export default {
+  components: {
+    goReport,
+    reportHistory,
+  },
+  data() {
+    return {
+      active: 0,
+    };
+  },
+  // onLoad: function (){
+  // 	this.$refs.findYuanQuList()
+  // },
+  onShow() {
+    this.$refs.reportHistory.getInterviewList();
+  },
+  methods: {
+    onLoadMore() {},
+    getChaoxiang() {},
+    getStatus() {},
+    changeActive() {
+      this.active = 1;
+      this.$refs.reportHistory.getInterviewList();
+    },
+    onChange(e) {
+      this.active = e.detail.name;
+    },
+  },
+  onPullDownRefresh: function () {
+    // 加载数据
+  },
+
+  onReachBottom() {
+    if (this.active == 1) {
+      this.$refs.reportHistory.getMoreList();
+    }
+    console.log("滑动到距离底部100px的时候触发,可以放 。。业务逻辑");
+  }, //下拉执行的时候触发 (下拉刷新)
+};
+</script>
+  
+  <style lang="scss">
+.gaisideshurukuang {
+  .uni-forms-item__label {
+    font-size: 26rpx !important;
+  }
+}
+.float_left {
+  float: left;
+}
+.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;
+}
+.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;
+}
+.height50px {
+  height: 50rpx;
+}
+.mb8rpx {
+  margin-bottom: 8rpx;
+}
+.width100 {
+  width: 100%;
+}
+.height36rpx {
+  height: 36rpx;
+}
+.height40rpx {
+  height: 40rpx;
+}
+.height66rpx {
+  height: 66rpx;
+}
+.height44rpx {
+  height: 44rpx;
+}
+
+.total {
+  padding: 8rpx 32rpx 8rpx 0;
+  text-align: right;
+  background: #ffffff;
+}
+.gaisideshurukuang {
+  .is-input-border {
+    border-top: none;
+    border-left: none;
+    border-right: none;
+    border: none;
+    border-radius: 0;
+  }
+  .uni-forms-item {
+    border-bottom: 2rpx solid #cccccc;
+  }
+}
+</style>
+  

+ 437 - 0
pages/subPackages/companyreport/components/goReport.vue

@@ -0,0 +1,437 @@
+<template>
+  <div class="goreport">
+    <div class="form gaisideshurukuang">
+      <uni-forms
+        ref="baseForm"
+        style="font-size: 26rpx"
+        :modelValue="form"
+        label-width="170rpx"
+      >
+        <uni-forms-item
+          label="走访公司"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div
+            @click="chosseAboutCompany()"
+            style="height: 73rpx; line-height: 73rpx"
+          >
+            {{
+              !form.companyId
+                ? "请选择走访公司"
+                : companyAllList[form.companyIndex].label
+            }}
+          </div>
+        </uni-forms-item>
+        <uni-forms-item
+          label="走访时间:"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="line-height: 73rpx">
+            <!-- <picker
+              style="float: left; width: 100%; height: 40rpx; color: #777"
+              mode="time"
+              :value="form.interviewTime"
+              @change="getInterviewTime"
+            >
+              {{ !form.interviewTime ? "请选择走访时间" : form.interviewTime }}
+            </picker> -->
+            <uni-datetime-picker
+              type="datetime"
+              v-model="form.interviewTime"
+              :border="false"
+            />
+          </div>
+        </uni-forms-item>
+
+        <uni-forms-item
+          label="走访类型:"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx">
+            <picker
+              style="float: left; width: 100%; height: 40rpx; color: #777"
+              :range="dic_SelectList.interviewType"
+              :value="0"
+              @change="bindPickerChange"
+              range-key="label"
+            >
+              {{
+                !form.interviewType
+                  ? "请选择"
+                  : dic_SelectList.interviewType[form.interviewTypeIndex].label
+              }}
+            </picker>
+          </div>
+        </uni-forms-item>
+        <uni-forms-item
+          label="是否需要处理"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx">
+            <uni-data-checkbox
+              v-model="form.isStatus"
+              :localdata="range"
+              @change="change"
+            ></uni-data-checkbox>
+          </div>
+        </uni-forms-item>
+      </uni-forms>
+    </div>
+
+    <div class="form" style="margin-bottom: 146rpx">
+      <van-row>
+        <van-col :span="24"> 走访记录 </van-col>
+        <van-col :span="24">
+          <div class="margint16rpx">
+            <uni-easyinput
+              type="textarea"
+              inputBorder
+              class="textarea_info"
+              style="background: #f9f9f9; margin-top: 16rpx"
+              v-model="form.interviewRecord"
+              placeholder="请输入"
+            />
+          </div>
+        </van-col>
+      </van-row>
+    </div>
+    <van-popup :show="show" bind:close="onClose" round position="bottom">
+      <div style="display: flex; justify-content: space-between">
+        <div style="margin: 32rpx" @click="closePopup()">取消</div>
+        <div style="margin: 32rpx" @click="getSelectValue()">确认</div>
+      </div>
+      <uni-easyinput
+        v-model="companyName"
+        placeholder="请输入内容"
+      ></uni-easyinput>
+      <picker-view
+        indicator-style="height: 50px;"
+        style="width: 100%; height: 300px"
+        @change="getRowValue"
+        :value="value"
+      >
+        <picker-view-column>
+          <view
+            v-for="(item, index) in filtedCompanyAllList()"
+            :key="index"
+            style="line-height: 50px; text-align: center"
+            >{{ item.label }}</view
+          >
+        </picker-view-column>
+      </picker-view>
+    </van-popup>
+    <view class="btn-view">
+      <button class="btn" @click="takeParamsGoBack(0)">保存</button>
+      <button
+        class="btn"
+        @click="takeParamsGoBack(1)"
+        style="margin-left: 10rpx"
+      >
+        添加
+      </button>
+    </view>
+  </div>
+</template>
+
+  <script>
+import multipleSelect from "../../../subPackages/components/momo-multipleSelect/momo-multipleSelect";
+
+import {
+  getByCodes,
+  addInterview,
+  getBySaveStatus,
+  editInterview,
+  getCompanyAll,
+} from "@/js_sdk/http.js";
+import vanRow from "../../../../wxcomponents/weapp/dist/row";
+import vanCol from "../../../../wxcomponents/weapp/dist/col";
+
+// import { findYuanQuList } from "@/js_sdk/http.js";
+const form = {
+  id: null,
+  isStatus: null,
+  interviewTime: null,
+  interviewType: null,
+  interviewTypeIndex: null,
+  companyId: null,
+  companyIndex: null,
+  projectType: "",
+  interviewRecord: "",
+  associationCompanyString: [],
+};
+export default {
+  components: {
+    vanRow,
+    vanCol,
+    multipleSelect,
+  },
+  data() {
+    return {
+      companyName: "",
+      value: 0,
+      isSelectedIndex: null,
+      isStatus: 2,
+      range: [
+        { value: 2, text: "是" },
+        { value: 1, text: "否" },
+      ],
+      defaultSelected: [],
+      dic_key: ["interviewType"],
+      dic_SelectList: {},
+      companyIndex: null,
+      companyAllList: [],
+      show: false,
+      active: 0,
+      form: { ...form },
+      index: 0,
+    };
+  },
+  computed: {},
+  mounted() {
+    this.getCompanyAll();
+    this.getByCodes();
+  },
+  methods: {
+    closePopup() {
+      this.show = false;
+      this.form.companyIndex = null;
+      this.form.companyId = null;
+    },
+    filtedCompanyAllList() {
+      let companyAllList;
+      if (this.companyName && this.companyName.length > 0) {
+        companyAllList = this.companyAllList.filter((e) =>
+          e.label.includes(this.companyName)
+        );
+        if (companyAllList.length > 0 && companyAllList[0].value) {
+          let index = this.companyAllList.findIndex(
+            (e) => e.value == companyAllList[0].value
+          );
+          this.form.companyIndex = index;
+          this.form.companyId =
+            this.companyAllList[this.form.companyIndex].value;
+        } else {
+          this.form.companyIndex = null;
+          this.form.companyId = null;
+        }
+      } else {
+        companyAllList = this.companyAllList;
+      }
+      console.log(companyAllList);
+      return companyAllList;
+    },
+    getRowValue(e) {
+      this.isSelectedIndex = e.detail.value[0];
+    },
+    getSelectValue() {
+      console.log(this.value);
+      if (this.isSelectedIndex == null) {
+        this.form.companyIndex = 0;
+        this.form.companyId = this.companyAllList[0].value;
+      } else {
+        this.form.companyIndex = this.isSelectedIndex;
+        this.form.companyId = this.companyAllList[this.form.companyIndex].value;
+      }
+      this.$forceUpdate();
+      this.show = false;
+    },
+    changeLog(e) {},
+    async getBySaveStatus() {
+      const token = uni.getStorageSync("laocui_user_info");
+      let data = await getBySaveStatus(JSON.parse(token).user.id);
+      this.form.id = data.id ? data.id : null;
+      this.form.isStatus = Number(data.isStatus);
+      this.form.interviewTime = data.interviewTime ? data.interviewTime : "";
+      this.form.interviewRecord = data.interviewRecord
+        ? data.interviewRecord
+        : "";
+      if (
+        data.id &&
+        data.interviewType != null &&
+        data.interviewType != "null"
+      ) {
+        this.getInterviewLableByApiList(data);
+      }
+      if (data.id && data.companyId != null) {
+        this.getCompanyIdByApiList(data);
+      }
+    },
+    getCompanyIdByApiList(params) {
+      this.form.companyId = params.companyId;
+      console.log(
+        "this.companyAllListthis.companyAllListthis.companyAllList",
+        this.companyAllList
+      );
+      let companyIndex = this.companyAllList.findIndex(
+        (e) => e.value == params.companyId
+      );
+      this.form.companyIndex = companyIndex;
+    },
+    getInterviewLableByApiList(params) {
+      let interviewTypeIndex = this.dic_SelectList.interviewType.findIndex(
+        (e) => e.value == params.interviewType
+      );
+      this.form.interviewType =
+        this.dic_SelectList.interviewType[interviewTypeIndex].value;
+      this.form.interviewTypeIndex = interviewTypeIndex;
+    },
+    getInterviewTime(e) {
+      this.form.interviewTime = e.detail.value;
+    },
+    async takeParamsGoBack(e) {
+      const token = uni.getStorageSync("laocui_user_info");
+      let data;
+      if (e == 1) {
+        if (this.form.companyId == null) {
+          return this.$showToast("请选择走访公司");
+        }
+        if (this.form.interviewTime == null || this.form.interviewTime == "") {
+          return this.$showToast("请选择走访时间");
+        }
+        if (this.form.interviewType == null) {
+          return this.$showToast("请选择走访类型");
+        }
+        if (this.form.isStatus == null) {
+          return this.$showToast("请选择是否需要处理");
+        }
+      }
+
+      if (e == 0) {
+        data = await editInterview({
+          ...this.form,
+          status: e,
+          createdBy: JSON.parse(token).user.id,
+          InterviewUserId: JSON.parse(token).user.id,
+        });
+      } else {
+        data = await addInterview({
+          ...this.form,
+          status: e,
+          createdBy: JSON.parse(token).user.id,
+          InterviewUserId: JSON.parse(token).user.id,
+        });
+      }
+
+      if (data.code == 200) {
+        if (e == 1) {
+          this.$emit("changeActive");
+          this.$showToast("提交成功");
+          this.form = { ...form };
+        }
+        if (e == 0) {
+          this.$showToast("保存成功");
+        }
+      }
+    },
+    getCompany(e) {
+      this.form.companyIndex = e.detail.value;
+      this.form.companyId = this.companyAllList[e.detail.value].value;
+    },
+    chosseAboutCompany() {
+      this.show = true;
+      // this.$refs.popup.open('top')
+    },
+    async getCompanyAll() {
+      let companyAllList = await getCompanyAll();
+      this.companyAllList = companyAllList.map((e) => {
+        return {
+          label: e.qymc,
+          value: e.id,
+        };
+      });
+      this.getBySaveStatus();
+    },
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+      this.dic_SelectList.interviewType[0].id;
+    },
+    confirm(e) {
+      let associationCompanyString = [];
+      let associationCompany = [];
+      for (var p in e) {
+        associationCompanyString.push(e[p].label);
+        associationCompany.push(e[p].value);
+      }
+      this.form.associationCompanyString = associationCompanyString.join(",");
+      this.form.associationCompany = associationCompany.join(",");
+    },
+    bindPickerChange(e) {
+      this.form.interviewTypeIndex = e.detail.value;
+      this.form.interviewType =
+        this.dic_SelectList.interviewType[e.detail.value].value;
+    },
+  },
+  // onLoad: function (){
+  // 	this.$refs.findYuanQuList()
+  // },
+};
+</script>
+
+  <style lang="scss">
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+}
+.btn {
+  width: 40%;
+  height: 90rpx;
+  border-radius: 8rpx 8rpx 8rpx 8rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+  float: left;
+}
+.gaisideshurukuang {
+  font-size: 26rpx !important;
+  .is-input-border {
+    border-top: none !important;
+    border-left: none !important;
+    border-right: none !important;
+    border: none;
+    border-radius: 0 !important;
+  }
+  .uni-forms-item {
+    border-bottom: 2rpx solid #cccccc !important;
+    margin-top: 42rpx !important;
+    padding-bottom: 42rpx !important;
+  }
+  .uni-forms-item__content {
+    border-bottom: 2rpx solid #cccccc !important;
+  }
+}
+.goreport {
+  .textarea_info {
+    textarea {
+      background: #f9f9f9;
+    }
+  }
+  .form {
+    width: calc(100% - 128rpx);
+    margin: 32rpx;
+    background: #ffffff;
+    padding: 32rpx;
+
+    .label {
+      height: 53rpx;
+      line-height: 53rpx;
+    }
+    .is-input-border {
+      border-top: none !important;
+      border-left: none !important;
+      border-right: none !important;
+      border-radius: 0 !important;
+    }
+    .uni-forms-item {
+      border-bottom: 2rpx solid #cccccc !important;
+      margin-top: 42rpx !important;
+      padding-bottom: 42rpx !important;
+    }
+  }
+}
+</style>

+ 162 - 0
pages/subPackages/companyreport/components/handlereport.vue

@@ -0,0 +1,162 @@
+<template>
+  <van-popup :show="show" @close="onClose" round closeable>
+    <div class="height554rpx width622rpx allpd32rpx" style="margin-top: 70rpx">
+      <div class="width100 height35px marginb16 mt32rpx">
+        <div class="handlefont width20 float_left height35px l35pxheight">
+          处理人:
+        </div>
+        <div class="width80 float_left">
+          <uni-easyinput
+            :inputBorder="true"
+            v-model="form.handleUserName"
+            placeholder="请输入"
+          ></uni-easyinput>
+        </div>
+      </div>
+      <div class="width100 mb32rpx">
+        <div class="handlefont width100 mb32rpx">处理说明</div>
+        <div class="width100">
+          <uni-easyinput
+            v-model="form.handleResult"
+            autoHeight
+            type="textarea"
+            placeholder="请输入"
+          ></uni-easyinput>
+        </div>
+      </div>
+      <div class="width100">
+        <div class="button_row cancel_btn" @click="onClose()">取消</div>
+        <div class="button_row ok_btn" @click="dialogInputConfirm()">确认</div>
+      </div>
+    </div>
+  </van-popup>
+</template>
+
+<script>
+import vanPopup from "../../../../wxcomponents/weapp/dist/popup/index";
+import vanField from "../../../../wxcomponents/weapp/dist/field/index";
+import { editInterview } from "@/js_sdk/http.js";
+export default {
+  name: "handlereport",
+  data() {
+    return {
+      show: false,
+      form: {
+        name: "",
+        message: "",
+      },
+    };
+  },
+  components: {
+    vanPopup,
+    vanField,
+  },
+  methods: {
+    openDianlog(item) {
+      this.form = { ...item };
+      this.show = true;
+    },
+    onClose() {
+      this.show = false;
+    },
+    getNowDate() {
+      var date = new Date();
+      var sign2 = ":";
+      var year = date.getFullYear(); // 年
+      var month = date.getMonth() + 1; // 月
+      var day = date.getDate(); // 日
+      var hour = date.getHours(); // 时
+      var minutes = date.getMinutes(); // 分
+      var seconds = date.getSeconds(); //秒
+      var weekArr = [
+        "星期一",
+        "星期二",
+        "星期三",
+        "星期四",
+        "星期五",
+        "星期六",
+        "星期天",
+      ];
+      var week = weekArr[date.getDay()];
+      // 给一位数的数据前面加 “0”
+      if (month >= 1 && month <= 9) {
+        month = "0" + month;
+      }
+      if (day >= 0 && day <= 9) {
+        day = "0" + day;
+      }
+      if (hour >= 0 && hour <= 9) {
+        hour = "0" + hour;
+      }
+      if (minutes >= 0 && minutes <= 9) {
+        minutes = "0" + minutes;
+      }
+      if (seconds >= 0 && seconds <= 9) {
+        seconds = "0" + seconds;
+      }
+      return (
+        year +
+        "-" +
+        month +
+        "-" +
+        day +
+        " " +
+        hour +
+        sign2 +
+        minutes +
+        sign2 +
+        seconds
+      );
+    },
+    async dialogInputConfirm() {
+      if (!this.form.handleUserName || this.form.handleUserName.length == 0) {
+        this.$showToast("请填写处理人名称");
+        return;
+      }
+      if (!this.form.handleResult || this.form.handleResult.length == 0) {
+        this.$showToast("请填写处理说明");
+        return;
+      }
+      this.form.handleTime = this.getNowDate();
+      let data = await editInterview({ ...this.form });
+      if (data.code == 200) {
+        this.$showToast("登记完成");
+
+        this.show = false;
+        this.$emit("changeActive");
+      }
+    },
+  },
+};
+</script>
+
+<style scoped>
+.handlefont {
+  font-size: 28rpx;
+  font-family: Segoe UI-Regular, Segoe UI;
+  font-weight: 400;
+  color: #777777;
+}
+.button_row {
+  color: #ffffff;
+  background: #1d18bc;
+  width: 140rpx;
+  height: 50rpx;
+  border-radius: 8rpx 8rpx 8rpx 8rpx;
+  opacity: 1;
+  text-align: center;
+  line-height: 50rpx;
+  font-size: 24rpx;
+  border: 2rpx solid #1d18bc;
+}
+.cancel_btn {
+  position: absolute;
+  top: 545rpx;
+  left: 20rpx;
+}
+.ok_btn {
+  position: absolute;
+  right: 20rpx;
+  top: 545rpx;
+}
+</style>

+ 427 - 0
pages/subPackages/companyreport/components/reportDetails.vue

@@ -0,0 +1,427 @@
+<template>
+  <div class="goreport">
+    <div class="form gaisideshurukuang">
+      <uni-forms
+        ref="baseForm"
+        style="font-size: 26rpx"
+        :modelValue="form"
+        label-width="170rpx"
+      >
+        <uni-forms-item
+          label="走访公司"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div
+            @click="chosseAboutCompany()"
+            style="height: 73rpx; line-height: 73rpx"
+          >
+            <picker
+              style="float: left; width: 440rpx; height: 40rpx; color: #777"
+              @change="getCompany"
+              range-key="label"
+              :range="companyAllList"
+            >
+              {{
+                !form.companyId
+                  ? "请选择走访公司"
+                  : companyAllList[form.companyIndex].label
+              }}
+            </picker>
+          </div>
+        </uni-forms-item>
+        <uni-forms-item
+          label="走访时间:"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx">
+            <picker
+              style="float: left; width: 100%; height: 40rpx; color: #777"
+              mode="date"
+              :value="form.interviewTime"
+              @change="getInterviewTime"
+            >
+              {{ !form.interviewTime ? "请选择走访时间" : form.interviewTime }}
+            </picker>
+          </div>
+        </uni-forms-item>
+
+        <uni-forms-item
+          label="走访类型:"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx">
+            <picker
+              style="float: left; width: 100%; height: 40rpx; color: #777"
+              :range="dic_SelectList.interviewType"
+              :value="0"
+              @change="bindPickerChange"
+              range-key="label"
+            >
+              {{
+                !form.interviewType
+                  ? "请选择"
+                  : dic_SelectList.interviewType[form.interviewTypeIndex].label
+              }}
+            </picker>
+          </div>
+        </uni-forms-item>
+        <uni-forms-item
+          label="是否需要处理"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx; width: 100%">
+            <span style="color: #777" v-if="form.isStatus == 2">是</span>
+            <span style="color: #777" v-if="form.isStatus == 1">否</span>
+          </div>
+        </uni-forms-item>
+      </uni-forms>
+    </div>
+
+    <div class="form zoufangjilu" style="margin-bottom: 146rpx">
+      <van-row>
+        <van-col :span="24"> 走访记录 </van-col>
+        <van-col :span="24">
+          <div class="margint16rpx">
+            <uni-easyinput
+              type="textarea"
+              inputBorder
+              class="textarea_info"
+              style="margin-top: 16rpx"
+              v-model="form.interviewRecord"
+              placeholder="请输入"
+            />
+          </div>
+        </van-col>
+      </van-row>
+      <uni-forms
+        v-if="form.isStatus != 1"
+        ref="baseForm"
+        style="font-size: 26rpx"
+        :modelValue="form"
+        label-width="170rpx"
+      >
+        <uni-forms-item
+          label="处理人"
+          class="mt42rpx mb42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx; width: 100%">
+            <input
+              v-model="form.handleUserName"
+              style="
+                height: 73rpx;
+                line-height: 73rpx;
+                width: 100%;
+                color: #777;
+              "
+            />
+            <!-- <span style="color: #777">{{ form.handleUserName }}</span> -->
+          </div>
+        </uni-forms-item>
+        <div style="margin-top: 16rpx">
+          <van-row>
+            <van-col :span="24" style="margin-top: 15rpx"> 处理结果 </van-col>
+            <van-col :span="24">
+              <div class="margint16rpx">
+                <uni-easyinput
+                  type="textarea"
+                  inputBorder
+                  class="textarea_info"
+                  style="margin-top: 16rpx"
+                  v-model="form.handleResult"
+                  placeholder="请输入"
+                />
+              </div>
+            </van-col>
+          </van-row>
+        </div>
+
+        <uni-forms-item
+          label="处理时间"
+          class="mt42rpx pd42rpx border_bottom_ccc"
+        >
+          <div style="height: 73rpx; line-height: 73rpx; width: 100%">
+            <span style="color: #777">{{ form.handleTime }}</span>
+          </div>
+        </uni-forms-item>
+      </uni-forms>
+    </div>
+    <!-- <multiple-select
+        v-model="show"
+        model="false"
+        :all-show="false"
+        :data="companyAllList"
+        :default-selected="defaultSelected"
+        @confirm="confirm"
+      ></multiple-select> -->
+    <view class="btn-view">
+      <button
+        class="btn"
+        @click="dialogInputConfirm()"
+        style="margin-left: 10rpx"
+      >
+        编辑完成
+      </button>
+    </view>
+  </div>
+</template>
+    
+    <script>
+import multipleSelect from "../../../subPackages/components/momo-multipleSelect/momo-multipleSelect";
+
+import {
+  getByCodes,
+  addInterview,
+  getBySaveStatus,
+  editInterview,
+  getCompanyAll,
+  getInterviewDetails,
+} from "@/js_sdk/http.js";
+import vanRow from "../../../../wxcomponents/weapp/dist/row";
+import vanCol from "../../../../wxcomponents/weapp/dist/col";
+
+// import { findYuanQuList } from "@/js_sdk/http.js";
+const form = {
+  id: null,
+  isStatus: null,
+  interviewTime: null,
+  interviewType: null,
+  interviewTypeIndex: null,
+  companyId: null,
+  companyIndex: null,
+  projectType: "",
+  interviewRecord: "",
+  associationCompanyString: [],
+};
+export default {
+  components: {
+    vanRow,
+    vanCol,
+    multipleSelect,
+  },
+  data() {
+    return {
+      id: "",
+      isStatus: 2,
+      range: [
+        { value: 2, text: "是" },
+        { value: 1, text: "否" },
+      ],
+      defaultSelected: [],
+      dic_key: ["interviewType"],
+      dic_SelectList: {},
+      companyIndex: null,
+      companyAllList: [],
+      defaultSelected: [],
+      show: false,
+      active: 0,
+      form: { ...form },
+      index: 0,
+    };
+  },
+  onLoad: function (option) {
+    this.getCompanyAll();
+    this.id = option.id; //打印出上个页面传递的参数。\
+    this.getByCodes();
+  },
+  methods: {
+    async dialogInputConfirm() {
+      let data = await editInterview({ ...this.form });
+      if (data.code == 200) {
+        this.$showToast("修改成功");
+        uni.navigateBack({});
+      }
+    },
+    async getInterviewDetails() {
+      let detail = await getInterviewDetails(this.id);
+      this.form = detail;
+      this.getCompanyIdByApiList({ companyId: detail.companyId });
+      this.getInterviewLableByApiList({
+        interviewType: this.form.interviewType,
+      });
+      this.form.isStatus = detail.isStatus;
+    },
+
+    getCompanyIdByApiList(params) {
+      this.form.companyId = params.companyId;
+
+      let companyIndex = this.companyAllList.findIndex(
+        (e) => e.value == params.companyId
+      );
+      this.form.companyIndex = companyIndex;
+    },
+    getInterviewLableByApiList(params) {
+      let interviewTypeIndex = this.dic_SelectList.interviewType.findIndex(
+        (e) => e.value == params.interviewType
+      );
+      this.form.interviewType =
+        this.dic_SelectList.interviewType[interviewTypeIndex].value;
+      this.form.interviewTypeIndex = interviewTypeIndex;
+    },
+    getInterviewTime(e) {
+      this.form.interviewTime = e.detail.value;
+    },
+    async takeParamsGoBack(e) {
+      const token = uni.getStorageSync("laocui_user_info");
+      let data;
+      if (this.form.id) {
+        data = await editInterview({
+          ...this.form,
+          status: e,
+          createdBy: JSON.parse(token).user.id,
+        });
+      } else {
+        if (this.form.companyId == null) {
+          return this.$showToast("请选择走访公司");
+        }
+        if (this.form.interviewTime == null || this.form.interviewTime == "") {
+          return this.$showToast("请选择走访时间");
+        }
+        if (this.form.interviewType == null) {
+          return this.$showToast("请选择走访类型");
+        }
+        if (this.form.isStatus == null) {
+          return this.$showToast("请选择是否需要处理");
+        }
+        data = await addInterview({
+          ...this.form,
+          status: e,
+          createdBy: JSON.parse(token).user.id,
+        });
+      }
+
+      if (data.code == 200) {
+        if (e == 1) {
+          this.$emit("changeActive");
+          this.$showToast("提交成功");
+          this.form = { ...form };
+        }
+        if (e == 0) {
+          this.$showToast("保存成功");
+        }
+      }
+    },
+    getCompany(e) {
+      this.form.companyIndex = e.detail.value;
+      this.form.companyId = this.companyAllList[e.detail.value].value;
+    },
+    chosseAboutCompany() {
+      this.show = true;
+    },
+    async getCompanyAll() {
+      let companyAllList = await getCompanyAll();
+      this.getInterviewDetails();
+      this.companyAllList = companyAllList.map((e) => {
+        return {
+          label: e.qymc,
+          value: e.id,
+        };
+      });
+    },
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+    },
+    confirm(e) {
+      let associationCompanyString = [];
+      let associationCompany = [];
+      for (var p in e) {
+        associationCompanyString.push(e[p].label);
+        associationCompany.push(e[p].value);
+      }
+      this.form.associationCompanyString = associationCompanyString.join(",");
+      this.form.associationCompany = associationCompany.join(",");
+    },
+    bindPickerChange(e) {
+      this.form.interviewTypeIndex = e.detail.value;
+      this.form.interviewType =
+        this.dic_SelectList.interviewType[e.detail.value].value;
+    },
+  },
+  // onLoad: function (){
+  // 	this.$refs.findYuanQuList()
+  // },
+};
+</script>
+    
+    <style lang="scss">
+.gaisideshurukuang {
+  .btn-view {
+    width: 100%;
+    height: 100rpx;
+    padding: 20rpx 10%;
+    background-color: #ffffff;
+    position: fixed;
+    bottom: 0;
+    left: 0;
+  }
+  .btn {
+    width: 80%;
+    height: 90rpx;
+    border-radius: 50rpx 50rpx 50rpx 50rpx;
+    background: #1d18bc;
+    line-height: 90rpx;
+    color: white;
+  }
+  font-size: 26rpx !important;
+  .is-input-border {
+    border-top: none !important;
+    border-left: none !important;
+    border-right: none !important;
+    border: none;
+    border-radius: 0 !important;
+  }
+  .uni-forms-item {
+    margin-bottom: 0px;
+    border-bottom: 2rpx solid #cccccc !important;
+  }
+}
+.btn-view {
+  width: 100%;
+  height: 100rpx;
+  padding: 20rpx 10%;
+  background-color: #ffffff;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+}
+.btn {
+  width: 80%;
+  height: 90rpx;
+  border-radius: 50rpx 50rpx 50rpx 50rpx;
+  background: #1d18bc;
+  line-height: 90rpx;
+  color: white;
+}
+.goreport {
+  .uni-forms-item {
+    margin-bottom: 0px;
+    border-bottom: 2rpx solid #cccccc !important;
+  }
+  .textarea_info {
+    textarea {
+      background: #f9f9f9;
+    }
+  }
+  .is-disabled {
+    background: white !important;
+    color: #777;
+  }
+  .form {
+    width: calc(100% - 128rpx);
+    margin: 32rpx;
+    background: #ffffff;
+    padding: 32rpx;
+
+    .label {
+      height: 53rpx;
+      line-height: 53rpx;
+    }
+    .is-input-border {
+    }
+    .uni-forms-item {
+      border-bottom: 2rpx solid #cccccc !important;
+    }
+  }
+}
+</style>
+    

+ 275 - 0
pages/subPackages/companyreport/components/reportHistory.vue

@@ -0,0 +1,275 @@
+<template>
+  <div class="reportHistory">
+    <div class="list">
+      <div
+        class="list-row"
+        v-for="(item, index) in pageList"
+        :key="index"
+        @click="jumpDetailsPage(item, item.id)"
+      >
+        <div class="cell_1 width100">
+          <div class="width100 height44rpx mb8rpx">
+            <div class="report_title" @click="jumpDetailsPage(item, item.id)">
+              走访类型:
+
+              {{ getDicType(item.interviewType) }}
+            </div>
+          </div>
+          <div class="width100 height40rpx mb8rpx border_bottom_f5f5f5">
+            <div class="second_title height40rpx">
+              是否需要处理:
+              {{ item.isStatus == "1" ? "否" : "是" }}
+            </div>
+          </div>
+          <div
+            class="width60 float_left list_date height40rpx lh40rpx margint8rpx"
+          >
+            {{ item.interviewTime }}
+          </div>
+          <div
+            class="width40 float_left margint8rpx"
+            v-if="
+              !(
+                (item.handleUserName || item.handleUserName == 'null') &&
+                (item.handleResult || item.handleResult == 'null')
+              )
+            "
+          >
+            <van-button
+              color="#1D18BC"
+              class="colorfffff height40rpx float_right"
+              size="mini"
+              v-if="item.isStatus == 2"
+              @click="openHandleReportDialog(item)"
+            >
+              处理登记
+            </van-button>
+          </div>
+        </div>
+      </div>
+      <div class="list-row" v-if="pageList.length == 0">
+        <van-empty
+          class="disblock marginauto"
+          style="background: white"
+          description="暂无数据"
+        />
+      </div>
+      <handle-report ref="handleReport" @changeActive="getInterviewList()" />
+    </div>
+  </div>
+</template>
+
+<script>
+import vanTab from "../../../../wxcomponents/weapp/dist/tab/index";
+import vanTabs from "../../../../wxcomponents/weapp/dist/tabs/index";
+import vanButton from "../../../../wxcomponents/weapp/dist/button/index";
+import vanEmpty from "../../../../wxcomponents/weapp/dist/empty/index";
+import vanDivider from "../../../../wxcomponents/weapp/dist/divider/index";
+import handleReport from "./handlereport.vue";
+import { getInterviewList, getByCodes } from "@/js_sdk/http.js";
+const form = {
+  status: [],
+  chaoxiang: [],
+  statusArray: [],
+  chaoxiangArray: [],
+  zaitiTypeArray: [],
+  roomSize1: "",
+  roomSize2: "",
+  guidePrice1: "",
+  guidePrice2: "",
+  loupan_value: null,
+  groupIds: null,
+  pageNum: 1,
+  dic_key: ["interviewType"],
+  dic_SelectList: {},
+  pageSize: 10,
+  total: 0,
+  mnpBuildingIds: "",
+};
+
+export default {
+  components: {
+    vanTab,
+    vanTabs,
+    vanEmpty,
+    vanDivider,
+    vanButton,
+    handleReport,
+  },
+  name: "reportHistoryr.vue",
+  data() {
+    return {
+      dic_key: ["interviewType"],
+      dic_SelectList: {},
+      pageList: [],
+      search: {
+        pageSize: 10,
+        pageNum: 1,
+      },
+    };
+  },
+  mounted() {
+    this.getInterviewList();
+    this.getByCodes();
+
+    // this.findYuanQuList()
+    // this.getByCodes()
+  },
+  onLoad() {
+    this.getInterviewList();
+  },
+  methods: {
+    jumpDetailsPage(item, id) {
+      if (item.isStatus == 2 && !item.handleUserName && !item.handleResult) {
+        return;
+      }
+      uni.navigateTo({
+        url:
+          "/pages/subPackages/companyreport/components/reportDetails?id=" + id,
+      });
+    },
+    changeActive() {
+      this.$emit("changeActive");
+      const token = uni.getStorageSync("laocui_user_info");
+      this.search.createdBy = JSON.parse(token).user.id;
+      this.getInterviewList();
+      this.getByCodes();
+    },
+    async getByCodes() {
+      let data = await getByCodes(JSON.stringify(this.dic_key));
+      this.dic_SelectList = this.$common.handleDicList(data);
+      this.dic_SelectList.interviewType[0].id;
+    },
+    getDicType(value) {
+      if (!value) return;
+
+      let interviewType = this.dic_SelectList.interviewType;
+      console.log(interviewType);
+      let index = interviewType.findIndex((e) => e.value == value);
+      if (index != -1) return interviewType[index].label;
+    },
+    async getMoreListData() {
+      let that = this;
+
+      that.search.pageNum = that.search.pageNum + 1;
+      let list = await getInterviewList(that.search);
+
+      if (list.rows == 0) {
+        that.$showToast("没有更多数据了");
+      } else {
+        list.rows.forEach((e) => {
+          that.pageList.push(e);
+        });
+      }
+    },
+
+    async getInterviewList() {
+      const token = uni.getStorageSync("laocui_user_info");
+      this.search.createdBy = JSON.parse(token).user.id;
+      this.search.pageNum = 1;
+      this.search.pageSize = 10;
+      this.search.total = 0;
+      let data = await getInterviewList(this.search);
+      this.pageList = data.rows;
+    },
+    openHandleReportDialog(item) {
+      this.$refs.handleReport.openDianlog(item);
+    },
+  },
+};
+</script>
+
+<style lang="scss">
+/deep/.van-cell {
+  padding: 0 0 0 28rpx !important;
+}
+.inputClass {
+  padding: 0 0 0 28rpx !important;
+}
+.reportHistory {
+  .search_btn {
+    margin-left: 18rpx;
+    width: calc(100% - 18rpx);
+    height: 60rpx;
+  }
+  .reset_btn {
+    color: #2628a9 !important;
+    width: 100%;
+    height: 60rpx;
+  }
+  .list-row {
+    width: calc(100% - 64rpx);
+    padding: 32rpx;
+    background: #ffffff;
+    margin-bottom: 16rpx;
+    display: flex;
+    //height: 278rpx;
+    border-radius: 8rpx 8rpx 8rpx 8rpx;
+  }
+  .second_title {
+    float: left;
+    width: 50%;
+
+    font-size: 28rpx;
+    font-family: PingFang SC-Medium, PingFang SC;
+    font-weight: 500;
+    color: #777777;
+  }
+
+  .list {
+    width: calc(100% - 64rpx);
+
+    margin: 32rpx;
+  }
+
+  .form {
+    width: calc(100% - 128rpx);
+    margin: 32rpx;
+    background: #ffffff;
+    padding: 32rpx;
+
+    .label {
+      height: 53rpx;
+      line-height: 53rpx;
+    }
+  }
+
+  .checklist-box {
+    margin: 0 !important;
+    margin-right: 16rpx !important;
+  }
+
+  .labelcolmt26 {
+    input {
+      border-radius: 8rpx 8rpx 8rpx 8rpx;
+      border: 2rpx solid #cccccc;
+      text-align: center;
+    }
+    .van-col {
+      margin-top: 26rpx !important;
+    }
+
+    label {
+      color: #333333;
+      font-size: 30rpx;
+      margin-top: 10rpx !important;
+    }
+
+    .uni-data-checklist {
+      margin-top: -10rpx !important;
+    }
+  }
+
+  .status {
+    .uni-data-checklist {
+      margin-top: 0rpx !important;
+    }
+
+    label {
+      color: #333333;
+      font-size: 30rpx;
+      padding-right: 0rpx !important;
+    }
+  }
+}
+</style>

+ 330 - 0
pages/subPackages/components/momo-multipleSelect/momo-multipleSelect.vue

@@ -0,0 +1,330 @@
+<template>
+  <view class="select-container" v-show="show" @touchmove.stop.prevent>
+    <view
+      class="mask"
+      :class="activeClass ? 'mask-show' : ''"
+      @tap="onCancel(true)"
+    ></view>
+    <view class="select-box" :class="activeClass ? 'select-box-show' : ''">
+      <view class="header">
+        <text class="cancel" @tap="onCancel">{{ cancelText }}</text>
+        <view class="all" @tap="onAllToggle" v-if="allShow">
+          <text :class="isAll ? 'all-active' : ''">全选</text>
+        </view>
+        <text class="confirm" @tap="onConfirm">{{ confirmText }}</text>
+      </view>
+      <view class="body-warp">
+        <scroll-view class="body" scroll-y="true">
+          <slot v-if="!data.length" name="tips">
+            <view class="empty-tips">暂无数据~</view>
+          </slot>
+          <view
+            class="select-item"
+            :class="[
+              item.disabled ? 'disabled' : '',
+              selectedArr[index] ? 'selected' : '',
+            ]"
+            v-for="(item, index) in data"
+            :key="item[valueName]"
+            @tap="onSelected(index)"
+          >
+            <view class="label">{{ item[labelName] }}</view>
+            <text v-show="selectedArr[index]" class="selected-icon">✔</text>
+          </view>
+        </scroll-view>
+      </view>
+    </view>
+  </view>
+</template>
+<!-- 多选组件 -->
+<script>
+export default {
+  model: {
+    prop: "value",
+    event: ["input"],
+  },
+  data() {
+    return {
+      show: false, //是否显示
+      activeClass: false, //激活样式状态
+      selectedArr: [], //选择对照列表
+      selectedArrOld: [], //选择对照列表上一次的数据
+    };
+  },
+  onShow() {
+    this.show = this.value;
+  },
+  computed: {
+    // 返回是否全选
+    isAll() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      if (!wipeDisabledList.length) return false;
+      return !wipeDisabledList.includes(false);
+    },
+  },
+  props: {
+    // 双向绑定
+    value: {
+      type: Boolean,
+      default: false,
+    },
+    // 取消按钮文字
+    cancelText: {
+      type: String,
+      default: "取消",
+    },
+    // 确认按钮文字
+    confirmText: {
+      type: String,
+      default: "确认",
+    },
+    // label对应的key名称
+    labelName: {
+      type: String,
+      default: "label",
+    },
+    // value对应的key名称
+    valueName: {
+      type: String,
+      default: "value",
+    },
+    // 是否允许点击遮罩层关闭
+    maskCloseAble: {
+      type: Boolean,
+      default: true,
+    },
+    // 是否显示全选
+    allShow: {
+      type: Boolean,
+      default: true,
+    },
+    // 模式
+    mode: {
+      type: String,
+      default: "multiple",
+    },
+    // 默认选中值
+    defaultSelected: {
+      type: Array,
+      default: function () {
+        return [];
+      },
+    },
+    // 数据源
+    data: {
+      type: Array,
+      required: true,
+      default: () => {
+        return [];
+      },
+    },
+  },
+  watch: {
+    async value(newVal) {
+      this.show = newVal;
+      await this.$nextTick();
+      this.activeClass = newVal;
+      if (newVal) {
+        this.selectedArrOld = JSON.parse(JSON.stringify(this.selectedArr));
+      }
+    },
+    show(newVal) {
+      this.$emit("input", newVal);
+      this.$emit("change", newVal);
+    },
+    data: {
+      // 设置初始选择对照列表
+      handler(list) {
+        this.selectedArr = list.map((el) => false);
+        this.setItemActiveState();
+      },
+      deep: true,
+      immediate: true,
+    },
+    defaultSelected: {
+      handler() {
+        this.setItemActiveState();
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  methods: {
+    // 设置默认选中通用办法
+    setItemActiveState() {
+      if (this.data.length && this.defaultSelected.length) {
+        this.data.forEach((item, i) => {
+          for (let n = 0; n < this.defaultSelected.length; n++) {
+            if (
+              !item.disabled &&
+              item[this.valueName] === this.defaultSelected[n]
+            ) {
+              this.selectedArr.splice(i, 1, true);
+              break;
+            }
+          }
+        });
+      }
+    },
+    /**
+     * 选择事件
+     * @index {Number} 点击下标
+     */
+    onSelected(index) {
+      if (this.data[index].disabled) return;
+      let index2Active = this.selectedArr[index];
+      this.selectedArr.splice(index, 1, !index2Active);
+    },
+    // 取消事件
+    onCancel(isMask) {
+      if (!isMask || this.maskCloseAble) {
+        this.show = false;
+        this.selectedArr = JSON.parse(JSON.stringify(this.selectedArrOld));
+      } else {
+        return;
+      }
+      this.$emit("cancel");
+    },
+    // 返回去除了disabled状态后的对照列表
+    returnWipeDisabledList() {
+      let arr = [];
+      this.selectedArr.forEach((el, index) => {
+        if (!this.data[index].disabled) arr.push(el);
+      });
+      return arr;
+    },
+    // 全选/非全选事件
+    onAllToggle() {
+      let wipeDisabledList = this.returnWipeDisabledList();
+      // 如果去除了disabled的对照列表有false的数据,代表未全选
+      if (wipeDisabledList.includes(false)) {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.data[index].disabled)
+            this.selectedArr.splice(index, 1, true);
+        });
+      } else {
+        this.selectedArr.forEach((el, index) => {
+          if (!this.data[index].disabled)
+            el = this.selectedArr.splice(index, 1, false);
+        });
+      }
+    },
+    // 确定事件
+    onConfirm() {
+      this.show = false;
+      let selectedData = [];
+      this.selectedArr.forEach((el, index) => {
+        if (el) {
+          selectedData.push(this.data[index]);
+        }
+      });
+      if (this.mode === "multiple") {
+        this.$emit("confirm", selectedData);
+      } else {
+        let backData = selectedData[0] || {};
+        this.$emit("confirm", backData);
+      }
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.select-container {
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  left: 0;
+  top: 0;
+  z-index: 999;
+  $paddingLR: 18rpx;
+  .mask {
+    width: 100%;
+    height: 100%;
+    background-color: $uni-bg-color-mask;
+    opacity: 0;
+    transition: opacity 0.3s;
+    &.mask-show {
+      opacity: 1;
+    }
+  }
+  // 选择器内容区域
+  .select-box {
+    width: 100%;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    transform: translate3d(0px, 100%, 0px);
+    background-color: $uni-bg-color;
+    transition: all 0.3s;
+    &.select-box-show {
+      transform: translateZ(0);
+    }
+    .header {
+      display: flex;
+      box-sizing: border-box;
+      width: 100%;
+      justify-content: space-between;
+      border-bottom: 1px solid $uni-border-color;
+      line-height: 76rpx;
+      font-size: 30rpx;
+      padding: 0 $paddingLR;
+      .cancel {
+        color: $uni-text-color-grey;
+      }
+      .all {
+        .all-active {
+          &::after {
+            display: inline-block;
+            content: "✔";
+            padding-left: 8rpx;
+          }
+        }
+      }
+      .confirm {
+        color: $uni-color-primary;
+      }
+    }
+    .body-warp {
+      width: 100%;
+      height: 30vh;
+      box-sizing: border-box;
+      padding: 20rpx $paddingLR;
+    }
+    .body {
+      width: 100%;
+      height: 100%;
+      overflow-y: auto;
+      .empty-tips {
+        margin-top: 25%;
+        text-align: center;
+        font-size: 26rpx;
+        color: $uni-color-error;
+      }
+      .select-item {
+        display: flex;
+        font-size: 26rpx;
+        line-height: 58rpx;
+        color: #303133;
+        position: relative;
+        transition: all 0.3s;
+        &.selected {
+          color: $uni-color-primary;
+        }
+        &.disabled {
+          color: $uni-text-color-disable;
+        }
+        > .label {
+          flex: 1;
+          text-align: center;
+        }
+        > .selected-icon {
+          position: absolute;
+          right: 0;
+          top: 50%;
+          transform: translateY(-50%);
+        }
+      }
+    }
+  }
+}
+</style>

+ 170 - 0
pages/subPackages/components/selectGenzongDep/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;
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 679 - 0
pages/subPackages/components/selectGenzongDep/tkitree.vue


+ 78 - 0
pages/subPackages/components/selectGenzongDep/tools.js

@@ -0,0 +1,78 @@
+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
+      })
+    }
+  }
+
+}

+ 170 - 0
pages/subPackages/components/selectXiangguanDep/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;
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 679 - 0
pages/subPackages/components/selectXiangguanDep/tkitree.vue


+ 78 - 0
pages/subPackages/components/selectXiangguanDep/tools.js

@@ -0,0 +1,78 @@
+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
+      })
+    }
+  }
+
+}

+ 170 - 0
pages/subPackages/components/select_dengjiren/style.css

@@ -0,0 +1,170 @@
+.tkitree-mask {
+    position: fixed;
+    top: 0rpx;
+    right: 0rpx;
+    bottom: 0rpx;
+    left: 0rpx;
+    z-index: 10000;
+    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: 10001;
+    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;
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 678 - 0
pages/subPackages/components/select_dengjiren/tkitree.vue


+ 78 - 0
pages/subPackages/components/select_dengjiren/tools.js

@@ -0,0 +1,78 @@
+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
+      })
+    }
+  }
+
+}

+ 170 - 0
pages/subPackages/components/select_dengjiyuan/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;
+}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 675 - 0
pages/subPackages/components/select_dengjiyuan/tkitree.vue


+ 78 - 0
pages/subPackages/components/select_dengjiyuan/tools.js

@@ -0,0 +1,78 @@
+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
+      })
+    }
+  }
+
+}

+ 73 - 0
pages/subPackages/components/tel-number/index.vue

@@ -0,0 +1,73 @@
+<template>
+  <div class="custom-tel-component" @click="makePhoneCall(num)">
+    <div class="custom-tel-component-left" v-if="showTel">
+      {{ num }}
+    </div>
+    <a :href="'tel:' + num" class="custom-tel-component-right">
+      <van-icon
+        name="phone-circle-o"
+        style="color: white"
+        class="iconfont icon-dianhua1"
+      />
+    </a>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    showTel: {
+      // 是否显示电话号码
+      type: Boolean,
+      default: true,
+    },
+    num: {
+      // 电话号码
+      type: String | Number,
+      default: "",
+    },
+  },
+  methods: {
+    makePhoneCall(num) {
+      wx.makePhoneCall({
+        phoneNumber: num, //此号码仅用于测试 。
+
+        success: function () {
+          console.log("拨打电话成功!");
+        },
+
+        fail: function () {
+          console.log("拨打电话失败!");
+        },
+      });
+    },
+  },
+};
+</script>
+
+<style lang="scss" type="text/scss" scoped>
+.custom-tel-component {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .custom-tel-component-left {
+    flex: 1;
+    font-size: 24rpx;
+    line-height: 66rpx;
+    color: #333333;
+  }
+  .custom-tel-component-right {
+    width: 50rpx;
+    height: 50rpx;
+    background-color: rgba(102, 0, 255, 1);
+    border-radius: 50%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    i {
+      color: #fff;
+      font-size: 25rpx;
+    }
+  }
+}
+</style>

+ 0 - 0
pages/subPackages/components/tkitree/style.css


Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä