electronicPatrol.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <div class="yui-tree-box">
  3. <project-item-tree @treeclick="treeclick" iconfontClass="el-icon-place"></project-item-tree>
  4. <div class="hui-tree-content">
  5. <div class="electronic-patrol box-background">
  6. <div class="electronic-patrol-box">
  7. <div class="electronic-patrol-center">
  8. <test-alarm ref="testAlarm" :type="3"></test-alarm>
  9. <div class="bim-box">
  10. <model type="electronicPatrol" fileId="10000892771892"></model>
  11. </div>
  12. </div>
  13. <div class="electronic-patrol-right">
  14. <div class="electronic-patrol-record alarm-table-box hui-flex">
  15. <div class="alarm-title">
  16. <div class="hui-chart-title">
  17. 打卡事件
  18. </div>
  19. <div class="alarm-tr">
  20. <span class="tr-flex">路径名称</span>
  21. <span class="tr-flex tr-center">点位数量</span>
  22. <span class="tr-flex tr-center">今日打卡</span>
  23. <span class="tr-flex tr-center">累计打卡</span>
  24. </div>
  25. </div>
  26. <div class="hui-flex-box hui-no-tips" v-if="routeEventList.length === 0">
  27. <empty width="100" description="暂无巡更记录"></empty>
  28. </div>
  29. <div class="alarm-table hui-flex-box" v-else>
  30. <div class="alarm-tr" v-for="(item,index) in routeEventList" :key="index"
  31. @click="look(item)">
  32. <span class="tr-flex">{{item.routeName}}</span>
  33. <span class="tr-flex tr-center color-purple alibaba">{{item.pointNumber}}</span>
  34. <span class="tr-flex tr-center color-green alibaba">{{item.checkTodayNumber}}</span>
  35. <span class="tr-flex tr-center color-blue alibaba">{{item.accumulateNumber}}</span>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="electronic-patrol-record alarm-table-box hui-flex">
  40. <div class="alarm-title">
  41. <div class="hui-chart-title">
  42. 巡更事件
  43. </div>
  44. <div class="alarm-tr">
  45. <span class="tr-100">巡更名称</span>
  46. <span class="tr-flex">巡更时间</span>
  47. <span class="tr-50 tr-center">巡更人</span>
  48. </div>
  49. </div>
  50. <div class="hui-flex-box hui-no-tips" v-if="electronicPatrolList.length === 0">
  51. <empty width="100" description="暂无巡更记录"></empty>
  52. </div>
  53. <div class="alarm-table hui-flex-box" v-else>
  54. <div class="alarm-tr" v-for="(item,index) in electronicPatrolList" :key="index">
  55. <span class="tr-100">{{item.name}}</span>
  56. <span class="tr-flex">{{item.date}}</span>
  57. <span class="tr-50 tr-center">{{item.userName}}</span>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. <el-drawer title="打卡详情" :visible.sync="drawer" :size="400" :append-to-body="true">
  66. <electronic-patrol-detail v-if="drawer" :detail="detail"></electronic-patrol-detail>
  67. </el-drawer>
  68. </div>
  69. </template>
  70. <script>
  71. import projectItemTree from '@/components/common/projectItemTree'
  72. import electronicPatrolDetail from '@/components/work/iot/security/electronicPatrolDetail'
  73. import model from '@/components/work/common/model'
  74. import testAlarm from '@/components/work/common/testAlarm'
  75. import {
  76. getElectronicPatrolList,
  77. getElectronicPatrolRoutesList,
  78. getElectronicPatrolEventList,
  79. getElectronicPatrolEventTest
  80. } from '@/httpApi/test'
  81. export default {
  82. data() {
  83. return {
  84. drawer: false,
  85. electronicPatrolList: [],
  86. routeEventProjectList: [],
  87. routeEventList: [],
  88. detail: {}
  89. }
  90. },
  91. created() {
  92. getElectronicPatrolEventTest(this.$store.getters.project.id).then(res => {
  93. if (res.state) {
  94. this.routeEventProjectList = res.data;
  95. this.init();
  96. }
  97. })
  98. },
  99. methods: {
  100. init(option) {
  101. let postData = {
  102. projectId: this.$store.getters.project.id
  103. }
  104. if (option) postData = Object.assign(postData, option);
  105. getElectronicPatrolList(postData).then(res => {
  106. if (res.state) {
  107. this.electronicPatrolList = res.data;
  108. }
  109. })
  110. getElectronicPatrolEventList(postData).then(res => {
  111. if (res.state) {
  112. this.routeEventList = this.routeEventProjectList.filter(node => res.data.filter(item =>
  113. item.routeName === node.name).length > 0).map(node => {
  114. let data = res.data.filter(item => item.routeName === node.name)[0];
  115. return Object.assign(node, data);
  116. });
  117. }
  118. })
  119. },
  120. treeclick(item) {
  121. let obj = item.id ? {
  122. projectItemTargetId: item.id
  123. } : {}
  124. if (this.$refs.testAlarm) this.$refs.testAlarm.init(obj);
  125. this.init(obj);
  126. },
  127. look(item) {
  128. this.detail = item;
  129. this.drawer = true;
  130. }
  131. },
  132. components: {
  133. electronicPatrolDetail,
  134. projectItemTree,
  135. model,
  136. testAlarm
  137. }
  138. }
  139. </script>
  140. <style lang="scss">
  141. .electronic-patrol {
  142. width: 100%;
  143. height: 100%;
  144. padding: 20px;
  145. overflow: auto;
  146. .electronic-patrol-box {
  147. width: 100%;
  148. height: 100%;
  149. min-width: 1100px;
  150. min-height: 699px;
  151. display: flex;
  152. }
  153. .electronic-patrol-center {
  154. flex: 1;
  155. width: 0;
  156. height: 100%;
  157. display: flex;
  158. flex-direction: column;
  159. }
  160. .electronic-patrol-right {
  161. height: 100%;
  162. width: 350px;
  163. margin-left: 12px;
  164. display: flex;
  165. flex-direction: column;
  166. .electronic-patrol-record {
  167. flex: 1;
  168. height: 0;
  169. background: rgba(0, 4, 10, 0.3);
  170. width: 100%;
  171. margin-bottom: 12px;
  172. }
  173. .electronic-patrol-record:last-child {
  174. margin-bottom: 0;
  175. }
  176. }
  177. }
  178. </style>