index.vue 69 KB

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