【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

863 lines
28 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="dashboard-container">
  3. <div class="dashboard-editor-container">
  4. <!-- <github-corner class="github-corner" /> -->
  5. <panel-group />
  6. <!-- <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
  7. <line-chart :chart-data="lineChartData" />
  8. </el-row> -->
  9. <el-row :gutter="20" style="margin-bottom:20px;height: 152px;">
  10. <el-col :xs="24" :sm="24" :lg="8">
  11. <!-- search-area -->
  12. <div class="container-left" style="height: 100%;margin: 0; position: relative;">
  13. <span class="right-top-line" />
  14. <span class="left-bottom-line" />
  15. <h3 class=" table-title" style="margin-bottom: 26px;">
  16. <p class="title-arrow">
  17. 档案检索
  18. </p>
  19. </h3>
  20. <SearchAcrives :is-home-search="isHomeSearch" />
  21. </div>
  22. </el-col>
  23. <el-col :xs="24" :sm="24" :lg="8">
  24. <div class="container-left" style="height: 100%;margin: 0; position: relative;">
  25. <span class="right-top-line" />
  26. <span class="left-bottom-line" />
  27. <h3 class=" table-title">
  28. <p class="title-arrow">
  29. <i class="iconfont icon-kongqizhiliangshuju" />环境数据
  30. </p>
  31. </h3>
  32. <div class="home-floor-tab">
  33. <p :class="{ 'active-floor': floorEnvIndex == 0 }" @click="changeFloorEnvTab(0)">5楼</p>
  34. <p :class="{ 'active-floor': floorEnvIndex == 1 }" @click="changeFloorEnvTab(1)">7楼</p>
  35. </div>
  36. <el-carousel ref="carouselEnvRef" trigger="click" :interval="10000" indicator-position="none" height="110px" arrow="never" @change="handleEnvChange">
  37. <el-carousel-item>
  38. <div class="warehouse-tab" style="height: calc(100%); padding-left: 15px;">
  39. <div class="five-bottom">
  40. <p class="env-title">档案库</p>
  41. <ul class="leakage-list">
  42. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_001.curstatus > 0 }">
  43. <p>温度</p>
  44. <span>{{ topDisplayData.DAK_DIV_TOP_001.curValue }}</span>
  45. </li>
  46. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_002.curstatus > 0 }">
  47. <p>湿度</p>
  48. <span>{{ topDisplayData.DAK_DIV_TOP_002.curValue }}</span>
  49. </li>
  50. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_003.curstatus > 0 }">
  51. <p>CO2</p>
  52. <span>{{ topDisplayData.DAK_DIV_TOP_003.curValue }}</span>
  53. </li>
  54. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_005.curstatus > 0 }">
  55. <p>PM2.5</p>
  56. <span>{{ topDisplayData.DAK_DIV_TOP_005.curValue }}</span>
  57. </li>
  58. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_006.curstatus > 0 }">
  59. <p>PM10</p>
  60. <span>{{ topDisplayData.DAK_DIV_TOP_006.curValue }}</span>
  61. </li>
  62. <li :class="{ 'leakage-warn': topDisplayData.DAK_DIV_TOP_004.curstatus > 0 }">
  63. <p>VOC</p>
  64. <span>{{ topDisplayData.DAK_DIV_TOP_004.curValue }}</span>
  65. </li>
  66. </ul>
  67. </div>
  68. <div style="display: flex; justify-content:space-between; align-items: center;">
  69. <div class="five-bottom">
  70. <p class="env-title">整理室</p>
  71. <ul class="leakage-list">
  72. <li :class="{ 'leakage-warn': oaoMessage.ZLS_MO_OAO_001.alarmState }">
  73. <p>温度</p>
  74. <span>{{ oaoMessage.ZLS_MO_OAO_001.wendu }}</span>
  75. </li>
  76. <li :class="{ 'leakage-warn': oaoMessage.ZLS_MO_OAO_001.alarmState }">
  77. <p>湿度</p>
  78. <span>{{ oaoMessage.ZLS_MO_OAO_001.sidu }}</span>
  79. </li>
  80. </ul>
  81. </div>
  82. <div class="five-bottom" style="padding-right: 13px;">
  83. <p class="env-title">阅览室</p>
  84. <ul class="leakage-list">
  85. <li :class="{ 'leakage-warn': oaoMessage.YLS_MO_OAO_001.alarmState }">
  86. <p>温度</p>
  87. <span>{{ oaoMessage.YLS_MO_OAO_001.wendu }}</span>
  88. </li>
  89. <li :class="{ 'leakage-warn': oaoMessage.YLS_MO_OAO_001.alarmState}">
  90. <p>湿度</p>
  91. <span>{{ oaoMessage.YLS_MO_OAO_001.sidu }}</span>
  92. </li>
  93. </ul>
  94. </div>
  95. </div>
  96. </div>
  97. </el-carousel-item>
  98. <el-carousel-item>
  99. <div class="warehouse-tab" style="height: calc(100%); padding-left: 15px;">
  100. <div style="display: flex; justify-content: flex-start; align-items: center;">
  101. <p class="env-title">现行<br>文件室</p>
  102. <ul class="leakage-list">
  103. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_001.curstatus > 0 }">
  104. <p>温度</p>
  105. <span>{{ topDisplayData.XXW_DIV_TOP_001.curValue }}</span>
  106. </li>
  107. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_002.curstatus > 0 }">
  108. <p>湿度</p>
  109. <span>{{ topDisplayData.XXW_DIV_TOP_002.curValue }}</span>
  110. </li>
  111. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_003.curstatus > 0 }">
  112. <p>CO2</p>
  113. <span>{{ topDisplayData.XXW_DIV_TOP_003.curValue }}</span>
  114. </li>
  115. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_005.curstatus > 0 }">
  116. <p>PM2.5</p>
  117. <span>{{ topDisplayData.XXW_DIV_TOP_005.curValue }}</span>
  118. </li>
  119. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_006.curstatus > 0 }">
  120. <p>PM10</p>
  121. <span>{{ topDisplayData.XXW_DIV_TOP_006.curValue }}</span>
  122. </li>
  123. <li :class="{ 'leakage-warn': topDisplayData.XXW_DIV_TOP_004.curstatus > 0 }">
  124. <p>VOC</p>
  125. <span>{{ topDisplayData.XXW_DIV_TOP_004.curValue }}</span>
  126. </li>
  127. </ul>
  128. </div>
  129. <div style="display: flex; justify-content: flex-start; align-items: center;">
  130. <p class="env-title">待销<br>文件室</p>
  131. <ul class="leakage-list">
  132. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_001.curstatus > 0 }">
  133. <p>温度</p>
  134. <span>{{ topDisplayData.DXW_DIV_TOP_001.curValue }}</span>
  135. </li>
  136. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_002.curstatus > 0 }">
  137. <p>湿度</p>
  138. <span>{{ topDisplayData.DXW_DIV_TOP_002.curValue }}</span>
  139. </li>
  140. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_003.curstatus > 0 }">
  141. <p>CO2</p>
  142. <span>{{ topDisplayData.DXW_DIV_TOP_003.curValue }}</span>
  143. </li>
  144. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_005.curstatus > 0 }">
  145. <p>PM2.5</p>
  146. <span>{{ topDisplayData.DXW_DIV_TOP_005.curValue }}</span>
  147. </li>
  148. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_006.curstatus > 0 }">
  149. <p>PM10</p>
  150. <span>{{ topDisplayData.DXW_DIV_TOP_006.curValue }}</span>
  151. </li>
  152. <li :class="{ 'leakage-warn': topDisplayData.DXW_DIV_TOP_004.curstatus > 0 }">
  153. <p>VOC</p>
  154. <span>{{ topDisplayData.DXW_DIV_TOP_004.curValue }}</span>
  155. </li>
  156. </ul>
  157. </div>
  158. </div>
  159. </el-carousel-item>
  160. </el-carousel>
  161. </div>
  162. </el-col>
  163. <el-col :xs="24" :sm="24" :lg="8">
  164. <div class="container-left" style="height: 100%;margin: 0; position: relative;">
  165. <span class="right-top-line" />
  166. <span class="left-bottom-line" />
  167. <h3 class=" table-title">
  168. <p class="title-arrow">
  169. <svg-icon icon-class="a-3Dkufang" class-name="warehouse-svg" />3D库房
  170. </p>
  171. </h3>
  172. <div class="home-floor-tab">
  173. <p :class="{ 'active-floor': floorIndex == 0 }" @click="changeFloorTab(0)">5楼</p>
  174. <p :class="{ 'active-floor': floorIndex == 1 }" @click="changeFloorTab(1)">7楼</p>
  175. </div>
  176. <el-carousel ref="carouselRef" trigger="click" :interval="4000" indicator-position="none" height="110px" arrow="never" @change="handleChange">
  177. <el-carousel-item>
  178. <div class="warehouse-tab">
  179. <ul class="warehouse-nav">
  180. <li @click="changeActiveTab(1,0)">
  181. <span />
  182. <p>全景图</p>
  183. </li>
  184. <li @click="changeActiveTab(1,1)">
  185. <span />
  186. <p>档案库</p>
  187. </li>
  188. <li @click="changeActiveTab(1,2)">
  189. <span />
  190. <p>整理室</p>
  191. </li>
  192. <li @click="changeActiveTab(1,3)">
  193. <span />
  194. <p>阅览室</p>
  195. </li>
  196. </ul>
  197. </div>
  198. </el-carousel-item>
  199. <el-carousel-item>
  200. <div class="warehouse-tab">
  201. <ul class="warehouse-nav">
  202. <li @click="changeActiveTab(0,4)">
  203. <span />
  204. <p>全景图</p>
  205. </li>
  206. <li @click="changeActiveTab(0,5)">
  207. <span />
  208. <p>现行文件室</p>
  209. </li>
  210. <li @click="changeActiveTab(0,6)">
  211. <span />
  212. <p>待销文件室</p>
  213. </li>
  214. </ul>
  215. </div>
  216. </el-carousel-item>
  217. </el-carousel>
  218. </div>
  219. </el-col>
  220. </el-row>
  221. <el-row :gutter="20" style="margin-bottom:20px;height: calc(50vh - 251px);">
  222. <el-col :xs="24" :sm="24" :lg="8">
  223. <!-- 待办事项 -->
  224. <div class="container-wrap">
  225. <span class="right-top-line" />
  226. <span class="left-bottom-line" />
  227. <h3 class="table-title">
  228. <p class="title-arrow">
  229. <svg-icon icon-class="tongzhigonggao" class-name="warehouse-svg" />待办事项
  230. </p>
  231. </h3>
  232. <div style="height: calc(100% - 40px);overflow-y: auto;overflow-x: hidden;">
  233. <ul v-if="waitBorrowerData.length !== 0" class="todo-list">
  234. <li v-for="(item,index) in waitBorrowerData" :key="index" :class="item.title.includes('警告') || item.title.includes('逾期') ? 'warn-info' :''" @click="handleToWaiting(item)">
  235. <el-tooltip class="item" effect="dark" :content="item.title" :enterable="false" placement="top">
  236. <p>{{ item.title }}</p>
  237. </el-tooltip>
  238. <span>{{ item.update_time | parseTime }}</span>
  239. </li>
  240. </ul>
  241. <div v-else class="empty-main" style="height: 100%;">
  242. <svg-icon icon-class="empty" class-name="empty-img" />
  243. <p>暂无数据</p>
  244. </div>
  245. </div>
  246. </div>
  247. </el-col>
  248. <el-col :xs="24" :sm="24" :lg="8">
  249. <!-- 门禁记录 -->
  250. <security-door :height="'calc(100% - 40px)'" />
  251. </el-col>
  252. <el-col :xs="24" :sm="24" :lg="8">
  253. <!-- 报警记录 -->
  254. <warehouse-warning :height="'calc(100% - 40px)'" />
  255. </el-col>
  256. </el-row>
  257. <el-row :gutter="20" style="height: calc(50vh - 251px);">
  258. <el-col :xs="24" :sm="24" :lg="8">
  259. <!-- 档案借阅 -->
  260. <div class="container-wrap">
  261. <span class="right-top-line" />
  262. <span class="left-bottom-line" />
  263. <h3 class="table-title">
  264. <p class="title-arrow">档案借阅</p>
  265. </h3>
  266. <div class="chart-wrapper">
  267. <lend-across :lend-data="lendData" />
  268. </div>
  269. </div>
  270. </el-col>
  271. <el-col :xs="24" :sm="24" :lg="8">
  272. <!-- 档案类别 -->
  273. <div class="container-wrap">
  274. <span class="right-top-line" />
  275. <span class="left-bottom-line" />
  276. <h3 class="table-title">
  277. <p class="title-arrow">档案类别</p>
  278. </h3>
  279. <div class="chart-wrapper">
  280. <cate-pie :cate-data="cateData" />
  281. </div>
  282. </div>
  283. </el-col>
  284. <el-col :xs="24" :sm="24" :lg="8">
  285. <!-- 档案类型 -->
  286. <div class="container-wrap">
  287. <span class="right-top-line" />
  288. <span class="left-bottom-line" />
  289. <h3 class="table-title">
  290. <p class="title-arrow">档案类型</p>
  291. </h3>
  292. <div v-if="typeData.length !== 0" class="chart-wrapper">
  293. <type-pie :type-data="typeData" />
  294. </div>
  295. <div v-else class="empty-main">
  296. <svg-icon icon-class="empty" class-name="empty-img" />
  297. <p>暂无数据</p>
  298. </div>
  299. </div>
  300. </el-col>
  301. </el-row>
  302. </div>
  303. </div>
  304. </template>
  305. <script>
  306. import PanelGroup from './dashboard/PanelGroup'
  307. import lendAcross from '@/views/components/echarts/lendAcross.vue'
  308. import catePie from '@/views/components/echarts/catePie.vue'
  309. import typePie from '@/views/components/echarts/typePie.vue'
  310. import WarehouseWarning from '@/views/components/WarehouseWarning'
  311. import SecurityDoor from '@/views/components/SecurityDoor'
  312. import SearchAcrives from '@/views/archivesManage/archivesSearch/index'
  313. import { statisticsCrud } from '@/views/system/archiveStatistics/mixins/statistics'
  314. import { FetchWaitBorrower } from '@/api/archivesManage/lendManage'
  315. import displayConfigApi from '@/api/storeManage/displayConfig'
  316. import thirdApi from '@/api/thirdApi'
  317. import { mapGetters } from 'vuex'
  318. export default {
  319. name: 'Dashboard',
  320. components: {
  321. WarehouseWarning,
  322. SecurityDoor,
  323. PanelGroup,
  324. lendAcross,
  325. catePie,
  326. typePie,
  327. SearchAcrives
  328. },
  329. mixins: [statisticsCrud],
  330. data() {
  331. return {
  332. waitBorrowerData: [],
  333. floorIndex: 0,
  334. floorEnvIndex: 0,
  335. isHomeSearch: false,
  336. roomId: null,
  337. allDisplayConfigData: [],
  338. displayConfigData: [],
  339. url: '',
  340. allDeviceIds: [],
  341. oaoMessage: {
  342. ZLS_MO_OAO_001: {
  343. show: false,
  344. wendu: '',
  345. sidu: '',
  346. alarmState: 0
  347. },
  348. YLS_MO_OAO_001: {
  349. show: false,
  350. wendu: '',
  351. sidu: '',
  352. alarmState: 0
  353. }
  354. },
  355. topDisplayData: {
  356. DAK_DIV_TOP_001: {
  357. show: false,
  358. curValue: '',
  359. unit: '',
  360. curstatus: 0
  361. },
  362. DAK_DIV_TOP_002: {
  363. show: false,
  364. curValue: '',
  365. unit: '',
  366. curstatus: 0
  367. },
  368. DAK_DIV_TOP_003: {
  369. show: false,
  370. curValue: '',
  371. unit: '',
  372. curstatus: 0
  373. },
  374. DAK_DIV_TOP_004: {
  375. show: false,
  376. curValue: '',
  377. unit: '',
  378. curstatus: 0
  379. },
  380. DAK_DIV_TOP_005: {
  381. show: false,
  382. curValue: '',
  383. unit: '',
  384. curstatus: 0
  385. },
  386. DAK_DIV_TOP_006: {
  387. show: false,
  388. curValue: '',
  389. unit: '',
  390. curstatus: 0
  391. },
  392. // 7F 待销文件室
  393. DXW_DIV_TOP_001: {
  394. show: false,
  395. curValue: '',
  396. unit: '',
  397. curstatus: 0
  398. },
  399. DXW_DIV_TOP_002: {
  400. show: false,
  401. curValue: '',
  402. unit: '',
  403. curstatus: 0
  404. },
  405. DXW_DIV_TOP_003: {
  406. show: false,
  407. curValue: '',
  408. unit: '',
  409. curstatus: 0
  410. },
  411. DXW_DIV_TOP_004: {
  412. show: false,
  413. curValue: '',
  414. unit: '',
  415. curstatus: 0
  416. },
  417. DXW_DIV_TOP_005: {
  418. show: false,
  419. curValue: '',
  420. unit: '',
  421. curstatus: 0
  422. },
  423. DXW_DIV_TOP_006: {
  424. show: false,
  425. curValue: '',
  426. unit: '',
  427. curstatus: 0
  428. },
  429. // 7F 现行文件室 / 信息技术室
  430. XXW_DIV_TOP_001: {
  431. show: false,
  432. curValue: '',
  433. unit: '',
  434. curstatus: 0
  435. },
  436. XXW_DIV_TOP_002: {
  437. show: false,
  438. curValue: '',
  439. unit: '',
  440. curstatus: 0
  441. },
  442. XXW_DIV_TOP_003: {
  443. show: false,
  444. curValue: '',
  445. unit: '',
  446. curstatus: 0
  447. },
  448. XXW_DIV_TOP_004: {
  449. show: false,
  450. curValue: '',
  451. unit: '',
  452. curstatus: 0
  453. },
  454. XXW_DIV_TOP_005: {
  455. show: false,
  456. curValue: '',
  457. unit: '',
  458. curstatus: 0
  459. },
  460. XXW_DIV_TOP_006: {
  461. show: false,
  462. curValue: '',
  463. unit: '',
  464. curstatus: 0
  465. }
  466. }
  467. }
  468. },
  469. computed: {
  470. ...mapGetters([
  471. 'roles'
  472. ])
  473. },
  474. async created() {
  475. this.getWaitBorrower()
  476. this.roomId = null
  477. const params = {
  478. storeroomId: null,
  479. isQueryAll: 1
  480. }
  481. this.allDisplayConfigData = await displayConfigApi.list(params)
  482. this.allDisplayConfigData.forEach(element => {
  483. if (element.isDisplay && element.bindState && element.deviceInfo && (element.divPosition.includes('OAO') || element.divPosition.includes('TOP') || element.divPosition.includes('LS'))) {
  484. this.allDeviceIds.push(element.deviceInfo.deviceId)
  485. if (!this.url) {
  486. this.url = 'http://' + element.deviceInfo.deviceIp + ':' + element.deviceInfo.devicePort
  487. }
  488. }
  489. })
  490. this.displayConfigData = this.allDisplayConfigData.filter((item) => { return item.isDisplay && item.bindState && item.deviceInfo && (item.divPosition.includes('OAO') || item.divPosition.includes('TOP') || item.divPosition.includes('LS')) })
  491. await this.getRealTimeData()
  492. },
  493. mounted() {
  494. },
  495. methods: {
  496. handleChange(index) {
  497. this.floorIndex = index
  498. },
  499. handleEnvChange(index) {
  500. this.floorEnvIndex = index
  501. },
  502. changeFloorTab(index) {
  503. this.floorIndex = index
  504. const carousel = this.$refs.carouselRef
  505. carousel.setActiveItem(index)
  506. },
  507. changeFloorEnvTab(index) {
  508. this.floorEnvIndex = index
  509. const carousel = this.$refs.carouselEnvRef
  510. carousel.setActiveItem(index)
  511. },
  512. // handleSetLineChartData(type) {
  513. // this.lineChartData = lineChartData[type]
  514. // },
  515. getWaitBorrower() {
  516. FetchWaitBorrower().then(data => {
  517. if (data) {
  518. this.waitBorrowerData = data
  519. }
  520. })
  521. },
  522. changeActiveTab(floorId, roomId) {
  523. if (this.roles.includes('admin') || this.roles.includes('warehouse3D')) {
  524. this.$router.push({
  525. name: 'warehouse3D',
  526. params: {
  527. floorId: floorId,
  528. roomId: roomId
  529. }
  530. })
  531. } else {
  532. this.$message({
  533. message: '当前账号没有权限',
  534. type: 'warning'
  535. })
  536. }
  537. },
  538. handleToWaiting(item) {
  539. if (this.roles.includes('admin') || this.roles.includes('lendManage:list')) {
  540. // 待借档案:到“待借档案” 0
  541. // 借出确认:到“借出确认” 1
  542. // 逾期警告:到“归还确认” 2
  543. // 即将到期:到“归还确认” 3
  544. let locationIndex = 0
  545. if (item.title.includes('待借档案')) {
  546. locationIndex = 0
  547. } else if (item.title.includes('借出确认')) {
  548. locationIndex = 1
  549. } else if (item.title.includes('逾期警告')) {
  550. locationIndex = 2
  551. } else if (item.title.includes('即将到期')) {
  552. locationIndex = 2
  553. }
  554. this.$router.push({
  555. name: 'lendManage',
  556. params: {
  557. locationIndex: locationIndex
  558. }
  559. })
  560. } else {
  561. this.$message({
  562. message: '当前账号没有权限',
  563. type: 'warning'
  564. })
  565. }
  566. },
  567. getRealTimeData() {
  568. if (this.allDeviceIds.length > 0) {
  569. console.log('this.allDeviceIds', this.allDeviceIds)
  570. console.log('this.displayConfigData', this.displayConfigData)
  571. thirdApi.getRealTimeData({ ids: this.allDeviceIds, url: this.url }).then((data) => {
  572. // this.oaoMessage.splice(0, this.oaoMessage.length)
  573. this.displayConfigData.forEach(element => {
  574. if (element.divPosition.includes('TOP') && element.deviceSpecParams[0]) {
  575. // 获取页面div显示的数据
  576. const result = data.find((item) => {
  577. return item.property_id === element.deviceSpecParams[0].paramId && item.device_id === element.deviceInfo.deviceId
  578. })
  579. if (result) {
  580. this.$set(this.topDisplayData, element.divPosition, {
  581. show: true,
  582. curValue: result.curvalue,
  583. unit: result.unit,
  584. curstatus: result.curstatus
  585. })
  586. } else {
  587. this.$set(this.topDisplayData, element.divPosition, {
  588. show: false
  589. })
  590. }
  591. } else if (element.divPosition.includes('OAO')) {
  592. const wenduParamId = element.deviceSpecParams.find((item) => { return item.paramName === '温度' })?.paramId
  593. const siduParamId = element.deviceSpecParams.find((item) => { return item.paramName === '湿度' })?.paramId
  594. let wendu = {}
  595. let sidu = {}
  596. if (wenduParamId) {
  597. wendu = data.find((item) => {
  598. return item.property_id === wenduParamId && item.device_id === element.deviceInfo.deviceId
  599. })
  600. }
  601. if (siduParamId) {
  602. sidu = data.find((item) => {
  603. return item.property_id === siduParamId && item.device_id === element.deviceInfo.deviceId
  604. })
  605. }
  606. this.$set(this.oaoMessage, element.divPosition, {
  607. show: true,
  608. wendu: (wendu?.curvalue) ? (Math.round(wendu?.curvalue)) : '-',
  609. sidu: (sidu?.curvalue) ? (Math.round(sidu?.curvalue)) : '-',
  610. alarmState: (wendu && wendu.curstatus > 0) || (sidu && sidu.curstatus > 0)
  611. })
  612. }
  613. })
  614. })
  615. }
  616. }
  617. }
  618. }
  619. </script>
  620. <style rel="stylesheet/scss" lang="scss" scoped>
  621. @import "~@/assets/styles/lend-manage.scss";
  622. .dashboard-editor-container {
  623. padding: 20px;
  624. background-color: #031435;
  625. position: relative;
  626. .chart-wrapper {
  627. height: calc(100% - 40px);
  628. }
  629. }
  630. @media (max-width: 1024px) {
  631. .chart-wrapper {
  632. padding: 8px;
  633. }
  634. }
  635. .warehouse-tab {
  636. color: #fff;
  637. .warehouse-nav {
  638. display: flex;
  639. justify-content: space-around;
  640. position: absolute;
  641. bottom: 15px;
  642. z-index: 11;
  643. width: 100%;
  644. padding: 0;
  645. li {
  646. display: flex;
  647. flex-direction: column;
  648. align-items: center;
  649. flex-wrap: nowrap;
  650. align-content: center;
  651. justify-content: center;
  652. height: 90px;
  653. text-align: right;
  654. font-size: 14px;
  655. position: relative;
  656. &:hover {
  657. cursor: pointer;
  658. }
  659. span {
  660. width: 72px;
  661. height: 52px;
  662. margin-bottom: 7px;
  663. }
  664. p {
  665. text-align: left;
  666. }
  667. &:first-child span {
  668. background: url("~@/assets/images/tab_fullview_logo.png") no-repeat;
  669. }
  670. &:nth-child(2) span {
  671. background: url("~@/assets/images/tab_archives_logo.png") no-repeat;
  672. }
  673. &:nth-child(3) span {
  674. background: url("~@/assets/images/tab_collate_logo.png") no-repeat;
  675. }
  676. &:nth-child(4) span {
  677. background: url("~@/assets/images/tab_read_logo.png") no-repeat;
  678. }
  679. }
  680. }
  681. }
  682. .el-col {
  683. height: 100%;
  684. }
  685. .container-left,
  686. .container-right,
  687. .container-wrap,
  688. .el-card,
  689. .header-container-wrap {
  690. min-height: 100%;
  691. }
  692. .warehose-el-table ::v-deep .el-table__header-wrapper {
  693. box-shadow: inset 0px 0px 6px 1px #339cff;
  694. background: none !important;
  695. }
  696. .container-wrap {
  697. min-height: auto;
  698. height: 100%;
  699. // overflow: hidden;
  700. }
  701. .todo-list {
  702. padding: 0 20px;
  703. & li {
  704. height: 42px;
  705. line-height: 42px;
  706. margin-bottom: 10px;
  707. font-size: 13px;
  708. color: #ffffff;
  709. background: #02255f;
  710. box-shadow: inset 0px 0px 6px 1px #339cff;
  711. border-radius: 26px;
  712. opacity: 1;
  713. cursor: pointer;
  714. &.warn-info{
  715. color: #F65163;
  716. box-shadow: inset 0px 0px 15px 1px #f65164;
  717. }
  718. & p {
  719. display: inline-block;
  720. width: calc(100% - 140px);
  721. padding-left: 10px;
  722. text-overflow: ellipsis;
  723. overflow: hidden;
  724. white-space: nowrap;
  725. word-break: break-all;
  726. }
  727. & span {
  728. float: right;
  729. padding-right: 10px;
  730. }
  731. }
  732. }
  733. ::v-deep
  734. .el-table--striped
  735. .el-table__body
  736. tr.el-table__row--striped
  737. td.el-table__cell {
  738. background: #02255f;
  739. }
  740. .search-area {
  741. width: 100%;
  742. height: 100%;
  743. margin: 0;
  744. display: flex;
  745. align-items: center;
  746. justify-content: center;
  747. }
  748. ::v-deep .search-main{
  749. padding: 0 0 0 20px;
  750. .head-container{
  751. padding: 0;
  752. width: 100% !important;
  753. .search-input {
  754. width: 100% !important;
  755. }
  756. .input-with-select{
  757. width: 100% !important;
  758. }
  759. }
  760. }
  761. .home-floor-tab{
  762. position: absolute;
  763. right: 14px;
  764. top: 10px;
  765. color: #fff;
  766. display: flex;
  767. justify-self: flex-start;
  768. p{
  769. font-size: 14px;
  770. padding:2px 6px;
  771. margin-right: 6px;
  772. color: #339cff;
  773. border: 1px solid #339cff;
  774. border-radius: 4px;
  775. cursor: pointer;
  776. &.active-floor,
  777. &:hover{
  778. color: #fff;
  779. background-color: #113d72;
  780. }
  781. }
  782. }
  783. .icon-kongqizhiliangshuju{
  784. font-size: 14px;
  785. color: #F65163;
  786. margin-right: 6px
  787. }
  788. .env-title{
  789. width: 50px;
  790. height: 40px;
  791. line-height: 20px;
  792. text-align: center;
  793. font-size: 12px;
  794. margin: 10px 10px 0 0;
  795. }
  796. .leakage-list {
  797. display: flex;
  798. justify-content:flex-start;
  799. flex: 1;
  800. text-align: left;
  801. font-size: 10px;
  802. li {
  803. position: relative;
  804. display: flex;
  805. justify-content: flex-start;
  806. flex-wrap: wrap;
  807. align-items: center;
  808. width: 60px;
  809. height: 40px;
  810. border: 1px solid #3581cc;
  811. background-color: #02255f;
  812. border-radius: 2px;
  813. padding: 4px;
  814. margin: 10px 10px 0 0;
  815. font-size: 12px;
  816. &::before {
  817. content: "";
  818. position: absolute;
  819. top: 2px;
  820. right: 2px;
  821. width: 0;
  822. height: 0;
  823. border-color: transparent #339cff;
  824. border-width: 0 4px 4px 0;
  825. border-style: solid;
  826. }
  827. p {
  828. width: 100%;
  829. }
  830. span{
  831. width: 100%;
  832. color: #18B08F;
  833. text-align: right;
  834. }
  835. &.leakage-warn {
  836. border-color: #f65164;
  837. box-shadow: inset 0px 0px 15px 1px #f65164;
  838. color: #f65164;
  839. &::before {
  840. border-color: transparent #f65164;
  841. }
  842. span {
  843. color: #f65164;
  844. }
  845. }
  846. }
  847. }
  848. .five-bottom{
  849. display: flex;
  850. justify-content: flex-start;
  851. align-items: center;
  852. .env-title{
  853. line-height: 40px;
  854. }
  855. }
  856. </style>