index.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-col :span="12" class="card-box">
  5. <el-card>
  6. <el-form ref="form" :model="form" label-width="80px" style="margin-left: 20%;margin-top: 20px;" @submit.native.prevent>
  7. <el-form-item label="机号">
  8. <el-input v-model="form.searchNum" style=" width: 50%;" placeholder="请输入内容" @keyup.enter.native="search" @clear="search" clearable> </el-input>
  9. <el-button type="primary" icon="el-icon-search" @click="search"></el-button>
  10. </el-form-item>
  11. <span></span>
  12. </el-form>
  13. <el-row style="margin: 20px;" v-loading="loadingAircraftStatus">
  14. <el-col :span="4" v-for="(item) in airCraftList" :key="item.airNumber" @click.native="showDetails(item.airNumber)">
  15. <div shadow="hover" class="card">
  16. <span style="font-size: 25px;display: block; color: wheat">机号</span>
  17. <span class="span1" :style="{color: item.color1}">{{item.airNumber}}</span>
  18. <span style="color: wheat">状态:
  19. <span v-if="item.cnt == 0" style="color: green">健康</span>
  20. <span v-else style="color: red">故障</span>
  21. </span>
  22. </div>
  23. </el-col>
  24. </el-row>
  25. <pagination
  26. v-show="airCraftTotal>0"
  27. :total="airCraftTotal"
  28. :page.sync="form.pageNum"
  29. :limit.sync="form.pageSize"
  30. @pagination="search"
  31. :page-sizes="[24, 36, 48, 60]"
  32. />
  33. </el-card>
  34. </el-col>
  35. <el-col :span="12" class="card-box">
  36. <el-row v-loading="loadingBreakdownList">
  37. <BreakdownSchedule :breakdownList="breakdownList"></BreakdownSchedule>
  38. </el-row>
  39. <el-row>
  40. <el-card style="margin-top: 10px;">
  41. <!-- <el-row style="text-align: center;">
  42. <el-col :span="8" >
  43. 当月故障飞机数
  44. </el-col>
  45. <el-col :span="8">
  46. 当月故障维修完成数
  47. </el-col>
  48. <el-col :span="8">
  49. 可出动飞机数
  50. </el-col>
  51. </el-row> -->
  52. <el-row v-loading="loadingAircraftStatusCurrentMonth">
  53. <el-col :span="8">
  54. <div shadow="always" style="background-color:rgba(255,0,0,0.5); text-align: center; margin-left:12px;padding: 0px; border:1px solid #e6ebf5">
  55. <span style="font-size:1.5rem">当月故障飞机数</span>
  56. <br>
  57. <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.breakdownNumber }}</span>
  58. </div>
  59. </el-col>
  60. <el-col :span="8">
  61. <div shadow="always" style="background-color:rgba(0,255,0,0.5); text-align: center; margin-left:12px;padding: 0px; border:1px solid #e6ebf5">
  62. <span style="font-size:1.5rem">当月故障维修完成数</span>
  63. <br>
  64. <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.repairedNumber }}</span>
  65. </div>
  66. </el-col>
  67. <el-col :span="8">
  68. <div shadow="always" style="background-color:rgba(0,0,255,0.5); text-align: center; margin-left:12px;margin-right:12px;padding: 0px; border:1px solid #e6ebf5">
  69. <span style="font-size:1.5rem">可出动飞机数</span>
  70. <br>
  71. <span style="font-size:3rem">{{ aircraftStatusCurrentMonth.availableNumber }}</span>
  72. </div>
  73. </el-col>
  74. </el-row>
  75. </el-card>
  76. </el-row>
  77. <el-row v-loading="loadingDetails">
  78. <el-card style="margin-top: 10px; font-size:2rem">
  79. <el-row>飞机状态详细信息</el-row>
  80. <el-row>
  81. 机号:{{ aircraftDetial.airNumber }}
  82. </el-row>
  83. <el-row>
  84. 故障系统:{{ aircraftDetial.systems? aircraftDetial.systems:'无'}}
  85. </el-row>
  86. <el-row>
  87. 维修完成度:
  88. <!-- <el-progress :text-inside="true" :stroke-width="22" :percentage="aircraftDetial.breakdownCount === 0 ? 100: aircraftDetial.repairRate" status="warning"></el-progress>
  89. <el-progress type="circle" :percentage="100" status="success"></el-progress> -->
  90. {{ aircraftDetial.breakdownCount === 0 ? 100: aircraftDetial.repairRate }} %
  91. </el-row>
  92. </el-card>
  93. </el-row>
  94. </el-col>
  95. </el-row>
  96. </div>
  97. </template>
  98. <script>
  99. // import echarts from "echarts";
  100. import { getAircraftStatus, getAircraftStatusCurrentMonth, getBreakdownInfoByAirNumber, getBreakdownSchedule } from '@/api/showInfo/breakdown'
  101. import BreakdownSchedule from "@/views/index/breakdownSchedule"
  102. export default {
  103. components: { BreakdownSchedule },
  104. data() {
  105. return {
  106. form:{
  107. searchNum: "",
  108. pageNum: 1,
  109. pageSize: 24,
  110. },
  111. airCraftTotal:0,
  112. airCraftList:[],
  113. aircraftStatusCurrentMonth: {
  114. breakdownNumber:"-",
  115. repairedNumber:"-",
  116. availableNumber:"-",
  117. },
  118. aircraftDetial: {
  119. airNumber: "-",
  120. systems: "-",
  121. repairRate: "-",
  122. breakdownCount: "-",
  123. },
  124. breakdownList: [],
  125. queryBreakdownParams: {
  126. pageNum: 1,
  127. pageSize: 10,
  128. },
  129. breakdownTotal:0,
  130. loadingAircraftStatus: false,
  131. loadingAircraftStatusCurrentMonth: false,
  132. loadingDetails: false,
  133. loadingBreakdownList: false,
  134. }
  135. },
  136. created() {
  137. this.search()
  138. this.getAircraftStatusCurrentMonth()
  139. this.getBreakdownSchedule()
  140. },
  141. methods: {
  142. search(){
  143. this.loadingAircraftStatus = true
  144. getAircraftStatus(this.form).then(resp => {
  145. this.airCraftList = resp.rows;
  146. this.airCraftTotal = resp.total;
  147. this.loadingAircraftStatus = false;
  148. })
  149. },
  150. getAircraftStatusCurrentMonth(){
  151. this.loadingAircraftStatusCurrentMonth = true;
  152. getAircraftStatusCurrentMonth().then(resp => {
  153. this.aircraftStatusCurrentMonth = {
  154. breakdownNumber: resp.data.breakdownNumber,
  155. repairedNumber: resp.data.breakdownNumber - resp.data.repairingNumber,
  156. availableNumber: resp.data.availableNumber,
  157. }
  158. this.loadingAircraftStatusCurrentMonth = false
  159. })
  160. },
  161. showDetails(airNumber){
  162. this.loadingDetails = true
  163. getBreakdownInfoByAirNumber(airNumber).then(resp => {
  164. this.aircraftDetial = {
  165. airNumber: resp.data.airNumber,
  166. systems: resp.data.systems,
  167. repairRate: Math.round(resp.data.repairingCount * 100 / resp.data.breakdownCount),
  168. breakdownCount: resp.data.breakdownCount
  169. }
  170. this.loadingDetails = false
  171. })
  172. },
  173. getBreakdownSchedule(){
  174. this.loadingBreakdownList = true;
  175. getBreakdownSchedule(this.queryBreakdownParams).then(resp => {
  176. let rows = resp.rows
  177. for(let row of rows){
  178. row.countDown = 30-Math.round((new Date()- new Date(row.discoveryDate))/24/60/60/1000)
  179. }
  180. this.breakdownList = resp.rows;
  181. this.breakdownTotal = resp.total;
  182. this.loadingBreakdownList = false;
  183. })
  184. }
  185. }
  186. }
  187. </script>
  188. <style scoped>
  189. @font-face {
  190. font-family: "FZZhiYi-M12S";
  191. src: url("../assets/knowledge/ziti.ttf");
  192. font-weight: normal;
  193. font-style: normal;
  194. }
  195. #chart {
  196. width: 1200px;
  197. height: 600px;
  198. margin-left: 20px;
  199. }
  200. .span1 {
  201. display: block;
  202. font-family: FZZhiYi-M12S;
  203. font-size: 45px;
  204. }
  205. h2 {
  206. margin: 20px 0;
  207. }
  208. .card {
  209. text-align: center;
  210. margin: 20px;
  211. background-image: url("../assets/knowledge/panel.png");
  212. background-repeat: no-repeat;
  213. background-size: 100% 100%;
  214. }
  215. /* .el-table tr {
  216. background-color: transparent
  217. } */
  218. .el-card__body {
  219. padding: 0px;
  220. }
  221. </style>