index.vue 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379
  1. <template>
  2. <div
  3. class="main"
  4. :style="{
  5. backgroundImage:
  6. 'linear-gradient(0deg, rgba(69, 33, 0, 0.2), rgba(69, 33, 0, 0.2)), url(' +
  7. padBgImg +
  8. ')',
  9. 'background-repeat': 'no-repeat',
  10. }"
  11. >
  12. <div class="main-left">
  13. <div
  14. class="left-top"
  15. @touchstart="gtouchstart($event)"
  16. @touchmove="gtouchmove()"
  17. @touchend="showDeleteButton"
  18. >
  19. <div class="logo-box">
  20. <img class="logo-icon" v-if="logImg" :src="logImg" alt="" />
  21. <img
  22. class="logo-icon"
  23. v-else
  24. :src="parseImgUrl('ipdImages', 'shangeyun_logo.svg')"
  25. alt=""
  26. />
  27. </div>
  28. <div class="left-time">
  29. <span>{{ nowDate }} </span>
  30. <span>{{ nowWeek }}</span>
  31. </div>
  32. <div class="weather">
  33. <img
  34. v-show="outWeather.imgname"
  35. :src="outWeather.imgname"
  36. class="weather-icon"
  37. alt=""
  38. />
  39. <span
  40. >{{ outWeather.temperature ? outWeather.temperature : "--" }}℃</span
  41. >
  42. </div>
  43. <div class="weixiin" v-if="contantDetail" @click="showContact">
  44. <img :src="parseImgUrl('ipdImages', 'weixin.svg')" />
  45. <span> 联系客服</span>
  46. </div>
  47. </div>
  48. <div class="left-space">
  49. <div class="text">
  50. <div>
  51. {{ officeData.localName }}
  52. </div>
  53. <!-- <div
  54. v-if="
  55. officeData.isPassengerPass === true ||
  56. officeData.isPassengerPass === false
  57. "
  58. >
  59. <img
  60. :src="parseImgUrl('ipdImages', 'vector-active.svg')"
  61. v-if="officeData.isPassengerPass"
  62. />
  63. <img
  64. :src="parseImgUrl('ipdImages', 'vector.svg')"
  65. v-if="!officeData.isPassengerPass"
  66. />
  67. <span v-if="officeData.isPassengerPass">有人</span>
  68. <span v-if="!officeData.isPassengerPass">无人</span>
  69. </div> -->
  70. </div>
  71. <div class="space-info">
  72. <div class="space-temp">
  73. <img :src="parseImgUrl('ipdImages', 'template-icon.svg')" alt="" />
  74. <span class="temp-text">温度</span>
  75. <span class="temp-num"
  76. >{{ officeData.temperature ? officeData.temperature : "--"
  77. }}<sup>℃</sup></span
  78. >
  79. </div>
  80. </div>
  81. <div class="space-env">
  82. <div
  83. class="env-item"
  84. :style="[
  85. { background: item.bgColor ? item.bgColor : '' },
  86. { opacity: item.bgColor ? 0.8 : '' },
  87. { paddingLeft: index == 0 && item.bgColor ? '15px' : '' },
  88. ]"
  89. :class="[
  90. index == 1 ? 'env-color' : '',
  91. item.bgColor ? 'env-item-radius' : '',
  92. ]"
  93. :key="'env' + index"
  94. @click="handleDetail(item)"
  95. v-for="(item, index) in envlist"
  96. >
  97. <div>
  98. <img :src="parseImgUrl('ipdImages', item.img)" alt="" />
  99. <span>{{ item.name }}</span>
  100. </div>
  101. <div class="env-text">
  102. {{ item.num }} <sup>{{ item.unit }}</sup>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <div class="fotter" v-if="spaceData && spaceData.length > 1">
  108. <template v-for="(item, index) in spaceData">
  109. <div
  110. class="fotter-item"
  111. :class="item.active ? 'fotter-item-active' : ''"
  112. :key="index + 'nav'"
  113. v-if="index < 3"
  114. @click="changeSpace(item)"
  115. >
  116. <img
  117. v-if="item.active"
  118. :src="parseImgUrl('ipdImages', 'rectangle-active.svg')"
  119. />
  120. <img :src="parseImgUrl('ipdImages', 'rectangle1.svg')" v-else />
  121. <span>{{ item.spaceName }} </span>
  122. </div>
  123. </template>
  124. <div
  125. class="fotter-item-end"
  126. @click="moreSpace"
  127. v-if="spaceData && spaceData.length > 3"
  128. >
  129. <img :src="parseImgUrl('ipdImages', 'rectangle-fotter.svg')" />
  130. <span>…</span>
  131. </div>
  132. </div>
  133. </div>
  134. <div class="main-right">
  135. <!--加班start-->
  136. <div
  137. class="work-btn"
  138. v-if="
  139. (roomType === '开放' && isWork) ||
  140. (roomType === '会议室' && scenarioArr && scenarioArr.length)
  141. "
  142. >
  143. <!--自动控制的加班 start-->
  144. <work-config
  145. v-if="roomType === '开放' && isWork && controlMode !== 1"
  146. :scenarioArr="scenarioArr"
  147. :workkArr="workkArr"
  148. @closeWork="closeWork"
  149. @triggerWork="triggerWork"
  150. @setForceOverTimeFlag="setForceOverTimeFlag"
  151. ></work-config>
  152. <!--手动控制的加班 start-->
  153. <manual-config
  154. v-if="roomType === '开放' && isWork && controlMode === 1"
  155. :scenarioArr="scenarioArr"
  156. :workkArr="workkArr"
  157. @closeWork="closeWork"
  158. @triggerWork="triggerWork"
  159. @setForceOverTimeFlag="setForceOverTimeFlag"
  160. ></manual-config>
  161. <scenario-config
  162. v-if="roomType === '会议室' && scenarioArr && scenarioArr.length"
  163. :activeType="activeType"
  164. :scenarioArr="scenarioArr"
  165. :spaceId="spaceInfo.spaceId"
  166. :projectId="projectId"
  167. @setHeadScene="setHeadScene"
  168. ></scenario-config>
  169. </div>
  170. <!--加班end-->
  171. <!--空调手动控制 start-->
  172. <manual-index
  173. v-if="controlMode === 1"
  174. @triggerWork="triggerWork"
  175. :seviceEquipmentList="seviceEquipmentList"
  176. :forceOverTimeFlag="forceOverTimeFlag"
  177. @updateAirTemp="updateAirTemp"
  178. :hasAir="spaceExistenceDevice.airConditioner"
  179. :airVolumes="officeData.airVolumes"
  180. :temperature="officeData.temperature"
  181. :spaceId="spaceInfo.spaceId"
  182. :projectId="projectId"
  183. :userIsControl="userIsControl"
  184. >
  185. </manual-index>
  186. <!--空调手动控制 end-->
  187. <!--空调自动控制 start-->
  188. <Air
  189. v-if="
  190. controlMode != 1 &&
  191. (officeData.temperature || spaceExistenceDevice.airConditioner)
  192. "
  193. id="airId"
  194. key="airId"
  195. @triggerWork="triggerWork"
  196. :forceOverTimeFlag="forceOverTimeFlag"
  197. @updateAirTemp="updateAirTemp"
  198. :hasAir="spaceExistenceDevice.airConditioner"
  199. :airVolumes="officeData.airVolumes"
  200. :temperature="officeData.temperature"
  201. :spaceId="spaceInfo.spaceId"
  202. :projectId="projectId"
  203. :isACATVA="isACATVA"
  204. :userIsControl="userIsControl"
  205. />
  206. <!--空调自动控制 end-->
  207. <Light
  208. v-if="spaceExistenceDevice.light && spaceInfo.spaceId"
  209. :forceOverTimeFlag="forceOverTimeFlag"
  210. :controlMode="controlMode"
  211. :seviceEquipmentList="seviceEquipmentList"
  212. @triggerWork="triggerWork"
  213. @showLightColorCtrol="showLightColorCtrol"
  214. id="lightId"
  215. key="lightId"
  216. :userIsControl="userIsControl"
  217. :spaceId="spaceInfo.spaceId"
  218. :projectId="projectId"
  219. />
  220. <Curtain
  221. :spaceId="spaceInfo.spaceId"
  222. id="curtainId"
  223. key="curtainId"
  224. :userIsControl="userIsControl"
  225. v-if="spaceExistenceDevice.curtain"
  226. :projectId="projectId"
  227. />
  228. </div>
  229. <!--加班场景-->
  230. <van-popup
  231. v-model:show="isShowWork"
  232. position="right"
  233. class="popup-content"
  234. teleport="#app"
  235. >
  236. <work-overtime
  237. v-if="isShowWork && controlMode !== 1"
  238. :spaceInfo="spaceInfo"
  239. @closeWork="closeWork"
  240. :projectId="projectId"
  241. :workkArr="workkArr"
  242. ></work-overtime>
  243. <!--加班手动控制 start-->
  244. <manual-overtime
  245. v-if="isShowWork && controlMode === 1"
  246. :seviceEquipmentList="seviceEquipmentList"
  247. :enterType="enterType"
  248. :deviceItem="deviceItem"
  249. :spaceInfo="spaceInfo"
  250. @closeWork="closeWork"
  251. :projectId="projectId"
  252. :workkArr="workkArr"
  253. >
  254. </manual-overtime>
  255. </van-popup>
  256. <!--会议室场景-->
  257. <van-popup
  258. v-model:show="isShowMetting"
  259. position="right"
  260. :close-on-click-overlay="false"
  261. class="popup-content"
  262. teleport="#app"
  263. >
  264. <scenario-dailog
  265. :secenaroStatus="secenaroStatus"
  266. @closeDailog="closeDailog"
  267. >
  268. </scenario-dailog>
  269. </van-popup>
  270. <!--环境数据详情-->
  271. <van-popup
  272. v-model:show="isShowDetail"
  273. position="right"
  274. :close-on-click-overlay="true"
  275. class="popup-content"
  276. teleport="#app"
  277. >
  278. <detail :query="detailQuery" v-if="isShowDetail"></detail>
  279. </van-popup>
  280. <!--地图数据列表-->
  281. <van-popup
  282. v-model:show="isShowMap"
  283. class="map-popup"
  284. position="bottom"
  285. style="width: 100%; height: 70%"
  286. :close-on-click-overlay="true"
  287. teleport="#app"
  288. >
  289. <com-map
  290. v-if="defaultSpace.spaceId && isShowMap"
  291. :spaceData="copySpaceData"
  292. :spaceInfo="defaultSpace"
  293. :projectId="projectId"
  294. :floorId="defaultSpace.floorId"
  295. :buildingId="defaultSpace.buildingId"
  296. @changeSpace="changeSpace"
  297. ></com-map>
  298. </van-popup>
  299. <!--联系方式-->
  300. <contact
  301. :isShowContact="isShowContact"
  302. :contantDetail="contantDetail"
  303. v-if="isShowContact"
  304. @closeDailog="closeContactDailog"
  305. ></contact>
  306. <!--灯灯调光和调色温-->
  307. <van-popup
  308. v-model:show="isLightColorFlag"
  309. position="right"
  310. :close-on-click-overlay="true"
  311. class="popup-content"
  312. teleport="#app"
  313. >
  314. <div>
  315. <light-temp :lightData="lightData" v-if="isLightColorFlag"></light-temp>
  316. </div>
  317. </van-popup>
  318. </div>
  319. </template>
  320. <script lang="ts">
  321. import {
  322. defineComponent,
  323. reactive,
  324. toRefs,
  325. ref,
  326. onBeforeMount,
  327. onMounted,
  328. nextTick,
  329. onBeforeUnmount,
  330. getCurrentInstance,
  331. } from "vue";
  332. import WorkOvertime from "./components/workOvertime/index.vue";
  333. import ManualOvertime from "./components/ManualWork/index.vue";
  334. import Contact from "./components/Contact/index.vue";
  335. import WorkConfig from "./components/workOvertime/WorkConfig.vue";
  336. import ManualConfig from "./components/ManualWork/WorkConfig.vue";
  337. import ScenarioConfig from "./components/Scenario/ScenarioConfig.vue";
  338. import MapBox from "@/views/envmonitor/components/Map/MapBox.vue";
  339. import Header from "@/components/header/Index.vue";
  340. import Comheader from "@/components/header/Comheader.vue";
  341. // import Scenario from "@/views/envmonitor/components/Scenario/Scenario.vue";
  342. import Air from "@/views/envmonitor/components/Air/index.vue";
  343. import ManualIndex from "@/views/envmonitor/components/Air/manualIndex.vue";
  344. import Light from "@/views/envmonitor/components/Light/index.vue";
  345. import Curtain from "@/views/envmonitor/components/Curtain/index.vue";
  346. import TimeBox from "@/views/envmonitor/TimeBox.vue";
  347. import NavBar from "@/views/envmonitor/NavBar.vue";
  348. import ScenarioDailog from "@/views/envmonitor/components/Scenario/scenarioDailog.vue";
  349. import Detail from "@/views/envmonitor/detail.vue";
  350. import ComMap from "@/views/envmonitor/components/Map/index.vue";
  351. import LightTemp from "@/views/envmonitor/components/Light/LightTemp.vue";
  352. import { Icon, Popup, Dialog, Toast } from "vant";
  353. import { useRouter, useRoute } from "vue-router";
  354. import {
  355. getCompanyInfo,
  356. getWeather,
  357. getSpaceInfo,
  358. getMeetingSceneHttp,
  359. getSetTimeHttp,
  360. changeSetTimeHttp,
  361. getSpaceEquipType,
  362. getPermanentSpace,
  363. getUserControlAuth,
  364. getSpaceMode,
  365. getSpaceTemp,
  366. querySpaceSceneConfig,
  367. queryCustomAndScence,
  368. queryWorkSpace,
  369. getPadImg,
  370. getSpaceEquipList,
  371. queryCustomerservice,
  372. } from "@/apis/envmonitor";
  373. import Keys from "@/constant/key";
  374. import {
  375. formatDate,
  376. formatDateStr,
  377. getHours,
  378. getLocalNewSpaceInfo,
  379. getNowWeek,
  380. getRelNowTime,
  381. getUserInfo,
  382. parseImgUrl,
  383. setQueryConfig,
  384. } from "@/utils";
  385. import { store } from "@/store";
  386. import { SpaceInfoModel } from "@/model/userModel";
  387. import { getWorkType } from "@/utils/mapIcon";
  388. export default defineComponent({
  389. components: {
  390. MapBox,
  391. ComMap,
  392. ScenarioDailog,
  393. LightTemp,
  394. Header,
  395. Comheader,
  396. NavBar,
  397. Air,
  398. ManualIndex,
  399. ManualOvertime,
  400. Light,
  401. Curtain,
  402. TimeBox,
  403. WorkOvertime,
  404. WorkConfig,
  405. ManualConfig,
  406. ScenarioConfig,
  407. Detail,
  408. Contact,
  409. [Dialog.Component.name]: Dialog.Component,
  410. VanPopup: Popup,
  411. VanIcon: Icon,
  412. },
  413. setup() {
  414. const proxyGlobal: any = getCurrentInstance();
  415. const router: any = useRouter();
  416. const route: any = useRoute();
  417. const document: any = window.document;
  418. const screenHeight: any = document.body.clientHeight;
  419. const outWeather: any = {};
  420. const weatherTimer: any = null;
  421. let secenaroStatus: any = {};
  422. // 空间数据(包括空间下的设备的状态)
  423. const officeData: any = {};
  424. let spaceEqFlagObj: SpaceInfoModel = {
  425. hasAir: true, // 有无空调
  426. hasBlowing: false, // 空调有无 变风量系统
  427. hasLamp: false, //有无灯具
  428. };
  429. const popList: any = [];
  430. const detailQuery: any = {};
  431. // 空间类型
  432. let spaceInfo: any = {};
  433. const projectId: string = store.state.user.projectId;
  434. const sceneDetail: any = {};
  435. const timeOutEvent: any = {};
  436. const touchInterval: any = {};
  437. const contantDetail: any = {};
  438. const cusServiceTimer: any = null;
  439. const headerInfo: {
  440. headImg: any;
  441. headScene: string;
  442. tipText: string;
  443. tipTextSwatch: boolean;
  444. } = {
  445. headImg: "",
  446. headScene: "",
  447. tipText: "选择工作结束时间",
  448. tipTextSwatch: false,
  449. };
  450. let spaceExistenceDevice: any = {
  451. curtain: false,
  452. light: false,
  453. airConditioner: false,
  454. bodySensor: false,
  455. };
  456. let childRef: any = {};
  457. // let mapRef: any = {}
  458. let intervalTimer: any = null;
  459. const workInfo: any = {};
  460. const userInfo: any = getUserInfo();
  461. let lightData: any = {};
  462. let spaceTimer: any = null;
  463. let listSen: any = [
  464. {
  465. id: 0,
  466. code: "DISCUSSING",
  467. name: "会议模式",
  468. img: "scene_work.svg",
  469. checked: true,
  470. textObj: [
  471. {
  472. text: "照明灯光已全部为您开启",
  473. status: "ok",
  474. },
  475. {
  476. text: "演示设备已为您准备",
  477. status: "ok",
  478. },
  479. {
  480. text: "空调已为您开启",
  481. type: "air",
  482. status: "ok",
  483. },
  484. ],
  485. },
  486. {
  487. id: 1,
  488. code: "PROJECTING",
  489. name: "投影模式",
  490. img: "scene_visitor.svg",
  491. checked: false,
  492. textObj: [
  493. {
  494. text: "主灯已为您关闭,氛围灯为您开启",
  495. status: "ok",
  496. },
  497. {
  498. text: "演示设备已为您开启",
  499. status: "ok",
  500. },
  501. {
  502. text: "空调已为您开启",
  503. type: "air",
  504. status: "ok",
  505. },
  506. {
  507. text: "窗帘已为您关闭",
  508. status: "ok",
  509. },
  510. ],
  511. },
  512. {
  513. id: 2,
  514. code: "ADJOURNMENT",
  515. name: "全关模式",
  516. img: "scene_rest.svg",
  517. checked: false,
  518. textObj: [
  519. {
  520. text: "照明灯光2min后将全部关闭",
  521. status: "ok",
  522. },
  523. {
  524. text: "演示设备已为您关闭",
  525. status: "ok",
  526. },
  527. {
  528. text: "空调全部关闭",
  529. type: "air",
  530. status: "ok",
  531. },
  532. {
  533. text: "窗帘已为您关闭",
  534. status: "ok",
  535. },
  536. ],
  537. },
  538. ];
  539. let userSpaceInfo: any = [];
  540. let spaceModelTimer: any = null;
  541. let spaceTempTimer: any = null;
  542. let envlist: any = [
  543. {
  544. id: 2,
  545. name: "甲醛",
  546. num: "",
  547. level: "",
  548. bgColor: "",
  549. img: "jiaquan.svg",
  550. funcid: "HCHO",
  551. code: "jiaquan",
  552. unit: "mg/m³",
  553. },
  554. {
  555. id: 0,
  556. name: "CO₂",
  557. bgColor: "",
  558. num: "",
  559. level: "",
  560. img: "co2.svg",
  561. funcid: "CO2",
  562. code: "co2",
  563. unit: "ppm",
  564. },
  565. {
  566. id: 1,
  567. name: "PM2.5",
  568. bgColor: "",
  569. num: "",
  570. level: "",
  571. funcid: "PM2d5",
  572. img: "pm2.5.svg",
  573. code: "pm25",
  574. unit: "ug/m³",
  575. },
  576. {
  577. id: 3,
  578. name: "湿度",
  579. bgColor: "",
  580. img: "humidity.svg",
  581. num: "",
  582. level: "",
  583. funcid: "Tdb,RH",
  584. code: "shidu",
  585. unit: "%",
  586. },
  587. ];
  588. let scenarioArr: any = [];
  589. let sceneConfigTimer: any = [];
  590. let realEevList: any = []; // 解决v-if报错的问题临时使用
  591. let workkArr: any = [];
  592. let spaceData: any = [];
  593. let secenTimer: any = {};
  594. let nowDate: any = formatDate("YYYY.MM.DD HH:mm");
  595. let nowWeek: any = getNowWeek();
  596. let padImgData: any = [];
  597. let controlMode: number = 0;
  598. let deviceItem: any = null;
  599. let allDevice: any = [];
  600. let spaceEquipList: any = [];
  601. let equipTimer: any = null;
  602. const proxyData = reactive({
  603. equipTimer: equipTimer,
  604. seviceEquipmentList: allDevice, // 所有的设备
  605. spaceEquipList: spaceEquipList,
  606. enterType: 1,
  607. deviceItem: deviceItem,
  608. parseImgUrl: parseImgUrl,
  609. fileUrl: proxyGlobal.proxy.$fileUrl,
  610. nowDate: nowDate,
  611. nowWeek: nowWeek,
  612. isShowWork: false,
  613. isShowMetting: false,
  614. localName: "",
  615. airTemp: "",
  616. userIsControl: true,
  617. spaceModelTimer: spaceModelTimer,
  618. spaceTempTimer: spaceTempTimer,
  619. userSpaceInfo: userSpaceInfo,
  620. spaceTimer: spaceTimer,
  621. workInfo: workInfo,
  622. intervalTimer: intervalTimer,
  623. roomType: "",
  624. showSpaceTip: false,
  625. mapOpacity: 0,
  626. opacityV: 1,
  627. childRef: childRef,
  628. hideTopImg: false,
  629. isBottom: false,
  630. isScrool: false,
  631. officeData: officeData,
  632. popList: popList,
  633. popupType: "scenario",
  634. showSecenDetailDalig: false,
  635. sceneDetail: sceneDetail,
  636. showScenario: false,
  637. projectId: projectId,
  638. spaceInfo: spaceInfo,
  639. headerInfo: headerInfo,
  640. topbgimg: "",
  641. userInfo: userInfo,
  642. deviceIcon: "arrow",
  643. visible: false,
  644. outWeather: outWeather,
  645. vanPopupIndex: "",
  646. spaceEqFlagObj: spaceEqFlagObj,
  647. spaceExistenceDevice: spaceExistenceDevice,
  648. listOffice: [
  649. {
  650. id: 0,
  651. name: "工作",
  652. code: "work",
  653. img: "scene_work.svg",
  654. checked: true,
  655. textObj: [
  656. {
  657. text: "办公区灯光已全部为您开启",
  658. status: "ok",
  659. },
  660. {
  661. text: "正在将温度调至 26℃",
  662. status: "ok",
  663. },
  664. {
  665. text: "窗帘已为您全部打开",
  666. status: "ok",
  667. },
  668. {
  669. text: "饮用水已为您准备",
  670. status: "ok",
  671. },
  672. ],
  673. },
  674. {
  675. id: 1,
  676. name: "会客",
  677. code: "guest",
  678. img: "scene_visitor.svg",
  679. checked: false,
  680. textObj: [
  681. {
  682. text: "会客区照明已为您开启",
  683. status: "ok",
  684. },
  685. {
  686. text: "空调已为您切换至会客温度,目标温度24℃",
  687. status: "ok",
  688. },
  689. {
  690. text: "窗帘已为您全部开启",
  691. status: "ok",
  692. },
  693. {
  694. text: "演示设备已为您准备",
  695. status: "ok",
  696. },
  697. {
  698. text: "饮用水已为您准备",
  699. status: "ok",
  700. },
  701. ],
  702. },
  703. {
  704. id: 2,
  705. name: "休息",
  706. code: "rest",
  707. img: "scene_rest.svg",
  708. checked: false,
  709. textObj: [
  710. {
  711. text: "主灯已关闭,氛围灯将为您开启",
  712. status: "ok",
  713. },
  714. {
  715. text: "空调将为您调节至适宜休息的温度,目标温度26℃",
  716. status: "ok",
  717. },
  718. {
  719. text: "窗帘已为您全部关闭",
  720. status: "ok",
  721. },
  722. ],
  723. },
  724. ],
  725. listSen: listSen,
  726. isACATVA: false,
  727. showWorkOff: false, // 开放办公室的 提前关闭是否展示
  728. envlist: envlist,
  729. realEevList: realEevList,
  730. navList: [
  731. {
  732. top: 0,
  733. id: "airId",
  734. code: "air",
  735. name: "温度/湿度",
  736. noShow: true,
  737. img: parseImgUrl("page-officehome", "temp.png"),
  738. activeImg: parseImgUrl("page-officehome", "temp_active.svg"),
  739. },
  740. {
  741. top: 0,
  742. id: "lightId",
  743. code: "lamp",
  744. name: "光照",
  745. noShow: false,
  746. img: parseImgUrl("page-officehome", "lamp.png"),
  747. activeImg: parseImgUrl("page-officehome", "lamp_active.svg"),
  748. },
  749. {
  750. top: 0,
  751. id: "curtainId",
  752. code: "curtain",
  753. name: "窗帘",
  754. noShow: false,
  755. img: parseImgUrl("page-officehome", "curtain-nav.svg"),
  756. activeImg: parseImgUrl("page-officehome", "curtain-nav-active.svg"),
  757. },
  758. {
  759. top: 0,
  760. id: 4,
  761. code: "mySpace",
  762. name: "常驻空间",
  763. noShow: false,
  764. activeImg: parseImgUrl("page-officehome", "mySpaceIcon.svg"),
  765. img: parseImgUrl("page-officehome", "mySpaceIcon.svg"),
  766. },
  767. {
  768. top: 0,
  769. id: 5,
  770. code: "switchSpace",
  771. name: "我的",
  772. noShow: true,
  773. activeImg: parseImgUrl("page-officehome", "mapIcon.png"),
  774. img: parseImgUrl("page-officehome", "mapIcon.png"),
  775. },
  776. ],
  777. // 上班=ATWORK 讨论=DISCUSSING 投影=PROJECTING 散会=ADJOURNMENT 下班=OFFWORK
  778. meetingRoomSence: [
  779. {
  780. code: "DISCUSSING",
  781. name: "讨论",
  782. },
  783. {
  784. code: "PROJECTING",
  785. name: "演示",
  786. },
  787. {
  788. code: "ADJOURNMENT",
  789. name: "散会",
  790. },
  791. ],
  792. nextCusStartTime: 0, // 第二天服务定制开始时间
  793. cusEndTime: 0,
  794. cusStartTime: 0, // 当天服务定制-开始时间
  795. isShowContact: false,
  796. showContact() {
  797. proxyData.isShowContact = true;
  798. },
  799. isLightColorFlag: false,
  800. lightData: lightData,
  801. // 展示调光,调温弹窗
  802. showLightColorCtrol(lightData: any) {
  803. proxyData.isLightColorFlag = true;
  804. proxyData.lightData = lightData;
  805. },
  806. closeContactDailog() {
  807. proxyData.isShowContact = false;
  808. },
  809. padBgImg: "",
  810. // 设置平板背景图
  811. // reviewBaseUrl: `/image-service/common/file_get?systemId=dataPlatform`,
  812. setPadBgImg() {
  813. if (
  814. proxyData.padImgData.isBgDefault === 0 &&
  815. proxyData.padImgData.bgImage &&
  816. proxyData.padImgData.bgImage.fileId
  817. ) {
  818. proxyData.padBgImg =
  819. proxyData.fileUrl + `&key=${proxyData.padImgData.bgImage.fileId}`;
  820. } else {
  821. // debugger;
  822. if (proxyData.roomType == "个人") {
  823. proxyData.padBgImg = parseImgUrl("ipdImages", "pad_img2.png");
  824. } else if (proxyData.roomType === "会议室") {
  825. proxyData.padBgImg = parseImgUrl("ipdImages", "pad_img3.png");
  826. } else if (proxyData.roomType === "开放") {
  827. proxyData.padBgImg = parseImgUrl("ipdImages", "pad_img1.png");
  828. } else {
  829. proxyData.padBgImg = parseImgUrl("ipdImages", "pad_img1.png");
  830. }
  831. }
  832. },
  833. logImg: "",
  834. // 设置平板logo
  835. setPadLogo() {
  836. if (
  837. proxyData.padImgData.isLogoDefault === 0 &&
  838. proxyData.padImgData.logoImage &&
  839. proxyData.padImgData.logoImage.fileId
  840. ) {
  841. // 公司提供的
  842. proxyData.logImg =
  843. proxyData.fileUrl + `&key=${proxyData.padImgData.logoImage.fileId}`;
  844. } else {
  845. proxyData.logImg = "";
  846. }
  847. },
  848. padImgData: padImgData,
  849. padNumber: 0,
  850. // 获取pad的背景图
  851. getPadImg() {
  852. let params: any = {
  853. funcType: proxyData.officeData.roomFuncType,
  854. spaceId: proxyData.spaceInfo.spaceId,
  855. };
  856. let str: any = setQueryConfig(params);
  857. // debugger;
  858. if (proxyData.padNumber < 1) {
  859. proxyData.padNumber = 1;
  860. getPadImg(str).then((res) => {
  861. if (res.result === "success") {
  862. proxyData.padImgData = res.data;
  863. proxyData.setPadBgImg(); // 设置平板背景
  864. proxyData.setPadLogo(); // 设置平板logo
  865. }
  866. });
  867. }
  868. },
  869. /**
  870. * 加班
  871. */
  872. triggerWork(type: any = 1, deviceItem: any = null) {
  873. // console.log(type);
  874. proxyData.enterType = type;
  875. proxyData.deviceItem = deviceItem || null;
  876. proxyData.isShowWork = true;
  877. },
  878. // 关于手动控制是否展示加班弹窗的问题处理
  879. checkDeviceShowWork() {
  880. proxyData.spaceEquipList.map((item: any) => {
  881. item.id = item.equipmentId;
  882. });
  883. proxyData.seviceEquipmentList = proxyData.spaceEquipList;
  884. },
  885. /**
  886. * 关闭加班
  887. */
  888. closeWork() {
  889. proxyData.isShowWork = false;
  890. // console.log("关闭加班功能---");
  891. proxyData.queryCustomAndScenceTimer(0);
  892. },
  893. forceOverTimeFlag: false,
  894. setForceOverTimeFlag(flag: any) {
  895. // debugger
  896. if (proxyData.roomType === "开放" && flag) {
  897. proxyData.forceOverTimeFlag = true;
  898. } else {
  899. proxyData.forceOverTimeFlag = false;
  900. }
  901. },
  902. // 获取公司信息
  903. async getCompanyInfo() {
  904. const res: any = await getCompanyInfo({ companyId: Keys.companyKey });
  905. const data = res.data;
  906. // store.commit(UserMutationTypes.SET_PROJECT_ID, 'Pj1101080259')
  907. // const location: any = data.sagaCareCoords.split(',')
  908. // const targetLocationInfo: any = {
  909. // longitude: location[0],
  910. // latitude: location[1]
  911. // }
  912. // console.log(targetLocationInfo)
  913. },
  914. weatherTimer: weatherTimer,
  915. getWeatherTimer(timer: any = 3600000) {
  916. proxyData.weatherTimer = setTimeout(() => {
  917. clearTimeout(proxyData.weatherTimer);
  918. proxyData.getWeather();
  919. }, timer);
  920. },
  921. // 获取天气信息
  922. getWeather() {
  923. const params: any = {
  924. openid: proxyData.userInfo.openid,
  925. pubname: proxyData.userInfo.pubname,
  926. projectId: store.state.user.projectId,
  927. };
  928. const str: string = setQueryConfig(params);
  929. getWeather(str).then((res) => {
  930. const content: any = res?.content ?? {};
  931. proxyData.outWeather = content;
  932. const text: string = content.text;
  933. proxyData.getWeatherIcon(text);
  934. proxyData.getnowTime(text);
  935. proxyData.getWeatherTimer();
  936. });
  937. },
  938. // 设置当前背景图
  939. getnowTime(text: string) {
  940. // 头部背景图片
  941. const now = getHours();
  942. if (text.indexOf("霾") > -1) {
  943. proxyData.topbgimg = parseImgUrl("weather", "office_smog.jpg");
  944. } else {
  945. if (now >= 6 && now < 19) {
  946. // 白天
  947. proxyData.topbgimg = parseImgUrl("weather", "office_bright.jpg");
  948. } else {
  949. // 夜晚
  950. proxyData.topbgimg = parseImgUrl("weather", "office_night.jpg");
  951. }
  952. }
  953. },
  954. // 设置天气icon
  955. getWeatherIcon(text: string) {
  956. if (text && text.indexOf("晴") > -1) {
  957. proxyData.outWeather.imgname = parseImgUrl("weather", "sun.png");
  958. } else if (text && text.indexOf("雨") > -1) {
  959. proxyData.outWeather.imgname = parseImgUrl("weather", "rain.png");
  960. } else if (
  961. (text && text.indexOf("阴") > -1) ||
  962. text.indexOf("云") > -1
  963. ) {
  964. proxyData.outWeather.imgname = parseImgUrl("weather", "cloudy.png");
  965. } else if (text && text.indexOf("霾") > -1) {
  966. proxyData.outWeather.imgname = parseImgUrl("weather", "mai.png");
  967. } else if (text && text.indexOf("雾") > -1) {
  968. proxyData.outWeather.imgname = parseImgUrl("weather", "fog.png");
  969. } else if (text && text.indexOf("风") > -1) {
  970. proxyData.outWeather.imgname = parseImgUrl("weather", "wind.png");
  971. } else if (text && text.indexOf("雷") > -1) {
  972. proxyData.outWeather.imgname = parseImgUrl("weather", "thunder.png");
  973. } else {
  974. proxyData.outWeather.imgname = parseImgUrl("weather", "sun.png");
  975. }
  976. },
  977. // 判断空间类型
  978. checkSpaceType(roomFuncType: string) {
  979. let roomType: any = getWorkType(roomFuncType);
  980. if (roomType === "个人") {
  981. proxyData.roomType = "个人";
  982. proxyData.headerInfo.headImg = parseImgUrl(
  983. "page-officehome",
  984. "office_person_2.png"
  985. );
  986. proxyData.headerInfo.headScene = "工作";
  987. proxyData.popList = proxyData.listOffice;
  988. } else if (roomType === "会议室") {
  989. proxyData.roomType = "会议室";
  990. proxyData.popList = JSON.parse(JSON.stringify(proxyData.listSen));
  991. proxyData.headerInfo.headImg = parseImgUrl(
  992. "page-officehome",
  993. "office_normal_2.png"
  994. );
  995. // 获取会议室场
  996. proxyData.getPageMeetingSceneHttp();
  997. } else if (roomType === "开放") {
  998. // debugger
  999. proxyData.roomType = "开放";
  1000. proxyData.headerInfo.headImg = parseImgUrl(
  1001. "page-officehome",
  1002. "office_publi_2.png"
  1003. );
  1004. } else {
  1005. proxyData.roomType = "其它";
  1006. proxyData.headerInfo.headImg = parseImgUrl(
  1007. "page-officehome",
  1008. "office_publi_2.png"
  1009. );
  1010. }
  1011. if (roomType !== "会议室") {
  1012. proxyData.timerSpaceInfo();
  1013. }
  1014. },
  1015. /**
  1016. * 检查用户可使用的权限
  1017. */
  1018. checkUserSpace() {
  1019. let flag: any = false;
  1020. // let flag: any = true
  1021. for (let i = 0; i < proxyData.userSpaceInfo.length; i++) {
  1022. if (
  1023. proxyData.spaceInfo.spaceId === proxyData.userSpaceInfo[i].sp_id
  1024. ) {
  1025. flag = true;
  1026. break;
  1027. }
  1028. }
  1029. proxyData.userIsControl = flag;
  1030. },
  1031. /**
  1032. * 获取用户控制权限
  1033. */
  1034. getUserControlAuth() {
  1035. getUserControlAuth()
  1036. .then((res) => {
  1037. let resData: any = res;
  1038. if (resData.result === "success") {
  1039. proxyData.userSpaceInfo = resData.data;
  1040. } else {
  1041. proxyData.userSpaceInfo = [];
  1042. }
  1043. proxyData.checkUserSpace();
  1044. })
  1045. .catch(() => {
  1046. proxyData.userSpaceInfo = [];
  1047. proxyData.checkUserSpace();
  1048. });
  1049. },
  1050. controlMode: controlMode, // 当前空间的模式 0:自动控制 1:手动控制
  1051. // 获取空间信息
  1052. getSpaceInfo() {
  1053. // const userInfo =
  1054. const data: any = {
  1055. criteria: {
  1056. spaceId: proxyData.spaceInfo.spaceId,
  1057. projectId: proxyData.userInfo.projectId,
  1058. },
  1059. pubname: proxyData.userInfo.pubname,
  1060. openid: proxyData.userInfo.openid,
  1061. };
  1062. getSpaceInfo(data)
  1063. .then((res) => {
  1064. const content: any = res?.content ?? [];
  1065. console.log("timer===", 1);
  1066. if (content[0]) {
  1067. proxyData.officeData = content[0];
  1068. }
  1069. proxyData.officeData = proxyData.officeData
  1070. ? proxyData.officeData
  1071. : {};
  1072. if (proxyData.officeData.localName) {
  1073. proxyData.localName = proxyData.officeData.localName;
  1074. }
  1075. if (proxyData.officeData.temperature) {
  1076. proxyData.officeData.temperature =
  1077. proxyData.officeData.temperature.toFixed(1) * 1;
  1078. }
  1079. // proxyData.controlMode = proxyData.officeData.controlMode || 1;
  1080. proxyData.controlMode = proxyData.officeData.controlMode;
  1081. // 环境数据
  1082. proxyData.checkSpaceType(proxyData.officeData.roomFuncType);
  1083. proxyData.formatSpaceInfo(content);
  1084. proxyData.getPadImg();
  1085. // proxyData.setPageheight()
  1086. proxyData.loadinngEnd();
  1087. // 获取pad的背景图
  1088. })
  1089. .catch(() => {
  1090. proxyData.loadinngEnd();
  1091. proxyData.timerSpaceInfo();
  1092. });
  1093. },
  1094. // 定时调获取空调接口
  1095. getSpaceModeTimer() {
  1096. proxyData.spaceModelTimer = setTimeout(() => {
  1097. proxyData.getSpaceMode();
  1098. clearTimeout(proxyData.spaceModelTimer);
  1099. proxyData.spaceModelTimer = null;
  1100. }, 1000);
  1101. },
  1102. // 获取运行模式
  1103. getSpaceMode() {
  1104. getSpaceMode()
  1105. .then((res) => {
  1106. proxyData.getSpaceModeTimer();
  1107. })
  1108. .catch(() => {
  1109. proxyData.getSpaceModeTimer();
  1110. });
  1111. },
  1112. // 定时调用获取温度
  1113. getSpaceTempTimer() {
  1114. proxyData.spaceTempTimer = setTimeout(() => {
  1115. clearTimeout(proxyData.spaceTempTimer);
  1116. proxyData.spaceTempTimer = null;
  1117. proxyData.getSpaceTemp();
  1118. });
  1119. },
  1120. // 获取空间空调设备温度
  1121. getSpaceTemp() {
  1122. getSpaceTemp()
  1123. .then((res) => {
  1124. proxyData.getSpaceTempTimer();
  1125. })
  1126. .catch(() => {
  1127. proxyData.getSpaceTempTimer();
  1128. });
  1129. },
  1130. // 设置环境参数的背景颜色
  1131. setEnvBg(key: any, text: any) {
  1132. let bgColor: any = "";
  1133. if (key === "humidity") {
  1134. // 湿度
  1135. if (text === "干燥" || text === "潮湿") {
  1136. bgColor =
  1137. "linear-gradient(180deg, rgba(205, 11, 0, 0) 0%, #CD0B00 100%)";
  1138. } else {
  1139. bgColor = "";
  1140. }
  1141. } else if (key === "hcho") {
  1142. // 甲醛
  1143. if (text === "超标") {
  1144. bgColor =
  1145. "linear-gradient(180deg, rgba(205, 11, 0, 0) 0%, #CD0B00 100%)";
  1146. } else {
  1147. bgColor = "";
  1148. }
  1149. } else if (key === "co2") {
  1150. if (text === "略高") {
  1151. bgColor =
  1152. "linear-gradient(180deg, rgba(205, 11, 0, 0.5) 0%, #CD0B00 100%)";
  1153. } else if (text === "超标") {
  1154. bgColor =
  1155. "linear-gradient(180deg, rgba(205, 11, 0, 1) 0%, #CD0B00 100%)";
  1156. } else {
  1157. bgColor = "";
  1158. }
  1159. } else if (key === "pm25") {
  1160. if (text === "良") {
  1161. // bgColor =
  1162. // "linear-gradient(180deg, rgba(205, 11, 0, 0.2) 0%, #CD0B00 100%)";
  1163. bgColor = "";
  1164. } else if (text === "轻度污染") {
  1165. bgColor =
  1166. "linear-gradient(180deg, rgba(205, 11, 0, 0.2) 0%, #CD0B00 100%)";
  1167. } else if (text === "中度污染") {
  1168. bgColor =
  1169. "linear-gradient(180deg, rgba(205, 11, 0, 0.5) 0%, #CD0B00 100%)";
  1170. } else if (text === "重度污染") {
  1171. bgColor =
  1172. "linear-gradient(180deg, rgba(205, 11, 0, 0.8) 0%, #CD0B00 100%)";
  1173. } else if (text === "严重污染") {
  1174. bgColor =
  1175. "linear-gradient(180deg, rgba(205, 11, 0, 1) 0%, #CD0B00 100%)";
  1176. } else {
  1177. bgColor = "";
  1178. }
  1179. }
  1180. return bgColor;
  1181. },
  1182. // 格式化环境数据(处理环境数据展示的级别)
  1183. checkLevel(value: string, name: string) {
  1184. let objList = {
  1185. humidity: {
  1186. range: [30, 70],
  1187. text: ["干燥", "健康", "潮湿"],
  1188. },
  1189. co2: {
  1190. range: [800, 1000, 1500],
  1191. text: ["健康", "达标", "略高", "超标"],
  1192. },
  1193. pm25: {
  1194. range: [35, 75, 115, 150, 250],
  1195. text: [
  1196. "健康",
  1197. "良",
  1198. "轻度污染",
  1199. "中度污染",
  1200. "重度污染",
  1201. "严重污染",
  1202. ],
  1203. },
  1204. hcho: {
  1205. range: [0.1],
  1206. text: ["健康", "超标"],
  1207. },
  1208. };
  1209. // let sortArr = [value, ...objList[name].range].sort((a, b) => {
  1210. // return a - b;
  1211. // });
  1212. // let rangeArr:any=objList[name].range
  1213. // rangeArr.map((item:any)=>{
  1214. // })
  1215. let levelTxt: any = "";
  1216. let valueNum: any = parseFloat(value);
  1217. if (valueNum) {
  1218. if (name == "humidity") {
  1219. if (valueNum < 30) {
  1220. levelTxt = "干燥";
  1221. } else if (valueNum > 70) {
  1222. levelTxt = "潮湿";
  1223. } else {
  1224. levelTxt = "健康";
  1225. }
  1226. } else if (name == "co2") {
  1227. if (valueNum <= 800) {
  1228. levelTxt = "健康";
  1229. } else if (valueNum > 800 && valueNum <= 1000) {
  1230. levelTxt = "达标";
  1231. } else if (valueNum > 1000 && valueNum <= 1500) {
  1232. levelTxt = "略高";
  1233. } else if (valueNum > 1500) {
  1234. levelTxt = "超标";
  1235. }
  1236. }
  1237. } else if (name == "pm25") {
  1238. if (valueNum >= 0 && valueNum < 35) {
  1239. levelTxt = "健康";
  1240. } else if (valueNum >= 35 && valueNum <= 75) {
  1241. levelTxt = "良";
  1242. } else if (valueNum > 75 && valueNum <= 115) {
  1243. levelTxt = "轻度污染";
  1244. } else if (valueNum > 115 && valueNum <= 150) {
  1245. levelTxt = "中度污染";
  1246. } else if (valueNum > 150 && valueNum <= 250) {
  1247. levelTxt = "重度污染";
  1248. } else if (valueNum > 250) {
  1249. levelTxt = "严重污染";
  1250. }
  1251. } else if (name == "hcho") {
  1252. if (valueNum <= 0.1) {
  1253. levelTxt = "健康";
  1254. } else {
  1255. levelTxt = "超标";
  1256. }
  1257. }
  1258. // let level = sortArr.findIndex((item) => item === value);
  1259. // let levelTxt = objList[name].text[level];
  1260. // console.log("sortArr==", sortArr);
  1261. let bgColor: any = proxyData.setEnvBg(name, levelTxt);
  1262. return {
  1263. levelTxt,
  1264. bgColor,
  1265. };
  1266. },
  1267. /**
  1268. *设置当前页面的高度
  1269. */
  1270. setPageheight() {
  1271. nextTick(() => {
  1272. document.getElementById("envBox").style.height =
  1273. document.getElementById("envBox").offsetHeight + "px";
  1274. });
  1275. },
  1276. // 空间信息数据格式化
  1277. formatSpaceInfo(content: any = []) {
  1278. for (let i = 0; i < content.length; i++) {
  1279. let item = content[i];
  1280. if (item.co2 || item.co2 == 0) {
  1281. let obj: any = proxyData.checkLevel(item.co2, "co2");
  1282. // proxyData.envlist[1].level = obj.levelTxt;
  1283. proxyData.envlist[1].bgColor = obj.bgColor;
  1284. proxyData.envlist[1].num = item.co2;
  1285. } else {
  1286. // proxyData.envlist[1].level = "--";
  1287. proxyData.envlist[1].num = "--";
  1288. proxyData.envlist[1].bgColor = "";
  1289. }
  1290. if (item.pm25 || item.pm25 === 0) {
  1291. let obj: any = proxyData.checkLevel(item.pm25, "pm25");
  1292. // proxyData.envlist[2].level = obj.levelTxt;
  1293. proxyData.envlist[2].bgColor = obj.bgColor;
  1294. proxyData.envlist[2].num = item.pm25;
  1295. } else {
  1296. // proxyData.envlist[2].level = "--";
  1297. proxyData.envlist[2].num = "--";
  1298. proxyData.envlist[2].bgColor = "";
  1299. }
  1300. if (item.hcho || item.hcho == 0) {
  1301. let obj: any = proxyData.checkLevel(item.hcho, "hcho");
  1302. // proxyData.envlist[0].level = obj.levelTxt;
  1303. proxyData.envlist[0].bgColor = obj.bgColor;
  1304. proxyData.envlist[0].num = item.hcho.toFixed(2);
  1305. } else {
  1306. // proxyData.envlist[0].level = "--";
  1307. proxyData.envlist[0].num = "--";
  1308. proxyData.envlist[0].bgColor = "";
  1309. }
  1310. if (item.humidity || item.humidity == 0) {
  1311. let obj: any = proxyData.checkLevel(item.humidity, "humidity");
  1312. // proxyData.envlist[3].level = obj.levelTxt;
  1313. proxyData.envlist[3].bgColor = obj.bgColor;
  1314. proxyData.envlist[3].num = item.humidity.toFixed(0);
  1315. } else {
  1316. // proxyData.envlist[3].level = "--";
  1317. proxyData.envlist[3].num = "--";
  1318. proxyData.envlist[3].bgColor = "";
  1319. }
  1320. }
  1321. },
  1322. activeType: "", // 当前会议室场景
  1323. // 获取会议室场景(如果是会议室的才调此接口)
  1324. getPageMeetingSceneHttp() {
  1325. const params: { spaceId: string } = {
  1326. spaceId: proxyData.spaceInfo.spaceId,
  1327. };
  1328. getMeetingSceneHttp(params)
  1329. .then((res) => {
  1330. let resSen: string = res?.content ?? "";
  1331. if (resSen === "OFFWORK") {
  1332. resSen = "ADJOURNMENT";
  1333. }
  1334. proxyData.activeType = resSen;
  1335. // 定时调空间数据
  1336. proxyData.timerSpaceInfo();
  1337. })
  1338. .catch(() => {
  1339. proxyData.timerSpaceInfo();
  1340. });
  1341. },
  1342. // 切换场景的状态
  1343. secenaroStatus: secenaroStatus,
  1344. // 设置场景名称
  1345. setHeadScene(item: any, flag: any) {
  1346. proxyData.activeType = item.sceneType;
  1347. if (flag == 1) {
  1348. proxyData.isShowMetting = true;
  1349. }
  1350. proxyData.secenaroStatus = {
  1351. localName: proxyData.officeData.localName,
  1352. loading: item.loading,
  1353. lodingText: item.lodingText,
  1354. sceneName: item.sceneName,
  1355. };
  1356. },
  1357. closeDailog() {
  1358. proxyData.isShowMetting = false;
  1359. },
  1360. isShowDetail: false,
  1361. detailQuery: detailQuery,
  1362. handleDetail(item: any) {
  1363. proxyData.isShowDetail = true;
  1364. proxyData.detailQuery.funcid = item.funcid;
  1365. proxyData.detailQuery.spaceId = proxyData.spaceInfo.spaceId;
  1366. // router.push({
  1367. // path: '/envmonitor-detail',
  1368. // query: {
  1369. // funcid: item.funcid,
  1370. // spaceId: proxyData.spaceInfo.spaceId
  1371. // }
  1372. // })
  1373. },
  1374. // 获取空调设备温度
  1375. updateAirTemp(airTemp: any) {
  1376. proxyData.airTemp = airTemp;
  1377. proxyData.setHeadSceneAirTemp();
  1378. },
  1379. // 设置场景切换时候的温度
  1380. setHeadSceneAirTemp() {
  1381. if (
  1382. proxyData.sceneDetail &&
  1383. proxyData.sceneDetail.textObj &&
  1384. proxyData.sceneDetail.textObj.length
  1385. ) {
  1386. if (
  1387. proxyData.airTemp &&
  1388. (proxyData.sceneDetail.code == "DISCUSSING" ||
  1389. proxyData.sceneDetail.code == "PROJECTING")
  1390. ) {
  1391. for (let i = 0; i < proxyData.sceneDetail.textObj.length; i++) {
  1392. let item: any = proxyData.sceneDetail.textObj;
  1393. if (item.type === "air") {
  1394. item.text = item.text + ",目标温度" + proxyData.airTemp;
  1395. }
  1396. }
  1397. }
  1398. }
  1399. },
  1400. // 提前关闭
  1401. handlePreClose() {
  1402. let endDate: any = formatDate();
  1403. let endTime: any = getHours();
  1404. if (endTime < 10) {
  1405. endTime = `0${endTime}`;
  1406. }
  1407. const params = {
  1408. projectId: proxyData.projectId,
  1409. objectId: proxyData.spaceInfo.spaceId, // 空间ID
  1410. endDate: endDate, // 结束日期 "20210310",
  1411. endTime: endTime + "0000", // 结束时间 "090000"
  1412. type: 3, // 0 预约加班,1 取消,2 我来了/确定, 3 我走了
  1413. };
  1414. changeSetTimeHttp(params).then((res) => {
  1415. const resData: any = res;
  1416. if (resData.result == "success") {
  1417. proxyData.changeLampStatus();
  1418. }
  1419. });
  1420. },
  1421. // 提前关闭更改状态
  1422. changeLampStatus() {
  1423. proxyData.showWorkOff = false;
  1424. proxyData.headerInfo.tipText = "选择工作结束时间";
  1425. proxyData.headerInfo.tipTextSwatch = true;
  1426. },
  1427. // 获取空间下的设备信息
  1428. getEquipments() {
  1429. let params: { spaceId: string } = {
  1430. spaceId: proxyData.spaceInfo.spaceId,
  1431. // projectId: proxyData.projectId,
  1432. };
  1433. let queryParams: any = setQueryConfig(params);
  1434. getSpaceEquipType(queryParams).then((res) => {
  1435. let resData: any = res;
  1436. if (resData.result === "success") {
  1437. let data: any = resData?.data ?? [];
  1438. for (let key in proxyData.spaceExistenceDevice) {
  1439. let flag: any = false;
  1440. for (let i = 0; i < data.length; i++) {
  1441. if (key == data[i]) {
  1442. flag = true;
  1443. }
  1444. }
  1445. proxyData.spaceExistenceDevice[key] = flag;
  1446. }
  1447. // app端底部的导航判断
  1448. if (proxyData.spaceExistenceDevice.light) {
  1449. proxyData.navList[1].noShow = true;
  1450. } else {
  1451. proxyData.navList[1].noShow = false;
  1452. }
  1453. if (proxyData.spaceExistenceDevice.curtain) {
  1454. proxyData.navList[2].noShow = true;
  1455. } else {
  1456. proxyData.navList[2].noShow = false;
  1457. }
  1458. }
  1459. });
  1460. },
  1461. // 时间格式转换
  1462. hourMiChange(tempStr: number) {
  1463. // 转为时间 19.3 - 19:30 19.41-19:41 19-19:00
  1464. let str = tempStr.toString();
  1465. let newStr = "";
  1466. let dLen = str.length > 2 ? str.split(".")[1].length : str;
  1467. if (dLen === 1) {
  1468. str = str.replace(".", "") + "0";
  1469. newStr = str.slice(0, 2) + ":" + str.slice(2);
  1470. } else if (dLen === 2) {
  1471. str = str.replace(".", "");
  1472. newStr = str.slice(0, 2) + ":" + str.slice(2);
  1473. } else {
  1474. newStr = str + ":00";
  1475. }
  1476. return newStr;
  1477. },
  1478. // 点击切换会议室场景
  1479. handlePopup(type: string = "scenario") {
  1480. if (proxyData.userIsControl) {
  1481. proxyData.showScenario = !proxyData.showScenario;
  1482. if (proxyData.showScenario) {
  1483. proxyData.deviceIcon = "arrow-down";
  1484. } else {
  1485. proxyData.deviceIcon = "arrow";
  1486. }
  1487. proxyData.popupType = type;
  1488. } else {
  1489. Toast("您没有当前空间的控制权限!");
  1490. }
  1491. },
  1492. // 切换空间
  1493. triggerCheckSpace() {
  1494. let ele: any = document.getElementById("envContent");
  1495. let houseEle: any = document.getElementById("houseDes");
  1496. let houseHeight: any = houseEle.offsetHeight;
  1497. proxyData.opacityV = 0;
  1498. proxyData.mapOpacity = 1;
  1499. ele.scrollTop = 0;
  1500. let top: any = 0;
  1501. let interval: any = setInterval(() => {
  1502. top = top + 15;
  1503. if (top < screenHeight - houseHeight) {
  1504. ele.style.top = top + "px";
  1505. } else {
  1506. ele.style.top = screenHeight - houseHeight + "px";
  1507. clearInterval(interval);
  1508. }
  1509. }, 10);
  1510. proxyData.hideTopImg = true;
  1511. proxyData.isBottom = true;
  1512. },
  1513. /**
  1514. * 加载loading
  1515. */
  1516. loadingStart() {
  1517. Toast.loading({
  1518. duration: 0, // 持续展示 toast
  1519. forbidClick: true,
  1520. message: "加载中...",
  1521. });
  1522. },
  1523. /**
  1524. * 结束
  1525. */
  1526. loadinngEnd() {
  1527. Toast.clear();
  1528. },
  1529. // 清除定时器
  1530. clearTimerSpaceInfo() {
  1531. clearTimeout(proxyData.spaceTimer);
  1532. proxyData.spaceTimer = null;
  1533. },
  1534. // 定时调空间
  1535. timerSpaceInfo(timer: any = 5000) {
  1536. proxyData.spaceTimer = setTimeout(() => {
  1537. proxyData.getSpaceInfo();
  1538. proxyData.clearTimerSpaceInfo();
  1539. }, timer);
  1540. },
  1541. isWork: false,
  1542. isMetting: false,
  1543. // 判断对应的办公室的场景展示
  1544. checkIsSpaceScene() {
  1545. proxyData.scenarioArr.map((item: any) => {
  1546. if (item.sceneType === "OVERTIME") {
  1547. proxyData.isWork = true;
  1548. }
  1549. });
  1550. },
  1551. /**
  1552. * 获取场景列表
  1553. */
  1554. scenarioArr: scenarioArr,
  1555. sceneConfigTimer: sceneConfigTimer,
  1556. clearSceneConfigTimer() {
  1557. clearTimeout(proxyData.sceneConfigTimer);
  1558. },
  1559. // 定时获取场景的配置
  1560. querySpaceSceneConfigTimer(timer: any = 100000) {
  1561. proxyData.clearSceneConfigTimer();
  1562. proxyData.sceneConfigTimer = setTimeout(() => {
  1563. proxyData.querySpaceSceneConfig();
  1564. proxyData.clearSceneConfigTimer();
  1565. }, timer);
  1566. },
  1567. querySpaceSceneConfig() {
  1568. let params: any = {
  1569. spaceId: proxyData.spaceInfo.spaceId,
  1570. };
  1571. let str: any = setQueryConfig(params);
  1572. // debugger;
  1573. querySpaceSceneConfig(str)
  1574. .then((res) => {
  1575. let resData: any = res;
  1576. let data: any = resData?.data ?? [];
  1577. proxyData.scenarioArr = data;
  1578. proxyData.checkIsSpaceScene();
  1579. proxyData.querySpaceSceneConfigTimer();
  1580. })
  1581. .catch((error: any) => {
  1582. proxyData.querySpaceSceneConfigTimer();
  1583. });
  1584. },
  1585. /**
  1586. *查询空间加班记录
  1587. */
  1588. workkArr: workkArr,
  1589. secenTimer: secenTimer,
  1590. // 清除查询加班记录的定时器
  1591. clearSecenTimer() {
  1592. clearTimeout(proxyData.secenTimer);
  1593. proxyData.secenTimer = null;
  1594. },
  1595. // 清除定时器
  1596. clearEquipTimer() {
  1597. clearTimeout(proxyData.equipTimer);
  1598. proxyData.equipTimer = null;
  1599. },
  1600. // 定时器
  1601. getSpaceEquipListTimer(timerLen: any = 30000) {
  1602. proxyData.clearEquipTimer();
  1603. proxyData.equipTimer = setTimeout(() => {
  1604. proxyData.getSpaceEquipList();
  1605. proxyData.clearEquipTimer();
  1606. }, timerLen);
  1607. },
  1608. // 查询空间下面受控的设备
  1609. getSpaceEquipList() {
  1610. let params: any = {
  1611. spaceId: proxyData.spaceInfo.spaceId,
  1612. };
  1613. let str: any = setQueryConfig(params);
  1614. getSpaceEquipList(str)
  1615. .then((res: any) => {
  1616. let data: any = res.data || [];
  1617. proxyData.spaceEquipList = data;
  1618. proxyData.checkDeviceShowWork(); // 判断手动控制的设备是否要开启手动控制功能
  1619. // proxyData.getSpaceEquipListTimer();
  1620. })
  1621. .catch((error: any) => {
  1622. // proxyData.getSpaceEquipListTimer();
  1623. });
  1624. },
  1625. // 定时查空间的加班记录
  1626. queryCustomAndScenceTimer(timer: any = 10000) {
  1627. proxyData.clearSecenTimer();
  1628. proxyData.secenTimer = setTimeout(() => {
  1629. proxyData.queryCustomAndScence();
  1630. proxyData.clearSecenTimer();
  1631. }, timer);
  1632. },
  1633. // 定时查空间的加班记录
  1634. queryCustomAndScence() {
  1635. let params: any = {
  1636. spaceId: proxyData.spaceInfo.spaceId,
  1637. };
  1638. let str: any = setQueryConfig(params);
  1639. queryCustomAndScence(str)
  1640. .then((res) => {
  1641. let resData: any = res?.data ?? [];
  1642. for (let i = 0; i < resData.length; i++) {
  1643. let customSceneList: any = resData[i]?.customSceneList ?? [];
  1644. customSceneList = customSceneList.sort(proxyData.compare);
  1645. }
  1646. // 手动控制的情况下走新的服务定制
  1647. proxyData.workkArr = resData;
  1648. proxyData.formateManualWorkTime();
  1649. proxyData.queryCustomAndScenceTimer();
  1650. })
  1651. .catch(() => {
  1652. proxyData.queryCustomAndScenceTimer();
  1653. });
  1654. },
  1655. // 数组排序
  1656. compare(obj1: any, obj2: any) {
  1657. var val1 = obj1.startTime;
  1658. var val2 = obj2.startTime;
  1659. if (val1 < val2) {
  1660. return -1;
  1661. } else if (val1 > val2) {
  1662. return 1;
  1663. } else {
  1664. return 0;
  1665. }
  1666. },
  1667. // 格式化当前页面展示的时间
  1668. // 手动控制加班处理时间段拼接的逻辑
  1669. formateManualWorkTime() {
  1670. // debugger
  1671. let data: any = proxyData.workkArr || [];
  1672. for (let i = 0; i < data.length; i++) {
  1673. let item: any = data[i];
  1674. let spaceCustomContentList: any =
  1675. data[i].spaceCustomContentList || [];
  1676. if (spaceCustomContentList && spaceCustomContentList.length) {
  1677. spaceCustomContentList = spaceCustomContentList.sort(
  1678. proxyData.compare
  1679. );
  1680. item.spaceCustomContentList = spaceCustomContentList;
  1681. let nowTime: any = getRelNowTime();
  1682. let nowDate: any = formatDate("YYYY-MM-DD");
  1683. let date: any = formatDateStr(data[i].date);
  1684. item.cusStartTime = spaceCustomContentList[0]
  1685. ? spaceCustomContentList[0].startTime
  1686. : "";
  1687. item.cusEndTime = spaceCustomContentList[0]
  1688. ? spaceCustomContentList[0].endTime
  1689. : "";
  1690. if (nowDate == date) {
  1691. // 当前时间
  1692. item.cusStartTime = "";
  1693. item.cusEndTime = "";
  1694. }
  1695. for (let j = 0; j < spaceCustomContentList.length; j++) {
  1696. if (item.cusStartTime && item.cusEndTime) {
  1697. if (
  1698. item.cusEndTime + 1 ===
  1699. spaceCustomContentList[j].startTime
  1700. ) {
  1701. item.cusEndTime = spaceCustomContentList[j].endTime;
  1702. }
  1703. } else {
  1704. if (
  1705. nowTime >= spaceCustomContentList[j].startTime &&
  1706. nowTime <= spaceCustomContentList[j].endTime
  1707. ) {
  1708. item.cusStartTime = spaceCustomContentList[j].startTime;
  1709. item.cusEndTime = spaceCustomContentList[j].endTime;
  1710. }
  1711. }
  1712. }
  1713. if (!item.cusStartTime) {
  1714. item.cusStartTime = spaceCustomContentList[0]
  1715. ? spaceCustomContentList[0].startTime
  1716. : "";
  1717. item.cusEndTime = spaceCustomContentList[0]
  1718. ? spaceCustomContentList[0].endTime
  1719. : "";
  1720. }
  1721. }
  1722. }
  1723. },
  1724. /**
  1725. * 空间相关的接口
  1726. */
  1727. init() {
  1728. proxyData.padNumber = 0;
  1729. // proxyData.roomType = "";
  1730. // 获取场景配置
  1731. proxyData.getSpaceInfo();
  1732. // 动态获取场景配置
  1733. proxyData.querySpaceSceneConfig();
  1734. // 获取空间下受控设备
  1735. proxyData.getSpaceEquipList();
  1736. // 查询加班记录
  1737. proxyData.queryCustomAndScenceTimer(0);
  1738. // 获取空间下的设备信息
  1739. proxyData.getEquipments();
  1740. },
  1741. /**
  1742. *删除参数
  1743. */
  1744. updatePageUrl() {
  1745. let history: any = window.history;
  1746. let url: any = window.location.origin + window.location.pathname;
  1747. history.replaceState("", "", url);
  1748. },
  1749. // 平板当前空间
  1750. spaceData: spaceData,
  1751. copySpaceData: spaceData,
  1752. floorId: "",
  1753. buildingId: "",
  1754. // 获取pad当前绑定的空间
  1755. queryWorkSpace() {
  1756. let params: any = {
  1757. criteria: {
  1758. //类型:Object 必有字段 备注:无
  1759. projectId: proxyData.userInfo.projectId,
  1760. spaceName: "",
  1761. macAddress: proxyData.userInfo.mac, //类型:String 必有字段 备注:mac地址
  1762. },
  1763. orders: [
  1764. //类型:Array 必有字段 备注:无
  1765. {
  1766. //类型:Object 必有字段 备注:无
  1767. column: "isMajorSpace", //类型:String 必有字段 备注:无
  1768. asc: false, //类型:Boolean 必有字段 备注:无
  1769. },
  1770. ],
  1771. };
  1772. queryWorkSpace(params).then((res) => {
  1773. let resData: any = res;
  1774. if (resData.result === "success") {
  1775. proxyData.spaceData = resData?.content ?? [];
  1776. // proxyData.copySpaceData = resData?.content ?? [];
  1777. } else {
  1778. proxyData.spaceData = [];
  1779. }
  1780. proxyData.spaceData.map((item: any) => {
  1781. if (proxyData.spaceInfo.spaceId === item.spaceId) {
  1782. item.active = true;
  1783. proxyData.spaceInfo = item;
  1784. } else {
  1785. item.active = false;
  1786. }
  1787. // if (item.isMajorSpace) {
  1788. // item.active = true;
  1789. // proxyData.spaceInfo = item;
  1790. // } else {
  1791. // item.active = false;
  1792. // }
  1793. });
  1794. proxyData.copySpaceData = JSON.parse(
  1795. JSON.stringify(proxyData.spaceData)
  1796. );
  1797. });
  1798. },
  1799. // 重置空间状态
  1800. resetSpaceStatus() {
  1801. /**
  1802. *重新获取设备的时候,先初始化数据
  1803. */
  1804. proxyData.spaceExistenceDevice = {
  1805. curtain: false,
  1806. light: false,
  1807. airConditioner: false,
  1808. bodySensor: false,
  1809. };
  1810. proxyData.spaceData.map((item: any) => {
  1811. item.active = false;
  1812. });
  1813. proxyData.controlMode = 0; // 模式变成自动的
  1814. proxyData.isWork = false;
  1815. proxyData.roomType = "";
  1816. proxyData.officeData.temperature = "";
  1817. proxyData.spaceExistenceDevice = spaceExistenceDevice;
  1818. proxyData.workkArr = [];
  1819. // 切换空间的时候把加班按钮平板
  1820. proxyData.setForceOverTimeFlag(false);
  1821. },
  1822. // 更多空间
  1823. isShowMap: false,
  1824. defaultSpace: spaceInfo,
  1825. moreSpace() {
  1826. proxyData.isShowMap = true;
  1827. proxyData.defaultSpace = proxyData.spaceInfo;
  1828. },
  1829. // 数组元素更换位置
  1830. elChangeExForArray(item: any) {
  1831. let index1: any = 1;
  1832. let index2: any = 0;
  1833. for (let i = 0; i < proxyData.spaceData.length; i++) {
  1834. if (item.spaceId === proxyData.spaceData[i].spaceId) {
  1835. proxyData.spaceData[i].active = true;
  1836. if (i > 2) {
  1837. index2 = i;
  1838. break;
  1839. }
  1840. }
  1841. }
  1842. if (index2) {
  1843. let temp = proxyData.spaceData[index1];
  1844. proxyData.spaceData[index1] = proxyData.spaceData[index2];
  1845. proxyData.spaceData[index2] = temp;
  1846. }
  1847. },
  1848. // 切换空间
  1849. changeSpace(item: any, type: any = 0) {
  1850. //清除空间下所有的定时器
  1851. proxyData.clearAll();
  1852. // 重置当前选中空间的状态
  1853. proxyData.resetSpaceStatus();
  1854. proxyData.spaceInfo = item;
  1855. if (type === 1) {
  1856. proxyData.defaultSpace = item;
  1857. proxyData.elChangeExForArray(item);
  1858. }
  1859. item.active = true;
  1860. proxyData.init();
  1861. },
  1862. timeOutEvent: timeOutEvent,
  1863. touchNumber: 0,
  1864. gtouchstart(e: any) {
  1865. proxyData.touchNumber = 0;
  1866. proxyData.timeOutEvent = setTimeout(function () {
  1867. proxyData.touchNumber = 1;
  1868. proxyData.longPress();
  1869. }, 500); //这里设置定时器,定义长按500毫秒触发长按事件
  1870. return false;
  1871. },
  1872. //手释放,如果在500毫秒内就释放,则取消长按事件,此时可以执行onclick应该执行的事件
  1873. showDeleteButton() {
  1874. console.log("dddd-");
  1875. clearInterval(proxyData.touchInterval);
  1876. proxyData.touchInterval = null;
  1877. clearTimeout(proxyData.timeOutEvent); //清除定时器
  1878. if (proxyData.timeOutEvent != 0) {
  1879. }
  1880. return false;
  1881. },
  1882. //如果手指有移动,则取消所有事件,此时说明用户只是要移动而不是长按
  1883. gtouchmove() {
  1884. clearTimeout(this.timeOutEvent); //清除定时器
  1885. proxyData.timeOutEvent = 0;
  1886. },
  1887. touchInterval: touchInterval,
  1888. //真正长按后应该执行的内容
  1889. longPress() {
  1890. proxyData.timeOutEvent = 0;
  1891. proxyData.touchInterval = setInterval(() => {
  1892. proxyData.touchNumber++;
  1893. if (proxyData.touchNumber === 6) {
  1894. clearInterval(proxyData.touchInterval);
  1895. proxyData.touchInterval = null;
  1896. router.push({
  1897. name: "home",
  1898. query: { mac: proxyData.userInfo.mac, type: "logoOut" },
  1899. });
  1900. }
  1901. }, 1000);
  1902. //执行长按要执行的内容,如弹出菜单
  1903. // console.log("长按");
  1904. },
  1905. // 定时器清除
  1906. clearAll() {
  1907. proxyData.clearTimerSpaceInfo();
  1908. proxyData.clearSceneConfigTimer();
  1909. proxyData.clearSecenTimer();
  1910. proxyData.clearEquipTimer();
  1911. },
  1912. contantDetail: contantDetail,
  1913. cusServiceTimer: cusServiceTimer,
  1914. queryCustomerserviceTimer(timer: any = 3600000) {
  1915. proxyData.cusServiceTimer = setTimeout(() => {
  1916. clearTimeout(proxyData.cusServiceTimer);
  1917. proxyData.queryCustomerservice();
  1918. }, timer);
  1919. },
  1920. // 查询联系方式
  1921. queryCustomerservice() {
  1922. let params: any = {
  1923. criteria: { projectId: proxyData.userInfo.projectId },
  1924. };
  1925. queryCustomerservice(params)
  1926. .then((res) => {
  1927. let resData: any = res;
  1928. let content: any = resData?.content ?? [];
  1929. proxyData.contantDetail = content[0];
  1930. proxyData.queryCustomerserviceTimer();
  1931. })
  1932. .catch(() => {
  1933. proxyData.queryCustomerserviceTimer();
  1934. });
  1935. },
  1936. });
  1937. onBeforeUnmount(() => {
  1938. proxyData.clearAll();
  1939. clearTimeout(proxyData.cusServiceTimer);
  1940. clearTimeout(proxyData.weatherTimer);
  1941. });
  1942. onMounted(() => {
  1943. let spaceId: any = route.query.spaceId;
  1944. proxyData.spaceInfo = {
  1945. spaceId: spaceId,
  1946. };
  1947. proxyData.defaultSpace = {
  1948. spaceId: spaceId,
  1949. };
  1950. proxyData.init();
  1951. // 获取当前平板绑定的空间
  1952. proxyData.queryWorkSpace();
  1953. proxyData.getWeather();
  1954. proxyData.queryCustomerservice();
  1955. });
  1956. return {
  1957. ...toRefs(proxyData),
  1958. };
  1959. },
  1960. });
  1961. </script>
  1962. <style lang="scss" scoped>
  1963. .main {
  1964. display: flex;
  1965. justify-content: space-between;
  1966. width: 100%;
  1967. height: 100%;
  1968. box-sizing: border-box;
  1969. padding: 3.33vh 20px 0 20px;
  1970. font-size: 0;
  1971. background-image: linear-gradient(
  1972. 0deg,
  1973. rgba(69, 33, 0, 0.2),
  1974. rgba(69, 33, 0, 0.2)
  1975. );
  1976. background-size: 100% 100%;
  1977. overflow: hidden;
  1978. .main-left {
  1979. // padding-left: 20px;
  1980. display: inline-block;
  1981. //width: 54%;
  1982. .left-top {
  1983. width: 100%;
  1984. overflow: hidden;
  1985. white-space: nowrap;
  1986. text-overflow: ellipsis;
  1987. -o-text-overflow: ellipsis;
  1988. .logo-box {
  1989. display: inline-block;
  1990. vertical-align: middle;
  1991. // width: 60px;
  1992. height: 20px;
  1993. }
  1994. .left-time {
  1995. span {
  1996. font-family: "Montserrat";
  1997. font-style: normal;
  1998. font-weight: 400;
  1999. font-size: 16px;
  2000. line-height: 20px;
  2001. color: #ffffff;
  2002. }
  2003. }
  2004. .logo-icon {
  2005. display: inline-block;
  2006. vertical-align: middle;
  2007. // width: 60px;
  2008. max-width: 60px;
  2009. height: 20px;
  2010. margin-right: 5px;
  2011. }
  2012. div {
  2013. vertical-align: middle;
  2014. display: inline-block;
  2015. font-family: "Montserrat";
  2016. font-style: normal;
  2017. font-weight: 400;
  2018. font-size: 16px;
  2019. line-height: 20px;
  2020. color: #ffffff;
  2021. span {
  2022. display: inline-block;
  2023. vertical-align: middle;
  2024. &:nth-child(1) {
  2025. padding: 10px;
  2026. }
  2027. }
  2028. }
  2029. .weather {
  2030. padding-left: 22px;
  2031. line-height: 24px;
  2032. // font-size: 0;
  2033. // padding-right: 5px;
  2034. .weather-icon {
  2035. width: 24px;
  2036. height: 24px;
  2037. margin-right: 10px;
  2038. display: inline-block;
  2039. vertical-align: middle;
  2040. }
  2041. span {
  2042. display: inline-block;
  2043. vertical-align: middle;
  2044. font-family: "Montserrat";
  2045. font-style: normal;
  2046. font-weight: 400;
  2047. font-size: 16px;
  2048. padding-top: 2px;
  2049. }
  2050. }
  2051. .weixiin {
  2052. margin-left: 20px;
  2053. img {
  2054. margin-right: 5px;
  2055. width: 24px;
  2056. height: 24px;
  2057. display: inline-block;
  2058. vertical-align: middle;
  2059. }
  2060. }
  2061. }
  2062. .left-space {
  2063. padding-top: 12vh;
  2064. padding-right: 30px;
  2065. .text {
  2066. position: relative;
  2067. width: 100%;
  2068. overflow: hidden;
  2069. white-space: nowrap;
  2070. text-overflow: ellipsis;
  2071. -o-text-overflow: ellipsis;
  2072. div {
  2073. display: inline-block;
  2074. vertical-align: middle;
  2075. &:nth-child(1) {
  2076. font-style: normal;
  2077. font-weight: 500;
  2078. font-size: 40px;
  2079. line-height: 58px;
  2080. color: #ffffff;
  2081. }
  2082. &:nth-child(2) {
  2083. position: absolute;
  2084. bottom: 12px;
  2085. width: 70px;
  2086. height: 25px;
  2087. line-height: 25px;
  2088. text-align: center;
  2089. margin-left: 10px;
  2090. background: #edf1f5;
  2091. border-radius: 10px;
  2092. img {
  2093. display: inline-block;
  2094. vertical-align: middle;
  2095. width: 15px;
  2096. height: 15px;
  2097. // margin-top: 4px;
  2098. }
  2099. span {
  2100. display: inline-block;
  2101. vertical-align: middle;
  2102. margin-left: 4px;
  2103. font-weight: 400;
  2104. font-size: 12px;
  2105. line-height: 15px;
  2106. color: #8b949e;
  2107. }
  2108. }
  2109. }
  2110. }
  2111. }
  2112. .space-info {
  2113. // padding-top: 48px;
  2114. padding-top: 6vh;
  2115. .space-temp {
  2116. padding-bottom: 13px;
  2117. // border-bottom: 0.5px solid rgba(255, 255, 255, 0.4);
  2118. overflow: hidden;
  2119. white-space: nowrap;
  2120. text-overflow: ellipsis;
  2121. -o-text-overflow: ellipsis;
  2122. img {
  2123. display: inline-block;
  2124. vertical-align: middle;
  2125. width: 22px;
  2126. height: 40px;
  2127. }
  2128. span {
  2129. display: inline-block;
  2130. vertical-align: middle;
  2131. padding-left: 14px;
  2132. }
  2133. .temp-text {
  2134. font-family: "Noto Sans SC";
  2135. font-style: normal;
  2136. font-weight: 500;
  2137. font-size: 32px;
  2138. line-height: 46px;
  2139. text-align: center;
  2140. color: #ffffff;
  2141. padding-left: 13px;
  2142. }
  2143. .temp-num {
  2144. position: relative;
  2145. padding-left: 24px;
  2146. font-family: "Montserrat";
  2147. font-style: normal;
  2148. font-weight: 400;
  2149. font-size: 60px;
  2150. line-height: 73px;
  2151. color: #ffffff;
  2152. sup {
  2153. position: absolute;
  2154. top: 0;
  2155. font-family: "Noto Sans SC";
  2156. font-style: normal;
  2157. font-weight: 500;
  2158. font-size: 13px;
  2159. line-height: 19px;
  2160. color: #ffffff;
  2161. }
  2162. }
  2163. }
  2164. }
  2165. .space-env {
  2166. display: flex;
  2167. // padding-top: 20px;
  2168. padding-top: 5vh;
  2169. justify-content: space-between;
  2170. text-align: left;
  2171. overflow: hidden;
  2172. white-space: nowrap;
  2173. text-overflow: ellipsis;
  2174. -o-text-overflow: ellipsis;
  2175. .env-item {
  2176. padding-top: 8px;
  2177. height: 88px;
  2178. &:nth-child(1) {
  2179. text-align: left;
  2180. width: 129px;
  2181. }
  2182. &:nth-child(2) {
  2183. // text-align: center;
  2184. padding-left: 20px;
  2185. width: 129px;
  2186. }
  2187. &:nth-child(3) {
  2188. // text-align: center;
  2189. padding-left: 20px;
  2190. width: 125px;
  2191. }
  2192. &:nth-child(4) {
  2193. // text-align: center;
  2194. padding-left: 20px;
  2195. width: 100px;
  2196. }
  2197. div {
  2198. img {
  2199. display: inline-block;
  2200. vertical-align: middle;
  2201. width: 20px;
  2202. height: 20px;
  2203. margin-right: 5px;
  2204. }
  2205. span {
  2206. display: inline-block;
  2207. vertical-align: middle;
  2208. font-size: 16px;
  2209. line-height: 23px;
  2210. text-align: center;
  2211. color: #ffffff;
  2212. }
  2213. &:nth-child(2) {
  2214. padding-top: 10px;
  2215. font-family: "Montserrat";
  2216. font-style: normal;
  2217. font-weight: 400;
  2218. font-size: 32px;
  2219. line-height: 39px;
  2220. color: #ffffff;
  2221. sup {
  2222. font-family: "Noto Sans SC";
  2223. font-style: normal;
  2224. font-weight: 500;
  2225. font-size: 13px;
  2226. line-height: 19px;
  2227. }
  2228. }
  2229. }
  2230. .env-text {
  2231. position: relative;
  2232. width: 100%;
  2233. // text-align: left;
  2234. sup {
  2235. position: absolute;
  2236. // right: -5px;
  2237. top: 10px;
  2238. }
  2239. }
  2240. }
  2241. .env-item-radius {
  2242. border-radius: 25px;
  2243. }
  2244. .env-color {
  2245. // background: linear-gradient(
  2246. // 180deg,
  2247. // rgba(205, 11, 0, 0) 0%,
  2248. // #cd0b00 100%
  2249. // );
  2250. // opacity: 0.8;
  2251. // border-radius: 25px;
  2252. }
  2253. }
  2254. }
  2255. .main-right {
  2256. //width: 45%;
  2257. // width: 330px;
  2258. padding-bottom: 20px;
  2259. display: inline-block;
  2260. overflow: auto;
  2261. .work-btn {
  2262. width: 100%;
  2263. height: 98px;
  2264. font-size: 14px;
  2265. text-align: left;
  2266. }
  2267. }
  2268. .fotter {
  2269. position: fixed;
  2270. font-size: 0;
  2271. left: 0;
  2272. bottom: 0;
  2273. z-index: 666;
  2274. .fotter-item {
  2275. position: relative;
  2276. display: inline-block;
  2277. vertical-align: middle;
  2278. width: 186px;
  2279. height: 40px;
  2280. font-size: 0;
  2281. img {
  2282. width: 100%;
  2283. height: 40px;
  2284. }
  2285. &:nth-child(1) {
  2286. left: 0;
  2287. z-index: 333;
  2288. }
  2289. &:nth-child(2) {
  2290. margin-left: -25px;
  2291. z-index: 222;
  2292. }
  2293. &:nth-child(3) {
  2294. margin-left: -25px;
  2295. z-index: 111;
  2296. }
  2297. span {
  2298. position: absolute;
  2299. display: inline-block;
  2300. width: 128px;
  2301. height: 18px;
  2302. left: 50%;
  2303. top: 50%;
  2304. transform: translateY(-40%) translateX(-50%);
  2305. font-family: "Noto Sans SC";
  2306. font-style: normal;
  2307. font-weight: 400;
  2308. font-size: 16px;
  2309. line-height: 18px;
  2310. text-align: center;
  2311. color: #c3c7cb;
  2312. word-wrap: break-word; /*强制换行*/
  2313. overflow: hidden; /*超出隐藏*/
  2314. text-overflow: ellipsis; /*隐藏后添加省略号*/
  2315. white-space: nowrap; /*强制不换行*/
  2316. }
  2317. }
  2318. .fotter-item-end {
  2319. position: relative;
  2320. display: inline-block;
  2321. vertical-align: middle;
  2322. width: 93px;
  2323. height: 40px;
  2324. margin-left: -30px;
  2325. text-align: center;
  2326. z-index: 1;
  2327. img {
  2328. width: 100%;
  2329. }
  2330. span {
  2331. position: absolute;
  2332. left: 50%;
  2333. top: 50%;
  2334. transform: translate(-50%, -50%);
  2335. font-family: "Noto Sans SC";
  2336. font-style: normal;
  2337. font-weight: 400;
  2338. font-size: 16px;
  2339. text-align: center;
  2340. color: #c3c7cb;
  2341. }
  2342. }
  2343. .fotter-item-active {
  2344. margin-bottom: 0px;
  2345. z-index: 999;
  2346. img {
  2347. height: 40px;
  2348. }
  2349. span {
  2350. color: #1f2429;
  2351. }
  2352. }
  2353. }
  2354. }
  2355. </style>
  2356. <style lang="scss">
  2357. .map-popup {
  2358. background: $elBg;
  2359. }
  2360. </style>