index.wpy 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070
  1. <style lang="less">
  2. page {
  3. height: 100%;
  4. background-color: #f7f8fa;
  5. }
  6. .map-wrap {
  7. position: absolute;
  8. top: 0;
  9. left: 0;
  10. width: 100%;
  11. bottom: 0;
  12. z-index: 1;
  13. }
  14. .pageBottom {
  15. display: flex;
  16. align-items: flex-end;
  17. height: 1000rpx;
  18. .log-text {
  19. display: block;
  20. margin: 0 auto;
  21. width: 176rpx;
  22. height: 40rpx;
  23. padding: 98rpx 0 80rpx;
  24. }
  25. }
  26. /deep/ .van-transition {
  27. background: red;
  28. }
  29. .navFixed {
  30. position: fixed;
  31. top: 104rpx;
  32. left: 0;
  33. right: 0;
  34. background: #ffffff;
  35. }
  36. .bg-img {
  37. width: 100%;
  38. position: absolute;
  39. top: 0;
  40. left: 0;
  41. background: #f7f8fa;
  42. }
  43. .roomImgWrap {
  44. position: absolute;
  45. left: 0;
  46. right: 0;
  47. top: -185px;
  48. border-top-left-radius: 40rpx;
  49. border-top-right-radius: 40rpx;
  50. width: 662rpx;
  51. height: 185px;
  52. margin: 0 auto;
  53. background: #fff;
  54. padding: 5px 5px 0;
  55. box-sizing: border-box;
  56. overflow: hidden;
  57. .room-img {
  58. border-top-left-radius: 40rpx;
  59. border-top-right-radius: 40rpx;
  60. width: 100%;
  61. height: 100%;
  62. }
  63. }
  64. .opacityTrans {
  65. opacity: 0;
  66. }
  67. .office-header {
  68. position: absolute;
  69. z-index: 1;
  70. background-color: rgba(255, 255, 255, 0.596637);
  71. width: 42px;
  72. height: 32px;
  73. border-radius: 32px;
  74. margin-left: 10px;
  75. }
  76. .my-class:after {
  77. content: '.';
  78. display: block;
  79. height: 0;
  80. clear: both;
  81. visibility: hidden;
  82. }
  83. .g-fl {
  84. display: flex;
  85. justify-content: center;
  86. align-items: center;
  87. }
  88. .g-fl-c {
  89. flex-direction: column;
  90. }
  91. .overflow-wrap {
  92. width: 100%;
  93. height: 100%;
  94. scroll-view {
  95. position: relative;
  96. width: 100%;
  97. height: 100%;
  98. z-index: 2;
  99. }
  100. }
  101. .overflowclass {
  102. height: 100%;
  103. overflow: hidden;
  104. }
  105. .move-wrap {
  106. width: 100%;
  107. background: #f7f8fa;
  108. position: relative;
  109. top: 0;
  110. left: 0;
  111. z-index: 2;
  112. }
  113. .maproom-detail {
  114. width: 750rpx;
  115. margin-left: -45rpx;
  116. padding: 10rpx 45rpx 0;
  117. height: 125px;
  118. position: relative;
  119. background: #fff;
  120. border-bottom: 10rpx solid #ffffff;
  121. box-shadow: 0rpx 0rpx 4rpx rgba(0, 0, 0, 0.07),
  122. 0px 8rpx 20rpx rgba(0, 0, 0, 0.15);
  123. box-sizing: border-box;
  124. border-top-left-radius: 50rpx;
  125. border-top-right-radius: 50rpx;
  126. .office-room-info {
  127. position: relative;
  128. }
  129. .room-envlist {
  130. justify-content: space-around;
  131. .env-name {
  132. font-family: Montserrat;
  133. font-weight: 600;
  134. font-size: 24rpx;
  135. line-height: 30rpx;
  136. color: #c4c4c4;
  137. }
  138. .env-num {
  139. font-family: Montserrat;
  140. font-size: 48rpx;
  141. line-height: 58rpx;
  142. text-align: center;
  143. color: #1b144e;
  144. }
  145. .env-level {
  146. font-family: PingFang SC;
  147. font-size: 20rpx;
  148. line-height: 28rpx;
  149. color: #bab8c7;
  150. }
  151. }
  152. }
  153. .office-container {
  154. width: 662rpx;
  155. margin: 0 auto;
  156. }
  157. .room-detail {
  158. position: relative;
  159. width: 100%;
  160. background: #ffffff;
  161. margin-bottom: 15px;
  162. box-sizing: border-box;
  163. box-shadow: 0rpx 0rpx 4rpx rgba(0, 0, 0, 0.07),
  164. 0px 8rpx 20rpx rgba(0, 0, 0, 0.05);
  165. border-bottom-left-radius: 50rpx;
  166. border-bottom-right-radius: 50rpx;
  167. .sceneBox {
  168. height: 92px;
  169. box-sizing: border-box;
  170. border-top: 1px solid rgba(196, 196, 196, 0.4);
  171. display: flex;
  172. justify-content: space-around;
  173. align-items: center;
  174. padding: 0 40rpx;
  175. .eachScene {
  176. width: 180rpx;
  177. height: 116rpx;
  178. background: rgba(159, 183, 205, 0.15);
  179. border-radius: 16px;
  180. display: flex;
  181. justify-content: center;
  182. align-items: center;
  183. flex-shrink: 0;
  184. &.selScene {
  185. background: rgba(61, 203, 204, 0.3);
  186. }
  187. &.firstScene {
  188. width: auto;
  189. margin-right: 18rpx;
  190. flex-grow: 1;
  191. }
  192. image {
  193. width: 40rpx;
  194. height: 40rpx;
  195. margin-right: 18rpx;
  196. }
  197. }
  198. }
  199. .office-room-info {
  200. position: relative;
  201. // background: #fff;
  202. }
  203. .room-envlist {
  204. justify-content: space-around;
  205. padding-bottom: 32rpx;
  206. .env-name {
  207. font-family: Montserrat;
  208. font-weight: 600;
  209. font-size: 24rpx;
  210. line-height: 30rpx;
  211. color: #c4c4c4;
  212. }
  213. .env-num {
  214. font-family: Montserrat;
  215. font-size: 48rpx;
  216. line-height: 58rpx;
  217. text-align: center;
  218. color: #1b144e;
  219. }
  220. .env-level {
  221. font-family: PingFang SC;
  222. font-size: 20rpx;
  223. line-height: 28rpx;
  224. color: #bab8c7;
  225. }
  226. }
  227. }
  228. .nav-shadow {
  229. // box-shadow: 0px 8px 10px rgba(0, 0, 0, 0.1) ;
  230. box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(0, 0, 0, 0.1);
  231. }
  232. .navBox {
  233. position: fixed;
  234. bottom: 30px;
  235. left: 20rpx;
  236. right: 20rpx;
  237. z-index: 2;
  238. height: 96rpx;
  239. box-sizing: border-box;
  240. padding: 0 40rpx 0 20rpx;
  241. border-radius: 96rpx;
  242. font-size: 28rpx;
  243. background: #ffffff;
  244. box-shadow: 0px 0px 2rpx rgba(0, 0, 0, 0.15),
  245. 0px 8rpx 6rpx rgba(0, 0, 0, 0.07);
  246. display: flex;
  247. justify-content: space-between;
  248. align-items: center;
  249. .eq-nav {
  250. flex: 1;
  251. box-sizing: border-box;
  252. padding-right: 76rpx;
  253. display: flex;
  254. justify-content: space-around;
  255. .nav-item {
  256. width: 58rpx;
  257. .nav-text {
  258. position: relative;
  259. font-family: PingFang SC;
  260. font-size: 28rpx;
  261. font-weight: 400;
  262. line-height: 44rpx;
  263. color: #626c78;
  264. }
  265. }
  266. .nav-item-active {
  267. .nav-text {
  268. font-weight: 600;
  269. color: #1b2129;
  270. }
  271. .nav-text::after {
  272. content: '';
  273. position: absolute;
  274. bottom: 0px;
  275. left: 50%;
  276. transform: translateX(-50%);
  277. display: inline-block;
  278. width: 20rpx;
  279. height: 4rpx;
  280. border-radius: 4px;
  281. background: #3dcbcc;
  282. }
  283. }
  284. }
  285. .map-nav {
  286. display: flex;
  287. align-items: center;
  288. justify-content: center;
  289. width: 208rpx;
  290. height: 64rpx;
  291. border-radius: 32rpx;
  292. gap: 8rpx;
  293. background: #ebeef5;
  294. image {
  295. width: 40rpx;
  296. height: 40rpx;
  297. }
  298. }
  299. }
  300. .top-nav {
  301. position: fixed;
  302. top: 72px;
  303. z-index: 4;
  304. background: #f7f8fa;
  305. padding: 6rpx 45rpx 0;
  306. padding-bottom: 10rpx;
  307. box-sizing: border-box;
  308. }
  309. .popup-box {
  310. padding: 40rpx 46rpx;
  311. }
  312. .scene-popup {
  313. width: 520rpx;
  314. height: 860rpx;
  315. background: linear-gradient(0deg, #fff 720rpx, #f3f3f3 140rpx);
  316. &.air-popup {
  317. width: 560rpx;
  318. height: 720rpx;
  319. background: linear-gradient(
  320. 0deg,
  321. #fff 580rpx,
  322. rgba(243, 243, 243, 1) 140rpx
  323. );
  324. }
  325. .scene-popup-head {
  326. padding-top: 30rpx;
  327. display: flex;
  328. flex-direction: column;
  329. justify-content: center;
  330. align-items: center;
  331. font-size: 38rpx;
  332. .head-imgbg {
  333. display: flex;
  334. justify-content: center;
  335. align-items: center;
  336. width: 140rpx;
  337. height: 140rpx;
  338. background: #f0da21;
  339. border-radius: 50%;
  340. margin-bottom: 30rpx;
  341. &.grey {
  342. background: rgba(196, 196, 196, 1);
  343. }
  344. &.blue {
  345. background: rgba(94, 139, 207, 1);
  346. }
  347. &.red {
  348. background: rgba(229, 87, 79, 1);
  349. }
  350. .air-head-imgbox {
  351. width: 72rpx;
  352. height: 72rpx;
  353. image {
  354. width: 100%;
  355. height: 100%;
  356. }
  357. }
  358. .head-imgbox {
  359. width: 40rpx;
  360. height: 40rpx;
  361. image {
  362. width: 100%;
  363. height: 100%;
  364. }
  365. }
  366. }
  367. }
  368. }
  369. .allclose-popup {
  370. height: auto;
  371. padding-bottom: 60rpx;
  372. .scene-popup-head {
  373. // height: 340rpx ;
  374. box-sizing: border-box;
  375. background: linear-gradient(180deg, #f3f3f3 60px, #fff 60px);
  376. padding-bottom: 80rpx;
  377. }
  378. .head-imgbg {
  379. // margin-bottom: 40rpx ;
  380. }
  381. .head-title {
  382. padding: 0 50rpx;
  383. text-align: center;
  384. }
  385. .close-popup-body {
  386. padding-left: 72rpx;
  387. height: 80px;
  388. box-sizing: border-box;
  389. padding-right: 20rpx;
  390. .close-item {
  391. font-style: normal;
  392. font-size: 28rpx;
  393. color: #c4c4c4;
  394. margin-bottom: 18rpx;
  395. display: flex;
  396. .close-pic {
  397. width: 20px;
  398. text-align: center;
  399. }
  400. .passIcon {
  401. color: #07c160;
  402. vertical-align: middle;
  403. }
  404. .pointer {
  405. display: inline-block;
  406. width: 8px;
  407. height: 8px;
  408. border-radius: 8px;
  409. background: #f0da21;
  410. }
  411. }
  412. .allclose-btns {
  413. padding-top: 20rpx;
  414. }
  415. }
  416. }
  417. .btns {
  418. display: flex;
  419. position: absolute;
  420. bottom: 40rpx;
  421. left: 50%;
  422. transform: translateX(-50%);
  423. .btn {
  424. width: 240rpx;
  425. height: 80rpx;
  426. line-height: 80rpx;
  427. text-align: center;
  428. font-size: 28rpx;
  429. font-weight: 500;
  430. color: #c4c4c4;
  431. }
  432. .btn_com {
  433. border: 1px solid #c4c4c4;
  434. border-radius: 60rpx;
  435. }
  436. }
  437. .popup-btns {
  438. display: flex;
  439. width: 100%;
  440. justify-content: center;
  441. .btnspan {
  442. width: 170rpx;
  443. height: 80rpx;
  444. line-height: 80rpx;
  445. text-align: center;
  446. font-size: 28rpx;
  447. font-weight: 500;
  448. color: #c4c4c4;
  449. box-sizing: border-box;
  450. }
  451. .btn_com {
  452. border: 1px solid #c4c4c4;
  453. border-radius: 60rpx;
  454. }
  455. .surespan {
  456. margin-left: 26rpx;
  457. background: #f0da21;
  458. box-shadow: 0 8rpx 12rpx rgba(0, 0, 0, 0.07);
  459. color: #000000;
  460. border-radius: 60rpx;
  461. }
  462. }
  463. </style>
  464. <template>
  465. <div
  466. class="overflow-wrap"
  467. style="position: {{airHandVisible ? 'fixed':'static'}};"
  468. >
  469. <page-top-bar-custom
  470. @component-page-top-bar-custom-ready="setTopBarHeight"
  471. :bgColor="[navFixed? '#f7f8fa' : 'transparent']"
  472. >
  473. <div
  474. class="office-header"
  475. @click="goPre"
  476. >
  477. <van-icon
  478. style="position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);"
  479. name="arrow-left"
  480. />
  481. </div>
  482. </page-top-bar-custom>
  483. <scroll-view
  484. id="scroll-view"
  485. scroll-y="{{canscroll}}"
  486. enhanced
  487. scroll-anchoring
  488. show-scrollbar="{{false}}"
  489. bounces="{{false}}"
  490. scroll-top="{{scrollTop}}"
  491. bindscroll="scrollEvent"
  492. scroll-with-animation="true"
  493. bindscrolltoupper="scrollToUpper"
  494. >
  495. <div
  496. class="map-wrap"
  497. v-show="transY"
  498. >
  499. <!-- <map-home v-if="userInfo&& userInfo.userId" -->
  500. <map-home
  501. @mapChangeSpaceInfo="mapChangeSpaceInfo"
  502. ></map-home>
  503. </div>
  504. <div
  505. class="move-wrap"
  506. style="transform: translateY({{transY}}px);top:{{topBarHeight+roomPicTop}}px;"
  507. bindtouchstart="touchstart"
  508. bindtouchmove="touchmove"
  509. bindtouchend="touchend"
  510. >
  511. <div
  512. style="opacity:{{opacityV}}"
  513. v-show="!moveToBottom"
  514. >
  515. <image
  516. class="bg-img"
  517. style="top:{{-topBarHeight-roomPicTop}}px;height:{{topBarHeight+roomPicTop}}px"
  518. :src="topbgimg"
  519. />
  520. </div>
  521. <div
  522. style="opacity:{{opacityV}}"
  523. v-show="!moveToBottom"
  524. class="roomImgWrap"
  525. >
  526. <image
  527. class="room-img"
  528. :src="h5StaticPath+headImg"
  529. mode="widthFix"
  530. />
  531. </div>
  532. <div class="office-container">
  533. <!-- 空间基本情况 -->
  534. <div
  535. class="maproom-detail"
  536. v-show="moveToBottom"
  537. >
  538. <space-basic
  539. :IsShowPerson="false"
  540. :officeData="officeData"
  541. :options="options"
  542. :userInfo="userInfo"
  543. ></space-basic>
  544. </div>
  545. <!-- 空间基本情况 -->
  546. <div
  547. id="roomDetail"
  548. class="room-detail"
  549. v-show="!moveToBottom"
  550. >
  551. <space-basic
  552. :IsShowPerson="true"
  553. :officeData="officeData"
  554. :options="options"
  555. :userInfo="userInfo"
  556. ></space-basic>
  557. <!-- 空间信息 -->
  558. <div class="office-room-info">
  559. <div class="room-envlist g-fl">
  560. <div
  561. class="g-fl g-fl-c"
  562. v-for="(item,idx) in envlist"
  563. :key="idx"
  564. @tap.stop="handleDetail(item)"
  565. >
  566. <span class="env-name">{{item.name}}</span>
  567. <span class="env-num">{{item.num }}</span>
  568. <span class="env-level">{{item.level ? item.level :'--'}}</span>
  569. </div>
  570. </div>
  571. </div>
  572. <div
  573. class="sceneBox"
  574. v-if="popList.length>0 && options.roomType =='会议室'"
  575. >
  576. <div
  577. v-for="(item,idx) in popList"
  578. class="eachScene"
  579. :class="{'selScene':vanPopupIndex==item.code,'firstScene':idx==0&&popList.length==2}"
  580. :key="idx"
  581. @click="handleScene(item,idx)"
  582. >
  583. <image :src="h5StaticPath+item.img" />
  584. <span>{{item.name}}</span>
  585. </div>
  586. </div>
  587. <div v-if="roomHasScene && options.roomType =='开放'">
  588. <work-scene-hand
  589. @component-open-workTimePop="handlePopup"
  590. @component-get-workTimeData="getWorkDayTime"
  591. @component-open-sceneShowpop="handleWorkOff"
  592. @component-EquipType-workTimePop="dialogShowEquipType"
  593. :workDayTime="workDayTime"
  594. ></work-scene-hand>
  595. </div>
  596. </div>
  597. <all-close
  598. @showAllClose="showAllClose"
  599. :projectId="projectId"
  600. :floorInfo="floorInfo"
  601. v-if="(nowTime>eightTime||nowTime<sixTime)&&projectId=='Pj1101080259'"
  602. ref="allclose"
  603. ></all-close>
  604. <air-hand-card
  605. ref="airHandCard"
  606. v-if="spaceEqFlagObj.hasAir"
  607. id="inToView02"
  608. :cardWidth="cardWidth"
  609. :airVisible="airVisible"
  610. :roomHasScene="roomHasScene"
  611. :hasAir="spaceEqFlagObj.hasAir"
  612. :equipConfig="equipmentsConfig"
  613. :objectId="options.spaceId"
  614. :roomType="options.roomType"
  615. :projectId="projectId"
  616. :temperature="officeData.temperature"
  617. :isACATVA="isACATVA"
  618. :isACATFC="isACATFC"
  619. @showDetail="handleDetail"
  620. @airShowVisible="airShowVisible"
  621. @component-open-workTimePop="handlePopup"
  622. @component-EquipType-workTimePop="dialogShowEquipType"
  623. @airTemp="airTemp"
  624. @setCanScroll="setCanScroll"
  625. @component-open-airHand-pop="openAirHandPop"
  626. v-bind:key="airKey"
  627. ></air-hand-card>
  628. <!-- 地暖 -->
  629. <div v-show="floorHeatData.len">
  630. <Floor-Heating
  631. id="inToView5"
  632. :cardWidth="cardWidth"
  633. @component-open-floorFeat-pop="openFloorFeatPop"
  634. @component-floorHeat-data="getFloorHeatData"
  635. :spaceId="options.spaceId"
  636. ></Floor-Heating>
  637. </div>
  638. <!-- 光照调节卡片 -->
  639. <lamp-adjust
  640. v-if="spaceEqFlagObj.hasLamp"
  641. id="inToView1"
  642. :roomHasScene="roomHasScene"
  643. :lampHide="lampHide"
  644. :spaceId="options.spaceId"
  645. :roomType="options.roomType"
  646. :controlMode="controlMode"
  647. :equipConfig="equipmentsConfig"
  648. @component-open-colourPop="openColourPop"
  649. @component-open-workTimePop="handlePopup"
  650. @component-EquipType-workTimePop="dialogShowEquipType"
  651. v-bind:key="lampKey"
  652. ></lamp-adjust>
  653. <!-- 窗帘卡片 -->
  654. <div v-show="spaceEqFlagObj.hasCurtain">
  655. <curtain-card
  656. id="inToView2"
  657. :projectId="projectId"
  658. :spaceId="options.spaceId"
  659. :curtainVisible="curtainVisible"
  660. @comments-curtain-len="showCurtain"
  661. @commponents-curtain-showPop="showCurtainPop"
  662. >
  663. </curtain-card>
  664. </div>
  665. <!-- 智能插座卡片 -->
  666. <div v-show="spaceEqFlagObj.hasSocket">
  667. <socket-card
  668. id="inToView3"
  669. :roomHasScene="roomHasScene"
  670. :roomType="options.roomType"
  671. :controlMode="controlMode"
  672. :projectId="projectId"
  673. :spaceId="options.spaceId"
  674. @component-showSocket="showSocket"
  675. @component-open-workTimePop="handlePopup"
  676. @component-EquipType-workTimePop="dialogShowEquipType"
  677. >
  678. </socket-card>
  679. </div>
  680. <!-- 声压卡片 -->
  681. <voice-adjust id="inToView4"></voice-adjust>
  682. <!-- 页面到底标志 -->
  683. <div
  684. class="pageBottom"
  685. :style="{height:windowHeightpx / 2+'px'}"
  686. >
  687. <!-- <image
  688. class="log-text"
  689. src="{{h5StaticLogo}}/page-home/tenatslink.svg"
  690. /> -->
  691. </div>
  692. </div>
  693. </div>
  694. </scroll-view>
  695. <!-- 窗帘 -->
  696. <van-popup
  697. overlay-style="background: rgba(0, 0, 0, 0.4)"
  698. custom-style="height: 55%"
  699. round
  700. :show="curtainVisible"
  701. position="bottom"
  702. @close="curtainVisible = false"
  703. >
  704. <div style="display:flex;justify-content: center;">
  705. <Curtain-Pop
  706. :curtainVisible="curtainVisible"
  707. :typeobj="crutainType"
  708. >
  709. </Curtain-Pop>
  710. </div>
  711. </van-popup>
  712. <!-- 地暖 -->
  713. <van-popup
  714. overlay-style="background: rgba(0, 0, 0, 0.4)"
  715. custom-style="height: 55%"
  716. round
  717. :show="floorfeatVisible"
  718. position="bottom"
  719. @close="floorfeatVisible = false"
  720. >
  721. <div style="display:flex;justify-content: center;">
  722. <Floor-Pop
  723. :floorfeatVisible="floorfeatVisible"
  724. :floorFeatItem="floorFeatItem"
  725. :maxValue="floorHeatData.maxValue"
  726. :minValue="floorHeatData.minValue"
  727. ></Floor-Pop>
  728. </div>
  729. </van-popup>
  730. <!-- 空调 -->
  731. <van-popup
  732. overlay-style="background: rgba(0, 0, 0, 0.4)"
  733. :custom-style="'height:'+airPopHight+'%'"
  734. round
  735. :show="airHandVisible"
  736. position="bottom"
  737. @close="airHandVisible = false"
  738. >
  739. <div style="display:flex;justify-content: center;">
  740. <airHand-Pop
  741. :airHandItem="airHandItem"
  742. :maxValue="airHandData.maxValue"
  743. :minValue="airHandData.minValue"
  744. :roomType="options.roomType"
  745. @change-airHand-order="changeAirHandOrder"
  746. ></airHand-Pop>
  747. </div>
  748. </van-popup>
  749. <!-- 灯控色温 -->
  750. <van-popup
  751. overlay-style="background: rgba(0, 0, 0, 0.4)"
  752. custom-style="height: 55%"
  753. round
  754. :show="colourVisible"
  755. position="bottom"
  756. @close="colourVisible = false"
  757. >
  758. <div style="display:flex;justify-content: center;">
  759. <lamp-colour
  760. v-if="colourVisible"
  761. :colourObj="colourConfig"
  762. ></lamp-colour>
  763. </div>
  764. </van-popup>
  765. <!-- 空调反馈 文案 -->
  766. <van-popup
  767. overlay-style="background: rgba(0, 0, 0, 0.4)"
  768. round
  769. :show="airVisible"
  770. :close-on-click-overlay="false"
  771. @close="airVisible = false"
  772. >
  773. <air-feedback
  774. @component-open-sceneShowpop="airVisible = false;"
  775. :airSetText="airSetText"
  776. :officeData="officeData"
  777. />
  778. </van-popup>
  779. <!-- 浮层场景 popUp 手动 -->
  780. <van-popup
  781. :custom-style="'height:'+handPopHight+'%'"
  782. overlay-style="background: rgba(0, 0, 0, 0.4)"
  783. position="bottom"
  784. round
  785. :show="visible"
  786. @close="handlePopup(false)"
  787. >
  788. <div
  789. class="popup-box"
  790. v-if="options.roomType =='开放' && visible"
  791. >
  792. <work-overtime-hand
  793. @component-close-visible="handlePopup"
  794. @component-get-workTime="getWorkDayTime"
  795. @component-set-countDown="handlecountDown"
  796. :equipConfig="equipmentsConfig"
  797. :visible="visible"
  798. :localName="officeData.localName"
  799. :bookEquipList="bookEquipList"
  800. :workDayTime="workDayTime"
  801. :objectId="options.spaceId"
  802. :countDownTwoMin="countDownTwoMin"
  803. >
  804. </work-overtime-hand>
  805. </div>
  806. </van-popup>
  807. <!--场景 - 详情 -->
  808. <van-popup
  809. overlay-style="background: rgba(0, 0, 0, 0.4)"
  810. round
  811. :show="sceneShow"
  812. @close="hideScene"
  813. >
  814. <!-- 我要离开 -开放办公区 -->
  815. <work-off
  816. style="width:560rpx"
  817. v-if="options.roomType =='开放' && isWorkOff"
  818. :sceneShow="sceneShow"
  819. @component-open-sceneShowpop="handleWorkOff"
  820. >
  821. </work-off>
  822. <!--场景 - 详情 -->
  823. <div
  824. v-if="options.roomType !='开放'"
  825. class="meet-popup"
  826. >
  827. <pop-scene
  828. :sceneDetail="sceneDetail"
  829. @close-scene-show="hideScene"
  830. >
  831. </pop-scene>
  832. </div>
  833. </van-popup>
  834. <van-popup
  835. overlay-style="background: rgba(0, 0, 0, 0.4);"
  836. round
  837. :show="closeAllShow"
  838. @close="hideCloseAll"
  839. >
  840. <div class="scene-popup allclose-popup">
  841. <div class="scene-popup-head">
  842. <div class="head-imgbg">
  843. <div class="head-imgbox">
  844. <image src="{{h5StaticPath}}scene_visitor.svg" />
  845. </div>
  846. </div>
  847. <div v-show="!closeStatus">请确认办公室已经无人</div>
  848. <div
  849. class="head-title"
  850. v-show="closeStatus&&closeShowNum<5"
  851. >您工作辛苦了,感谢为低碳事业做出的贡献</div>
  852. <div v-show="closeShowNum==5">请确认所有门窗已关闭</div>
  853. </div>
  854. <div
  855. class="close-popup-body"
  856. v-show="closeStatus&&closeShowNum<5"
  857. >
  858. <div class="close-item">
  859. <div class="close-pic">
  860. <van-icon
  861. name="passed"
  862. class="passIcon"
  863. v-if="closeShowNum!==1"
  864. />
  865. <span
  866. class="pointer"
  867. v-if="closeShowNum==1"
  868. ></span>
  869. </div>
  870. <span>小飒正关闭办公室内设备 </span>
  871. </div>
  872. <div
  873. class="close-item"
  874. v-show="closeShowNum==3||closeShowNum==4"
  875. >
  876. <div class="close-pic">
  877. <van-icon
  878. name="passed"
  879. class="passIcon"
  880. v-if="closeShowNum==4"
  881. />
  882. <span
  883. class="pointer"
  884. v-if="closeShowNum==3"
  885. ></span>
  886. </div>
  887. <span>暂时保留方便您离开的灯光</span>
  888. </div>
  889. </div>
  890. <div class="popup-btns allclose-btns">
  891. <span
  892. class="btnspan btn_com"
  893. v-show="!closeStatus"
  894. @click="hideCloseAll"
  895. >取消</span>
  896. <span
  897. class="btnspan surespan"
  898. v-show="!closeStatus"
  899. @click="sureCloseAll"
  900. >确认</span>
  901. <span
  902. class="btnspan btn_com"
  903. v-show="closeStatus&&closeShowNum==5"
  904. @click="hideCloseAll"
  905. >隐藏</span>
  906. </div>
  907. </div>
  908. </van-popup>
  909. <div
  910. id="navId"
  911. class="navBox"
  912. v-show="!moveToBottom"
  913. >
  914. <div class="eq-nav">
  915. <div
  916. v-for="(item,index) in navList"
  917. :id="item.id"
  918. @click.stop="selectCrad"
  919. :key="index"
  920. class="nav-item"
  921. :class="{'nav-item-active':navId==index}"
  922. v-if="!item.noShow"
  923. >
  924. <div class="nav-text">
  925. <span>{{item.name}}</span>
  926. </div>
  927. </div>
  928. </div>
  929. <div
  930. class="map-nav"
  931. @tap="toRoom"
  932. >
  933. <image
  934. src="{{h5StaticPath}}n_icon_nav_map.svg"
  935. mode="widthFix"
  936. />
  937. <div>进入地图</div>
  938. </div>
  939. </div>
  940. </div>
  941. </template>
  942. <script>
  943. import wepy from '@wepy/core'
  944. import store from '@/store'
  945. import { mapState, mapActions } from '@wepy/x'
  946. import moment from 'moment'
  947. import {
  948. getSpaceAdjustList,
  949. getWeather,
  950. getEquipmentListHttp,
  951. getMeetingSceneHttp,
  952. switchoverSceneHttp,
  953. querySpaceSceneConfigHttp,
  954. queryCustomAndScence,
  955. queryEquipmentRunConfig
  956. } from '../../api/officehome.js'
  957. import {
  958. getMeetingList,
  959. reserveMeetingroom,
  960. endMeetingReserve
  961. } from '@/api/meetingroom'
  962. import { isWithinLocation } from '@/service/location'
  963. import config from '@/config'
  964. import loadFont from '@/common/loadFont'
  965. import { getCompanyMapData } from '@/api/home'
  966. import { checkHasUserInfo } from '@/service/user'
  967. import { getNowDate, getTowNum } from '@/service/meetingTimes'
  968. let spaceInfoStatusTimer = null
  969. let pageSelectedAreaRecord = {
  970. // key为楼层ID,value 为spceId
  971. }
  972. const switchPanelHeight = 125 // 145是下面块的高
  973. const roomPicTop = 185 // 135是建筑图片的高度 单位都是px
  974. var moveY
  975. let timerTwoMin = null
  976. let initListSen = [
  977. {
  978. id: 0,
  979. code: 'DISCUSSING',
  980. name: '讨论',
  981. img: 'discuss.svg',
  982. checked: true,
  983. textObj: [
  984. {
  985. text: '已为您切换至适宜讨论的环境',
  986. status: 'ok'
  987. }
  988. ]
  989. },
  990. {
  991. id: 1,
  992. code: 'PROJECTING',
  993. name: '投影',
  994. img: 'shadow2.svg',
  995. checked: false,
  996. textObj: [
  997. {
  998. text: '已为您切换至适宜演示的环境',
  999. status: 'ok'
  1000. }
  1001. ]
  1002. },
  1003. {
  1004. id: 2,
  1005. code: 'ADJOURNMENT',
  1006. name: '散会',
  1007. img: 'beover.svg',
  1008. checked: false,
  1009. textObj: [
  1010. {
  1011. text: '会议室内设备已切换至节能模式',
  1012. status: 'ok'
  1013. }
  1014. ]
  1015. }
  1016. ]
  1017. wepy.page({
  1018. store,
  1019. data: {
  1020. projectId: 'Pj1101080259',
  1021. cardWidth: 0, // 动态获取卡片的宽度
  1022. floorFeatItem: {}, // 地暖弹窗数据
  1023. airHandItem: {},
  1024. airPopHight: 0,
  1025. airHandData: {
  1026. maxValue: 0,
  1027. minValue: 0
  1028. }, // 地暖数据
  1029. floorHeatData: {
  1030. maxValue: 0,
  1031. minValue: 0,
  1032. len: false
  1033. }, // 地暖数据
  1034. floorfeatVisible: false, // 地暖弹窗
  1035. airHandVisible: false, // 空调手动弹窗
  1036. curtainVisible: false, // 窗帘弹窗
  1037. crutainType: {
  1038. btnArr: [],
  1039. data: [],
  1040. curtainName: '窗帘'
  1041. },
  1042. vanPopupIndex: '',
  1043. colourConfig: {}, // 色温设置
  1044. colourVisible: false, // 色温弹窗
  1045. equipmentsConfig: [], // 设备配置
  1046. countDownTwoMin: 120, // 倒计时两分钟
  1047. workDayTime: {}, // 开放办公区 时间
  1048. closeStatus: false, // 点击了关闭确认按钮
  1049. closeShowNum: 0,
  1050. closeAllShow: false,
  1051. airKey: 1,
  1052. lampKey: 1,
  1053. nowScrollY: 0,
  1054. canscroll: true,
  1055. scrollTop: 0,
  1056. realScrollTop: 0,
  1057. transY: 0,
  1058. opacityV: 1,
  1059. transYCopy: 0,
  1060. windowHeightpx: 0,
  1061. startY: 0,
  1062. movesign: false,
  1063. scale: 1,
  1064. moveToBottom: false,
  1065. floorInfo: [],
  1066. h5StaticPath: config.h5StaticPath + '/page-officehome/',
  1067. h5StaticLogo: config.h5StaticPath,
  1068. lampHide: false, // 灯列表收起
  1069. topbgimg: null, // 头部背景
  1070. navFixed: false, // 滑动置顶
  1071. showWorkOff: false, // 开放办公室的 提前关闭是否展示
  1072. officeData: null,
  1073. headScene: '', // 头部文案
  1074. headImg: '', // 头部背景图片
  1075. options: { roomType: null, spaceId: 'Sp1101080259c4434730d12144ba890fe11f796d3143' }, // 本地数据
  1076. sceneDetail: null,
  1077. popList: [],
  1078. // 上班=ATWORK 讨论=DISCUSSING 投影=PROJECTING 散会=ADJOURNMENT 下班=OFFWORK
  1079. meetingRoomSence: [
  1080. { code: 'DISCUSSING', name: '讨论' },
  1081. { code: 'PROJECTING', name: '演示' },
  1082. { code: 'ADJOURNMENT', name: '散会' }
  1083. ],
  1084. roomHasScene: false, // 是否有加班
  1085. listSen: [],
  1086. envlist: [],
  1087. navList: [
  1088. {
  1089. top: 0,
  1090. id: 0,
  1091. code: 'air',
  1092. name: '空调',
  1093. noShow: false
  1094. },
  1095. {
  1096. top: 0,
  1097. id: 1,
  1098. code: 'heat',
  1099. name: '地暖',
  1100. noShow: false
  1101. },
  1102. {
  1103. top: 0,
  1104. id: 2,
  1105. code: 'lamp',
  1106. name: '光照',
  1107. noShow: false
  1108. },
  1109. {
  1110. top: 0,
  1111. id: 3,
  1112. code: 'curtain',
  1113. name: '窗帘',
  1114. noShow: false
  1115. },
  1116. {
  1117. top: 0,
  1118. id: 4,
  1119. code: 'socket',
  1120. name: '插座',
  1121. noShow: false
  1122. },
  1123. {
  1124. top: 0,
  1125. id: 5,
  1126. code: 'noise',
  1127. name: '声压',
  1128. noShow: false
  1129. }
  1130. ],
  1131. topBarHeight: 72,
  1132. roomPicTop: roomPicTop,
  1133. stopScrollCheck: false, // 点击导航
  1134. navId: 0,
  1135. visible: false,
  1136. // 空间设备
  1137. spaceEqFlagObj: {
  1138. hasAir: true, // 有无空调
  1139. hasBlowing: false, // 空调有无 变风量系统
  1140. hasLamp: false, // 有无灯具
  1141. hasSocket: false, // 有无插座
  1142. hasCurtain: false // 有无 窗帘
  1143. },
  1144. // 空调-弹窗
  1145. airSetText: {
  1146. notice: '',
  1147. designTemperature: 0,
  1148. remark: []
  1149. },
  1150. viewOne: '', // 导航条第一个
  1151. airVisible: false, // 弹窗
  1152. routeParams: {},
  1153. isACATVA: false,
  1154. isACATFC: false,
  1155. eightTime: 0,
  1156. sixTime: 0,
  1157. nowTime: new Date().valueOf(),
  1158. isWorkOff: false, // 我要离开 点击否
  1159. bookEquipList: '', // 预约显示的设备
  1160. controlMode: 1
  1161. },
  1162. computed: {
  1163. ...mapState({
  1164. userInfo: state => state.user.userInfo,
  1165. // projectId: 'Pj1101080259',
  1166. handPopHight: state => state.officehome.handPopHight
  1167. }),
  1168. ...mapActions(['setIsApprovalProject']),
  1169. hasMeetingScene() {
  1170. // 是否展示会议室场景
  1171. let meetingScene =
  1172. this.roomHasScene &&
  1173. this.projectId !== 'Pj1101050038' &&
  1174. this.options.roomType === '会议室' &&
  1175. this.spaceEqFlagObj.hasLamp
  1176. return meetingScene
  1177. }
  1178. },
  1179. watch: {
  1180. transY: function (newVal, oldVal) {
  1181. // console.log('transY');
  1182. // 如果在顶部 则可以滑动
  1183. if (newVal < 0) return
  1184. this.opacityV = 1 - (newVal / 80 > 1 ? 1 : newVal / 80)
  1185. if (newVal == this.transYCopy) {
  1186. this.moveToBottom = true
  1187. } else {
  1188. this.moveToBottom = false
  1189. }
  1190. if (newVal == 0) {
  1191. this.canscroll = true
  1192. } else {
  1193. this.canscroll = false
  1194. }
  1195. }
  1196. },
  1197. // 加载字体
  1198. onLoad(routeParams) {
  1199. this.getCardWidth()
  1200. var nowTimeStr = moment().format('YYYY-MM-DD')
  1201. var eightTime = moment(nowTimeStr + ' 20:00:00').valueOf()
  1202. var sixTime = moment(nowTimeStr + ' 05:00:00').valueOf()
  1203. this.sixTime = sixTime
  1204. this.eightTime = eightTime
  1205. this.routeParams = routeParams
  1206. },
  1207. onShow() {
  1208. this.getData() // 获取数据
  1209. this.spaceInfoStatusTimer()
  1210. },
  1211. onReady() {
  1212. // var scale = 750 / wx.getSystemInfoSync().windowWidth ; // 这是px转rpx 750/ wx.getSystemInfoSync().windowWidth=rpx/px 任何手机都是750rpx
  1213. var windowHeightpx = wx.getSystemInfoSync().screenHeight
  1214. // 设置初始值 topBarHeight*scale+roomPicTop
  1215. this.transYCopy =
  1216. windowHeightpx - switchPanelHeight - this.topBarHeight - this.roomPicTop // topBarHeight上顶端的bar
  1217. this.windowHeightpx = windowHeightpx
  1218. if (this.routeParams.showmap == 'true') {
  1219. this.transY = this.transYCopy
  1220. // console.log('onready');
  1221. }
  1222. },
  1223. onHide() {
  1224. // this.spaceEqFlagObj = {
  1225. // hasAir: true,
  1226. // hasLamp: false
  1227. // }
  1228. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer)
  1229. this.homePageHasHidden = false
  1230. },
  1231. onUnload() {
  1232. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer)
  1233. },
  1234. methods: {
  1235. setCanScroll(val) {
  1236. this.canscroll = val
  1237. },
  1238. // 空调弹框
  1239. openAirHandPop(val, tempObj) {
  1240. this.airHandItem = val
  1241. let hight = 0
  1242. if ((val.boundPoint.gearSetBound || val.boundPoint.modeSetBound) && val.boundPoint.tempSetBound) {
  1243. hight = 45
  1244. }
  1245. if ((val.boundPoint.gearSetBound || val.boundPoint.modeSetBound) && val.boundPoint.tempSetBound) {
  1246. hight = 55
  1247. }
  1248. if (val.boundPoint.gearSetBound && val.boundPoint.modeSetBound && val.boundPoint.tempSetBound) {
  1249. hight = 70
  1250. }
  1251. this.airPopHight = hight
  1252. this.airHandData = tempObj
  1253. this.airHandVisible = true
  1254. },
  1255. changeAirHandOrder(pobj, deviceObjCopy) {
  1256. this.$refs.airHandCard.changeOneAir(pobj.id, pobj.code, pobj.value, deviceObjCopy)
  1257. this.airHandItem = deviceObjCopy
  1258. console.log('changeAirHandOrderchangeAirHandOrder')
  1259. },
  1260. // 地暖弹框
  1261. openFloorFeatPop(val) {
  1262. this.floorfeatVisible = true
  1263. this.floorFeatItem = val
  1264. },
  1265. // 地暖 数据
  1266. getFloorHeatData(val) {
  1267. this.floorHeatData = val
  1268. this.floorHeatData.len = !!val.len
  1269. this.navList.map(item => {
  1270. if (item.code === 'heat') {
  1271. item.noShow = !val.len
  1272. }
  1273. })
  1274. },
  1275. // 窗帘-弹窗
  1276. showCurtainPop(val) {
  1277. this.crutainType = JSON.parse(JSON.stringify(val))
  1278. this.curtainVisible = true
  1279. },
  1280. // 色温弹框
  1281. openColourPop(val) {
  1282. this.colourVisible = true
  1283. this.colourConfig = val
  1284. },
  1285. // 空间下设备是否受加班可控
  1286. checkEquipmentConfigStatus() {
  1287. return queryEquipmentRunConfig(this.options.spaceId).then(res => {
  1288. const resArr = res.data
  1289. this.equipmentsConfig = resArr
  1290. })
  1291. },
  1292. // 手动 弹窗 展示的设备类型
  1293. dialogShowEquipType(val) {
  1294. this.bookEquipList = val
  1295. },
  1296. showCurtain(len) {
  1297. this.spaceEqFlagObj.hasCurtain = !!len
  1298. this.navList.map((item, idx) => {
  1299. if (item.code === 'curtain') {
  1300. item.noShow = !len
  1301. }
  1302. })
  1303. },
  1304. // 插座
  1305. showSocket(len) {
  1306. this.spaceEqFlagObj.hasSocket = !!len
  1307. this.navList.map((item, idx) => {
  1308. if (item.code === 'socket') {
  1309. item.noShow = !len
  1310. }
  1311. })
  1312. },
  1313. getWorkDayTime() {
  1314. // 获取个人空间使用时间
  1315. return queryCustomAndScence({ spaceId: this.options.spaceId }).then(
  1316. res => {
  1317. this.workDayTime = res
  1318. }
  1319. )
  1320. },
  1321. vibrateShort() {
  1322. if (wx.canIUse('vibrateShort')) {
  1323. wx.vibrateShort()
  1324. } else {
  1325. wx.vibrateLong()
  1326. }
  1327. },
  1328. showAllClose() {
  1329. this.closeAllShow = true
  1330. this.closeShowNum = 0
  1331. this.closeStatus = false
  1332. },
  1333. // 关闭全部关闭弹窗
  1334. hideCloseAll() {
  1335. this.closeAllShow = false
  1336. // this.closeShowNum=0 ;
  1337. // this.closeStatus=false ;
  1338. },
  1339. // 确认关闭所有设备
  1340. sureCloseAll() {
  1341. this.vibrateShort()
  1342. this.$refs.allclose.controlEquipStatistics()
  1343. this.closeShowNum = 1
  1344. this.closeStatus = true
  1345. var interval = setInterval(() => {
  1346. this.closeShowNum++
  1347. if (this.closeShowNum == 5) {
  1348. clearInterval(interval)
  1349. }
  1350. }, 1800)
  1351. },
  1352. // 空调 - airTemp
  1353. airShowVisible(val) {
  1354. this.airVisible = true
  1355. this.airSetText = {
  1356. notice: '',
  1357. remark: '',
  1358. designTemperature: ''
  1359. }
  1360. this.airSetText.designTemperature = val.designTemperature // 目标温度
  1361. this.airSetText.toWhere = val.toWhere
  1362. },
  1363. airTemp(val) {
  1364. this.airSetText.notice = val.notice
  1365. if (val.remark && val.remark !== []) {
  1366. const remark = val.remark.split('*')
  1367. this.airSetText.remark = remark
  1368. }
  1369. },
  1370. getWeatherInfo() {
  1371. getWeather().then(res => {
  1372. const outWeather = res.content ? res.content : {}
  1373. var text = outWeather.text || ''
  1374. this.getnowTime(text) // 头部背景
  1375. })
  1376. },
  1377. getnowTime(text) { // 头部背景图片
  1378. let now = moment().hours()
  1379. if (text.indexOf('霾') > -1) {
  1380. this.topbgimg = `${this.h5StaticPath}office_smog.jpg`
  1381. } else {
  1382. if (now >= 6 && now < 19) {
  1383. // 白天
  1384. this.topbgimg = `${this.h5StaticPath}office_bright.jpg`
  1385. } else {
  1386. // 夜晚
  1387. this.topbgimg = `${this.h5StaticPath}office_night.jpg`
  1388. }
  1389. }
  1390. },
  1391. async getData() {
  1392. // 获取数据
  1393. await this.getSpaceInfo() // 空间指数信息
  1394. await this.querySpaceSceneConfig() // 获取空间场景
  1395. await this.getWorkDayTime() // 工作组时间
  1396. this.getEquipments() // 空间下的设备
  1397. this.checkEquipmentConfigStatus()
  1398. this.getWeatherInfo()// 天气预报
  1399. },
  1400. getEquipments() {
  1401. // 获取空间下设备
  1402. const params = {
  1403. spaceId: this.options.spaceId
  1404. // category: // 设备类。可不填,查询所有。
  1405. }
  1406. getEquipmentListHttp(params).then(res => {
  1407. // equipmentCategory 有 空调 ACATFC、ACATFU、ACATVA、ACATVI;有灯 灯 SELTLT
  1408. // ACATVA 变风量系统
  1409. this.navList.map(item => {
  1410. if (item.code === 'air' || item.code === 'lamp') {
  1411. item.noShow = true
  1412. }
  1413. })
  1414. this.spaceEqFlagObj.hasAir = false
  1415. this.spaceEqFlagObj.hasLamp = false;
  1416. (res.data || []).forEach(item => {
  1417. if (item.equipmentCategory === 'ACATVA') {
  1418. this.isACATVA = true // 如果是嘉铭的ACATVA 则不显示开关
  1419. }
  1420. if (item.equipmentCategory === 'ACATFC') {
  1421. this.isACATFC = true // 如果是嘉铭的ACATVA 则不显示开关
  1422. }
  1423. if (
  1424. item.equipmentCategory === 'ACATFC' ||
  1425. item.equipmentCategory === 'ACATVA' ||
  1426. item.equipmentCategory === 'ACATVI'
  1427. ) {
  1428. this.spaceEqFlagObj.hasAir = true
  1429. this.navList.map(item => {
  1430. if (item.code === 'air') {
  1431. item.noShow = false
  1432. }
  1433. })
  1434. this.airKey++
  1435. } else if (item.equipmentCategory === 'SELTLT') {
  1436. this.spaceEqFlagObj.hasLamp = true
  1437. this.navList.map(item => {
  1438. if (item.code === 'lamp') {
  1439. item.noShow = false
  1440. }
  1441. })
  1442. this.lampKey++
  1443. }
  1444. })
  1445. })
  1446. },
  1447. switchoverScene(code) {
  1448. // 改变场景(上班.讨论.投影.散会.下班)
  1449. const params = {
  1450. spaceId: this.options.spaceId,
  1451. type: code,
  1452. pubname: config.brsgServer.pubname
  1453. }
  1454. return switchoverSceneHttp(params)
  1455. },
  1456. spaceInfoStatusTimer() {
  1457. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer)
  1458. spaceInfoStatusTimer = setInterval(() => {
  1459. this.getSpaceInfo() // 空间信息
  1460. }, 20 * 1000) // 2秒描刷接口
  1461. },
  1462. mapChangeSpaceInfo(spaceId) {
  1463. this.options.spaceId = spaceId
  1464. this.getData()
  1465. },
  1466. getSpaceInfo() {
  1467. // 空间信息
  1468. if (!this.options.spaceId) return
  1469. const params = {
  1470. criteria: {
  1471. spaceId: this.options.spaceId
  1472. // userId: 391
  1473. },
  1474. pubname: config.brsgServer.pubname,
  1475. openid: this.userInfo.userId
  1476. }
  1477. return getSpaceAdjustList(params).then(res => {
  1478. this.officeData = (res && res.content && res.content[0]) || {}
  1479. this.checkSpaceType(this.officeData.roomFuncType)
  1480. if (res && res.content) {
  1481. res.content.forEach(item => {
  1482. this.controlMode = item.controlMode || 1
  1483. var envlist = [
  1484. {
  1485. id: 1,
  1486. name: 'CO₂',
  1487. num: '--',
  1488. level: '--',
  1489. funcid: 'CO2',
  1490. code: 'co2'
  1491. },
  1492. {
  1493. id: 2,
  1494. name: 'PM2.5',
  1495. num: '--',
  1496. level: '--',
  1497. funcid: 'PM2d5',
  1498. code: 'pm25'
  1499. },
  1500. {
  1501. id: 3,
  1502. name: '甲醛',
  1503. num: '--',
  1504. level: '--',
  1505. funcid: 'HCHO',
  1506. code: 'jiaquan'
  1507. }
  1508. // { id: 4, name: '湿度', num: '--', level: '--', funcid: 'Tdb,RH', code: 'shidu' }
  1509. // { id: 3, name: 'TVOC', num: 0.4, level: '健康' }
  1510. ]
  1511. if (item.co2 || item.co2 == 0) {
  1512. envlist[0].level = this.checkLevel(item.co2, 'co2').levelTxt
  1513. envlist[0].num = item.co2
  1514. } else {
  1515. envlist[0].level = '--'
  1516. envlist[0].num = '--'
  1517. }
  1518. if (item.pm25 || item.pm25 === 0) {
  1519. envlist[1].level = this.checkLevel(item.pm25, 'pm25').levelTxt
  1520. envlist[1].num = item.pm25
  1521. } else {
  1522. envlist[1].level = '--'
  1523. envlist[1].num = '--'
  1524. }
  1525. if (item.hcho || item.hcho == 0) {
  1526. envlist[2].level = this.checkLevel(item.hcho, 'hcho').levelTxt
  1527. envlist[2].num = item.hcho.toFixed(2)
  1528. } else {
  1529. envlist[2].level = '--'
  1530. envlist[2].num = '--'
  1531. }
  1532. var temperNum = this.officeData.temperature
  1533. ? this.officeData.temperature
  1534. : '--'
  1535. var temperText = this.officeData.temperature
  1536. ? this.checkLevel(this.officeData.temperature, 'temper')
  1537. .levelTxt
  1538. : '--'
  1539. var tempObj = {
  1540. id: 0,
  1541. name: '温度',
  1542. num: temperNum,
  1543. level: temperText,
  1544. funcid: 'Tdb,RH',
  1545. code: 'wendu'
  1546. }
  1547. envlist.unshift(tempObj)
  1548. this.envlist = envlist
  1549. })
  1550. } else {
  1551. this.envlist = []
  1552. }
  1553. return 'success'
  1554. })
  1555. },
  1556. getMeetingScene() {
  1557. // 获取当前会议室的场景 OFFWORK
  1558. const params = {
  1559. spaceId: this.options.spaceId
  1560. }
  1561. getMeetingSceneHttp(params).then(res2 => {
  1562. var rescont = res2.content || ''
  1563. if (rescont === 'OFFWORK') {
  1564. rescont = 'ADJOURNMENT'
  1565. }
  1566. var filterArr = this.listSen.filter(function (item) {
  1567. return item.code === rescont
  1568. })
  1569. // 根据code 获取场景的名字
  1570. this.headScene = (filterArr[0] && filterArr[0].name) || '散会'
  1571. this.vanPopupIndex = rescont
  1572. })
  1573. },
  1574. querySpaceSceneConfig() {
  1575. // 获取空间场景
  1576. const params = {
  1577. spaceId: this.options.spaceId
  1578. }
  1579. this.roomHasScene = false
  1580. return querySpaceSceneConfigHttp(params).then(res => {
  1581. if (!res.data) return
  1582. let sceneArr = res.data
  1583. this.roomHasScene = true // 空间有场景
  1584. if (this.options.roomType !== '会议室') return
  1585. let copyListSen = JSON.parse(JSON.stringify(initListSen))
  1586. this.listSen = JSON.parse(JSON.stringify(initListSen))
  1587. copyListSen.forEach(item => {
  1588. let flag = false
  1589. let deleteIdx = null
  1590. sceneArr.forEach((j, idx) => {
  1591. deleteIdx = idx
  1592. if (item.code === j.sceneType) {
  1593. flag = true
  1594. }
  1595. })
  1596. if (!flag) {
  1597. this.listSen.splice(deleteIdx, 1)
  1598. }
  1599. })
  1600. this.popList = this.listSen
  1601. })
  1602. },
  1603. checkSpaceType(roomFuncType) {
  1604. // 空间类型处理
  1605. // const roomFuncType = this.officeData.roomFuncType ; // 空间类型
  1606. if (
  1607. roomFuncType === '311' ||
  1608. roomFuncType === '310' ||
  1609. roomFuncType === '312'
  1610. ) {
  1611. this.options.roomType = '个人'
  1612. this.headImg = 'office_person_2.png'
  1613. this.headScene = '工作'
  1614. } else if (
  1615. roomFuncType === '320' ||
  1616. roomFuncType === '321' ||
  1617. roomFuncType === '322' ||
  1618. roomFuncType === '323'
  1619. ) {
  1620. this.getMeetingScene()
  1621. this.options.roomType = '会议室'
  1622. this.headImg = 'office_normal_2.png'
  1623. } else if (
  1624. roomFuncType === '313' ||
  1625. roomFuncType === '314' ||
  1626. roomFuncType === '315'
  1627. ) {
  1628. this.options.roomType = '开放'
  1629. this.headImg = 'office_publi_2.png'
  1630. } else {
  1631. this.options.roomType = '其它'
  1632. this.headImg = 'office_publi_2.png'
  1633. }
  1634. },
  1635. checkLevel(value, name, seasonType) {
  1636. let tdbParam = {
  1637. Cooling: {
  1638. range: [22, 26],
  1639. text: ['偏冷', '舒适', '偏热']
  1640. },
  1641. Warm: {
  1642. range: [18, 24],
  1643. text: ['偏冷', '舒适', '偏热']
  1644. },
  1645. Transition: {
  1646. range: [18, 26],
  1647. text: ['偏冷', '舒适', '偏热']
  1648. }
  1649. }
  1650. let objList = {
  1651. humidity: {
  1652. range: [30, 70],
  1653. text: ['干燥', '健康', '潮湿']
  1654. },
  1655. co2: {
  1656. range: [800, 1000, 1500],
  1657. text: ['健康', '达标', '略高', '超标']
  1658. },
  1659. pm25: {
  1660. range: [35, 75, 115, 150, 250],
  1661. text: ['健康', '良', '轻度污染', '中度污染', '重度污染', '严重污染']
  1662. },
  1663. hcho: {
  1664. range: [0.1],
  1665. text: ['健康', '超标']
  1666. },
  1667. temper: {
  1668. range: [20, 24],
  1669. text: ['偏冷', '舒适', '偏热']
  1670. }
  1671. }
  1672. seasonType = seasonType || 'Transition'
  1673. objList.temper = tdbParam[seasonType]
  1674. let sortArr = [value, ...objList[name].range].sort((a, b) => { return a - b })
  1675. let level = sortArr.findIndex(item => item === value)
  1676. let levelTxt = objList[name].text[level]
  1677. return { level, levelTxt }
  1678. },
  1679. getCardWidth() {
  1680. // 获取每一个卡片的top height
  1681. var _this = this
  1682. const query = wx.createSelectorQuery()
  1683. query.select('#inToView4').boundingClientRect()
  1684. return new Promise(function (resolve, reject) {
  1685. query.exec(function (res) {
  1686. const mlr = 20 * 2 // 左右marign
  1687. _this.cardWidth = res[0].width - mlr
  1688. resolve()
  1689. })
  1690. })
  1691. },
  1692. getCardPosition() {
  1693. // 获取每一个卡片的top height
  1694. var _this = this
  1695. const query = wx.createSelectorQuery()
  1696. var halfWindowHeightpx = this.windowHeightpx / 2
  1697. query.select('#roomDetail').boundingClientRect()
  1698. query.select('#inToView02').boundingClientRect()
  1699. query.select('#inToView5').boundingClientRect()
  1700. query.select('#inToView1').boundingClientRect()
  1701. query.select('#inToView2').boundingClientRect()
  1702. query.select('#inToView3').boundingClientRect()
  1703. query.select('#inToView4').boundingClientRect()
  1704. return new Promise(function (resolve, reject) {
  1705. query.exec(function (res) {
  1706. _this.navList[0].top =
  1707. res[0].height +
  1708. _this.roomPicTop +
  1709. _this.topBarHeight -
  1710. halfWindowHeightpx // 这个是 与顶部的距离 减去 halfWindowHeightpx 以中间线为基准
  1711. _this.navList[0].height = _this.navList[0].noShow
  1712. ? 0
  1713. : (res[1] && res[1].height) || 0
  1714. for (let i = 1; i < res.length; i++) {
  1715. _this.dealNav(i, _this, res)
  1716. }
  1717. resolve()
  1718. })
  1719. })
  1720. },
  1721. dealNav(idx, _this, res) {
  1722. if (!_this.navList[idx]) return
  1723. const pre = idx - 1
  1724. const preTop = _this.navList[pre].top || 0
  1725. const next = idx + 1
  1726. _this.navList[idx].top =
  1727. preTop + 15 + ((res[idx] && res[idx].height) || 0)
  1728. _this.navList[idx].height = _this.navList[idx].noShow
  1729. ? 0
  1730. : (res[next] && res[next].height) || 0
  1731. },
  1732. async selectCrad(e, nav) {
  1733. let id = e.currentTarget.id
  1734. if (id === this.navId) return
  1735. this.navId = id
  1736. this.lampHide = !this.lampHide // 当点击了导航 灯的列表要收起
  1737. await this.getCardPosition()
  1738. var targetNav = this.navList.find(function (item) {
  1739. return item.id == id
  1740. })
  1741. this.scrollTop = targetNav.top // 实现点击导航 滚动
  1742. },
  1743. async scrollEvent(event) {
  1744. // 滚动 选中导航条相应的
  1745. await this.getCardPosition()
  1746. var scrollTop = (event.detail || event.$wx.detail || {}).scrollTop || 0
  1747. this.realScrollTop = scrollTop
  1748. // console.log('scrollEvent-scrollTop', this.realScrollTop) ;
  1749. if (scrollTop < this.navList[0].top + this.navList[0].height) {
  1750. this.navId = 0
  1751. }
  1752. for (let i = 0; i < 8; i++) {
  1753. this.determine(scrollTop, i)
  1754. }
  1755. },
  1756. determine(scrollTop, idx) {
  1757. if (!this.navList[idx]) return
  1758. const next = idx + 1
  1759. const nextTop = this.navList[next] ? this.navList[next].top : 0
  1760. const nextHeight = this.navList[next] ? this.navList[next].height : 0
  1761. if (
  1762. scrollTop > this.navList[idx].top + this.navList[idx].height &&
  1763. scrollTop < nextTop + nextHeight
  1764. ) {
  1765. this.navId = next
  1766. }
  1767. },
  1768. scrollToUpper(event) {
  1769. // 到达顶部
  1770. // console.log('scrollToUpper-scrollTop');
  1771. // this.realScrollTop = 0 ;
  1772. },
  1773. // 进入 detail 页
  1774. handleDetail(data) {
  1775. wx.navigateTo({
  1776. url: `./detail?spaceId=${this.officeData.id}&funcid=${data.funcid}`
  1777. })
  1778. },
  1779. // 进入地图页
  1780. toRoom() {
  1781. // wx.navigateTo({
  1782. // url: `../intelligentControl/home?id=${this.officeData.id}&from=officehome&companyIdProp=${this.companyIdProp}`
  1783. // }) ;
  1784. this.scrollTop = null
  1785. this.scrollTop = 0
  1786. this.transY = this.transYCopy
  1787. },
  1788. handleWorkOff(val) {
  1789. // 我要离开 弹窗展示
  1790. if (val === 'showWorkOff') {
  1791. this.isWorkOff = true
  1792. this.sceneShow = true
  1793. return
  1794. }
  1795. if (val === 'hideWorkOff') {
  1796. this.isWorkOff = false
  1797. this.sceneShow = false
  1798. }
  1799. },
  1800. handlecountDown() {
  1801. this.countDownTwoMin = 0
  1802. clearInterval(timerTwoMin)
  1803. timerTwoMin = null
  1804. if (this.visible) {
  1805. this.countDownTwoMin = 60 * 2
  1806. this.getWorkDayTime() // 获取工作时间
  1807. timerTwoMin = setInterval(() => {
  1808. if (this.countDownTwoMin === 1) {
  1809. this.visible = false
  1810. this.getWorkDayTime() // 获取工作时间
  1811. } else {
  1812. this.countDownTwoMin = this.countDownTwoMin - 1
  1813. }
  1814. }, 1000 * 20)
  1815. } else {
  1816. clearInterval(timerTwoMin)
  1817. timerTwoMin = null
  1818. this.getWorkDayTime() // 获取工作时间
  1819. }
  1820. },
  1821. // 调出浮层
  1822. handlePopup(val) {
  1823. if (!this.roomHasScene) return // 没有加班 不可配置
  1824. this.visible = val
  1825. if (this.options.roomType == '开放') {
  1826. this.handlecountDown() // 倒计时两分钟
  1827. }
  1828. },
  1829. // 取得所有的会议室
  1830. getAlllMeeting() {
  1831. var _this = this
  1832. return getMeetingList().then(function (res) {
  1833. // console.log('getMeetingList1111', res) ;
  1834. var allmeeting = []
  1835. var resdata = res.data
  1836. for (var key in resdata) {
  1837. var list = (resdata[key] && resdata[key].list) || []
  1838. allmeeting = allmeeting.concat(list)
  1839. }
  1840. // 找到符合条件的会议室 同一个名字
  1841. var filtermeetingArr = allmeeting.filter(function (item) {
  1842. return item.meeting.name === _this.officeData.localName
  1843. })
  1844. _this.filtermeeting = filtermeetingArr[0] || {}
  1845. })
  1846. },
  1847. hideScene() {
  1848. this.sceneShow = false
  1849. },
  1850. // 调出场景-浮层 切换场景
  1851. handleScene(mitem, idx) {
  1852. // isWithinLocation()
  1853. // .then(() => {
  1854. var name = mitem.name
  1855. this.visible = false // 关闭 切换场景
  1856. if (!this.visible) {
  1857. this.sceneShow = !this.sceneShow // 场景详细信息
  1858. }
  1859. this.popList.forEach((item, idx) => {
  1860. if (name === item.name) {
  1861. this.sceneDetail = JSON.parse(JSON.stringify(item))
  1862. this.sceneDetail.textObj = []
  1863. // 场景切换的对话框动效
  1864. item.textObj.forEach((element, idx) => {
  1865. setTimeout(() => {
  1866. this.sceneDetail.textObj.push(element)
  1867. }, 150 * (idx + 1))
  1868. })
  1869. }
  1870. })
  1871. // 放在这个位置 是为了 切换场景时直接改变场景 不等待后台
  1872. this.headScene = this.sceneDetail.name
  1873. this.vanPopupIndex = this.sceneDetail.code
  1874. this.switchoverScene(this.sceneDetail.code).then(res => {
  1875. if (res.result === 'success') {
  1876. // this.headScene = this.sceneDetail.name
  1877. // this.vanPopupIndex = this.sceneDetail.code
  1878. }
  1879. })
  1880. // })
  1881. // .catch(() => { })
  1882. console.log('handleScene this.popList', this.popList)
  1883. },
  1884. // 返回 首页
  1885. goPre() {
  1886. if (this.routeParams.q) {
  1887. wx.redirectTo({ url: '/pages/homev2' })
  1888. } else {
  1889. wx.navigateBack()
  1890. }
  1891. },
  1892. setTopBarHeight(height) {
  1893. this.topBarHeight = height
  1894. },
  1895. touchstart: function (e) {
  1896. var pageY = e.touches[0].pageY
  1897. var _this = this
  1898. this.startY = pageY
  1899. const query = wx.createSelectorQuery()
  1900. // query.selectViewport().scrollOffset() ;//这是page
  1901. // query.select('#scroll-view').boundingClientRect();
  1902. query.select('#scroll-view').scrollOffset()
  1903. query.exec(res => {
  1904. _this.nowScrollY = res[0].scrollTop
  1905. if (
  1906. (_this.nowScrollY == 0 && _this.transY == 0) ||
  1907. (_this.nowScrollY == 0 && _this.transY == _this.transYCopy)
  1908. ) {
  1909. // 当最顶端 最低端时 才可以滑动
  1910. _this.movesign = true
  1911. } else {
  1912. _this.movesign = false
  1913. }
  1914. // console.log('touchstart', this.nowScrollY, this.realScrollTop, this.transY) ;
  1915. })
  1916. },
  1917. touchmove: function (e) {
  1918. if (!this.movesign) return
  1919. var _this = this
  1920. // console.log('touchmove', this.nowScrollY, this.realScrollTop, this.transY) ;
  1921. var touch = e.touches[0]
  1922. var pageY = Number(touch.pageY) // 页面触点Y坐标
  1923. moveY = pageY - this.startY
  1924. this.startY = pageY
  1925. if (this.nowScrollY > 0 || this.realScrollTop > 0) {
  1926. // 如果是transY为0的情况 发生屏幕滚动 不改变transY的值
  1927. this.transY = 0
  1928. return
  1929. }
  1930. var transY = this.transY + moveY
  1931. if (transY < 0) {
  1932. // transY只能是正的
  1933. transY = 0
  1934. }
  1935. if (transY > this.transYCopy) {
  1936. transY = this.transYCopy
  1937. }
  1938. this.transY = transY
  1939. },
  1940. touchend: function (e) {
  1941. // 挪动到一定区域 则可以自己到固定位置
  1942. var _this = this
  1943. const query = wx.createSelectorQuery()
  1944. query.select('#scroll-view').scrollOffset()
  1945. query.exec(res => {
  1946. // console.log('touchend', res) ;
  1947. _this.realScrollTop = res[0].scrollTop
  1948. _this.nowScrollY = res[0].scrollTop
  1949. // console.log('touchend', this.nowScrollY, this.realScrollTop, this.transY) ;
  1950. if (this.realScrollTop > 0) {
  1951. // 如果是transY为0的情况 手指上移动 也不改变transY的值
  1952. this.transY = 0
  1953. return
  1954. }
  1955. if (this.transY < 0) {
  1956. this.transY = 0
  1957. }
  1958. if (this.transY >= this.transYCopy) {
  1959. this.transY = this.transYCopy
  1960. }
  1961. if (moveY > 0) {
  1962. // 手指下滑
  1963. if (this.transY <= 60) {
  1964. this.transY = 0
  1965. } else {
  1966. this.transY = this.transYCopy
  1967. }
  1968. // console.log('下滑下滑下滑下滑xia', this.nowScrollY, this.transY) ;
  1969. } else {
  1970. if (this.transY >= this.transYCopy - 60) {
  1971. this.transY = this.transYCopy
  1972. } else {
  1973. this.transY = 0
  1974. }
  1975. // console.log('上滑上滑上滑', moveY) ;
  1976. }
  1977. this.movesign = false
  1978. })
  1979. }
  1980. }
  1981. })
  1982. </script>
  1983. <config>
  1984. {
  1985. "navigationStyle": "custom",
  1986. backgroundColor: '#f7f8fa',
  1987. usingComponents: {
  1988. "Curtain-Pop":'./Curtain/curtainPop.wpy',
  1989. "Floor-Pop":'./FloorHeating/floorPop.wpy',
  1990. "airHand-Pop":'./airHand/airHandPop.wpy',
  1991. "Floor-Heating":'./FloorHeating/floorHeating',
  1992. "curtain-card":"./Curtain/curtain-card",
  1993. 'page-top-bar-custom': '~@/components/common/page-top-bar-custom',
  1994. "work-overtime-hand":"./workOvertime-hand",
  1995. "space-basic":"./Header/space-basic",
  1996. "pop-scene":"./Meeting/pop-meet-scene.wpy",
  1997. "work-off":"./components/work-off",
  1998. "work-scene-hand":"./components/work-scene-hand",
  1999. "air-hand-card":"./airHand/air-hand-card",
  2000. "air-feedback":"./components/air-feedback",
  2001. "lamp-adjust":"./components/lamp-adjust",
  2002. "lamp-colour":"./components/lamp-colour",
  2003. "socket-card":"./components/socket-card",
  2004. "all-close":"./components/all-close",
  2005. "voice-adjust":"./components/voice-adjust",
  2006. "map-home":"../intelligentControl/home2",
  2007. "van-icon": "module:@vant/weapp/dist/icon",
  2008. "van-popup": "module:@vant/weapp/dist/popup"
  2009. },
  2010. componentPlaceholder: {
  2011. 'page-top-bar-custom': 'view'
  2012. }
  2013. }
  2014. </config>