index.vue 70 KB

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