index.wpy 114 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404
  1. <template>
  2. <div class="overflow-wrap">
  3. <page-top-bar-custom
  4. @component-page-top-bar-custom-ready="setTopBarHeight"
  5. :bgColor="[navFixed? '#f7f8fa' : 'transparent']"
  6. >
  7. <div
  8. class="office-header"
  9. @click="goPre"
  10. >
  11. <van-icon
  12. style="position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);"
  13. name="arrow-left"
  14. />
  15. </div>
  16. <div
  17. class="office-title"
  18. v-show="!moveToBottom&&realScrollTop<30"
  19. >
  20. <image
  21. class="weather-img"
  22. :src="h5StaticPath+outWeather.imgname"
  23. mode="widthFix"
  24. />
  25. <div class="weather-text">
  26. <div class="first-line"><span class="text">{{outWeather.temperature ? outWeather.temperature :'--'}}℃</span><span class="text">/</span><span class="text">PM2.5</span><span>{{outWeather.pm25 ? outWeather.pm25 :'--'}}</span>
  27. </div>
  28. <div class="second-line">
  29. <span class="text weatherText">{{outWeather.text ? outWeather.text :'--'}}</span><span>{{outWeather.quality ? outWeather.quality :'--'}}</span>
  30. </div>
  31. </div>
  32. </div>
  33. </page-top-bar-custom>
  34. <scroll-view
  35. id="scroll-view"
  36. scroll-y="{{canscroll}}"
  37. enhanced
  38. scroll-anchoring
  39. show-scrollbar="{{false}}"
  40. bounces="{{false}}"
  41. scroll-top="{{scrollTop}}"
  42. bindscroll="scrollEvent"
  43. scroll-with-animation="true"
  44. bindscrolltoupper="scrollToUpper"
  45. >
  46. <div class="map-wrap" v-show="transY">
  47. <map-home
  48. v-if="userInfo&& userInfo.userId"
  49. :spaceIdProp="spaceIdProp"
  50. :companyIdProp="companyIdProp"
  51. @mapChangeSpaceInfo="mapChangeSpaceInfo"
  52. ></map-home>
  53. </div>
  54. <div
  55. class="move-wrap"
  56. style="transform: translateY({{transY}}px);top:{{topBarHeight+roomPicTop}}px;"
  57. bindtouchstart="touchstart"
  58. bindtouchmove="touchmove"
  59. bindtouchend="touchend"
  60. >
  61. <div
  62. style="opacity:{{opacityV}}"
  63. v-show="!moveToBottom"
  64. >
  65. <image
  66. class="bg-img"
  67. style="top:{{-topBarHeight-roomPicTop}}px;height:{{topBarHeight+roomPicTop}}px"
  68. :src="topbgimg"
  69. />
  70. </div>
  71. <div
  72. style="opacity:{{opacityV}}"
  73. v-show="!moveToBottom"
  74. class="roomImgWrap"
  75. >
  76. <div
  77. class="spaceImg"
  78. @click="showSaveSpace"
  79. >
  80. <image
  81. class="spimg"
  82. :src="h5StaticPath+'defaultspace.svg'"
  83. />
  84. </div>
  85. <image
  86. class="room-img"
  87. :src="h5StaticPath+headImg"
  88. mode="widthFix"
  89. />
  90. </div>
  91. <div class="office-container">
  92. <!-- 空间基本情况 -->
  93. <div
  94. class="maproom-detail"
  95. v-show="moveToBottom"
  96. >
  97. <div class="room-bar"></div>
  98. <div class="room-bg">
  99. <div class="g-fl room-name">
  100. <span>{{officeData.localName}}</span>
  101. <has-person
  102. v-if="officeData.isPassengerPass !== undefined"
  103. :isPassengerPass="officeData.isPassengerPass"
  104. ></has-person>
  105. </div>
  106. </div>
  107. <!-- 空间信息 -->
  108. <div class="office-room-info">
  109. <div class="room-envlist g-fl">
  110. <div
  111. class="g-fl g-fl-c"
  112. v-for="(item,idx) in envlist"
  113. :key="idx"
  114. >
  115. <span class="env-name">{{item.name}}</span>
  116. <span class="env-num">{{item.num }}</span>
  117. <span class="env-level">{{item.level ? item.level :'--'}}</span>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. <!-- 空间基本情况 -->
  123. <div
  124. id="roomDetail"
  125. class="room-detail"
  126. v-show="!moveToBottom"
  127. >
  128. <div class="room-bg">
  129. <div class="room-bar"></div>
  130. <div class="g-fl room-name">
  131. <span>{{officeData.localName}}</span>
  132. <has-person
  133. v-if="officeData.isPassengerPass !== undefined"
  134. :isPassengerPass="officeData.isPassengerPass"
  135. ></has-person>
  136. </div>
  137. </div>
  138. <!-- 空间信息 -->
  139. <div class="office-room-info">
  140. <div class="room-envlist g-fl">
  141. <div
  142. class="g-fl g-fl-c"
  143. v-for="(item,idx) in envlist"
  144. :key="idx"
  145. @tap.stop="handleDetail(item)"
  146. >
  147. <span class="env-name">{{item.name}}</span>
  148. <span class="env-num">{{item.num }}</span>
  149. <span class="env-level">{{item.level ? item.level :'--'}}</span>
  150. </div>
  151. </div>
  152. </div>
  153. <div
  154. class="sceneBox"
  155. v-if="popList.length>0 && options.roomType =='会议室'"
  156. >
  157. <div
  158. v-for="(item,idx) in popList"
  159. class="eachScene"
  160. :class="{'selScene':vanPopupIndex==item.code,'firstScene':idx==0&&popList.length==2}"
  161. :key="idx"
  162. @click="handleScene(item,idx)"
  163. >
  164. <image :src="h5StaticPath+item.img" />
  165. <span>{{item.name}}</span>
  166. </div>
  167. </div>
  168. <div v-if="roomHasScene && options.roomType =='开放'">
  169. <work-scene-hand
  170. v-if="controlMode==1"
  171. @component-open-workTimePop="handlePopup"
  172. @component-get-workTimeData="getWorkDayTime"
  173. @component-open-sceneShowpop="handleWorkOff"
  174. @component-EquipType-workTimePop="dialogShowEquipType"
  175. :workDayTime="workDayTime"
  176. :isControl="isControl"
  177. ></work-scene-hand>
  178. <work-scene
  179. v-if="controlMode==0"
  180. @component-open-workTimePop="handlePopup"
  181. @component-get-workTimeData="getWorkDayTime"
  182. @component-open-sceneShowpop="handleWorkOff"
  183. :workDayTime="workDayTime"
  184. :isControl="isControl"
  185. ></work-scene>
  186. </div>
  187. </div>
  188. <all-close
  189. @showAllClose="showAllClose"
  190. :projectId="projectId"
  191. :floorInfo="floorInfo"
  192. v-if="(nowTime>eightTime||nowTime<sixTime)&&projectId=='Pj1101080259'"
  193. ref="allclose"
  194. ></all-close>
  195. <!-- 空调调节卡片 -->
  196. <air-adjust
  197. v-if="(officeData.temperature || spaceEqFlagObj.hasAir)&&controlMode==0"
  198. id="inToView0"
  199. :isControl="isControl"
  200. :airVisible="airVisible"
  201. :roomHasScene="roomHasScene"
  202. :hasAir="spaceEqFlagObj.hasAir"
  203. :hasBlowing="spaceEqFlagObj.hasBlowing"
  204. :airVolumes="officeData.airVolumes"
  205. :temperature="officeData.temperature"
  206. :objectId="options.spaceId"
  207. :roomType="options.roomType"
  208. :projectId="projectId"
  209. :isACATVA="isACATVA"
  210. :isACATFC="isACATFC"
  211. @showDetail="handleDetail"
  212. @airShowVisible="airShowVisible"
  213. @component-open-workTimePop="handlePopup"
  214. @airTemp="airTemp"
  215. v-bind:key="airKey"
  216. ></air-adjust>
  217. <air-adjust-hand
  218. v-if="spaceEqFlagObj.hasAir&&controlMode==1"
  219. id="inToView02"
  220. :isControl="isControl"
  221. :airVisible="airVisible"
  222. :roomHasScene="roomHasScene"
  223. :hasAir="spaceEqFlagObj.hasAir"
  224. :hasBlowing="spaceEqFlagObj.hasBlowing"
  225. :airVolumes="officeData.airVolumes"
  226. :temperature="officeData.temperature"
  227. :equipConfig="equipmentsConfig"
  228. :objectId="options.spaceId"
  229. :roomType="options.roomType"
  230. :projectId="projectId"
  231. :isACATVA="isACATVA"
  232. :isACATFC="isACATFC"
  233. @showDetail="handleDetail"
  234. @airShowVisible="airShowVisible"
  235. @component-open-workTimePop="handlePopup"
  236. @component-EquipType-workTimePop="dialogShowEquipType"
  237. @airTemp="airTemp"
  238. @setCanScroll="setCanScroll"
  239. v-bind:key="airKey"
  240. ></air-adjust-hand>
  241. <!-- 地暖 -->
  242. <div v-show="floorHeatData.len">
  243. <Floor-Heating
  244. id="inToView5"
  245. :cardWidth="cardWidth"
  246. @component-open-floorFeat-pop="openFloorFeatPop"
  247. @component-floorHeat-data="getFloorHeatData"
  248. :spaceId="options.spaceId"
  249. ></Floor-Heating>
  250. </div>
  251. <!-- 光照调节卡片 -->
  252. <lamp-adjust
  253. v-if="spaceEqFlagObj.hasLamp"
  254. id="inToView1"
  255. :isControl="isControl"
  256. :roomHasScene="roomHasScene"
  257. :lampHide="lampHide"
  258. :spaceId="options.spaceId"
  259. :roomType="options.roomType"
  260. :controlMode="controlMode"
  261. :equipConfig="equipmentsConfig"
  262. @component-open-colourPop="openColourPop"
  263. @component-open-workTimePop="handlePopup"
  264. @component-EquipType-workTimePop="dialogShowEquipType"
  265. v-bind:key="lampKey"
  266. ></lamp-adjust>
  267. <!-- 窗帘卡片 -->
  268. <div v-show="spaceEqFlagObj.hasCurtain">
  269. <curtain-card
  270. id="inToView2"
  271. :isControl="isControl"
  272. :projectId="projectId"
  273. :spaceId="options.spaceId"
  274. :curtainVisible="curtainVisible"
  275. @comments-curtain-len="showCurtain"
  276. @commponents-curtain-showPop="showCurtainPop"
  277. >
  278. </curtain-card>
  279. </div>
  280. <!-- 智能插座卡片 -->
  281. <div v-show="spaceEqFlagObj.hasSocket">
  282. <socket-card
  283. id="inToView3"
  284. :isControl="isControl"
  285. :roomHasScene="roomHasScene"
  286. :roomType="options.roomType"
  287. :controlMode="controlMode"
  288. :projectId="projectId"
  289. :spaceId="options.spaceId"
  290. @component-showSocket="showSocket"
  291. @component-open-workTimePop="handlePopup"
  292. @component-EquipType-workTimePop="dialogShowEquipType"
  293. >
  294. </socket-card>
  295. </div>
  296. <!-- 声压卡片 -->
  297. <voice-adjust id="inToView4"></voice-adjust>
  298. <!-- 页面到底标志 -->
  299. <div
  300. class="pageBottom"
  301. :style="{height:windowHeightpx / 2+'px'}"
  302. >
  303. <image
  304. class="log-text"
  305. src="{{h5StaticLogo}}/page-home/tenatslink.svg"
  306. />
  307. </div>
  308. <!--场景 - 帮忙预约 -->
  309. <van-popup
  310. overlay-style="background: rgba(0, 0, 0, 0.4)"
  311. round
  312. :show="helpOrderShow"
  313. @close="handleOrderPopup"
  314. >
  315. <div class="scene-popup order-popup">
  316. <div class="scene-popup-head">
  317. <div class="head-imgbg">
  318. <div class="head-imgbox">
  319. <image :src="h5StaticPath+sceneDetail.img" />
  320. </div>
  321. </div>
  322. <span>临时使用会议室?</span>
  323. </div>
  324. <div class="scene-popup-body">
  325. <div class="order-item">为您预约至 <span class="time-span">{{orderMeetTimeStr}}</span></div>
  326. </div>
  327. <div class="popup-btns order-btns">
  328. <span
  329. class="btnspan btn_com"
  330. @click="handleOrderPopup"
  331. >不预约</span><span
  332. class="btnspan surespan"
  333. @click="orderMeeting"
  334. >预约</span>
  335. </div>
  336. </div>
  337. </van-popup>
  338. <van-popup
  339. overlay-style="background: rgba(0, 0, 0, 0.4)"
  340. round
  341. :show="hasOrderShow"
  342. @close="handleHasPopup"
  343. >
  344. <div class="scene-popup order-popup">
  345. <div class="scene-popup-head">
  346. <div class="head-imgbg">
  347. <div class="head-imgbox">
  348. <image :src="h5StaticPath+sceneDetail.img" />
  349. </div>
  350. </div>
  351. <span>该会议室已被预定!</span>
  352. </div>
  353. <div class="scene-popup-body">
  354. <div class="order-item"> 如需预约,<br />请切换其他会议室。</div>
  355. </div>
  356. <div
  357. class="btns"
  358. @click.stop="handleHasPopup"
  359. >
  360. <span class="btn btn_com">隐藏</span>
  361. </div>
  362. </div>
  363. </van-popup>
  364. </div>
  365. </div>
  366. </scroll-view>
  367. <!-- 窗帘 -->
  368. <van-popup
  369. overlay-style="background: rgba(0, 0, 0, 0.4)"
  370. custom-style="height: 55%"
  371. round
  372. :show="curtainVisible"
  373. position="bottom"
  374. @close="curtainVisible = false"
  375. >
  376. <div style="display:flex;justify-content: center;">
  377. <Curtain-Pop
  378. :curtainVisible="curtainVisible"
  379. :typeobj="crutainType"
  380. >
  381. </Curtain-Pop>
  382. </div>
  383. </van-popup>
  384. <!-- 地暖 -->
  385. <van-popup
  386. overlay-style="background: rgba(0, 0, 0, 0.4)"
  387. custom-style="height: 55%"
  388. round
  389. :show="floorfeatVisible"
  390. position="bottom"
  391. @close="floorfeatVisible = false"
  392. >
  393. <div style="display:flex;justify-content: center;">
  394. <Floor-Pop
  395. :floorfeatVisible="floorfeatVisible"
  396. :floorFeatItem="floorFeatItem"
  397. :maxValue="floorHeatData.maxValue"
  398. :minValue="floorHeatData.minValue"
  399. ></Floor-Pop>
  400. </div>
  401. </van-popup>
  402. <!-- 灯控色温 -->
  403. <van-popup
  404. overlay-style="background: rgba(0, 0, 0, 0.4)"
  405. custom-style="height: 55%"
  406. round
  407. :show="colourVisible"
  408. position="bottom"
  409. @close="colourVisible = false"
  410. >
  411. <div style="display:flex;justify-content: center;">
  412. <lamp-colour
  413. v-if="colourVisible"
  414. :colourObj="colourConfig"
  415. ></lamp-colour>
  416. </div>
  417. </van-popup>
  418. <!-- 空调反馈 文案 -->
  419. <van-popup
  420. overlay-style="background: rgba(0, 0, 0, 0.4)"
  421. round
  422. :show="airVisible"
  423. :close-on-click-overlay="false"
  424. @close="airVisible = false"
  425. >
  426. <air-feedback
  427. @component-open-sceneShowpop="airVisible = false;"
  428. :airSetText="airSetText"
  429. :officeData="officeData"
  430. />
  431. </van-popup>
  432. <!-- 浮层场景 popUp 手动 -->
  433. <van-popup
  434. v-if="controlMode==1"
  435. :custom-style="'height:'+handPopHight+'%'"
  436. overlay-style="background: rgba(0, 0, 0, 0.4)"
  437. position="bottom"
  438. round
  439. :show="visible"
  440. @close="handlePopup(false)"
  441. >
  442. <div
  443. class="popup-box"
  444. v-if="options.roomType =='开放' && visible"
  445. >
  446. <work-overtime-hand
  447. @component-close-visible="handlePopup"
  448. @component-get-workTime="getWorkDayTime"
  449. @component-set-countDown="handlecountDown"
  450. :equipConfig="equipmentsConfig"
  451. :visible="visible"
  452. :localName="officeData.localName"
  453. :bookEquipList="bookEquipList"
  454. :workDayTime="workDayTime"
  455. :objectId="options.spaceId"
  456. :countDownTwoMin="countDownTwoMin"
  457. >
  458. </work-overtime-hand>
  459. </div>
  460. </van-popup>
  461. <!-- 浮层场景 popUp 自动 -->
  462. <van-popup
  463. v-if="controlMode==0"
  464. custom-style="height: 55%"
  465. overlay-style="background: rgba(0, 0, 0, 0.4)"
  466. position="bottom"
  467. round
  468. :show="visible"
  469. @close="handlePopup(false)"
  470. >
  471. <div
  472. class="popup-box"
  473. v-if="options.roomType =='开放' && visible"
  474. >
  475. <work-overtime
  476. @component-close-visible="handlePopup"
  477. @component-get-workTime="getWorkDayTime"
  478. @component-set-countDown="handlecountDown"
  479. :visible="visible"
  480. :localName="officeData.localName"
  481. :workDayTime="workDayTime"
  482. :objectId="options.spaceId"
  483. :countDownTwoMin="countDownTwoMin"
  484. >
  485. </work-overtime>
  486. </div>
  487. </van-popup>
  488. <!--场景 - 详情 -->
  489. <van-popup
  490. overlay-style="background: rgba(0, 0, 0, 0.4)"
  491. round
  492. :show="sceneShow"
  493. @close="hideScene"
  494. >
  495. <!-- 我要离开 -开放办公区 -->
  496. <work-off
  497. style="width:560rpx"
  498. v-if="options.roomType =='开放' && isWorkOff"
  499. :sceneShow="sceneShow"
  500. @component-open-sceneShowpop="handleWorkOff"
  501. >
  502. </work-off>
  503. <!--场景 - 详情 -->
  504. <div
  505. v-if="options.roomType !='开放'"
  506. class="scene-popup meet-popup"
  507. >
  508. <div class="scene-popup-head">
  509. <div class="head-imgbg">
  510. <div class="head-imgbox">
  511. <image :src="h5StaticPath+sceneDetail.img" />
  512. </div>
  513. </div>
  514. <span class="meet-title">切换至<span class="name">{{sceneDetail.name}}</span>场景</span>
  515. </div>
  516. <div class="scene-popup-body">
  517. <div
  518. class="body-item"
  519. v-for="(item,idx) in sceneDetail.textObj"
  520. :key="idx"
  521. >
  522. <span>{{item.text}}</span>
  523. </div>
  524. </div>
  525. <div
  526. class="btns"
  527. @click.stop="hideScene"
  528. >
  529. <span class="btn btn_com">隐藏</span>
  530. </div>
  531. </div>
  532. </van-popup>
  533. <van-popup
  534. overlay-style="background: rgba(0, 0, 0, 0.4);"
  535. round
  536. :show="closeAllShow"
  537. @close="hideCloseAll"
  538. >
  539. <div class="scene-popup allclose-popup">
  540. <div class="scene-popup-head">
  541. <div class="head-imgbg">
  542. <div class="head-imgbox">
  543. <image src="{{h5StaticPath}}scene_visitor.svg" />
  544. </div>
  545. </div>
  546. <div v-show="!closeStatus">请确认办公室已经无人</div>
  547. <div
  548. class="head-title"
  549. v-show="closeStatus&&closeShowNum<5"
  550. >您工作辛苦了,感谢为低碳事业做出的贡献</div>
  551. <div v-show="closeShowNum==5">请确认所有门窗已关闭</div>
  552. </div>
  553. <div
  554. class="close-popup-body"
  555. v-show="closeStatus&&closeShowNum<5"
  556. >
  557. <div class="close-item">
  558. <div class="close-pic">
  559. <van-icon
  560. name="passed"
  561. class="passIcon"
  562. v-if="closeShowNum!==1"
  563. />
  564. <span
  565. class="pointer"
  566. v-if="closeShowNum==1"
  567. ></span>
  568. </div>
  569. <span>小飒正关闭办公室内设备 </span>
  570. </div>
  571. <div
  572. class="close-item"
  573. v-show="closeShowNum==3||closeShowNum==4"
  574. >
  575. <div class="close-pic">
  576. <van-icon
  577. name="passed"
  578. class="passIcon"
  579. v-if="closeShowNum==4"
  580. />
  581. <span
  582. class="pointer"
  583. v-if="closeShowNum==3"
  584. ></span>
  585. </div>
  586. <span>暂时保留方便您离开的灯光</span>
  587. </div>
  588. </div>
  589. <div class="popup-btns allclose-btns">
  590. <span
  591. class="btnspan btn_com"
  592. v-show="!closeStatus"
  593. @click="hideCloseAll"
  594. >取消</span>
  595. <span
  596. class="btnspan surespan"
  597. v-show="!closeStatus"
  598. @click="sureCloseAll"
  599. >确认</span>
  600. <span
  601. class="btnspan btn_com"
  602. v-show="closeStatus&&closeShowNum==5"
  603. @click="hideCloseAll"
  604. >隐藏</span>
  605. </div>
  606. </div>
  607. </van-popup>
  608. <div
  609. id="navId"
  610. class="navBox"
  611. v-show="!moveToBottom"
  612. >
  613. <div class="eq-nav">
  614. <div
  615. v-for="(item,index) in navList"
  616. :id="item.id"
  617. @click.stop="selectCrad"
  618. :key="index"
  619. class="nav-item"
  620. :class="{'nav-item-active':navId==index}"
  621. v-if="!item.noShow"
  622. >
  623. <div class="nav-img">
  624. <image
  625. mode="widthFix"
  626. :src="navId == index ? (h5StaticPath+item.activeImg) : (h5StaticPath+item.img)"
  627. />
  628. </div>
  629. <div class="nav-text">{{item.name}}</div>
  630. </div>
  631. </div>
  632. <div
  633. class="map-nav"
  634. @tap="toRoom"
  635. >
  636. <image
  637. src="{{h5StaticPath}}mapIcon.png"
  638. mode="widthFix"
  639. />
  640. </div>
  641. </div>
  642. </div>
  643. </template>
  644. <script>
  645. import wepy from '@wepy/core';
  646. import store from '@/store';
  647. import { mapState, mapActions } from '@wepy/x';
  648. import moment from 'moment';
  649. import {
  650. getSpaceAdjustList,
  651. getWeather,
  652. getEquipmentListHttp,
  653. getMeetingSceneHttp,
  654. switchoverSceneHttp,
  655. querySpaceSceneConfigHttp,
  656. queryCustomAndScence,
  657. changeDefaultSpace,
  658. queryEquipmentRunConfig,
  659. queryProjectConfig,
  660. queryUserControlInfo,
  661. querySpaceMeetingInfo
  662. } from '../../api/officehome.js';
  663. import {
  664. getMeetingList,
  665. reserveMeetingroom,
  666. endMeetingReserve
  667. } from '@/api/meetingroom';
  668. import { isWithinLocation } from '@/service/location';
  669. import config from '@/config';
  670. import loadFont from '@/common/loadFont';
  671. import { getCompanyMapData } from '@/api/home';
  672. import { saveCompanyConfig } from '@/service/companyConfig';
  673. import { checkHasUserInfo } from '@/service/user';
  674. import { checkSpaceControl } from '../common.js';
  675. // import { floorInfo, defalutSelectedId } from '../intelligentControl/data/map';
  676. import { getNowDate, getTowNum } from '@/service/meetingTimes';
  677. import { umaInit } from '../common.js';
  678. let spaceInfoStatusTimer = null;
  679. let pageSelectedAreaRecord = {
  680. // key为楼层ID,value 为spceId
  681. };
  682. let defalutSelectedId = '';
  683. const switchPanelHeight = 125; // 145是下面块的高
  684. const roomPicTop = 185; // 135是建筑图片的高度 单位都是px
  685. var moveY;
  686. let timerTwoMin = null;
  687. let initListSen = [
  688. {
  689. id: 0,
  690. code: 'DISCUSSING',
  691. name: '讨论',
  692. img: 'discuss.svg',
  693. checked: true,
  694. textObj: [
  695. {
  696. text: '已为您切换至适宜讨论的环境',
  697. status: 'ok'
  698. }
  699. ]
  700. },
  701. {
  702. id: 1,
  703. code: 'PROJECTING',
  704. name: '投影',
  705. img: 'shadow2.svg',
  706. checked: false,
  707. textObj: [
  708. {
  709. text: '已为您切换至适宜演示的环境',
  710. status: 'ok'
  711. }
  712. ]
  713. },
  714. {
  715. id: 2,
  716. code: 'ADJOURNMENT',
  717. name: '散会',
  718. img: 'beover.svg',
  719. checked: false,
  720. textObj: [
  721. {
  722. text: '会议室内设备已切换至节能模式',
  723. status: 'ok'
  724. }
  725. ]
  726. }
  727. ];
  728. wepy.page({
  729. store,
  730. data: {
  731. cardWidth: 0, // 动态获取卡片的宽度
  732. floorFeatItem: {}, // 地暖弹窗数据
  733. floorHeatData: {
  734. maxValue: 0,
  735. minValue: 0,
  736. len: false
  737. }, // 地暖数据
  738. floorfeatVisible: false, // 地暖弹窗
  739. curtainVisible: false, // 窗帘弹窗
  740. crutainType: {
  741. btnArr: [],
  742. data: [],
  743. curtainName: '窗帘'
  744. },
  745. isControlAll: false, // 所有空间可控否
  746. isControlSpace: false, // 当前空间可控否
  747. colourConfig: {}, // 色温设置
  748. colourVisible: false, // 色温弹窗
  749. equipmentsConfig: [], // 设备配置
  750. countDownTwoMin: 120, // 倒计时两分钟
  751. workDayTime: {}, // 开放办公区 时间
  752. closeStatus: false, // 点击了关闭确认按钮
  753. closeShowNum: 0,
  754. closeAllShow: false,
  755. airKey: 1,
  756. lampKey: 1,
  757. nowScrollY: 0,
  758. canscroll: true,
  759. scrollTop: 0,
  760. realScrollTop: 0,
  761. transY: 0,
  762. opacityV: 1,
  763. transYCopy: 0,
  764. windowHeightpx: 0,
  765. viewheight: 'auto',
  766. startY: 0,
  767. movesign: false,
  768. scale: 1,
  769. moveToTop: true,
  770. moveToBottom: false,
  771. // pscrollTop: 0,
  772. spaceIdProp: '',
  773. companyIdProp: '',
  774. preDataFinsh: false,
  775. selectedFloor: '', // 选择的楼层
  776. floorInfo: [],
  777. homePageHasHidden: true,
  778. h5StaticPath: config.h5StaticPath + '/page-officehome/',
  779. h5StaticLogo: config.h5StaticPath,
  780. lampHide: false, // 灯列表收起
  781. topbgimg: null, // 头部背景
  782. navFixed: false, // 滑动置顶
  783. outWeather: {
  784. temperature: '',
  785. pm25: '',
  786. quality: '',
  787. text: ''
  788. }, // 室外空气
  789. showWorkOff: false, // 开放办公室的 提前关闭是否展示
  790. nextCusStartTime: null, // 第二天服务定制开始时间
  791. cusStartTime: null, // 当天服务定制-开始时间
  792. cusEndTime: null, // 当天服务定制-结束时间
  793. officeData: null,
  794. headScene: '', // 头部文案
  795. headImg: '', // 头部背景图片
  796. options: { roomType: null, spaceId: null }, // 本地数据
  797. sceneDetail: null,
  798. popList: [],
  799. listOffice: [
  800. {
  801. id: 0,
  802. name: '工作',
  803. code: 'work',
  804. img: 'scene_work.svg',
  805. checked: true,
  806. textObj: [
  807. {
  808. text: '办公区灯光已全部为您开启',
  809. status: 'ok'
  810. },
  811. {
  812. text: '正在将温度调至 26℃',
  813. status: 'ok'
  814. },
  815. {
  816. text: '窗帘已为您全部打开',
  817. status: 'ok'
  818. },
  819. {
  820. text: '饮用水已为您准备',
  821. status: 'ok'
  822. }
  823. ]
  824. },
  825. {
  826. id: 1,
  827. name: '会客',
  828. code: 'guest',
  829. img: 'scene_visitor.svg',
  830. checked: false,
  831. textObj: [
  832. {
  833. text: '会客区照明已为您开启',
  834. status: 'ok'
  835. },
  836. {
  837. text: '空调已为您切换至会客温度,目标温度24℃',
  838. status: 'ok'
  839. },
  840. {
  841. text: '窗帘已为您全部开启',
  842. status: 'ok'
  843. },
  844. {
  845. text: '演示设备已为您准备',
  846. status: 'ok'
  847. },
  848. {
  849. text: '饮用水已为您准备',
  850. status: 'ok'
  851. }
  852. ]
  853. },
  854. {
  855. id: 2,
  856. name: '休息',
  857. code: 'rest',
  858. img: 'scene_rest.svg',
  859. checked: false,
  860. textObj: [
  861. {
  862. text: '主灯已关闭,氛围灯将为您开启',
  863. status: 'ok'
  864. },
  865. {
  866. text: '空调将为您调节至适宜休息的温度,目标温度26℃',
  867. status: 'ok'
  868. },
  869. {
  870. text: '窗帘已为您全部关闭',
  871. status: 'ok'
  872. }
  873. ]
  874. }
  875. ],
  876. // 上班=ATWORK 讨论=DISCUSSING 投影=PROJECTING 散会=ADJOURNMENT 下班=OFFWORK
  877. meetingRoomSence: [
  878. { code: 'DISCUSSING', name: '讨论' },
  879. { code: 'PROJECTING', name: '演示' },
  880. { code: 'ADJOURNMENT', name: '散会' }
  881. ],
  882. listSen: [
  883. {
  884. id: 0,
  885. code: 'DISCUSSING',
  886. name: '讨论',
  887. img: 'scene_work.svg',
  888. checked: true,
  889. textObj: [
  890. {
  891. text: '已为您切换至适宜讨论的环境',
  892. status: 'ok'
  893. }
  894. // {
  895. // text: '照明灯光已全部为您开启',
  896. // status: 'ok'
  897. // },
  898. // {
  899. // text: '演示设备已为您准备',
  900. // status: 'ok'
  901. // },
  902. // {
  903. // text: '空调已为您开启,目标温度24℃',
  904. // status: 'ok'
  905. // }
  906. ]
  907. },
  908. {
  909. id: 1,
  910. code: 'PROJECTING',
  911. name: '演示',
  912. img: 'scene_visitor.svg',
  913. checked: false,
  914. textObj: [
  915. {
  916. text: '已为您切换至适宜演示的环境',
  917. status: 'ok'
  918. }
  919. // {
  920. // text: '主灯已为您关闭,氛围灯为您开启',
  921. // status: 'ok'
  922. // },
  923. // {
  924. // text: '演示设备已为您开启',
  925. // status: 'ok'
  926. // },
  927. // {
  928. // text: '空调已为您开启,目标温度24℃',
  929. // status: 'ok'
  930. // },
  931. // {
  932. // text: '窗帘已为您关闭',
  933. // status: 'ok'
  934. // }
  935. ]
  936. },
  937. {
  938. id: 2,
  939. code: 'ADJOURNMENT',
  940. name: '散会',
  941. img: 'scene_rest.svg',
  942. checked: false,
  943. textObj: [
  944. {
  945. text: '会议室内设备已切换至节能模式',
  946. status: 'ok'
  947. }
  948. // {
  949. // text: '照明灯光2min后将全部关闭',
  950. // status: 'ok'
  951. // },
  952. // {
  953. // text: '演示设备已为您关闭',
  954. // status: 'ok'
  955. // },
  956. // {
  957. // text: '房间温度将维持26℃',
  958. // status: 'ok'
  959. // },
  960. // {
  961. // text: '窗帘已为您关闭',
  962. // status: 'ok'
  963. // }
  964. ]
  965. }
  966. ],
  967. roomHasScene: false, // 是否有加班
  968. listSen: [],
  969. envlist: [],
  970. navList: [
  971. {
  972. top: 0,
  973. id: 0,
  974. code: 'air',
  975. name: '空调',
  976. noShow: false,
  977. img: 'nav_air_3.svg',
  978. activeImg: 'nav_air_active_3.svg'
  979. },
  980. {
  981. top: 0,
  982. id: 1,
  983. code: 'heat',
  984. name: '地暖',
  985. noShow: false,
  986. img: 'nav_feat_3.svg',
  987. activeImg: 'nav_feat_active_3.svg'
  988. },
  989. {
  990. top: 0,
  991. id: 2,
  992. code: 'lamp',
  993. name: '光照',
  994. noShow: false,
  995. img: 'lamp.png',
  996. activeImg: 'lamp_active.svg'
  997. },
  998. {
  999. top: 0,
  1000. id: 3,
  1001. code: 'curtain',
  1002. name: '窗帘',
  1003. noShow: false,
  1004. img: 'nav_curtain_3.svg',
  1005. activeImg: 'nav_curtain_active_3.svg'
  1006. },
  1007. {
  1008. top: 0,
  1009. id: 4,
  1010. code: 'socket',
  1011. name: '插座',
  1012. noShow: false,
  1013. img: 'nav_socket_un.svg',
  1014. activeImg: 'nav_socket_act.svg'
  1015. },
  1016. {
  1017. top: 0,
  1018. id: 5,
  1019. code: 'noise',
  1020. name: '声压',
  1021. noShow: false,
  1022. img: 'sound.png',
  1023. activeImg: 'sound_active.svg'
  1024. }
  1025. ],
  1026. topBarHeight: 72,
  1027. roomPicTop: roomPicTop,
  1028. stopScrollCheck: false, // 点击导航
  1029. toView: 'inToView',
  1030. navId: 0,
  1031. visible: false,
  1032. sceneShow: false,
  1033. filtermeeting: {}, // 找到该会议室的数据
  1034. helpOrderShow: false, // 显示帮忙预约窗口
  1035. hasOrderShow: false, // 显示已经被预约窗口
  1036. orderMeetTimeStr: null, // 页面显示的预约时间
  1037. endOrderTime: null,
  1038. startOrderTime: null,
  1039. vanPopupIndex: null,
  1040. // 空间设备
  1041. spaceEqFlagObj: {
  1042. hasAir: true, // 有无空调
  1043. hasBlowing: false, // 空调有无 变风量系统
  1044. hasLamp: false, // 有无灯具
  1045. hasSocket: false, // 有无插座
  1046. hasCurtain: false // 有无 窗帘
  1047. },
  1048. // 空调-弹窗
  1049. airSetText: {
  1050. notice: '',
  1051. designTemperature: 0,
  1052. remark: []
  1053. },
  1054. viewOne: '', // 导航条第一个
  1055. airVisible: false, // 弹窗
  1056. currcompanyId: '',
  1057. saveCompanyIdRes: '',
  1058. routeParams: {},
  1059. nowBooking: null,
  1060. visit: false, // 是否是访客
  1061. currentTimeValue: [0, 0],
  1062. isACATVA: false,
  1063. isACATFC: false,
  1064. eightTime: 0,
  1065. sixTime: 0,
  1066. nowTime: new Date().valueOf(),
  1067. isWorkOff: false, // 我要离开 点击否
  1068. bookEquipList: '', // 预约显示的设备
  1069. controlMode: 0,
  1070. userRoleList: []
  1071. },
  1072. computed: {
  1073. ...mapState({
  1074. userInfo: state => state.user.userInfo,
  1075. projectId: state =>
  1076. state.company &&
  1077. state.company.companyConfig &&
  1078. state.company.companyConfig.sagacareProjectId,
  1079. handPopHight: state => state.officehome.handPopHight
  1080. }),
  1081. ...mapActions(['setIsApprovalProject']),
  1082. hasMeetingScene() {
  1083. // 是否展示会议室场景
  1084. let meetingScene =
  1085. this.roomHasScene &&
  1086. this.projectId !== 'Pj1101050038' &&
  1087. this.options.roomType === '会议室' &&
  1088. this.spaceEqFlagObj.hasLamp;
  1089. return meetingScene;
  1090. },
  1091. // 空间受控
  1092. isControl() {
  1093. const can = this.isControlAll || this.isControlSpace;
  1094. return can;
  1095. }
  1096. },
  1097. watch: {
  1098. transY: function(newVal, oldVal) {
  1099. // console.log('transY');
  1100. // 如果在顶部 则可以滑动
  1101. if (newVal < 0) return;
  1102. this.opacityV = 1 - (newVal / 80 > 1 ? 1 : newVal / 80);
  1103. if (newVal == this.transYCopy) {
  1104. this.moveToBottom = true;
  1105. } else {
  1106. this.moveToBottom = false;
  1107. }
  1108. if (newVal == 0) {
  1109. this.canscroll = true;
  1110. } else {
  1111. this.canscroll = false;
  1112. }
  1113. }
  1114. },
  1115. // 加载字体
  1116. onLoad(routeParams) {
  1117. this.getCardWidth();
  1118. this.getConfig();
  1119. umaInit();
  1120. if (!this.homePageHasHidden) return;
  1121. var nowTimeStr = moment().format('YYYY-MM-DD');
  1122. var eightTime = moment(nowTimeStr + ' 20:00:00').valueOf();
  1123. var sixTime = moment(nowTimeStr + ' 05:00:00').valueOf();
  1124. this.sixTime = sixTime;
  1125. this.eightTime = eightTime;
  1126. var _this = this;
  1127. this.routeParams = routeParams;
  1128. // console.log('routeParams', routeParams)
  1129. console.log("this.userInfo==",this.userInfo);
  1130. checkHasUserInfo().then(userInfo => {
  1131. if (userInfo) {
  1132. // 获取用户对应的空间信息
  1133. let currcompanyId = routeParams.companyId || this.userInfo.companyId; // 获取当前公司
  1134. let saveCompanyIdRes = wx.getStorageSync('saveCompanyId'); // 获取缓存中公司
  1135. _this.currcompanyId = currcompanyId;
  1136. _this.saveCompanyIdRes = saveCompanyIdRes;
  1137. this.saveCompanyIdM(currcompanyId);
  1138. this.companyIdProp = routeParams.companyId || '';
  1139. if (this.companyIdProp) {
  1140. this.visit = true;
  1141. }
  1142. this.setDefaultSpaceId(currcompanyId); // 给变量赋值
  1143. console.log('userInfo', userInfo, currcompanyId);
  1144. saveCompanyConfig(currcompanyId).then(() => {
  1145. this.preDataFinsh = true;
  1146. let qspaceId = null;
  1147. if (routeParams.q) {
  1148. let queryAll = decodeURIComponent(routeParams.q);
  1149. qspaceId = _this.gup('spaceId', queryAll); // 如果传入了spaceId 扫二维码传入的 链接中携带的
  1150. }
  1151. if (qspaceId) {
  1152. this.spaceIdProp = qspaceId;
  1153. this.options.spaceId = qspaceId;
  1154. this.getData();
  1155. } else if (routeParams.spaceId) {
  1156. // 如果跳转链接 传入的
  1157. this.spaceIdProp = routeParams.spaceId;
  1158. this.options.spaceId = routeParams.spaceId;
  1159. this.getData();
  1160. } else {
  1161. this.getHistorySelectedArea().then(res => {
  1162. this.spaceIdProp = res.spaceId;
  1163. this.options.spaceId = res.spaceId;
  1164. this.getData(); // 获取数据
  1165. });
  1166. }
  1167. // console.log('onLoad');
  1168. this.spaceInfoStatusTimer();
  1169. });
  1170. }
  1171. });
  1172. // 加载字体
  1173. loadFont(400);
  1174. loadFont(500);
  1175. },
  1176. onShow() {
  1177. if (!this.homePageHasHidden) {
  1178. // 这个是从地图搜索回来
  1179. const lastSearchedSpace = wx.getStorageSync('lastSearchedSpace');
  1180. if (lastSearchedSpace) {
  1181. this.spaceIdProp = lastSearchedSpace.spaceId;
  1182. this.options.spaceId = lastSearchedSpace.spaceId;
  1183. this.getData(); // 获取数据
  1184. wx.removeStorageSync('lastSearchedSpace');
  1185. } else {
  1186. console.log('onshow', this.spaceEqFlagObj);
  1187. // 这个是从地图切换按钮回来
  1188. this.getHistorySelectedArea().then(res => {
  1189. this.spaceIdProp = res.spaceId; // 传给子组件
  1190. this.options.spaceId = res.spaceId;
  1191. this.getData(); // 获取数据
  1192. });
  1193. }
  1194. // 2秒测试
  1195. this.spaceInfoStatusTimer();
  1196. }
  1197. },
  1198. onReady() {
  1199. // var scale = 750 / wx.getSystemInfoSync().windowWidth ; // 这是px转rpx 750/ wx.getSystemInfoSync().windowWidth=rpx/px 任何手机都是750rpx
  1200. var windowHeightpx = wx.getSystemInfoSync().screenHeight;
  1201. // 设置初始值 topBarHeight*scale+roomPicTop
  1202. this.transYCopy =
  1203. windowHeightpx - switchPanelHeight - this.topBarHeight - this.roomPicTop; // topBarHeight上顶端的bar
  1204. this.windowHeightpx = windowHeightpx;
  1205. if (this.routeParams.showmap == 'true') {
  1206. this.transY = this.transYCopy;
  1207. // console.log('onready');
  1208. }
  1209. },
  1210. // onPageScroll(t) {
  1211. // this.pscrollTop = t.scrollTop ;
  1212. // if (this.timer) clearTimeout(this.timer)
  1213. // this.timer = setTimeout(() => {
  1214. // this.stopScrollCheck = false ;
  1215. // }, 60) ;
  1216. // this.scrollActive() ;
  1217. // },
  1218. onHide() {
  1219. // this.spaceEqFlagObj = {
  1220. // hasAir: true,
  1221. // hasLamp: false
  1222. // }
  1223. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer);
  1224. this.homePageHasHidden = false;
  1225. },
  1226. onUnload() {
  1227. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer);
  1228. },
  1229. methods: {
  1230. // 权限
  1231. async getConfig() {
  1232. const isOpenPermission = await this.projectConfig();
  1233. if (isOpenPermission) {
  1234. await this.userControlConfig();
  1235. } else {
  1236. this.isControlAll = true; // 没有开启权限控制,可控所有空间
  1237. }
  1238. },
  1239. checkControl() {
  1240. if (this.isControlAll) return;
  1241. this.isControlAll = false; // 所有空间可控
  1242. this.isControlSpace = false; // 当前空间可控
  1243. // operator项目运营人员身份operator.admin运营管理员operator.regular运营管理
  1244. // 可控全部空间
  1245. for (let i = 0; i < this.userRoleList.length; i++) {
  1246. let item = this.userRoleList[i];
  1247. const has = item.indexOf('operator');
  1248. if (has != '-1') {
  1249. this.isControlAll = true;
  1250. break;
  1251. }
  1252. }
  1253. for (let i = 0; i < this.controlSpaceList.length; i++) {
  1254. let item = this.controlSpaceList[i];
  1255. if (item === this.options.spaceId) {
  1256. this.isControlSpace = true;
  1257. break;
  1258. }
  1259. }
  1260. },
  1261. // 空间控制权限
  1262. userControlConfig() {
  1263. return queryUserControlInfo().then(res => {
  1264. this.userRoleList = res.data.userRoleList || [];
  1265. this.controlSpaceList = res.data.controlSpaceList || [];
  1266. this.checkControl();
  1267. });
  1268. },
  1269. // 会议室控制权限
  1270. spaceMeetingConfig() {
  1271. // 该用户当前时间参会的会议室
  1272. querySpaceMeetingInfo([this.options.spaceId]).then(res => {
  1273. const resArr = res.data || [];
  1274. if (resArr.length) {
  1275. this.isControlSpace = true;
  1276. }
  1277. });
  1278. },
  1279. // 项目控制权限
  1280. projectConfig() {
  1281. // 当前项目是否开启权限控制功能
  1282. return queryProjectConfig().then(res => {
  1283. return res.data.isOpenPermission;
  1284. });
  1285. },
  1286. setCanScroll(val) {
  1287. this.canscroll = val;
  1288. },
  1289. // 地暖弹框
  1290. openFloorFeatPop(val) {
  1291. this.floorfeatVisible = true;
  1292. this.floorFeatItem = val;
  1293. },
  1294. // 地暖 数据
  1295. getFloorHeatData(val) {
  1296. this.floorHeatData = val;
  1297. this.floorHeatData.len = !!val.len;
  1298. this.navList.map(item => {
  1299. if (item.code === 'heat') {
  1300. item.noShow = !val.len;
  1301. }
  1302. });
  1303. },
  1304. // 窗帘-弹窗
  1305. showCurtainPop(val) {
  1306. this.crutainType = JSON.parse(JSON.stringify(val));
  1307. this.curtainVisible = true;
  1308. },
  1309. // 色温弹框
  1310. openColourPop(val) {
  1311. this.colourVisible = true;
  1312. this.colourConfig = val;
  1313. },
  1314. // 空间下设备是否受加班可控
  1315. checkEquipmentConfigStatus() {
  1316. return queryEquipmentRunConfig(this.options.spaceId).then(res => {
  1317. const resArr = res.data;
  1318. this.equipmentsConfig = resArr;
  1319. });
  1320. },
  1321. // 手动 弹窗 展示的设备类型
  1322. dialogShowEquipType(val) {
  1323. this.bookEquipList = val;
  1324. },
  1325. showCurtain(len) {
  1326. this.spaceEqFlagObj.hasCurtain = !!len;
  1327. this.navList.map((item, idx) => {
  1328. if (item.code === 'curtain') {
  1329. item.noShow = !len;
  1330. }
  1331. });
  1332. },
  1333. // 插座
  1334. showSocket(len) {
  1335. this.spaceEqFlagObj.hasSocket = !!len;
  1336. this.navList.map((item, idx) => {
  1337. if (item.code === 'socket') {
  1338. item.noShow = !len;
  1339. }
  1340. });
  1341. },
  1342. showSaveSpace() {
  1343. if (!checkSpaceControl(this.isControl)) return;
  1344. var _this = this;
  1345. if (_this.options.spaceId == _this.userInfo.spaceId) {
  1346. wx.showToast({
  1347. title: '该空间已是您的常驻空间',
  1348. icon: 'none',
  1349. duration: 3000
  1350. });
  1351. } else {
  1352. wx.showModal({
  1353. title: '设置常驻空间',
  1354. content: '将该空间设定为您的常驻空间?',
  1355. confirmText: '确定',
  1356. cancelText: '取消',
  1357. cancelColor: '#c4c4c4',
  1358. success: res => {
  1359. if (res.confirm) {
  1360. changeDefaultSpace(_this.options.spaceId).then(res => {
  1361. var pages = getCurrentPages();
  1362. console.log('res', res, pages);
  1363. _this.userInfo.spaceId = _this.options.spaceId;
  1364. wx.showToast({
  1365. title: '设置成功',
  1366. icon: 'success',
  1367. duration: 3000,
  1368. complete: res => {
  1369. if (pages.length <= 1) {
  1370. wx.redirectTo({ url: '/pages/homev2' });
  1371. } else {
  1372. wx.navigateBack();
  1373. }
  1374. }
  1375. });
  1376. });
  1377. }
  1378. }
  1379. });
  1380. }
  1381. },
  1382. getWorkDayTime() {
  1383. // 获取个人空间使用时间
  1384. return queryCustomAndScence({ spaceId: this.options.spaceId }).then(
  1385. res => {
  1386. this.workDayTime = res;
  1387. }
  1388. );
  1389. },
  1390. vibrateShort() {
  1391. if (wx.canIUse('vibrateShort')) {
  1392. wx.vibrateShort();
  1393. } else {
  1394. wx.vibrateLong();
  1395. }
  1396. },
  1397. showAllClose() {
  1398. if (!checkSpaceControl(this.isControl)) return;
  1399. this.closeAllShow = true;
  1400. this.closeShowNum = 0;
  1401. this.closeStatus = false;
  1402. },
  1403. // 关闭全部关闭弹窗
  1404. hideCloseAll() {
  1405. this.closeAllShow = false;
  1406. // this.closeShowNum=0 ;
  1407. // this.closeStatus=false ;
  1408. },
  1409. // 确认关闭所有设备
  1410. sureCloseAll() {
  1411. this.vibrateShort();
  1412. this.$refs.allclose.controlEquipStatistics();
  1413. this.closeShowNum = 1;
  1414. this.closeStatus = true;
  1415. var interval = setInterval(() => {
  1416. this.closeShowNum++;
  1417. if (this.closeShowNum == 5) {
  1418. clearInterval(interval);
  1419. }
  1420. }, 1800);
  1421. },
  1422. // 空调 - airTemp
  1423. airShowVisible(val) {
  1424. this.airVisible = true;
  1425. this.airSetText = {
  1426. notice: '',
  1427. remark: '',
  1428. designTemperature: ''
  1429. };
  1430. this.airSetText.designTemperature = val.designTemperature; // 目标温度
  1431. this.airSetText.toWhere = val.toWhere;
  1432. },
  1433. airTemp(val) {
  1434. this.airSetText.notice = val.notice;
  1435. if (val.remark && val.remark !== []) {
  1436. const remark = val.remark.split('*');
  1437. this.airSetText.remark = remark;
  1438. }
  1439. },
  1440. gup(name, url) {
  1441. if (!url) url = location.href;
  1442. // name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]');
  1443. var regexS = name + '=([^&#]*)';
  1444. var regex = new RegExp(regexS);
  1445. var results = regex.exec(url);
  1446. return results == null ? null : results[1];
  1447. },
  1448. saveCompanyIdM(companyId) {
  1449. wx.setStorage({
  1450. key: 'saveCompanyId',
  1451. data: {
  1452. companyId: companyId
  1453. },
  1454. success: function() {},
  1455. fail: function() {}
  1456. });
  1457. },
  1458. getHistorySelectedArea() {
  1459. var _this = this;
  1460. var spaceId = '';
  1461. return new Promise((resolve, reject) => {
  1462. wx.getStorage({
  1463. key: 'SelectedASpace',
  1464. success: res => {
  1465. if (res.data && res.data.spaceId) {
  1466. if (
  1467. _this.currcompanyId == _this.saveCompanyIdRes.companyId ||
  1468. !_this.saveCompanyIdRes.companyId
  1469. ) {
  1470. // 如果公司id无变化
  1471. spaceId = res.data.spaceId;
  1472. } else {
  1473. // 如果公司id有变化
  1474. if (_this.routeParams.companyId) {
  1475. // 如果是访客 取默认
  1476. spaceId = defalutSelectedId[this.selectedFloor];
  1477. } else {
  1478. // 取用户
  1479. spaceId = _this.userInfo.spaceId;
  1480. }
  1481. }
  1482. }
  1483. console.log(
  1484. 'getHistorySelectedArea',
  1485. _this.currcompanyId,
  1486. _this.saveCompanyIdRes.companyId
  1487. );
  1488. spaceId = spaceId || defalutSelectedId[this.selectedFloor];
  1489. resolve({
  1490. spaceId: spaceId
  1491. });
  1492. },
  1493. fail: () => {
  1494. if (_this.routeParams.companyId) {
  1495. // 如果是访客 取默认
  1496. spaceId = defalutSelectedId[this.selectedFloor];
  1497. } else {
  1498. spaceId = _this.userInfo.spaceId;
  1499. }
  1500. console.log('getHistorySelectedArea22', spaceId);
  1501. resolve({
  1502. spaceId: spaceId
  1503. });
  1504. }
  1505. });
  1506. });
  1507. },
  1508. getnowTime(text) {
  1509. // 头部背景图片
  1510. let now = moment().hours();
  1511. if (text.indexOf('霾') > -1) {
  1512. this.topbgimg = `${this.h5StaticPath}office_smog.jpg`;
  1513. } else {
  1514. if (now >= 6 && now < 19) {
  1515. // 白天
  1516. this.topbgimg = `${this.h5StaticPath}office_bright.jpg`;
  1517. } else {
  1518. // 夜晚
  1519. this.topbgimg = `${this.h5StaticPath}office_night.jpg`;
  1520. }
  1521. }
  1522. },
  1523. async getData() {
  1524. // 获取数据
  1525. await this.getSpaceInfo(); // 空间指数信息
  1526. await this.querySpaceSceneConfig(); // 获取空间场景
  1527. await this.getWorkDayTime(); // 工作组时间
  1528. this.getEquipments(); // 空间下的设备
  1529. this.checkEquipmentConfigStatus();
  1530. this.getWeatherInfo(); // 天气预报
  1531. },
  1532. setDefaultSpaceId(id) {
  1533. let companyId = id;
  1534. getCompanyMapData(companyId).then(res => {
  1535. let CompanyMapData = JSON.parse(res.data);
  1536. this.floorInfo = CompanyMapData.floorInfo;
  1537. this.selectedFloor = CompanyMapData.floorInfo[0].floorId;
  1538. defalutSelectedId = CompanyMapData.defalutSelectedId;
  1539. });
  1540. },
  1541. getEquipments() {
  1542. // 获取空间下设备
  1543. const params = {
  1544. spaceId: this.options.spaceId
  1545. // category: // 设备类。可不填,查询所有。
  1546. };
  1547. getEquipmentListHttp(params).then(res => {
  1548. // equipmentCategory 有 空调 ACATFC、ACATFU、ACATVA、ACATVI;有灯 灯 SELTLT
  1549. // ACATVA 变风量系统
  1550. this.navList.map(item => {
  1551. if (item.code === 'air' || item.code === 'lamp') {
  1552. item.noShow = true;
  1553. }
  1554. });
  1555. this.spaceEqFlagObj.hasAir = false;
  1556. this.spaceEqFlagObj.hasLamp = false;
  1557. (res.data || []).forEach(item => {
  1558. if (item.equipmentCategory === 'ACATVA') {
  1559. this.isACATVA = true; // 如果是嘉铭的ACATVA 则不显示开关
  1560. }
  1561. if (item.equipmentCategory === 'ACATFC') {
  1562. this.isACATFC = true; // 如果是嘉铭的ACATVA 则不显示开关
  1563. }
  1564. if (
  1565. item.equipmentCategory === 'ACATFC' ||
  1566. item.equipmentCategory === 'ACATVA' ||
  1567. item.equipmentCategory === 'ACATVI'
  1568. ) {
  1569. this.spaceEqFlagObj.hasAir = true;
  1570. this.navList.map(item => {
  1571. if (item.code === 'air') {
  1572. item.noShow = false;
  1573. }
  1574. });
  1575. this.airKey++;
  1576. } else if (item.equipmentCategory === 'SELTLT') {
  1577. this.spaceEqFlagObj.hasLamp = true;
  1578. this.navList.map(item => {
  1579. if (item.code === 'lamp') {
  1580. item.noShow = false;
  1581. }
  1582. });
  1583. this.lampKey++;
  1584. }
  1585. });
  1586. });
  1587. },
  1588. switchoverScene(code) {
  1589. // 改变场景(上班.讨论.投影.散会.下班)
  1590. const params = {
  1591. spaceId: this.options.spaceId,
  1592. type: code,
  1593. pubname: config.brsgServer.pubname
  1594. };
  1595. if (this.nowBooking) {
  1596. Object.assign(params, { id: this.nowBooking.id });
  1597. }
  1598. return switchoverSceneHttp(params);
  1599. },
  1600. spaceInfoStatusTimer() {
  1601. spaceInfoStatusTimer = clearInterval(spaceInfoStatusTimer);
  1602. spaceInfoStatusTimer = setInterval(() => {
  1603. this.getSpaceInfo(); // 空间信息
  1604. // this.getWeatherInfo() ;// 天气预报
  1605. }, 20 * 1000); // 2秒描刷接口
  1606. },
  1607. getWeatherInfo() {
  1608. getWeather().then(res => {
  1609. this.outWeather = res.content ? res.content : {};
  1610. var text = this.outWeather.text || '';
  1611. var imgname = 'sun.png';
  1612. this.getnowTime(text); // 头部背景
  1613. if (text.indexOf('晴') > -1) {
  1614. imgname = 'sun.png';
  1615. } else if (text.indexOf('雨') > -1) {
  1616. imgname = 'rain.png';
  1617. } else if (text.indexOf('阴') > -1 || text.indexOf('云') > -1) {
  1618. imgname = 'cloudy.png';
  1619. } else if (text.indexOf('霾') > -1) {
  1620. imgname = 'mai.png';
  1621. } else if (text.indexOf('雾') > -1) {
  1622. imgname = 'fog.png';
  1623. } else if (text.indexOf('风') > -1) {
  1624. imgname = 'wind.png';
  1625. } else if (text.indexOf('雷') > -1) {
  1626. imgname = 'thunder.png';
  1627. }
  1628. this.outWeather.imgname = imgname;
  1629. });
  1630. },
  1631. mapChangeSpaceInfo(spaceId) {
  1632. this.options.spaceId = spaceId;
  1633. this.getData();
  1634. console.log(this.controlSpaceList, '-----this.controlSpaceList---');
  1635. this.checkControl();
  1636. },
  1637. getSpaceInfo() {
  1638. // 空间信息
  1639. var _this = this;
  1640. if (!this.options.spaceId) return;
  1641. const params = {
  1642. criteria: {
  1643. spaceId: this.options.spaceId
  1644. // userId: 391
  1645. },
  1646. pubname: config.brsgServer.pubname,
  1647. openid: this.userInfo.userId
  1648. };
  1649. return getSpaceAdjustList(params).then(res => {
  1650. this.officeData = (res && res.content && res.content[0]) || {};
  1651. this.checkSpaceType(this.officeData.roomFuncType);
  1652. if (res && res.content) {
  1653. res.content.forEach(item => {
  1654. this.controlMode = item.controlMode || 0;
  1655. this.viewOne = this.inToview();
  1656. var envlist = [
  1657. {
  1658. id: 1,
  1659. name: 'CO₂',
  1660. num: '--',
  1661. level: '--',
  1662. funcid: 'CO2',
  1663. code: 'co2'
  1664. },
  1665. {
  1666. id: 2,
  1667. name: 'PM2.5',
  1668. num: '--',
  1669. level: '--',
  1670. funcid: 'PM2d5',
  1671. code: 'pm25'
  1672. },
  1673. {
  1674. id: 3,
  1675. name: '甲醛',
  1676. num: '--',
  1677. level: '--',
  1678. funcid: 'HCHO',
  1679. code: 'jiaquan'
  1680. }
  1681. // { id: 4, name: '湿度', num: '--', level: '--', funcid: 'Tdb,RH', code: 'shidu' }
  1682. // { id: 3, name: 'TVOC', num: 0.4, level: '健康' }
  1683. ];
  1684. if (item.co2 || item.co2 == 0) {
  1685. envlist[0].level = this.checkLevel(item.co2, 'co2').levelTxt;
  1686. envlist[0].num = item.co2;
  1687. } else {
  1688. envlist[0].level = '--';
  1689. envlist[0].num = '--';
  1690. }
  1691. if (item.pm25 || item.pm25 === 0) {
  1692. envlist[1].level = this.checkLevel(item.pm25, 'pm25').levelTxt;
  1693. envlist[1].num = item.pm25;
  1694. } else {
  1695. envlist[1].level = '--';
  1696. envlist[1].num = '--';
  1697. }
  1698. if (item.hcho || item.hcho == 0) {
  1699. envlist[2].level = this.checkLevel(item.hcho, 'hcho').levelTxt;
  1700. envlist[2].num = item.hcho.toFixed(2);
  1701. } else {
  1702. envlist[2].level = '--';
  1703. envlist[2].num = '--';
  1704. }
  1705. if (_this.controlMode == 0) {
  1706. var humidityNum =
  1707. item.humidity || item.humidity == 0
  1708. ? item.humidity.toFixed(0)
  1709. : '--';
  1710. var humidityText =
  1711. item.humidity || item.humidity == 0
  1712. ? this.checkLevel(item.humidity, 'humidity').levelTxt
  1713. : '--';
  1714. var humidityObj = {
  1715. id: 4,
  1716. name: '湿度',
  1717. num: humidityNum,
  1718. level: humidityText,
  1719. funcid: 'Tdb,RH',
  1720. code: 'shidu'
  1721. };
  1722. envlist.push(humidityObj);
  1723. }
  1724. if (_this.controlMode == 1) {
  1725. var temperNum = this.officeData.temperature
  1726. ? this.officeData.temperature
  1727. : '--';
  1728. var temperText = this.officeData.temperature
  1729. ? this.checkLevel(this.officeData.temperature, 'temper')
  1730. .levelTxt
  1731. : '--';
  1732. var tempObj = {
  1733. id: 0,
  1734. name: '温度',
  1735. num: temperNum,
  1736. level: temperText,
  1737. funcid: 'Tdb,RH',
  1738. code: 'wendu'
  1739. };
  1740. envlist.unshift(tempObj);
  1741. }
  1742. // console.log("_this.controlMode", _this.controlMode, envlist) ;
  1743. this.envlist = envlist;
  1744. });
  1745. } else {
  1746. this.envlist = [];
  1747. }
  1748. return 'success';
  1749. });
  1750. },
  1751. getMeetingScene() {
  1752. // 获取当前会议室的场景 OFFWORK
  1753. const params = {
  1754. spaceId: this.options.spaceId
  1755. };
  1756. getMeetingSceneHttp(params).then(res2 => {
  1757. var rescont = res2.content || '';
  1758. if (rescont === 'OFFWORK') {
  1759. rescont = 'ADJOURNMENT';
  1760. }
  1761. var filterArr = this.listSen.filter(function(item) {
  1762. return item.code === rescont;
  1763. });
  1764. // 根据code 获取场景的名字
  1765. this.headScene = (filterArr[0] && filterArr[0].name) || '散会';
  1766. this.vanPopupIndex = rescont;
  1767. });
  1768. },
  1769. querySpaceSceneConfig() {
  1770. // 获取空间场景
  1771. const params = {
  1772. spaceId: this.options.spaceId
  1773. };
  1774. this.roomHasScene = false;
  1775. return querySpaceSceneConfigHttp(params).then(res => {
  1776. if (!res.data) return;
  1777. let sceneArr = res.data;
  1778. this.roomHasScene = true; // 空间有场景
  1779. if (this.options.roomType !== '会议室') return;
  1780. let copyListSen = JSON.parse(JSON.stringify(initListSen));
  1781. this.listSen = JSON.parse(JSON.stringify(initListSen));
  1782. copyListSen.forEach(item => {
  1783. let flag = false;
  1784. let deleteIdx = null;
  1785. sceneArr.forEach((j, idx) => {
  1786. deleteIdx = idx;
  1787. if (item.code === j.sceneType) {
  1788. flag = true;
  1789. }
  1790. });
  1791. if (!flag) {
  1792. this.listSen.splice(deleteIdx, 1);
  1793. }
  1794. });
  1795. this.popList = this.listSen;
  1796. });
  1797. },
  1798. checkSpaceType(roomFuncType) {
  1799. // 空间类型处理
  1800. // const roomFuncType = this.officeData.roomFuncType ; // 空间类型
  1801. if (
  1802. roomFuncType === '311' ||
  1803. roomFuncType === '310' ||
  1804. roomFuncType === '312'
  1805. ) {
  1806. this.options.roomType = '个人';
  1807. this.headImg = 'office_person_2.png';
  1808. this.headScene = '工作';
  1809. } else if (
  1810. roomFuncType === '320' ||
  1811. roomFuncType === '321' ||
  1812. roomFuncType === '322' ||
  1813. roomFuncType === '323'
  1814. ) {
  1815. this.getMeetingScene();
  1816. this.options.roomType = '会议室';
  1817. this.headImg = 'office_normal_2.png';
  1818. } else if (
  1819. roomFuncType === '313' ||
  1820. roomFuncType === '314' ||
  1821. roomFuncType === '315'
  1822. ) {
  1823. this.options.roomType = '开放';
  1824. this.headImg = 'office_publi_2.png';
  1825. } else {
  1826. this.options.roomType = '其它';
  1827. this.headImg = 'office_publi_2.png';
  1828. }
  1829. // 当前空间为会议室,但用户没有所有空间的控制权
  1830. if (this.options.roomType === '会议室' && !this.isControl) {
  1831. this.spaceMeetingConfig();
  1832. }
  1833. },
  1834. hourMiChange(str) {
  1835. // 转为时间 19.3 - 19:30 19.41-19:41 19-19:00
  1836. str = str.toString();
  1837. let newStr = '';
  1838. let dLen = str.length > 2 ? str.split('.')[1].length : str;
  1839. if (dLen === 1) {
  1840. str = str.replace('.', '') + '0';
  1841. newStr = str.slice(0, 2) + ':' + str.slice(2);
  1842. } else if (dLen === 2) {
  1843. str = str.replace('.', '');
  1844. newStr = str.slice(0, 2) + ':' + str.slice(2);
  1845. } else {
  1846. newStr = str + ':00';
  1847. }
  1848. return newStr;
  1849. },
  1850. checkLevel(value, name) {
  1851. let objList = {
  1852. humidity: {
  1853. range: [30, 70],
  1854. text: ['干燥', '健康', '潮湿']
  1855. },
  1856. co2: {
  1857. range: [800, 1000, 1500],
  1858. text: ['健康', '达标', '略高', '超标']
  1859. },
  1860. pm25: {
  1861. range: [35, 75, 115, 150, 250],
  1862. text: ['健康', '良', '轻度污染', '中度污染', '重度污染', '严重污染']
  1863. },
  1864. hcho: {
  1865. range: [0.1],
  1866. text: ['健康', '超标']
  1867. },
  1868. temper: {
  1869. range: [20, 24],
  1870. text: ['偏冷', '舒适', '偏热']
  1871. }
  1872. };
  1873. let sortArr = [value, ...objList[name].range].sort((a, b) => {
  1874. return a - b;
  1875. });
  1876. let level = sortArr.findIndex(item => item === value);
  1877. let levelTxt = objList[name].text[level];
  1878. return { level, levelTxt };
  1879. },
  1880. inToview() {
  1881. let inToViewOne = '';
  1882. if (
  1883. (this.officeData.temperature || this.spaceEqFlagObj.hasAir) &&
  1884. this.controlMode == 0
  1885. ) {
  1886. inToViewOne = '#inToView0';
  1887. }
  1888. if (this.spaceEqFlagObj.hasAir && this.controlMode == 1) {
  1889. inToViewOne = '#inToView02';
  1890. }
  1891. return inToViewOne;
  1892. },
  1893. getCardWidth() {
  1894. // 获取每一个卡片的top height
  1895. var _this = this;
  1896. const query = wx.createSelectorQuery();
  1897. query.select('#inToView4').boundingClientRect();
  1898. return new Promise(function(resolve, reject) {
  1899. query.exec(function(res) {
  1900. const mlr = 20 * 2; // 左右marign
  1901. _this.cardWidth = res[0].width - mlr;
  1902. resolve();
  1903. });
  1904. });
  1905. },
  1906. getCardPosition() {
  1907. // 获取每一个卡片的top height
  1908. var _this = this;
  1909. const query = wx.createSelectorQuery();
  1910. var halfWindowHeightpx = this.windowHeightpx / 2;
  1911. query.select('#roomDetail').boundingClientRect();
  1912. query.select(this.viewOne).boundingClientRect();
  1913. query.select('#inToView5').boundingClientRect();
  1914. query.select('#inToView1').boundingClientRect();
  1915. query.select('#inToView2').boundingClientRect();
  1916. query.select('#inToView3').boundingClientRect();
  1917. query.select('#inToView4').boundingClientRect();
  1918. return new Promise(function(resolve, reject) {
  1919. query.exec(function(res) {
  1920. _this.navList[0].top =
  1921. res[0].height +
  1922. _this.roomPicTop +
  1923. _this.topBarHeight -
  1924. halfWindowHeightpx; // 这个是 与顶部的距离 减去 halfWindowHeightpx 以中间线为基准
  1925. _this.navList[0].height = _this.navList[0].noShow
  1926. ? 0
  1927. : (res[1] && res[1].height) || 0;
  1928. for (let i = 1; i < res.length; i++) {
  1929. _this.dealNav(i, _this, res);
  1930. }
  1931. resolve();
  1932. });
  1933. });
  1934. },
  1935. dealNav(idx, _this, res) {
  1936. if (!_this.navList[idx]) return;
  1937. const pre = idx - 1;
  1938. const preTop = _this.navList[pre].top || 0;
  1939. const next = idx + 1;
  1940. _this.navList[idx].top =
  1941. preTop + 15 + ((res[idx] && res[idx].height) || 0);
  1942. _this.navList[idx].height = _this.navList[idx].noShow
  1943. ? 0
  1944. : (res[next] && res[next].height) || 0;
  1945. },
  1946. async selectCrad(e, nav) {
  1947. let id = e.currentTarget.id;
  1948. if (id === this.navId) return;
  1949. this.navId = id;
  1950. this.lampHide = !this.lampHide; // 当点击了导航 灯的列表要收起
  1951. await this.getCardPosition();
  1952. var targetNav = this.navList.find(function(item) {
  1953. return item.id == id;
  1954. });
  1955. wx.uma.trackEvent(`officeHome_navigation_${targetNav.code}`, {
  1956. key: '环境调节-导航栏'
  1957. });
  1958. this.scrollTop = targetNav.top; // 实现点击导航 滚动
  1959. },
  1960. async scrollEvent(event) {
  1961. // 滚动 选中导航条相应的
  1962. await this.getCardPosition();
  1963. var scrollTop = (event.detail || event.$wx.detail || {}).scrollTop || 0;
  1964. this.realScrollTop = scrollTop;
  1965. // console.log('scrollEvent-scrollTop', this.realScrollTop) ;
  1966. if (scrollTop < this.navList[0].top + this.navList[0].height) {
  1967. this.navId = 0;
  1968. }
  1969. for (let i = 0; i < 8; i++) {
  1970. this.determine(scrollTop, i);
  1971. }
  1972. },
  1973. determine(scrollTop, idx) {
  1974. if (!this.navList[idx]) return;
  1975. const next = idx + 1;
  1976. const nextTop = this.navList[next] ? this.navList[next].top : 0;
  1977. const nextHeight = this.navList[next] ? this.navList[next].height : 0;
  1978. if (
  1979. scrollTop > this.navList[idx].top + this.navList[idx].height &&
  1980. scrollTop < nextTop + nextHeight
  1981. ) {
  1982. this.navId = next;
  1983. }
  1984. },
  1985. scrollToUpper(event) {
  1986. // 到达顶部
  1987. // console.log('scrollToUpper-scrollTop');
  1988. // this.realScrollTop = 0 ;
  1989. },
  1990. // 进入 detail 页
  1991. handleDetail(data) {
  1992. if (!checkSpaceControl(this.isControl)) return;
  1993. data.code &&
  1994. wx.uma.trackEvent(`officeHome_header_${data.code}`, {
  1995. key: '环境调节-空间照片-环境指标'
  1996. });
  1997. wx.navigateTo({
  1998. url: `./detail?spaceId=${this.officeData.id}&funcid=${data.funcid}`
  1999. });
  2000. },
  2001. // 进入地图页
  2002. toRoom() {
  2003. wx.uma.trackEvent('officeHome_navigation_map', {
  2004. key: '环境调节-导航栏-地图'
  2005. });
  2006. // wx.navigateTo({
  2007. // url: `../intelligentControl/home?id=${this.officeData.id}&from=officehome&companyIdProp=${this.companyIdProp}`
  2008. // }) ;
  2009. this.scrollTop = null;
  2010. this.scrollTop = 0;
  2011. this.transY = this.transYCopy;
  2012. },
  2013. handleWorkOff(val) {
  2014. // 我要离开 弹窗展示
  2015. if (val === 'showWorkOff') {
  2016. this.isWorkOff = true;
  2017. this.sceneShow = true;
  2018. return;
  2019. }
  2020. if (val === 'hideWorkOff') {
  2021. this.isWorkOff = false;
  2022. this.sceneShow = false;
  2023. }
  2024. },
  2025. handlecountDown() {
  2026. this.countDownTwoMin = 0;
  2027. clearInterval(timerTwoMin);
  2028. timerTwoMin = null;
  2029. if (this.visible) {
  2030. this.countDownTwoMin = 60 * 2;
  2031. this.getWorkDayTime(); // 获取工作时间
  2032. timerTwoMin = setInterval(() => {
  2033. if (this.countDownTwoMin === 1) {
  2034. this.visible = false;
  2035. this.getWorkDayTime(); // 获取工作时间
  2036. } else {
  2037. this.countDownTwoMin = this.countDownTwoMin - 1;
  2038. }
  2039. }, 1000 * 20);
  2040. } else {
  2041. clearInterval(timerTwoMin);
  2042. timerTwoMin = null;
  2043. this.getWorkDayTime(); // 获取工作时间
  2044. }
  2045. },
  2046. // 调出浮层
  2047. handlePopup(val) {
  2048. if (!this.roomHasScene) return; // 没有加班 不可配置
  2049. this.visible = val;
  2050. if (this.options.roomType == '开放') {
  2051. this.handlecountDown(); // 倒计时两分钟
  2052. wx.uma.trackEvent('officeHome_header_overtime', {
  2053. key: '环境调节-空间照片-加班时间'
  2054. });
  2055. } else if (this.options.roomType == '会议室') {
  2056. wx.uma.trackEvent('officeHome_header_meeting', {
  2057. key: '环境调节-空间照片-会议场景切换'
  2058. });
  2059. }
  2060. },
  2061. handleOrderPopup() {
  2062. this.helpOrderShow = false;
  2063. },
  2064. handleHasPopup() {
  2065. this.hasOrderShow = false;
  2066. },
  2067. orderMeeting() {
  2068. var _this = this;
  2069. var date = getNowDate();
  2070. var startOrderTimeStr =
  2071. date +
  2072. ' ' +
  2073. getTowNum(this.startOrderTime.getHours()) +
  2074. ':' +
  2075. getTowNum(this.startOrderTime.getMinutes()) +
  2076. ':00';
  2077. var endOrderTimeStr =
  2078. date +
  2079. ' ' +
  2080. getTowNum(this.endOrderTime.getHours()) +
  2081. ':' +
  2082. getTowNum(this.endOrderTime.getMinutes()) +
  2083. ':00';
  2084. let params = {
  2085. startTime: startOrderTimeStr,
  2086. endTime: endOrderTimeStr
  2087. };
  2088. console.log('startOrderTimeStr:---------::', startOrderTimeStr);
  2089. console.log('endOrderTimeStr::--------:', endOrderTimeStr);
  2090. return reserveMeetingroom(this.filtermeeting.meeting.id, params).then(
  2091. res => {
  2092. // 进行跳转
  2093. if (res.code == 1) {
  2094. _this.helpOrderShow = false;
  2095. _this.getAlllMeeting();
  2096. }
  2097. },
  2098. res => {
  2099. // 预定失败的时候
  2100. if (res.code == -1) {
  2101. wx.showToast({
  2102. content: res.data,
  2103. duration: 2000
  2104. });
  2105. }
  2106. }
  2107. );
  2108. },
  2109. // 取得所有的会议室
  2110. getAlllMeeting() {
  2111. var _this = this;
  2112. return getMeetingList().then(function(res) {
  2113. // console.log('getMeetingList1111', res) ;
  2114. var allmeeting = [];
  2115. var resdata = res.data;
  2116. for (var key in resdata) {
  2117. var list = (resdata[key] && resdata[key].list) || [];
  2118. allmeeting = allmeeting.concat(list);
  2119. }
  2120. // 找到符合条件的会议室 同一个名字
  2121. var filtermeetingArr = allmeeting.filter(function(item) {
  2122. return item.meeting.name === _this.officeData.localName;
  2123. });
  2124. _this.filtermeeting = filtermeetingArr[0] || {};
  2125. });
  2126. },
  2127. // 释放预约
  2128. async releaseMeeting(name) {
  2129. var _this = this;
  2130. var startTimeArr = [];
  2131. var nowTimeNum = new Date().getTime();
  2132. await this.getAlllMeeting();
  2133. var meetingBooking = _this.filtermeeting.meetingBooking || [];
  2134. // console.log('meetingBooking22', meetingBooking) ;
  2135. var nowBooking = null;
  2136. for (var i = 0; i < meetingBooking.length; i++) {
  2137. var booking = meetingBooking[i];
  2138. var startTimeNum = new Date(
  2139. booking.startTime.replace(/-/g, '/')
  2140. ).getTime();
  2141. var endTimeNum = new Date(booking.endTime.replace(/-/g, '/')).getTime();
  2142. if (nowTimeNum >= startTimeNum && nowTimeNum <= endTimeNum) {
  2143. console.log('在预约的时间段');
  2144. nowBooking = booking;
  2145. break;
  2146. }
  2147. startTimeArr.push(startTimeNum);
  2148. }
  2149. this.nowBooking = nowBooking;
  2150. if (nowBooking && name === '散会') {
  2151. // 如果已经预约
  2152. console.log('nowBooking', nowBooking);
  2153. endMeetingReserve(nowBooking.id).then(function(res) {
  2154. // 结束预约
  2155. console.log('endMeetingReserve', res);
  2156. });
  2157. }
  2158. },
  2159. // 判断是否被预约
  2160. judgeHasOrder() {
  2161. var _this = this;
  2162. var startTimeArr = [];
  2163. var nowTimeNum = new Date().getTime();
  2164. var nowCopy = new Date();
  2165. var meetingBooking = _this.filtermeeting.meetingBooking || [];
  2166. var hasOrder = false;
  2167. for (var i = 0; i < meetingBooking.length; i++) {
  2168. var booking = meetingBooking[i];
  2169. var startTimeNum = new Date(
  2170. booking.startTime.replace(/-/g, '/')
  2171. ).getTime();
  2172. var endTimeNum = new Date(booking.endTime.replace(/-/g, '/')).getTime();
  2173. if (nowTimeNum >= startTimeNum && nowTimeNum <= endTimeNum) {
  2174. // console.log('在预约的时间段');
  2175. hasOrder = true;
  2176. break;
  2177. }
  2178. startTimeArr.push(startTimeNum);
  2179. }
  2180. if (hasOrder) {
  2181. // 如果已经预约
  2182. } else {
  2183. startTimeArr.sort(function(a, b) {
  2184. return a - b;
  2185. });
  2186. // 这是距离最近的 预约时间
  2187. var alreadyStartTimeNum = null;
  2188. for (var j = 0; j < startTimeArr.length; i++) {
  2189. if (startTimeArr[j] > nowTimeNum) {
  2190. alreadyStartTimeNum = startTimeArr[j];
  2191. break;
  2192. }
  2193. }
  2194. // console.log('______alreadyStartTimeNum', alreadyStartTimeNum) ;
  2195. var getMinutesV = nowCopy.getMinutes();
  2196. var setMinuteV = 0;
  2197. if (getMinutesV >= 30) {
  2198. setMinuteV = 30;
  2199. }
  2200. // 设置开始时间
  2201. nowCopy.setMinutes(setMinuteV);
  2202. // 预约开始时间
  2203. _this.startOrderTime = new Date(nowCopy.getTime());
  2204. var endOrderTime = null;
  2205. if (alreadyStartTimeNum === null) {
  2206. // 没有预约时段,帮忙约一个半小时
  2207. nowCopy.setMinutes(setMinuteV + 90);
  2208. endOrderTime = new Date(nowCopy.getTime());
  2209. _this.helpOrderShow = true;
  2210. _this.orderMeetTimeStr =
  2211. getTowNum(endOrderTime.getHours()) +
  2212. ':' +
  2213. getTowNum(endOrderTime.getMinutes());
  2214. } else {
  2215. var gapTime = (alreadyStartTimeNum - nowTimeNum) / 60000;
  2216. if (gapTime < 30) {
  2217. // 小于30分钟,不能帮忙预约
  2218. _this.hasOrderShow = true;
  2219. } else if (gapTime >= 30 && gapTime <= 90) {
  2220. // endOrderTime=alreadyStartTimeNum ;
  2221. // console.log('等于30分钟,帮忙约半个小时');
  2222. // } else if (gapTime <= 60) {
  2223. // endOrderTime=alreadyStartTimeNum ;
  2224. // console.log('小于等于60分钟,帮忙约一个小时');
  2225. // if (gapTime <= 90)
  2226. endOrderTime = new Date(alreadyStartTimeNum);
  2227. // 帮忙约半个小时 1个小时 一个半小时
  2228. _this.helpOrderShow = true;
  2229. _this.orderMeetTimeStr =
  2230. getTowNum(endOrderTime.getHours()) +
  2231. ':' +
  2232. getTowNum(endOrderTime.getMinutes());
  2233. } else {
  2234. nowCopy.setMinutes(setMinuteV + 90);
  2235. endOrderTime = new Date(nowCopy.getTime());
  2236. // console.log('大于90分钟', nowCopy) ;
  2237. _this.helpOrderShow = true;
  2238. _this.orderMeetTimeStr =
  2239. getTowNum(endOrderTime.getHours()) +
  2240. ':' +
  2241. getTowNum(endOrderTime.getMinutes());
  2242. }
  2243. }
  2244. _this.endOrderTime = endOrderTime;
  2245. }
  2246. },
  2247. hideScene() {
  2248. this.sceneShow = false;
  2249. },
  2250. // 调出场景-浮层 切换场景
  2251. handleScene(mitem, idx) {
  2252. if (!checkSpaceControl(this.isControl)) return;
  2253. // this.judgeHasOrder() ;
  2254. isWithinLocation()
  2255. .then(() => {
  2256. var name = mitem.name;
  2257. if (this.helpOrderShow || this.hasOrderShow) return;
  2258. this.visible = false; // 关闭 切换场景
  2259. if (!this.visible) {
  2260. this.sceneShow = !this.sceneShow; // 场景详细信息
  2261. }
  2262. if (this.options.roomType == '个人') {
  2263. wx.uma.trackEvent(`officeHome_personscene_${mitem.code}`, {
  2264. key: '环境调节-个人场景弹窗'
  2265. });
  2266. } else if (this.options.roomType == '会议室') {
  2267. wx.uma.trackEvent(`officeHome_meetingscene_${mitem.code}`, {
  2268. key: '环境调节-会议室场景弹窗'
  2269. });
  2270. }
  2271. this.popList.forEach((item, idx) => {
  2272. if (name === item.name) {
  2273. this.sceneDetail = JSON.parse(JSON.stringify(item));
  2274. this.sceneDetail.textObj = [];
  2275. // 场景切换的对话框动效
  2276. item.textObj.forEach((element, idx) => {
  2277. setTimeout(() => {
  2278. this.sceneDetail.textObj.push(element);
  2279. }, 150 * (idx + 1));
  2280. });
  2281. }
  2282. });
  2283. if (!this.visit) {
  2284. // this.releaseMeeting(name) ;
  2285. }
  2286. // 放在这个位置 是为了 切换场景时直接改变场景 不等待后台
  2287. this.headScene = this.sceneDetail.name;
  2288. this.vanPopupIndex = this.sceneDetail.code;
  2289. this.switchoverScene(this.sceneDetail.code).then(res => {
  2290. if (res.result === 'success') {
  2291. // this.headScene = this.sceneDetail.name
  2292. // this.vanPopupIndex = this.sceneDetail.code
  2293. }
  2294. });
  2295. })
  2296. .catch(() => {});
  2297. console.log('handleScene this.popList', this.popList);
  2298. },
  2299. // 返回 首页
  2300. goPre() {
  2301. if (this.routeParams.q) {
  2302. wx.redirectTo({ url: '/pages/homev2' });
  2303. } else {
  2304. wx.navigateBack();
  2305. }
  2306. },
  2307. setTopBarHeight(height) {
  2308. this.topBarHeight = height;
  2309. },
  2310. touchstart: function(e) {
  2311. var pageY = e.touches[0].pageY;
  2312. var _this = this;
  2313. this.startY = pageY;
  2314. const query = wx.createSelectorQuery();
  2315. // query.selectViewport().scrollOffset() ;//这是page
  2316. // query.select('#scroll-view').boundingClientRect();
  2317. query.select('#scroll-view').scrollOffset();
  2318. query.exec(res => {
  2319. _this.nowScrollY = res[0].scrollTop;
  2320. if (
  2321. (_this.nowScrollY == 0 && _this.transY == 0) ||
  2322. (_this.nowScrollY == 0 && _this.transY == _this.transYCopy)
  2323. ) {
  2324. // 当最顶端 最低端时 才可以滑动
  2325. _this.movesign = true;
  2326. } else {
  2327. _this.movesign = false;
  2328. }
  2329. // console.log('touchstart', this.nowScrollY, this.realScrollTop, this.transY) ;
  2330. });
  2331. },
  2332. touchmove: function(e) {
  2333. if (!this.movesign) return;
  2334. var _this = this;
  2335. // console.log('touchmove', this.nowScrollY, this.realScrollTop, this.transY) ;
  2336. var touch = e.touches[0];
  2337. var pageY = Number(touch.pageY); // 页面触点Y坐标
  2338. moveY = pageY - this.startY;
  2339. this.startY = pageY;
  2340. if (this.nowScrollY > 0 || this.realScrollTop > 0) {
  2341. // 如果是transY为0的情况 发生屏幕滚动 不改变transY的值
  2342. this.transY = 0;
  2343. return;
  2344. }
  2345. var transY = this.transY + moveY;
  2346. if (transY < 0) {
  2347. // transY只能是正的
  2348. transY = 0;
  2349. }
  2350. if (transY > this.transYCopy) {
  2351. transY = this.transYCopy;
  2352. }
  2353. this.transY = transY;
  2354. },
  2355. touchend: function(e) {
  2356. // 挪动到一定区域 则可以自己到固定位置
  2357. var _this = this;
  2358. const query = wx.createSelectorQuery();
  2359. query.select('#scroll-view').scrollOffset();
  2360. query.exec(res => {
  2361. // console.log('touchend', res) ;
  2362. _this.realScrollTop = res[0].scrollTop;
  2363. _this.nowScrollY = res[0].scrollTop;
  2364. // console.log('touchend', this.nowScrollY, this.realScrollTop, this.transY) ;
  2365. if (this.realScrollTop > 0) {
  2366. // 如果是transY为0的情况 手指上移动 也不改变transY的值
  2367. this.transY = 0;
  2368. return;
  2369. }
  2370. if (this.transY < 0) {
  2371. this.transY = 0;
  2372. }
  2373. if (this.transY >= this.transYCopy) {
  2374. this.transY = this.transYCopy;
  2375. }
  2376. if (moveY > 0) {
  2377. // 手指下滑
  2378. if (this.transY <= 60) {
  2379. this.transY = 0;
  2380. } else {
  2381. wx.uma.trackEvent('officeHome_header_move', {
  2382. key: '环境调节-空间照片-下滑动'
  2383. });
  2384. this.transY = this.transYCopy;
  2385. }
  2386. // console.log('下滑下滑下滑下滑xia', this.nowScrollY, this.transY) ;
  2387. } else {
  2388. if (this.transY >= this.transYCopy - 60) {
  2389. this.transY = this.transYCopy;
  2390. } else {
  2391. wx.uma.trackEvent('officeHome_header_moveup', {
  2392. key: '环境调节-空间照片-上滑动'
  2393. });
  2394. this.transY = 0;
  2395. }
  2396. // console.log('上滑上滑上滑', moveY) ;
  2397. }
  2398. this.movesign = false;
  2399. });
  2400. }
  2401. }
  2402. });
  2403. </script>
  2404. <style lang="less">
  2405. page {
  2406. height: 100%;
  2407. background-color: #f7f8fa;
  2408. }
  2409. .map-wrap {
  2410. position: absolute;
  2411. top: 0;
  2412. left: 0;
  2413. width: 100%;
  2414. bottom: 0;
  2415. z-index: 1;
  2416. }
  2417. .pageBottom {
  2418. display: flex;
  2419. align-items: flex-end;
  2420. height: 1000rpx;
  2421. .log-text {
  2422. display: block;
  2423. margin: 0 auto;
  2424. width: 176rpx;
  2425. height: 40rpx;
  2426. padding: 98rpx 0 80rpx;
  2427. }
  2428. }
  2429. /deep/ .van-transition {
  2430. background: red;
  2431. }
  2432. .navFixed {
  2433. position: fixed;
  2434. top: 104rpx;
  2435. left: 0;
  2436. right: 0;
  2437. background: #ffffff;
  2438. }
  2439. .bg-img {
  2440. width: 100%;
  2441. position: absolute;
  2442. top: 0;
  2443. left: 0;
  2444. background: #f7f8fa;
  2445. }
  2446. .roomImgWrap {
  2447. position: absolute;
  2448. left: 0;
  2449. right: 0;
  2450. top: -185px;
  2451. border-top-left-radius: 40rpx;
  2452. border-top-right-radius: 40rpx;
  2453. width: 662rpx;
  2454. height: 185px;
  2455. margin: 0 auto;
  2456. background: #fff;
  2457. padding: 5px 5px 0;
  2458. box-sizing: border-box;
  2459. overflow: hidden;
  2460. .spaceImg {
  2461. width: 32px;
  2462. height: 32px;
  2463. position: absolute;
  2464. top: 14px;
  2465. right: 14px;
  2466. .spimg {
  2467. width: 100%;
  2468. height: 100%;
  2469. }
  2470. }
  2471. .room-img {
  2472. border-top-left-radius: 40rpx;
  2473. border-top-right-radius: 40rpx;
  2474. width: 100%;
  2475. height: 100%;
  2476. }
  2477. }
  2478. .opacityTrans {
  2479. opacity: 0;
  2480. }
  2481. .office-header {
  2482. // display: flex ;
  2483. // justify-content: center ;
  2484. position: absolute;
  2485. z-index: 1;
  2486. background-color: rgba(255, 255, 255, 0.596637);
  2487. width: 42px;
  2488. height: 32px;
  2489. border-radius: 32px;
  2490. margin-left: 10px;
  2491. }
  2492. .office-title {
  2493. position: absolute;
  2494. left: 52px;
  2495. right: 95px;
  2496. bottom: 0;
  2497. padding-left: 18px;
  2498. box-sizing: border-box;
  2499. z-index: 1;
  2500. display: flex;
  2501. // justify-content: center ;
  2502. // align-items: center ;
  2503. line-height: 1;
  2504. font-family: PingFang SC;
  2505. color: #e3e3e3;
  2506. font-size: 12px;
  2507. .weather-img {
  2508. width: 48rpx;
  2509. height: 48rpx;
  2510. margin-right: 10px;
  2511. }
  2512. .weather-text {
  2513. .first-line {
  2514. font-size: 12px;
  2515. margin-bottom: 4px;
  2516. font-weight: 600;
  2517. font-family: Montserrat;
  2518. }
  2519. .second-line {
  2520. font-size: 11px;
  2521. .weatherText {
  2522. display: inline-block;
  2523. min-width: 36px;
  2524. }
  2525. }
  2526. }
  2527. .text {
  2528. margin-right: 7px;
  2529. }
  2530. }
  2531. .my-class:after {
  2532. content: '.';
  2533. display: block;
  2534. height: 0;
  2535. clear: both;
  2536. visibility: hidden;
  2537. }
  2538. .g-fl {
  2539. display: flex;
  2540. justify-content: center;
  2541. align-items: center;
  2542. }
  2543. .g-fl-c {
  2544. flex-direction: column;
  2545. }
  2546. .overflow-wrap {
  2547. width: 100%;
  2548. height: 100%;
  2549. scroll-view {
  2550. position: relative;
  2551. width: 100%;
  2552. height: 100%;
  2553. z-index: 2;
  2554. }
  2555. }
  2556. .overflowclass {
  2557. height: 100%;
  2558. overflow: hidden;
  2559. }
  2560. .move-wrap {
  2561. width: 100%;
  2562. background: #f7f8fa;
  2563. position: relative;
  2564. top: 0;
  2565. left: 0;
  2566. z-index: 2;
  2567. }
  2568. .maproom-detail {
  2569. width: 750rpx;
  2570. margin-left: -45rpx;
  2571. padding: 10rpx 45rpx 0;
  2572. height: 125px;
  2573. position: relative;
  2574. background: #fff;
  2575. border-bottom: 10rpx solid #ffffff;
  2576. box-shadow: 0rpx 0rpx 4rpx rgba(0, 0, 0, 0.07),
  2577. 0px 8rpx 20rpx rgba(0, 0, 0, 0.15);
  2578. box-sizing: border-box;
  2579. border-top-left-radius: 50rpx;
  2580. border-top-right-radius: 50rpx;
  2581. .room-bar {
  2582. width: 64rpx;
  2583. height: 8rpx;
  2584. background: rgba(2, 2, 82, 0.12);
  2585. border-radius: 4rpx;
  2586. margin: 0 auto;
  2587. }
  2588. .room-bg {
  2589. position: relative;
  2590. font-family: PingFang SC;
  2591. font-weight: 600;
  2592. }
  2593. .room-name {
  2594. // position: absolute ;
  2595. width: 100%;
  2596. box-sizing: border-box;
  2597. // padding: 0 30rpx ;
  2598. // height: 100rpx ;
  2599. // line-height: 100rpx ;
  2600. padding: 0 30rpx 10rpx;
  2601. height: 80rpx;
  2602. justify-content: flex-start;
  2603. .room-arrow {
  2604. display: flex;
  2605. .room-scene {
  2606. }
  2607. }
  2608. .open-sence {
  2609. display: flex;
  2610. .btn-off-work {
  2611. position: absolute;
  2612. bottom: 122rpx;
  2613. right: 32rpx;
  2614. width: 128rpx;
  2615. height: 40rpx;
  2616. background: #000000;
  2617. border-radius: 4rpx;
  2618. font-size: 24rpx;
  2619. font-weight: 400;
  2620. line-height: 40rpx;
  2621. text-align: center;
  2622. color: #ffffff;
  2623. font-family: PingFang SC;
  2624. }
  2625. .btn-time {
  2626. font-weight: 600;
  2627. font-size: 20rpx;
  2628. line-height: 28rpx;
  2629. .btn-time-number {
  2630. font-family: Montserrat;
  2631. font-size: 30rpx;
  2632. font-weight: 500;
  2633. line-height: 36rpx;
  2634. padding: 0 8rpx;
  2635. }
  2636. }
  2637. }
  2638. }
  2639. .office-room-info {
  2640. position: relative;
  2641. }
  2642. .room-envlist {
  2643. justify-content: space-around;
  2644. .env-name {
  2645. font-family: Montserrat;
  2646. font-weight: 600;
  2647. font-size: 24rpx;
  2648. line-height: 30rpx;
  2649. color: #c4c4c4;
  2650. }
  2651. .env-num {
  2652. font-family: Montserrat;
  2653. font-size: 48rpx;
  2654. line-height: 58rpx;
  2655. text-align: center;
  2656. color: #1b144e;
  2657. }
  2658. .env-level {
  2659. font-family: PingFang SC;
  2660. font-size: 20rpx;
  2661. line-height: 28rpx;
  2662. color: #bab8c7;
  2663. }
  2664. }
  2665. }
  2666. .office-container {
  2667. width: 662rpx;
  2668. margin: 0 auto;
  2669. }
  2670. .room-detail {
  2671. position: relative;
  2672. width: 100%;
  2673. // height: 450rpx ;
  2674. // background: linear-gradient(to bottom, transparent 50%, #fff 50%);
  2675. background: #ffffff;
  2676. margin-bottom: 15px;
  2677. box-sizing: border-box;
  2678. box-shadow: 0rpx 0rpx 4rpx rgba(0, 0, 0, 0.07),
  2679. 0px 8rpx 20rpx rgba(0, 0, 0, 0.05);
  2680. border-bottom-left-radius: 50rpx;
  2681. border-bottom-right-radius: 50rpx;
  2682. .sceneBox {
  2683. height: 92px;
  2684. box-sizing: border-box;
  2685. border-top: 1px solid rgba(196, 196, 196, 0.4);
  2686. display: flex;
  2687. justify-content: space-around;
  2688. align-items: center;
  2689. padding: 0 40rpx;
  2690. .eachScene {
  2691. width: 180rpx;
  2692. height: 116rpx;
  2693. background: rgba(159, 183, 205, 0.15);
  2694. border-radius: 16px;
  2695. display: flex;
  2696. justify-content: center;
  2697. align-items: center;
  2698. flex-shrink: 0;
  2699. &.selScene {
  2700. background: #ffe723;
  2701. }
  2702. &.firstScene {
  2703. width: auto;
  2704. margin-right: 18rpx;
  2705. flex-grow: 1;
  2706. }
  2707. image {
  2708. width: 40rpx;
  2709. height: 40rpx;
  2710. margin-right: 18rpx;
  2711. }
  2712. }
  2713. }
  2714. .room-bar {
  2715. width: 64rpx;
  2716. height: 8rpx;
  2717. background: rgb(192, 192, 192);
  2718. border-radius: 4rpx;
  2719. margin: 0 auto;
  2720. }
  2721. .room-bg {
  2722. position: relative;
  2723. // height: 100rpx ;
  2724. // margin: 0 0 22rpx 0 ;
  2725. // padding-bottom: 22rpx ;
  2726. padding-top: 10rpx;
  2727. font-family: PingFang SC;
  2728. font-weight: 600;
  2729. }
  2730. .room-name {
  2731. // position: absolute ;
  2732. width: 100%;
  2733. box-sizing: border-box;
  2734. padding: 0 30rpx 10rpx;
  2735. // bottom: 0 ;
  2736. height: 80rpx;
  2737. justify-content: flex-start;
  2738. .room-arrow {
  2739. display: flex;
  2740. .room-scene {
  2741. }
  2742. }
  2743. .open-sence {
  2744. display: flex;
  2745. .btn-off-work {
  2746. position: absolute;
  2747. bottom: 122rpx;
  2748. right: 32rpx;
  2749. width: 128rpx;
  2750. height: 40rpx;
  2751. background: #000000;
  2752. border-radius: 4rpx;
  2753. font-size: 24rpx;
  2754. font-weight: 400;
  2755. line-height: 40rpx;
  2756. text-align: center;
  2757. color: #ffffff;
  2758. font-family: PingFang SC;
  2759. }
  2760. .btn-time {
  2761. font-weight: 600;
  2762. font-size: 20rpx;
  2763. line-height: 28rpx;
  2764. .btn-time-number {
  2765. font-family: Montserrat;
  2766. font-size: 30rpx;
  2767. font-weight: 500;
  2768. line-height: 36rpx;
  2769. padding: 0 8rpx;
  2770. }
  2771. }
  2772. }
  2773. }
  2774. .office-room-info {
  2775. position: relative;
  2776. // background: #fff;
  2777. }
  2778. .room-envlist {
  2779. justify-content: space-around;
  2780. padding-bottom: 32rpx;
  2781. .env-name {
  2782. font-family: Montserrat;
  2783. font-weight: 600;
  2784. font-size: 24rpx;
  2785. line-height: 30rpx;
  2786. color: #c4c4c4;
  2787. }
  2788. .env-num {
  2789. font-family: Montserrat;
  2790. font-size: 48rpx;
  2791. line-height: 58rpx;
  2792. text-align: center;
  2793. color: #1b144e;
  2794. }
  2795. .env-level {
  2796. font-family: PingFang SC;
  2797. font-size: 20rpx;
  2798. line-height: 28rpx;
  2799. color: #bab8c7;
  2800. }
  2801. }
  2802. .room-notice {
  2803. //
  2804. // margin-top: 28rpx ;
  2805. // font-size: 24rpx ;
  2806. // line-height: 24rpx ;
  2807. // color: #e3e3e3;
  2808. // text-align: center ;
  2809. }
  2810. .room-mark {
  2811. position: absolute;
  2812. bottom: -18rpx;
  2813. right: 34rpx;
  2814. .room-mark-img {
  2815. width: 28rpx;
  2816. height: 28rpx;
  2817. }
  2818. }
  2819. }
  2820. .nav-shadow {
  2821. // box-shadow: 0px 8px 10px rgba(0, 0, 0, 0.1) ;
  2822. box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(0, 0, 0, 0.1);
  2823. }
  2824. // .eq-nav {
  2825. // width: 100% ;
  2826. // padding: 36rpx 0 ;
  2827. // // position: relative ;
  2828. // justify-content: space-around ;
  2829. // .nav-main {
  2830. // font-family: PingFang SC ;
  2831. // color: #bab8c7;
  2832. // font-size: 24rpx ;
  2833. // line-height: 28rpx ;
  2834. // }
  2835. // .nav-main-active {
  2836. // background: #f0da21;
  2837. // }
  2838. // .nav-item {
  2839. // width: 88rpx ;
  2840. // height: 88rpx ;
  2841. // background: #ffffff;
  2842. // border: 1px solid #e7e7e9;
  2843. // border-radius: 44rpx ;
  2844. // box-sizing: border-box ;
  2845. // margin-bottom: 14rpx ;
  2846. // image {
  2847. // width: 44rpx ;
  2848. // height: 44rpx ;
  2849. // }
  2850. // }
  2851. // .navChecked {
  2852. // color: #1b144e;
  2853. // font-weight: 600 ;
  2854. // }
  2855. // .nav-item-active {
  2856. // background: #f0da21;
  2857. // border: 0 ;
  2858. // }
  2859. // }
  2860. .navBox {
  2861. position: fixed;
  2862. bottom: 30px;
  2863. left: 20rpx;
  2864. right: 20rpx;
  2865. z-index: 2;
  2866. height: 96rpx;
  2867. box-sizing: border-box;
  2868. padding: 0 40rpx 0 20rpx;
  2869. border-radius: 96rpx;
  2870. font-size: 28rpx;
  2871. background: #ffffff;
  2872. box-shadow: 0px 0px 2rpx rgba(0, 0, 0, 0.15),
  2873. 0px 8rpx 6rpx rgba(0, 0, 0, 0.07);
  2874. display: flex;
  2875. justify-content: space-between;
  2876. align-items: center;
  2877. .eq-nav {
  2878. flex: 1;
  2879. box-sizing: border-box;
  2880. padding-right: 120rpx;
  2881. display: flex;
  2882. justify-content: space-around;
  2883. .nav-item {
  2884. width: 68rpx;
  2885. .nav-img {
  2886. width: 68rpx;
  2887. height: 68rpx;
  2888. border-radius: 68rpx;
  2889. display: flex;
  2890. justify-content: center;
  2891. align-items: center;
  2892. image {
  2893. width: 40rpx;
  2894. height: 40rpx;
  2895. }
  2896. }
  2897. .nav-text {
  2898. display: none;
  2899. }
  2900. }
  2901. .nav-item-active {
  2902. .nav-img {
  2903. background: #f0da21;
  2904. }
  2905. .nav-text {
  2906. }
  2907. }
  2908. }
  2909. .map-nav {
  2910. width: 40rpx;
  2911. image {
  2912. width: 40rpx;
  2913. height: 40rpx;
  2914. }
  2915. }
  2916. }
  2917. .top-nav {
  2918. position: fixed;
  2919. top: 72px;
  2920. z-index: 4;
  2921. background: #f7f8fa;
  2922. padding: 6rpx 45rpx 0;
  2923. // margin-left: -45rpx ;
  2924. padding-bottom: 10rpx;
  2925. box-sizing: border-box;
  2926. }
  2927. // .room-map {
  2928. // margin-left: 20rpx ;
  2929. // position: fixed ;
  2930. // top: 90% ;
  2931. // left: 0 ;
  2932. // z-index: 2 ;
  2933. // height: 100rpx ;
  2934. // width: 250rpx ;
  2935. // text-align: center ;
  2936. // line-height: 100rpx ;
  2937. // border-radius: 60rpx ;
  2938. // font-size: 28rpx ;
  2939. // background: #ffffff;
  2940. // box-shadow: 0px 0px 2rpx rgba(0, 0, 0, 0.15),
  2941. // 0px 8rpx 6rpx rgba(0, 0, 0, 0.07) ;
  2942. // display: flex ;
  2943. // justify-content: center ;
  2944. // align-items: center ;
  2945. // }
  2946. .popup-box {
  2947. padding: 40rpx 46rpx;
  2948. .popup-container {
  2949. display: flex;
  2950. padding-top: 30rpx;
  2951. .popup-item-bg {
  2952. background: #f0da21;
  2953. }
  2954. .popup-item {
  2955. margin-right: 20rpx;
  2956. display: flex;
  2957. flex-direction: column;
  2958. align-items: center;
  2959. justify-content: center;
  2960. border-radius: 32rpx;
  2961. // background: yellow ;
  2962. color: #656872;
  2963. width: 148rpx;
  2964. height: 176rpx;
  2965. image {
  2966. width: 38rpx;
  2967. height: 38rpx;
  2968. }
  2969. label {
  2970. margin-top: 28rpx;
  2971. }
  2972. }
  2973. }
  2974. .time-img {
  2975. }
  2976. }
  2977. .hasOrderPopup {
  2978. width: 460rpx;
  2979. height: 300rpx;
  2980. .hasOrderPopup-head {
  2981. height: 200rpx;
  2982. display: flex;
  2983. justify-content: center;
  2984. align-items: center;
  2985. font-weight: 600;
  2986. }
  2987. .hasOrderPopup-cent {
  2988. height: 100rpx;
  2989. display: flex;
  2990. justify-content: center;
  2991. }
  2992. }
  2993. .orderMeetPopup {
  2994. width: 460rpx;
  2995. height: 560rpx;
  2996. background: linear-gradient(0deg, #fff 720rpx, #f3f3f3 140rpx);
  2997. .orderMeetPopup-head {
  2998. height: 220rpx;
  2999. display: flex;
  3000. justify-content: center;
  3001. align-items: center;
  3002. font-weight: 600;
  3003. }
  3004. .orderMeetPopup-cent {
  3005. height: 210rpx;
  3006. display: flex;
  3007. justify-content: center;
  3008. color: #9d9d9d;
  3009. }
  3010. .orderMeetPopup-bottom {
  3011. display: flex;
  3012. justify-content: center;
  3013. align-items: center;
  3014. .no {
  3015. color: #9d9d9d;
  3016. margin-right: 40rpx;
  3017. }
  3018. .sure {
  3019. }
  3020. }
  3021. }
  3022. .scene-popup {
  3023. width: 520rpx;
  3024. height: 860rpx;
  3025. background: linear-gradient(0deg, #fff 720rpx, #f3f3f3 140rpx);
  3026. &.air-popup {
  3027. width: 560rpx;
  3028. height: 720rpx;
  3029. background: linear-gradient(
  3030. 0deg,
  3031. #fff 580rpx,
  3032. rgba(243, 243, 243, 1) 140rpx
  3033. );
  3034. }
  3035. .scene-popup-head {
  3036. padding-top: 30rpx;
  3037. display: flex;
  3038. flex-direction: column;
  3039. justify-content: center;
  3040. align-items: center;
  3041. font-size: 38rpx;
  3042. .head-imgbg {
  3043. display: flex;
  3044. justify-content: center;
  3045. align-items: center;
  3046. width: 140rpx;
  3047. height: 140rpx;
  3048. background: #f0da21;
  3049. border-radius: 50%;
  3050. margin-bottom: 30rpx;
  3051. &.grey {
  3052. background: rgba(196, 196, 196, 1);
  3053. }
  3054. &.blue {
  3055. background: rgba(94, 139, 207, 1);
  3056. }
  3057. &.red {
  3058. background: rgba(229, 87, 79, 1);
  3059. }
  3060. .air-head-imgbox {
  3061. width: 72rpx;
  3062. height: 72rpx;
  3063. image {
  3064. width: 100%;
  3065. height: 100%;
  3066. }
  3067. }
  3068. .head-imgbox {
  3069. width: 40rpx;
  3070. height: 40rpx;
  3071. image {
  3072. width: 100%;
  3073. height: 100%;
  3074. }
  3075. }
  3076. }
  3077. }
  3078. .scene-popup-body {
  3079. display: flex;
  3080. flex-direction: column;
  3081. margin-left: 72rpx;
  3082. margin-top: 50rpx;
  3083. margin-right: 20rpx;
  3084. &.air-popup-body {
  3085. flex-direction: row;
  3086. margin: 0;
  3087. justify-content: center;
  3088. }
  3089. .body-item {
  3090. padding-top: 20rpx;
  3091. font-style: normal;
  3092. font-weight: 500;
  3093. font-size: 30rpx;
  3094. line-height: 42rpx;
  3095. color: #c4c4c4;
  3096. .text-status {
  3097. width: 16rpx;
  3098. height: 16rpx;
  3099. background: #f0da21;
  3100. border-radius: 100%;
  3101. display: inline-block;
  3102. margin-right: 16rpx;
  3103. &.grey {
  3104. background: #f3f3f3;
  3105. }
  3106. }
  3107. &.air-body-item {
  3108. width: 366rpx;
  3109. .air-body-item-num {
  3110. display: flex;
  3111. justify-content: center;
  3112. }
  3113. }
  3114. .air-temp-num {
  3115. font-family: Montserrat;
  3116. font-size: 24px;
  3117. font-weight: 400;
  3118. line-height: 29px;
  3119. color: rgba(20, 0, 80, 1);
  3120. &.arrow-cooling {
  3121. color: #5e8bcf;
  3122. margin: 0 30rpx;
  3123. margin-bottom: 70rpx;
  3124. }
  3125. &.arrow-warn {
  3126. color: rgba(229, 87, 79, 1);
  3127. margin: 0 30rpx;
  3128. margin-bottom: 70rpx;
  3129. }
  3130. }
  3131. .air-temp-load {
  3132. font-size: 26px;
  3133. display: flex;
  3134. justify-content: center;
  3135. }
  3136. .air-notice {
  3137. text-align: center;
  3138. display: flex;
  3139. justify-content: center;
  3140. font-family: PingFang SC;
  3141. font-size: 15px;
  3142. font-weight: 400;
  3143. line-height: 21px;
  3144. color: rgba(77, 82, 98, 1);
  3145. }
  3146. }
  3147. .order-item {
  3148. font-style: normal;
  3149. font-weight: 500;
  3150. font-size: 32rpx;
  3151. line-height: 52rpx;
  3152. color: #c4c4c4;
  3153. .time-span {
  3154. color: #000000;
  3155. font-size: 38rpx;
  3156. }
  3157. }
  3158. }
  3159. }
  3160. .meet-popup {
  3161. height: 580rpx;
  3162. .scene-popup-body {
  3163. margin-left: 0rpx;
  3164. margin-right: 0rpx;
  3165. align-items: center;
  3166. }
  3167. .meet-title {
  3168. color: #c4c4c4;
  3169. .name {
  3170. color: #000000;
  3171. margin-left: 14rpx;
  3172. margin-right: 14rpx;
  3173. }
  3174. }
  3175. }
  3176. .allclose-popup {
  3177. height: auto;
  3178. padding-bottom: 60rpx;
  3179. .scene-popup-head {
  3180. // height: 340rpx ;
  3181. box-sizing: border-box;
  3182. background: linear-gradient(180deg, #f3f3f3 60px, #fff 60px);
  3183. padding-bottom: 80rpx;
  3184. }
  3185. .head-imgbg {
  3186. // margin-bottom: 40rpx ;
  3187. }
  3188. .head-title {
  3189. padding: 0 50rpx;
  3190. text-align: center;
  3191. }
  3192. .close-popup-body {
  3193. padding-left: 72rpx;
  3194. height: 80px;
  3195. box-sizing: border-box;
  3196. padding-right: 20rpx;
  3197. .close-item {
  3198. font-style: normal;
  3199. font-size: 28rpx;
  3200. color: #c4c4c4;
  3201. margin-bottom: 18rpx;
  3202. display: flex;
  3203. .close-pic {
  3204. width: 20px;
  3205. text-align: center;
  3206. }
  3207. .passIcon {
  3208. color: #07c160;
  3209. vertical-align: middle;
  3210. }
  3211. .pointer {
  3212. display: inline-block;
  3213. width: 8px;
  3214. height: 8px;
  3215. border-radius: 8px;
  3216. background: #f0da21;
  3217. }
  3218. }
  3219. .allclose-btns {
  3220. padding-top: 20rpx;
  3221. }
  3222. }
  3223. }
  3224. .order-popup {
  3225. height: 600rpx;
  3226. background: linear-gradient(0deg, #fff 480rpx, #f3f3f3 120rpx);
  3227. }
  3228. .btns {
  3229. display: flex;
  3230. position: absolute;
  3231. bottom: 40rpx;
  3232. left: 50%;
  3233. transform: translateX(-50%);
  3234. .btn {
  3235. width: 240rpx;
  3236. height: 80rpx;
  3237. line-height: 80rpx;
  3238. text-align: center;
  3239. font-size: 28rpx;
  3240. font-weight: 500;
  3241. color: #c4c4c4;
  3242. &.air_btn {
  3243. height: 100rpx;
  3244. width: 176rpx;
  3245. border-radius: 60rpx;
  3246. padding: 34rpx, 60rpx;
  3247. border: 1px solid rgba(196, 196, 196, 1);
  3248. line-height: 100rpx;
  3249. font-family: PingFang SC;
  3250. font-size: 28rpx;
  3251. font-weight: 400;
  3252. color: rgba(77, 82, 98, 1);
  3253. }
  3254. }
  3255. .btn_com {
  3256. border: 1px solid #c4c4c4;
  3257. border-radius: 60rpx;
  3258. }
  3259. }
  3260. .order-btns {
  3261. position: absolute;
  3262. bottom: 40rpx;
  3263. left: 0;
  3264. }
  3265. .popup-btns {
  3266. display: flex;
  3267. width: 100%;
  3268. justify-content: center;
  3269. .btnspan {
  3270. width: 170rpx;
  3271. height: 80rpx;
  3272. line-height: 80rpx;
  3273. text-align: center;
  3274. font-size: 28rpx;
  3275. font-weight: 500;
  3276. color: #c4c4c4;
  3277. box-sizing: border-box;
  3278. }
  3279. .btn_com {
  3280. border: 1px solid #c4c4c4;
  3281. border-radius: 60rpx;
  3282. }
  3283. .surespan {
  3284. margin-left: 26rpx;
  3285. background: #f0da21;
  3286. box-shadow: 0 8rpx 12rpx rgba(0, 0, 0, 0.07);
  3287. color: #000000;
  3288. border-radius: 60rpx;
  3289. }
  3290. }
  3291. </style>
  3292. <config>
  3293. {
  3294. "navigationStyle": "custom",
  3295. backgroundColor: '#f7f8fa',
  3296. usingComponents: {
  3297. "Curtain-Pop":'./Curtain/curtainPop.wpy',
  3298. "Floor-Pop":'./FloorHeating/floorPop.wpy',
  3299. "Floor-Heating":'./FloorHeating/floorHeating',
  3300. "curtain-card":"./Curtain/curtain-card",
  3301. 'has-person':'./components/has-person.wpy',
  3302. 'page-top-bar-custom': '~@/components/common/page-top-bar-custom',
  3303. "work-overtime":"./workOvertime",
  3304. "work-overtime-hand":"./workOvertime-hand",
  3305. "work-off":"./components/work-off",
  3306. "work-scene-hand":"./components/work-scene-hand",
  3307. "work-scene":"./components/work-scene",
  3308. "air-adjust":"./components/air-adjust",
  3309. "air-adjust-hand":"./components/air-adjust-hand",
  3310. "air-feedback":"./components/air-feedback",
  3311. "lamp-adjust":"./components/lamp-adjust",
  3312. "lamp-colour":"./components/lamp-colour",
  3313. "socket-card":"./components/socket-card",
  3314. "all-close":"./components/all-close",
  3315. "voice-adjust":"./components/voice-adjust",
  3316. "map-home":"../intelligentControl/home2",
  3317. "van-icon": "module:@vant/weapp/dist/icon",
  3318. "van-popup": "module:@vant/weapp/dist/popup"
  3319. },
  3320. componentPlaceholder: {
  3321. 'page-top-bar-custom': 'view'
  3322. }
  3323. }
  3324. </config>