index.vue 72 KB

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