com-sta-data.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <!-- 第一行统计数据 -->
  2. <template>
  3. <el-row :gutter="14">
  4. <el-col :lg="4" :sm="8" :xs="24">
  5. <div class="sa-wnk">
  6. <img src="../../static/icon/icon-total.png" >
  7. <div class="sa-wnk-tv">
  8. <p class="sa-wnk-title">总车辆</p>
  9. <p class="sa-wnk-value">{{car.totalCar}}</p>
  10. </div>
  11. </div>
  12. </el-col>
  13. <el-col :lg="5" :sm="8" :xs="24">
  14. <div class="sa-wnk">
  15. <img src="../../static/icon/icon-car-leave.png" >
  16. <div class="sa-wnk-tv">
  17. <p class="sa-wnk-title">离场车辆</p>
  18. <p class="sa-wnk-value">{{car.outCar}}</p>
  19. </div>
  20. </div>
  21. </el-col>
  22. <el-col :lg="5" :sm="8" :xs="24">
  23. <div class="sa-wnk">
  24. <img src="../../static/icon/icon-car-in.png" >
  25. <div class="sa-wnk-tv">
  26. <p class="sa-wnk-title">在场车辆</p>
  27. <p class="sa-wnk-value">{{car.inCar}}</p>
  28. </div>
  29. </div>
  30. </el-col>
  31. <el-col :lg="5" :sm="8" :xs="24">
  32. <div class="sa-wnk">
  33. <img src="../../static/icon/icon-car-weight.png" >
  34. <div class="sa-wnk-tv">
  35. <p class="sa-wnk-title">重车</p>
  36. <p class="sa-wnk-value">{{car.weightCar}}</p>
  37. </div>
  38. </div>
  39. </el-col>
  40. <el-col :lg="5" :sm="8" :xs="24">
  41. <div class="sa-wnk">
  42. <img src="../../static/icon/icon-car-empty.png" >
  43. <div class="sa-wnk-tv">
  44. <p class="sa-wnk-title">空车</p>
  45. <p class="sa-wnk-value">{{car.emptyCar}}</p>
  46. </div>
  47. </div>
  48. </el-col>
  49. </el-row>
  50. </template>
  51. <script>
  52. module.exports = {
  53. data() {
  54. return {
  55. // 统计数据
  56. car:{
  57. totalCar:0,
  58. inCar:0,
  59. outCar:0,
  60. weightCar:0,
  61. emptyCar:0
  62. }
  63. }
  64. },
  65. methods: {
  66. getCarStatics(){
  67. sa.ajax('/TbBusinessCar/staticsCar',function(resp){
  68. this.car=resp.data;
  69. }.bind(this))
  70. },
  71. // 数值跳动
  72. // 对象、属性、结束值、所用时间
  73. slowMotion: function(obj, prop, endValue, time) {
  74. let timeNow = 0;
  75. let fn = function() {
  76. // 如果已经接近 or 时间已到,则立即结束
  77. var jdz = Math.abs(obj[prop] - endValue);
  78. if(jdz < 2 || timeNow >= time) {
  79. // console.log('到点了');
  80. obj[prop] = endValue;
  81. } else {
  82. if(jdz < 100) {
  83. obj[prop] += 1;
  84. } else {
  85. obj[prop] += parseInt((endValue - obj[prop]) / 10); // 平均一下
  86. }
  87. timeNow += 30;
  88. setTimeout(fn, 30);
  89. }
  90. }
  91. fn();
  92. },
  93. // 设置统计数据的数值
  94. setStaDataValue: function(staData) {
  95. for (let key in staData) {
  96. this.slowMotion(this.sta, key, staData[key], 3000);
  97. }
  98. },
  99. },
  100. created() {
  101. this.getCarStatics();
  102. }
  103. }
  104. </script>
  105. <style scoped>
  106. /* 第一行 */
  107. .sa-wnk{background-color: #FFF; border: 1px #ddd solid; margin-bottom: 14px; min-height: 100px;
  108. cursor: pointer; transition: all 0.3s; overflow: hidden;}
  109. .sa-wnk:hover{box-shadow: 0 0 20px #999;}
  110. .sa-wnk img{float: left; line-height: 100px; margin: 25px 0px 0 20px; width: 50px; height: 50px; vertical-align: middle;}
  111. .sa-wnk .sa-wnk-tv{float: left; margin-left: 10px; max-width: calc(100% - 100px);}
  112. .sa-wnk-title{margin-top: 25px; font-size: 16px;}
  113. .sa-wnk-value{margin-top: 4px; font-size: 24px; padding-bottom: 20px;}
  114. </style>