黄陂项目
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.

861 lines
28 KiB

  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)">3楼</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="display: flex; justify-content: center; align-items: center; height: calc(100%); ">
  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>TVOC</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>TVOC</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>TVOC</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)">3楼</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. thirdApi.getRealTimeData({ ids: this.allDeviceIds, url: this.url }).then((data) => {
  570. // this.oaoMessage.splice(0, this.oaoMessage.length)
  571. this.displayConfigData.forEach(element => {
  572. if (element.divPosition.includes('TOP') && element.deviceSpecParams[0]) {
  573. // 获取页面div显示的数据
  574. const result = data.find((item) => {
  575. return item.property_id === element.deviceSpecParams[0].paramId && item.device_id === element.deviceInfo.deviceId
  576. })
  577. if (result) {
  578. this.$set(this.topDisplayData, element.divPosition, {
  579. show: true,
  580. curValue: result.curvalue,
  581. unit: result.unit,
  582. curstatus: result.curstatus
  583. })
  584. } else {
  585. this.$set(this.topDisplayData, element.divPosition, {
  586. show: false
  587. })
  588. }
  589. } else if (element.divPosition.includes('OAO')) {
  590. const wenduParamId = element.deviceSpecParams.find((item) => { return item.paramName === '温度' })?.paramId
  591. const siduParamId = element.deviceSpecParams.find((item) => { return item.paramName === '湿度' })?.paramId
  592. let wendu = {}
  593. let sidu = {}
  594. if (wenduParamId) {
  595. wendu = data.find((item) => {
  596. return item.property_id === wenduParamId && item.device_id === element.deviceInfo.deviceId
  597. })
  598. }
  599. if (siduParamId) {
  600. sidu = data.find((item) => {
  601. return item.property_id === siduParamId && item.device_id === element.deviceInfo.deviceId
  602. })
  603. }
  604. this.$set(this.oaoMessage, element.divPosition, {
  605. show: true,
  606. wendu: (wendu?.curvalue) ? (Math.round(wendu?.curvalue)) : '-',
  607. sidu: (sidu?.curvalue) ? (Math.round(sidu?.curvalue)) : '-',
  608. alarmState: (wendu && wendu.curstatus > 0) || (sidu && sidu.curstatus > 0)
  609. })
  610. }
  611. })
  612. })
  613. }
  614. }
  615. }
  616. }
  617. </script>
  618. <style rel="stylesheet/scss" lang="scss" scoped>
  619. @import "~@/assets/styles/lend-manage.scss";
  620. .dashboard-editor-container {
  621. padding: 20px;
  622. background-color: #031435;
  623. position: relative;
  624. .chart-wrapper {
  625. height: calc(100% - 40px);
  626. }
  627. }
  628. @media (max-width: 1024px) {
  629. .chart-wrapper {
  630. padding: 8px;
  631. }
  632. }
  633. .warehouse-tab {
  634. color: #fff;
  635. .warehouse-nav {
  636. display: flex;
  637. justify-content: space-around;
  638. position: absolute;
  639. bottom: 15px;
  640. z-index: 11;
  641. width: 100%;
  642. padding: 0;
  643. li {
  644. display: flex;
  645. flex-direction: column;
  646. align-items: center;
  647. flex-wrap: nowrap;
  648. align-content: center;
  649. justify-content: center;
  650. height: 90px;
  651. text-align: right;
  652. font-size: 14px;
  653. position: relative;
  654. &:hover {
  655. cursor: pointer;
  656. }
  657. span {
  658. width: 72px;
  659. height: 52px;
  660. margin-bottom: 7px;
  661. }
  662. p {
  663. text-align: left;
  664. }
  665. &:first-child span {
  666. background: url("~@/assets/images/tab_fullview_logo.png") no-repeat;
  667. }
  668. &:nth-child(2) span {
  669. background: url("~@/assets/images/tab_archives_logo.png") no-repeat;
  670. }
  671. &:nth-child(3) span {
  672. background: url("~@/assets/images/tab_collate_logo.png") no-repeat;
  673. }
  674. &:nth-child(4) span {
  675. background: url("~@/assets/images/tab_read_logo.png") no-repeat;
  676. }
  677. }
  678. }
  679. }
  680. .el-col {
  681. height: 100%;
  682. }
  683. .container-left,
  684. .container-right,
  685. .container-wrap,
  686. .el-card,
  687. .header-container-wrap {
  688. min-height: 100%;
  689. }
  690. .warehose-el-table ::v-deep .el-table__header-wrapper {
  691. box-shadow: inset 0px 0px 6px 1px #339cff;
  692. background: none !important;
  693. }
  694. .container-wrap {
  695. min-height: auto;
  696. height: 100%;
  697. // overflow: hidden;
  698. }
  699. .todo-list {
  700. padding: 0 20px;
  701. & li {
  702. height: 42px;
  703. line-height: 42px;
  704. margin-bottom: 10px;
  705. font-size: 13px;
  706. color: #ffffff;
  707. background: #02255f;
  708. box-shadow: inset 0px 0px 6px 1px #339cff;
  709. border-radius: 26px;
  710. opacity: 1;
  711. cursor: pointer;
  712. &.warn-info{
  713. color: #F65163;
  714. box-shadow: inset 0px 0px 15px 1px #f65164;
  715. }
  716. & p {
  717. display: inline-block;
  718. width: calc(100% - 140px);
  719. padding-left: 10px;
  720. text-overflow: ellipsis;
  721. overflow: hidden;
  722. white-space: nowrap;
  723. word-break: break-all;
  724. }
  725. & span {
  726. float: right;
  727. padding-right: 10px;
  728. }
  729. }
  730. }
  731. ::v-deep
  732. .el-table--striped
  733. .el-table__body
  734. tr.el-table__row--striped
  735. td.el-table__cell {
  736. background: #02255f;
  737. }
  738. .search-area {
  739. width: 100%;
  740. height: 100%;
  741. margin: 0;
  742. display: flex;
  743. align-items: center;
  744. justify-content: center;
  745. }
  746. ::v-deep .search-main{
  747. padding: 0 0 0 20px;
  748. .head-container{
  749. padding: 0;
  750. width: 100% !important;
  751. .search-input {
  752. width: 100% !important;
  753. }
  754. .input-with-select{
  755. width: 100% !important;
  756. }
  757. }
  758. }
  759. .home-floor-tab{
  760. position: absolute;
  761. right: 14px;
  762. top: 10px;
  763. color: #fff;
  764. display: flex;
  765. justify-self: flex-start;
  766. p{
  767. font-size: 14px;
  768. padding:2px 6px;
  769. margin-right: 6px;
  770. color: #339cff;
  771. border: 1px solid #339cff;
  772. border-radius: 4px;
  773. cursor: pointer;
  774. &.active-floor,
  775. &:hover{
  776. color: #fff;
  777. background-color: #113d72;
  778. }
  779. }
  780. }
  781. .icon-kongqizhiliangshuju{
  782. font-size: 14px;
  783. color: #F65163;
  784. margin-right: 6px
  785. }
  786. .env-title{
  787. width: 50px;
  788. height: 40px;
  789. line-height: 20px;
  790. text-align: center;
  791. font-size: 12px;
  792. margin: 10px 10px 0 0;
  793. }
  794. .leakage-list {
  795. display: flex;
  796. justify-content:flex-start;
  797. flex: 1;
  798. text-align: left;
  799. font-size: 10px;
  800. li {
  801. position: relative;
  802. display: flex;
  803. justify-content: flex-start;
  804. flex-wrap: wrap;
  805. align-items: center;
  806. width: 60px;
  807. height: 40px;
  808. border: 1px solid #3581cc;
  809. background-color: #02255f;
  810. border-radius: 2px;
  811. padding: 4px;
  812. margin: 10px 10px 0 0;
  813. font-size: 12px;
  814. &::before {
  815. content: "";
  816. position: absolute;
  817. top: 2px;
  818. right: 2px;
  819. width: 0;
  820. height: 0;
  821. border-color: transparent #339cff;
  822. border-width: 0 4px 4px 0;
  823. border-style: solid;
  824. }
  825. p {
  826. width: 100%;
  827. }
  828. span{
  829. width: 100%;
  830. color: #18B08F;
  831. text-align: right;
  832. }
  833. &.leakage-warn {
  834. border-color: #f65164;
  835. box-shadow: inset 0px 0px 15px 1px #f65164;
  836. color: #f65164;
  837. &::before {
  838. border-color: transparent #f65164;
  839. }
  840. span {
  841. color: #f65164;
  842. }
  843. }
  844. }
  845. }
  846. .five-bottom{
  847. display: flex;
  848. justify-content: flex-start;
  849. align-items: center;
  850. .env-title{
  851. line-height: 40px;
  852. }
  853. }
  854. </style>