PanelGroup.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <el-row :gutter="40" class="panel-group">
  3. <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
  4. <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/safetyapproval')">
  5. <div class="card-panel-icon-wrapper icon-people">
  6. <svg-icon icon-class="anquan" class-name="card-panel-icon"/>
  7. </div>
  8. <div class="card-panel-description">
  9. <div class="card-panel-text">
  10. 安全
  11. <el-badge v-if="safeWarnNum > 0" :value="safeWarnNum" :max="99" class="item" >
  12. </el-badge>
  13. </div>
  14. <count-to :start-val="0" :end-val="safeNum" :duration="2600" class="card-panel-num"/>
  15. </div>
  16. </div>
  17. </el-col>
  18. <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
  19. <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/environapproval')">
  20. <div class="card-panel-icon-wrapper icon-message">
  21. <svg-icon icon-class="huanbao" class-name="card-panel-icon"/>
  22. </div>
  23. <div class="card-panel-description">
  24. <div class="card-panel-text">
  25. 环保
  26. <el-badge v-if="envWarnNum > 0" :value="envWarnNum" :max="99" class="item" >
  27. </el-badge>
  28. </div>
  29. <count-to :start-val="0" :end-val="envNum" :duration="3000" class="card-panel-num"/>
  30. </div>
  31. </div>
  32. </el-col>
  33. <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
  34. <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/fireapproval')">
  35. <div class="card-panel-icon-wrapper icon-money">
  36. <svg-icon icon-class="xiaofang" class-name="card-panel-icon"/>
  37. </div>
  38. <div class="card-panel-description">
  39. <div class="card-panel-text">
  40. 消防
  41. <el-badge v-if="fireWarnNum > 0" :value="fireWarnNum" :max="99" class="item" >
  42. </el-badge>
  43. </div>
  44. <count-to :start-val="0" :end-val="fireNum" :duration="3200" class="card-panel-num"/>
  45. </div>
  46. </div>
  47. </el-col>
  48. <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
  49. <div class="card-panel" @click="handleSetLineChartData('/ehs/approval/healthapproval')">
  50. <div class="card-panel-icon-wrapper icon-shopping">
  51. <svg-icon icon-class="weisheng" class-name="card-panel-icon"/>
  52. </div>
  53. <div class="card-panel-description">
  54. <div class="card-panel-text">
  55. 卫生
  56. <el-badge v-if="healthWarnNum > 0" :value="healthWarnNum" :max="99" class="item" >
  57. </el-badge>
  58. </div>
  59. <count-to :start-val="0" :end-val="healthNum" :duration="3600" class="card-panel-num"/>
  60. </div>
  61. </div>
  62. </el-col>
  63. </el-row>
  64. </template>
  65. <script>
  66. import CountTo from 'vue-count-to'
  67. import {countNum} from "@/api/common/homedataCbps";
  68. export default {
  69. components: {
  70. CountTo
  71. },
  72. data() {
  73. return {
  74. healthNum: 0,
  75. envNum: 0,
  76. fireNum: 0,
  77. safeNum: 0,
  78. healthWarnNum: 0,
  79. envWarnNum: 0,
  80. fireWarnNum: 0,
  81. safeWarnNum: 0,
  82. }
  83. },
  84. created() {
  85. countNum().then(res => {
  86. this.healthNum = res.data.healthNum;
  87. this.envNum = res.data.envNum;
  88. this.fireNum = res.data.fireNum;
  89. this.safeNum = res.data.safeNum;
  90. this.healthWarnNum = res.data.healthWarnNum;
  91. this.envWarnNum = res.data.envWarnNum;
  92. this.fireWarnNum = res.data.fireWarnNum;
  93. this.safeWarnNum = res.data.safeWarnNum;
  94. })
  95. },
  96. methods: {
  97. handleSetLineChartData(type) {
  98. this.$router.push(type);
  99. }
  100. }
  101. }
  102. </script>
  103. <style lang="scss" scoped>
  104. .panel-group {
  105. margin-top: -12px;
  106. .card-panel-col {
  107. margin-bottom: 16px;
  108. }
  109. .item {
  110. margin-bottom: 0px;
  111. margin-top: -40px;
  112. }
  113. .card-panel {
  114. height: 108px;
  115. cursor: pointer;
  116. font-size: 12px;
  117. position: relative;
  118. overflow: hidden;
  119. color: #666;
  120. background: #fff;
  121. box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
  122. border-color: rgba(0, 0, 0, .05);
  123. &:hover {
  124. .card-panel-icon-wrapper {
  125. color: #fff;
  126. }
  127. .icon-people {
  128. background: #40c9c6;
  129. }
  130. .icon-message {
  131. background: #36a3f7;
  132. }
  133. .icon-money {
  134. background: #f4516c;
  135. }
  136. .icon-shopping {
  137. background: #34bfa3
  138. }
  139. }
  140. .icon-people {
  141. color: #40c9c6;
  142. }
  143. .icon-message {
  144. color: #36a3f7;
  145. }
  146. .icon-money {
  147. color: #f4516c;
  148. }
  149. .icon-shopping {
  150. color: #34bfa3
  151. }
  152. .card-panel-icon-wrapper {
  153. float: left;
  154. margin: 14px 0 0 14px;
  155. padding: 16px;
  156. transition: all 0.38s ease-out;
  157. border-radius: 6px;
  158. }
  159. .card-panel-icon {
  160. float: left;
  161. font-size: 48px;
  162. }
  163. .card-panel-description {
  164. float: right;
  165. font-weight: bold;
  166. margin: 26px;
  167. margin-left: 0px;
  168. .card-panel-text {
  169. line-height: 18px;
  170. color: rgba(0, 0, 0, 0.45);
  171. font-size: 22px;
  172. margin-bottom: 12px;
  173. width: 90px;
  174. }
  175. .card-panel-num {
  176. font-size: 20px;
  177. }
  178. }
  179. }
  180. }
  181. @media (max-width: 550px) {
  182. .card-panel-description {
  183. display: none;
  184. }
  185. .card-panel-icon-wrapper {
  186. float: none !important;
  187. width: 100%;
  188. height: 100%;
  189. margin: 0 !important;
  190. .svg-icon {
  191. display: block;
  192. margin: 14px auto !important;
  193. float: none !important;
  194. }
  195. }
  196. }
  197. </style>