echarts.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. <template>
  2. <div class="view-carrierFlightMission">
  3. <div class="view-carrierFlightMission-FlightMission-btn">
  4. <div class="view-carrierFlightMission-FlightMission-btn-right">
  5. <div class="input-with-select">
  6. <span>日期</span>
  7. <el-date-picker type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd" format="yyyy-MM-dd" v-model="statisticsDate" placeholder="选择日期"> </el-date-picker>
  8. </div>
  9. <div class="input-with-select">
  10. <span>地区</span>
  11. <el-select v-model="select.groups" placeholder="请选择">
  12. <el-option v-for="item in groupsList" :key="item.groups" :label="item.groups" :value="item.groups"> </el-option>
  13. </el-select>
  14. </div>
  15. <div class="input-with-select">
  16. <span>专业</span>
  17. <el-select v-model="select.major" placeholder="请选择">
  18. <el-option v-for="item in majorList" :key="item.major" :label="item.major" :value="item.major"> </el-option>
  19. </el-select>
  20. </div>
  21. <div class="input-with-select">
  22. <span>机型</span>
  23. <el-select v-model="select.aircraftModel" placeholder="请选择" @change="getFaultStatisticsListAll({ distinctField: 'aircraft_num' })">
  24. <el-option v-for="item in aircraftModelList" :key="item.aircraftModel" :label="item.aircraftModel" :value="item.aircraftModel"> </el-option>
  25. </el-select>
  26. </div>
  27. <div class="input-with-select">
  28. <span>机号</span>
  29. <el-select v-model="select.aircraftNum" placeholder="请选择">
  30. <el-option v-for="item in aircraftNumList" :key="item.aircraftNum" :label="item.aircraftNum" :value="item.aircraftNum"> </el-option>
  31. </el-select>
  32. </div>
  33. <div class="input-with-select">
  34. <span>部件</span>
  35. <el-select v-model="select.faultyPartsName" placeholder="请选择">
  36. <el-option v-for="item in faultyPartsNameList" :key="item.faultyPartsName" :label="item.faultyPartsName" :value="item.faultyPartsName"> </el-option>
  37. </el-select>
  38. </div>
  39. <el-button @click="searchClick" style="border-color: rgb(13, 128, 164); background-color: rgb(13, 128, 164); color: #fff">查询</el-button>
  40. </div>
  41. </div>
  42. <div class="view-dataType-table">
  43. <el-row>
  44. <el-col :span="12">
  45. <Card title="故障件数量统计图">
  46. <template slot="content">
  47. <div class="baseBar-box" ref="echartLeft"></div>
  48. </template>
  49. </Card>
  50. </el-col>
  51. <el-col :span="12">
  52. <Card title="故障件数量统计图">
  53. <template slot="content">
  54. <div class="baseBar-box" ref="echartRight"></div>
  55. </template>
  56. </Card>
  57. </el-col>
  58. </el-row>
  59. </div>
  60. </div>
  61. </template>
  62. <script>
  63. import { getFaultStatisticsListAll, getAircaftTypeAndModelTree, removeFaultStatistics, getFaultStatisticsEcharts } from '@/api/als/faultStatistics'
  64. import { debounce } from '@/utils/index'
  65. import * as echarts from 'echarts'
  66. export default {
  67. name: 'FaultStatistics',
  68. data() {
  69. // 这里存放数据
  70. return {
  71. keyWord: '',
  72. aircaftModelIdList: [],
  73. currentNodeKey: null,
  74. currentNode: null,
  75. menuTreeData: [],
  76. treeObj: {
  77. title: '所属机种',
  78. activityheight: '275px',
  79. searchIcon: false,
  80. configure: {
  81. children: 'children',
  82. label: 'label'
  83. }
  84. },
  85. groupsList: [],
  86. majorList: [],
  87. aircraftModelList: [],
  88. aircraftNumList: [],
  89. faultyPartsNameList: [],
  90. statisticsDate: [],
  91. select: {
  92. startStatisticsDate: '',
  93. endStatisticsDate: '',
  94. major: '特设',
  95. aircraftModel: 'J-11'
  96. },
  97. typeTree: {
  98. children: 'children',
  99. label: 'label'
  100. },
  101. searchValue: '',
  102. options: {
  103. stripe: true, // 斑马纹
  104. mutiSelect: true, // 多选框
  105. index: false, // 显示序号, 多选则 mutiSelect
  106. loading: false, // 表格动画
  107. initTable: false, // 是否一挂载就加载数据
  108. border: true,
  109. height: 'calc(100vh - 300px)'
  110. },
  111. tableCheckItems: [],
  112. form: {
  113. id: '',
  114. statisticsDate: '',
  115. warZone: '',
  116. army: '',
  117. division: '',
  118. groups: '',
  119. squadron: '',
  120. aircraftNum: '',
  121. aircraftModel: '',
  122. factoryNum: '',
  123. machineType: '',
  124. machineNum: '',
  125. machineModel: '',
  126. machineName: '',
  127. landingGear: '',
  128. major: '',
  129. faultyPartsName: '',
  130. faultyPartsModel: '',
  131. faultyPartsNum: '',
  132. engineModel: '',
  133. engineNum: '',
  134. engineSerialNum: '',
  135. faultyPartsPosition: '',
  136. faultyPhenomenon: '',
  137. faultyPlace: '',
  138. findOpportunity: '',
  139. systems: '',
  140. timingType: '',
  141. faultyPartsManufacturer: '',
  142. faultyPartsRenovate: '',
  143. installationTime: '',
  144. totalWorkTime: '',
  145. repairTime: '',
  146. replacementPartsModel: '',
  147. replacementPartsNum: '',
  148. replacementPartsManufacturer: '',
  149. replacementTotalWorkTime: '',
  150. replacementPartsRenovate: '',
  151. replacementRepairTime: '',
  152. faultyAbnormalCode: '',
  153. faultyPartsInstallDate: '',
  154. faultyReason: '',
  155. faultyNature: '',
  156. faultyResponsibility: '',
  157. faultyConsequence: '',
  158. handlingSuggestions: '',
  159. influenceFrequency: '',
  160. errorFlyFrequency: '',
  161. identificationMethod: '',
  162. discoveredPeople: '',
  163. exclusionMethod: '',
  164. exclusionPeople: '',
  165. examinePeople: '',
  166. examineTime: '',
  167. exclusionDate: '',
  168. exclusionWorkTime: '',
  169. exclusionPeopleNum: '',
  170. exclusionTime: '',
  171. isAchievement: '',
  172. needTestFly: '',
  173. repairStatus: '',
  174. remarks: '',
  175. tenantId: '',
  176. delFlag: '',
  177. version: '',
  178. createBy: '',
  179. createTime: '',
  180. updateBy: '',
  181. updateTime: ''
  182. },
  183. debounceFn: debounce(this.fetch, 500)
  184. }
  185. },
  186. watch: {
  187. keyWord() {
  188. this.debounceFn()
  189. }
  190. },
  191. mounted() {
  192. this.getFaultStatisticsAPI()
  193. // this.getAircaftTypeAndModelTreeAPI()
  194. },
  195. methods: {
  196. async getFaultStatisticsListAll(params) {
  197. if (params.distinctField == 'aircraft_num') {
  198. params.aircraftModel = this.select.aircraftModel
  199. }
  200. const { data } = await getFaultStatisticsListAll({ ...params })
  201. if (params.distinctField == 'groups') {
  202. this.groupsList = data
  203. } else if (params.distinctField == 'major') {
  204. this.majorList = data
  205. } else if (params.distinctField == 'aircraft_model') {
  206. this.aircraftModelList = data
  207. } else if (params.distinctField == 'aircraft_num') {
  208. this.aircraftNumList = data
  209. } else if (params.distinctField == 'faulty_parts_name') {
  210. this.faultyPartsNameList = data
  211. }
  212. },
  213. async getAircaftTypeAndModelTreeAPI(params) {
  214. const { data } = await getAircaftTypeAndModelTree(params)
  215. this.menuTreeData = data
  216. if (data.length) {
  217. this.currentNodeKey = data[0].value
  218. this.currentNode = data[0]
  219. this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children).map((e) => e.id)
  220. this.getFaultStatisticsAPI({ aircaftModelIdList: this.aircaftModelIdList })
  221. }
  222. },
  223. getTreeLeafData(list) {
  224. const newArr = []
  225. function getLeaf(data, arr) {
  226. data.forEach((e) => {
  227. if (e.type === 1) {
  228. arr.push(e)
  229. }
  230. if (e.children.length) {
  231. getLeaf(e.children, arr)
  232. }
  233. })
  234. }
  235. getLeaf(list, newArr)
  236. return newArr
  237. },
  238. echartsLeft(names, values) {
  239. const echartLeft = echarts.init(this.$refs.echartLeft)
  240. const option = {
  241. tooltip: {
  242. trigger: 'item'
  243. },
  244. xAxis: {
  245. axisLabel: {
  246. color: '#fff'
  247. },
  248. type: 'category',
  249. data: names
  250. },
  251. yAxis: {
  252. type: 'value',
  253. axisLabel: {
  254. color: '#fff'
  255. }
  256. },
  257. series: [
  258. {
  259. data: values,
  260. type: 'bar'
  261. }
  262. ]
  263. }
  264. echartLeft.setOption(option)
  265. },
  266. echartsRight(values) {
  267. const echartRight = echarts.init(this.$refs.echartRight)
  268. const option = {
  269. tooltip: {
  270. trigger: 'item'
  271. },
  272. legend: {
  273. orient: 'vertical',
  274. left: 'left',
  275. textStyle: {
  276. color: '#fff'
  277. }
  278. },
  279. series: [
  280. {
  281. name: 'Access From',
  282. type: 'pie',
  283. radius: '50%',
  284. label: {
  285. color: '#fff'
  286. },
  287. data: values,
  288. emphasis: {
  289. itemStyle: {
  290. shadowBlur: 10,
  291. shadowOffsetX: 0,
  292. shadowColor: 'rgba(0, 0, 0, 0.5)'
  293. }
  294. }
  295. }
  296. ]
  297. }
  298. echartRight.setOption(option)
  299. },
  300. async getFaultStatisticsAPI(params) {
  301. const { keyWord } = this
  302. const res = await getFaultStatisticsEcharts({ keyWord, ...params })
  303. this.getFaultStatisticsListAll({ distinctField: 'groups' })
  304. this.getFaultStatisticsListAll({ distinctField: 'major' })
  305. this.getFaultStatisticsListAll({ distinctField: 'aircraft_model' })
  306. this.getFaultStatisticsListAll({ distinctField: 'aircraft_num' })
  307. this.getFaultStatisticsListAll({ distinctField: 'faulty_parts_name' })
  308. const names = []
  309. const values = []
  310. const data = []
  311. res.data.forEach((e) => {
  312. names.push(e.faultyPartsName)
  313. values.push(e.nameCount)
  314. data.push({
  315. name: e.faultyPartsName,
  316. value: e.nameCount
  317. })
  318. })
  319. this.echartsLeft(names, values)
  320. this.echartsRight(data)
  321. },
  322. fetch() {
  323. this.getFaultStatisticsAPI()
  324. },
  325. searchClick() {
  326. console.log(this.statisticsDate)
  327. if (this.statisticsDate != null) {
  328. this.select.startStatisticsDate = this.statisticsDate[0]
  329. this.select.endStatisticsDate = this.statisticsDate[1]
  330. }
  331. this.getFaultStatisticsAPI(this.select)
  332. },
  333. handleClose() {
  334. this.dialogVisible = false
  335. this.form = {
  336. id: '',
  337. statisticsDate: '',
  338. warZone: '',
  339. army: '',
  340. division: '',
  341. groups: '',
  342. squadron: '',
  343. aircraftNum: '',
  344. aircraftModel: '',
  345. factoryNum: '',
  346. machineType: '',
  347. machineNum: '',
  348. machineModel: '',
  349. machineName: '',
  350. landingGear: '',
  351. major: '',
  352. faultyPartsName: '',
  353. faultyPartsModel: '',
  354. faultyPartsNum: '',
  355. engineModel: '',
  356. engineNum: '',
  357. engineSerialNum: '',
  358. faultyPartsPosition: '',
  359. faultyPhenomenon: '',
  360. faultyPlace: '',
  361. findOpportunity: '',
  362. systems: '',
  363. timingType: '',
  364. faultyPartsManufacturer: '',
  365. faultyPartsRenovate: '',
  366. installationTime: '',
  367. totalWorkTime: '',
  368. repairTime: '',
  369. replacementPartsModel: '',
  370. replacementPartsNum: '',
  371. replacementPartsManufacturer: '',
  372. replacementTotalWorkTime: '',
  373. replacementPartsRenovate: '',
  374. replacementRepairTime: '',
  375. faultyAbnormalCode: '',
  376. faultyPartsInstallDate: '',
  377. faultyReason: '',
  378. faultyNature: '',
  379. faultyResponsibility: '',
  380. faultyConsequence: '',
  381. handlingSuggestions: '',
  382. influenceFrequency: '',
  383. errorFlyFrequency: '',
  384. identificationMethod: '',
  385. discoveredPeople: '',
  386. exclusionMethod: '',
  387. exclusionPeople: '',
  388. examinePeople: '',
  389. examineTime: '',
  390. exclusionDate: '',
  391. exclusionWorkTime: '',
  392. exclusionPeopleNum: '',
  393. exclusionTime: '',
  394. isAchievement: '',
  395. needTestFly: '',
  396. repairStatus: '',
  397. remarks: '',
  398. tenantId: '',
  399. delFlag: '',
  400. version: '',
  401. createBy: '',
  402. createTime: '',
  403. updateBy: '',
  404. updateTime: ''
  405. }
  406. }
  407. }
  408. }
  409. </script>
  410. <style lang="scss">
  411. @import '../index.scss';
  412. </style>