index.vue 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059
  1. <template>
  2. <div class="view-carrierFlightMission">
  3. <div class="view-carrierFlightMission-FlightMission-btn">
  4. <div class="view-carrierFlightMission-FlightMission-btn-box" style="width: 24%">
  5. <el-button type="success" @click="openDialog()" :disabled="currentNode && currentNode.type == 0">新增</el-button>
  6. <el-button type="warning" @click="remove(tableCheckItems)" :disabled="tableCheckItems.length == 0">删除</el-button>
  7. <el-dropdown split-button type="primary" style="margin-left: 10px" trigger="click" @command="handleExport">
  8. 更多
  9. <el-dropdown-menu slot="dropdown">
  10. <el-dropdown-item command="importOperation">导入</el-dropdown-item>
  11. <el-dropdown-item command="allExport" :disabled="tableData.length == 0">导出</el-dropdown-item>
  12. <el-dropdown-item command="downloadTemplate">下载数据模板</el-dropdown-item>
  13. </el-dropdown-menu>
  14. </el-dropdown>
  15. </div>
  16. <div class="view-carrierFlightMission-FlightMission-btn-right">
  17. <div class="input-with-select">
  18. <span>日期</span>
  19. <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>
  20. </div>
  21. <div class="input-with-select">
  22. <span>地区</span>
  23. <el-select v-model="select.groups" placeholder="请选择">
  24. <el-option v-for="item in groupsList" :key="item.groups" :label="item.groups" :value="item.groups"> </el-option>
  25. </el-select>
  26. </div>
  27. <div class="input-with-select">
  28. <span>专业</span>
  29. <el-select v-model="select.major" placeholder="请选择">
  30. <el-option v-for="item in majorList" :key="item.major" :label="item.major" :value="item.major"> </el-option>
  31. </el-select>
  32. </div>
  33. <div class="input-with-select">
  34. <span>机型</span>
  35. <el-select v-model="select.aircraftModel" placeholder="请选择" @change="getFaultStatisticsListAll({ distinctField: 'aircraft_num' })">
  36. <el-option v-for="item in aircraftModelList" :key="item.aircraftModel" :label="item.aircraftModel" :value="item.aircraftModel"> </el-option>
  37. </el-select>
  38. </div>
  39. <div class="input-with-select">
  40. <span>机号</span>
  41. <el-select v-model="select.aircraftNum" placeholder="请选择">
  42. <el-option v-for="item in aircraftNumList" :key="item.aircraftNum" :label="item.aircraftNum" :value="item.aircraftNum"> </el-option>
  43. </el-select>
  44. </div>
  45. <div class="input-with-select">
  46. <span>部件</span>
  47. <el-select v-model="select.faultyPartsName" placeholder="请选择">
  48. <el-option v-for="item in faultyPartsNameList" :key="item.faultyPartsName" :label="item.faultyPartsName" :value="item.faultyPartsName"> </el-option>
  49. </el-select>
  50. </div>
  51. <el-button @click="searchClick" style="border-color: rgb(13, 128, 164); background-color: rgb(13, 128, 164); color: #fff">查询</el-button>
  52. <!-- <el-input placeholder="请输入关键字" v-model="keyWord" class="input1">
  53. <el-button slot="append" icon="el-icon-search" @click="searchClick"></el-button>
  54. </el-input> -->
  55. </div>
  56. </div>
  57. <div class="view-dataType-table">
  58. <LTable ref="table" @selection-change="selection" :defaultFetch="false" :fetch="fetch" :columns="columns" :dataSource="tableData" :options="options" :pagination="tableRequset"></LTable>
  59. </div>
  60. <!-- 添加或修改故障统计对话框 -->
  61. <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="1200px" :before-close="handleClose">
  62. <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  63. <el-row>
  64. <el-col v-bind="{ span: 12 }">
  65. <el-form-item label="日期" prop="statisticsDate">
  66. <el-date-picker clearable v-model="form.statisticsDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期"></el-date-picker>
  67. </el-form-item>
  68. </el-col>
  69. <el-col v-bind="{ span: 12 }">
  70. <el-form-item label="战区" prop="warZone">
  71. <el-input v-model="form.warZone" placeholder="请输入战区" />
  72. </el-form-item>
  73. </el-col>
  74. <el-col v-bind="{ span: 12 }">
  75. <el-form-item label="军" prop="army">
  76. <el-input v-model="form.army" placeholder="请输入军" />
  77. </el-form-item>
  78. </el-col>
  79. <el-col v-bind="{ span: 12 }">
  80. <el-form-item label="师" prop="division">
  81. <el-input v-model="form.division" placeholder="请输入师" />
  82. </el-form-item>
  83. </el-col>
  84. <el-col v-bind="{ span: 12 }">
  85. <el-form-item label="团" prop="groups">
  86. <el-input v-model="form.groups" placeholder="请输入团" />
  87. </el-form-item>
  88. </el-col>
  89. <el-col v-bind="{ span: 12 }">
  90. <el-form-item label="中队" prop="squadron">
  91. <el-input v-model="form.squadron" placeholder="请输入中队" />
  92. </el-form-item>
  93. </el-col>
  94. <el-col v-bind="{ span: 12 }">
  95. <el-form-item label="飞机号" prop="aircraftNum">
  96. <el-input v-model="form.aircraftNum" placeholder="请输入飞机号" />
  97. </el-form-item>
  98. </el-col>
  99. <el-col v-bind="{ span: 12 }">
  100. <el-form-item label="机型" prop="aircraftModel">
  101. <el-input v-model="form.aircraftModel" placeholder="请输入机型" />
  102. </el-form-item>
  103. </el-col>
  104. <el-col v-bind="{ span: 12 }">
  105. <el-form-item label="出厂号码" prop="factoryNum">
  106. <el-input v-model="form.factoryNum" placeholder="请输入出厂号码" />
  107. </el-form-item>
  108. </el-col>
  109. <el-col v-bind="{ span: 12 }">
  110. <el-form-item label="机件号" prop="machineNum">
  111. <el-input v-model="form.machineNum" placeholder="请输入机件号" />
  112. </el-form-item>
  113. </el-col>
  114. <el-col v-bind="{ span: 12 }">
  115. <el-form-item label="机件型别" prop="machineModel">
  116. <el-input v-model="form.machineModel" placeholder="请输入机件型别" />
  117. </el-form-item>
  118. </el-col>
  119. <el-col v-bind="{ span: 12 }">
  120. <el-form-item label="机件名称" prop="machineName">
  121. <el-input v-model="form.machineName" placeholder="请输入机件名称" />
  122. </el-form-item>
  123. </el-col>
  124. <el-col v-bind="{ span: 12 }">
  125. <el-form-item label="起落" prop="landingGear">
  126. <el-input v-model="form.landingGear" placeholder="请输入起落" />
  127. </el-form-item>
  128. </el-col>
  129. <el-col v-bind="{ span: 12 }">
  130. <el-form-item label="专业" prop="major">
  131. <el-input v-model="form.major" placeholder="请输入专业" />
  132. </el-form-item>
  133. </el-col>
  134. <el-col v-bind="{ span: 12 }">
  135. <el-form-item label="故障件名称" prop="faultyPartsName">
  136. <el-input v-model="form.faultyPartsName" placeholder="请输入故障件名称" />
  137. </el-form-item>
  138. </el-col>
  139. <el-col v-bind="{ span: 12 }">
  140. <el-form-item label="故障件型别" prop="faultyPartsModel">
  141. <el-input v-model="form.faultyPartsModel" placeholder="请输入故障件型别" />
  142. </el-form-item>
  143. </el-col>
  144. <el-col v-bind="{ span: 12 }">
  145. <el-form-item label="故障件号码" prop="faultyPartsNum">
  146. <el-input v-model="form.faultyPartsNum" placeholder="请输入故障件号码" />
  147. </el-form-item>
  148. </el-col>
  149. <el-col v-bind="{ span: 12 }">
  150. <el-form-item label="故障件所属发动机型别" prop="engineModel">
  151. <el-input v-model="form.engineModel" placeholder="请输入故障件所属发动机型别" />
  152. </el-form-item>
  153. </el-col>
  154. <el-col v-bind="{ span: 12 }">
  155. <el-form-item label="故障件所属发动机号码" prop="engineNum">
  156. <el-input v-model="form.engineNum" placeholder="请输入故障件所属发动机号码" />
  157. </el-form-item>
  158. </el-col>
  159. <el-col v-bind="{ span: 12 }">
  160. <el-form-item label="故障件所属发动机号码" prop="engineSerialNum">
  161. <el-input v-model="form.engineSerialNum" placeholder="请输入故障件所属发动机号码" />
  162. </el-form-item>
  163. </el-col>
  164. <el-col v-bind="{ span: 12 }">
  165. <el-form-item label="故障件位置" prop="faultyPartsPosition">
  166. <el-input v-model="form.faultyPartsPosition" placeholder="请输入故障件位置" />
  167. </el-form-item>
  168. </el-col>
  169. <el-col v-bind="{ span: 12 }">
  170. <el-form-item label="故障现象" prop="faultyPhenomenon">
  171. <el-input v-model="form.faultyPhenomenon" placeholder="请输入故障现象" />
  172. </el-form-item>
  173. </el-col>
  174. <el-col v-bind="{ span: 12 }">
  175. <el-form-item label="故障发生地点" prop="faultyPlace">
  176. <el-input v-model="form.faultyPlace" placeholder="请输入故障发生地点" />
  177. </el-form-item>
  178. </el-col>
  179. <el-col v-bind="{ span: 12 }">
  180. <el-form-item label="发现时机" prop="findOpportunity">
  181. <el-input v-model="form.findOpportunity" placeholder="请输入发现时机" />
  182. </el-form-item>
  183. </el-col>
  184. <el-col v-bind="{ span: 12 }">
  185. <el-form-item label="系统" prop="systems">
  186. <el-input v-model="form.systems" placeholder="请输入系统" />
  187. </el-form-item>
  188. </el-col>
  189. <el-col v-bind="{ span: 12 }">
  190. <el-form-item label="故障件制造厂" prop="faultyPartsManufacturer">
  191. <el-input v-model="form.faultyPartsManufacturer" placeholder="请输入故障件制造厂" />
  192. </el-form-item>
  193. </el-col>
  194. <el-col v-bind="{ span: 12 }">
  195. <el-form-item label="故障件翻修厂" prop="faultyPartsRenovate">
  196. <el-input v-model="form.faultyPartsRenovate" placeholder="请输入故障件翻修厂" />
  197. </el-form-item>
  198. </el-col>
  199. <el-col v-bind="{ span: 12 }">
  200. <el-form-item label="故障件装本机工作时次" prop="installationTime">
  201. <el-input v-model="form.installationTime" placeholder="请输入故障件装本机工作时次" />
  202. </el-form-item>
  203. </el-col>
  204. <el-col v-bind="{ span: 12 }">
  205. <el-form-item label="故障件总工作时次" prop="totalWorkTime">
  206. <el-input v-model="form.totalWorkTime" placeholder="请输入故障件总工作时次" />
  207. </el-form-item>
  208. </el-col>
  209. <el-col v-bind="{ span: 12 }">
  210. <el-form-item label="故障件修后时次" prop="repairTime">
  211. <el-input v-model="form.repairTime" placeholder="请输入故障件修后时次" />
  212. </el-form-item>
  213. </el-col>
  214. <el-col v-bind="{ span: 12 }">
  215. <el-form-item label="故换件型别" prop="replacementPartsModel">
  216. <el-input v-model="form.replacementPartsModel" placeholder="请输入故换件型别" />
  217. </el-form-item>
  218. </el-col>
  219. <el-col v-bind="{ span: 12 }">
  220. <el-form-item label="故换件号码" prop="replacementPartsNum">
  221. <el-input v-model="form.replacementPartsNum" placeholder="请输入故换件号码" />
  222. </el-form-item>
  223. </el-col>
  224. <el-col v-bind="{ span: 12 }">
  225. <el-form-item label="故换件制造厂" prop="replacementPartsManufacturer">
  226. <el-input v-model="form.replacementPartsManufacturer" placeholder="请输入故换件制造厂" />
  227. </el-form-item>
  228. </el-col>
  229. <el-col v-bind="{ span: 12 }">
  230. <el-form-item label="故换件总工作时次" prop="replacementTotalWorkTime">
  231. <el-input v-model="form.replacementTotalWorkTime" placeholder="请输入故换件总工作时次" />
  232. </el-form-item>
  233. </el-col>
  234. <el-col v-bind="{ span: 12 }">
  235. <el-form-item label="故换件翻修厂" prop="replacementPartsRenovate">
  236. <el-input v-model="form.replacementPartsRenovate" placeholder="请输入故换件翻修厂" />
  237. </el-form-item>
  238. </el-col>
  239. <el-col v-bind="{ span: 12 }">
  240. <el-form-item label="故换件修后时次" prop="replacementRepairTime">
  241. <el-input v-model="form.replacementRepairTime" placeholder="请输入故换件修后时次" />
  242. </el-form-item>
  243. </el-col>
  244. <el-col v-bind="{ span: 12 }">
  245. <el-form-item label="故障失常码" prop="faultyAbnormalCode">
  246. <el-input v-model="form.faultyAbnormalCode" placeholder="请输入故障失常码" />
  247. </el-form-item>
  248. </el-col>
  249. <el-col v-bind="{ span: 12 }">
  250. <el-form-item label="故障件装机日期" prop="faultyPartsInstallDate">
  251. <el-date-picker clearable v-model="form.faultyPartsInstallDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择故障件装机日期"></el-date-picker>
  252. </el-form-item>
  253. </el-col>
  254. <el-col v-bind="{ span: 12 }">
  255. <el-form-item label="故障原因" prop="faultyReason">
  256. <el-input v-model="form.faultyReason" placeholder="请输入故障原因" />
  257. </el-form-item>
  258. </el-col>
  259. <el-col v-bind="{ span: 12 }">
  260. <el-form-item label="故障性质" prop="faultyNature">
  261. <el-input v-model="form.faultyNature" placeholder="请输入故障性质" />
  262. </el-form-item>
  263. </el-col>
  264. <el-col v-bind="{ span: 12 }">
  265. <el-form-item label="故障责任" prop="faultyResponsibility">
  266. <el-input v-model="form.faultyResponsibility" placeholder="请输入故障责任" />
  267. </el-form-item>
  268. </el-col>
  269. <el-col v-bind="{ span: 12 }">
  270. <el-form-item label="故障后果" prop="faultyConsequence">
  271. <el-input v-model="form.faultyConsequence" placeholder="请输入故障后果" />
  272. </el-form-item>
  273. </el-col>
  274. <el-col v-bind="{ span: 12 }">
  275. <el-form-item label="处理意见" prop="handlingSuggestions">
  276. <el-input v-model="form.handlingSuggestions" placeholder="请输入处理意见" />
  277. </el-form-item>
  278. </el-col>
  279. <el-col v-bind="{ span: 12 }">
  280. <el-form-item label="影响次数" prop="influenceFrequency">
  281. <el-input v-model="form.influenceFrequency" placeholder="请输入影响次数" />
  282. </el-form-item>
  283. </el-col>
  284. <el-col v-bind="{ span: 12 }">
  285. <el-form-item label="误飞次数" prop="errorFlyFrequency">
  286. <el-input v-model="form.errorFlyFrequency" placeholder="请输入误飞次数" />
  287. </el-form-item>
  288. </el-col>
  289. <el-col v-bind="{ span: 12 }">
  290. <el-form-item label="判明方法" prop="identificationMethod">
  291. <el-input v-model="form.identificationMethod" placeholder="请输入判明方法" />
  292. </el-form-item>
  293. </el-col>
  294. <el-col v-bind="{ span: 12 }">
  295. <el-form-item label="发现人" prop="discoveredPeople">
  296. <el-input v-model="form.discoveredPeople" placeholder="请输入发现人" />
  297. </el-form-item>
  298. </el-col>
  299. <el-col v-bind="{ span: 12 }">
  300. <el-form-item label="排除方法" prop="exclusionMethod">
  301. <el-input v-model="form.exclusionMethod" placeholder="请输入排除方法" />
  302. </el-form-item>
  303. </el-col>
  304. <el-col v-bind="{ span: 12 }">
  305. <el-form-item label="排故人" prop="exclusionPeople">
  306. <el-input v-model="form.exclusionPeople" placeholder="请输入排故人" />
  307. </el-form-item>
  308. </el-col>
  309. <el-col v-bind="{ span: 12 }">
  310. <el-form-item label="审核人" prop="examinePeople">
  311. <el-input v-model="form.examinePeople" placeholder="请输入审核人" />
  312. </el-form-item>
  313. </el-col>
  314. <el-col v-bind="{ span: 12 }">
  315. <el-form-item label="审核时间" prop="examineTime">
  316. <el-date-picker clearable v-model="form.examineTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择审核时间"></el-date-picker>
  317. </el-form-item>
  318. </el-col>
  319. <el-col v-bind="{ span: 12 }">
  320. <el-form-item label="排除日期" prop="exclusionDate">
  321. <el-date-picker clearable v-model="form.exclusionDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择排除日期"></el-date-picker>
  322. </el-form-item>
  323. </el-col>
  324. <el-col v-bind="{ span: 12 }">
  325. <el-form-item label="排故工时" prop="exclusionWorkTime">
  326. <el-input v-model="form.exclusionWorkTime" placeholder="请输入排故工时" />
  327. </el-form-item>
  328. </el-col>
  329. <el-col v-bind="{ span: 12 }">
  330. <el-form-item label="排故人数" prop="exclusionPeopleNum">
  331. <el-input v-model="form.exclusionPeopleNum" placeholder="请输入排故人数" />
  332. </el-form-item>
  333. </el-col>
  334. <el-col v-bind="{ span: 12 }">
  335. <el-form-item label="排故时间" prop="exclusionTime">
  336. <el-input v-model="form.exclusionTime" placeholder="请输入排故时间" />
  337. </el-form-item>
  338. </el-col>
  339. <el-col v-bind="{ span: 12 }">
  340. <el-form-item label="是否立功" prop="isAchievement">
  341. <el-input v-model="form.isAchievement" placeholder="请输入是否立功" />
  342. </el-form-item>
  343. </el-col>
  344. <el-col v-bind="{ span: 12 }">
  345. <el-form-item label="需要试飞" prop="needTestFly">
  346. <el-input v-model="form.needTestFly" placeholder="请输入需要试飞" />
  347. </el-form-item>
  348. </el-col>
  349. <el-col v-bind="{ span: 12 }">
  350. <el-form-item label="备注" prop="remarks">
  351. <el-input v-model="form.remarks" placeholder="请输入备注" />
  352. </el-form-item>
  353. </el-col>
  354. </el-row>
  355. </el-form>
  356. <span slot="footer" class="dialog-footer">
  357. <el-button @click="handleClose">取 消</el-button>
  358. <el-button type="primary" @click="submit">确 定</el-button>
  359. </span>
  360. </el-dialog>
  361. <!-- 导入 -->
  362. <ImportDialog ref="ImportDialog" @submitCallBack="ImportDialogCallBack" />
  363. </div>
  364. </template>
  365. <script>
  366. import { getFaultStatistics, getFaultStatisticsListAll, getAircaftTypeAndModelTree, addFaultStatistics, updateFaultStatistics, removeFaultStatistics, downLoadFaultStatistics, exportFaultStatisticsExcel } from '@/api/als/faultStatistics'
  367. import { deepClone, debounce } from '@/utils/index'
  368. import ImportDialog from './importDialog/index.vue'
  369. export default {
  370. name: 'FaultStatistics',
  371. components: { ImportDialog },
  372. data() {
  373. // 这里存放数据
  374. return {
  375. dialogTitle: '新增',
  376. dialogVisible: false,
  377. keyWord: '',
  378. aircaftModelIdList: [],
  379. currentNodeKey: null,
  380. currentNode: null,
  381. menuTreeData: [],
  382. treeObj: {
  383. title: '所属机种',
  384. activityheight: '275px',
  385. searchIcon: false,
  386. configure: {
  387. children: 'children',
  388. label: 'label'
  389. }
  390. },
  391. groupsList: [],
  392. majorList: [],
  393. aircraftModelList: [],
  394. aircraftNumList: [],
  395. faultyPartsNameList: [],
  396. statisticsDate: [],
  397. select: {
  398. startStatisticsDate: '',
  399. endStatisticsDate: '',
  400. major: '特设',
  401. aircraftModel: 'J-11'
  402. },
  403. typeTree: {
  404. children: 'children',
  405. label: 'label'
  406. },
  407. searchValue: '',
  408. columns: [
  409. { prop: 'id', label: '编号' },
  410. {
  411. prop: 'statisticsDate',
  412. label: '日期'
  413. },
  414. {
  415. prop: 'warZone',
  416. label: '战区'
  417. },
  418. {
  419. prop: 'army',
  420. label: '军'
  421. },
  422. {
  423. prop: 'division',
  424. label: '师'
  425. },
  426. {
  427. prop: 'groups',
  428. label: '团'
  429. },
  430. {
  431. prop: 'squadron',
  432. label: '中队'
  433. },
  434. {
  435. prop: 'aircraftNum',
  436. label: '飞机号'
  437. },
  438. {
  439. prop: 'aircraftModel',
  440. label: '机型'
  441. },
  442. {
  443. prop: 'factoryNum',
  444. label: '出厂号码'
  445. },
  446. {
  447. prop: 'machineType',
  448. label: '机件类型'
  449. },
  450. {
  451. prop: 'machineNum',
  452. label: '机件号'
  453. },
  454. {
  455. prop: 'machineModel',
  456. label: '机件型别'
  457. },
  458. {
  459. prop: 'machineName',
  460. label: '机件名称'
  461. },
  462. {
  463. prop: 'landingGear',
  464. label: '起落'
  465. },
  466. {
  467. prop: 'major',
  468. label: '专业'
  469. },
  470. {
  471. prop: 'faultyPartsName',
  472. label: '故障件名称'
  473. },
  474. {
  475. prop: 'faultyPartsModel',
  476. label: '故障件型别'
  477. },
  478. {
  479. prop: 'faultyPartsNum',
  480. label: '故障件号码'
  481. },
  482. {
  483. prop: 'engineModel',
  484. label: '故障件所属发动机型别'
  485. },
  486. {
  487. prop: 'engineNum',
  488. label: '故障件所属发动机号码'
  489. },
  490. {
  491. prop: 'engineSerialNum',
  492. label: '故障件所属发动机号码'
  493. },
  494. {
  495. prop: 'faultyPartsPosition',
  496. label: '故障件位置'
  497. },
  498. {
  499. prop: 'faultyPhenomenon',
  500. label: '故障现象'
  501. },
  502. {
  503. prop: 'faultyPlace',
  504. label: '故障发生地点'
  505. },
  506. {
  507. prop: 'findOpportunity',
  508. label: '发现时机'
  509. },
  510. {
  511. prop: 'systems',
  512. label: '系统'
  513. },
  514. {
  515. prop: 'timingType',
  516. label: '计时类型'
  517. },
  518. {
  519. prop: 'faultyPartsManufacturer',
  520. label: '故障件制造厂'
  521. },
  522. {
  523. prop: 'faultyPartsRenovate',
  524. label: '故障件翻修厂'
  525. },
  526. {
  527. prop: 'installationTime',
  528. label: '故障件装本机工作时次'
  529. },
  530. {
  531. prop: 'totalWorkTime',
  532. label: '故障件总工作时次'
  533. },
  534. {
  535. prop: 'repairTime',
  536. label: '故障件修后时次'
  537. },
  538. {
  539. prop: 'replacementPartsModel',
  540. label: '故换件型别'
  541. },
  542. {
  543. prop: 'replacementPartsNum',
  544. label: '故换件号码'
  545. },
  546. {
  547. prop: 'replacementPartsManufacturer',
  548. label: '故换件制造厂'
  549. },
  550. {
  551. prop: 'replacementTotalWorkTime',
  552. label: '故换件总工作时次'
  553. },
  554. {
  555. prop: 'replacementPartsRenovate',
  556. label: '故换件翻修厂'
  557. },
  558. {
  559. prop: 'replacementRepairTime',
  560. label: '故换件修后时次'
  561. },
  562. {
  563. prop: 'faultyAbnormalCode',
  564. label: '故障失常码'
  565. },
  566. {
  567. prop: 'faultyPartsInstallDate',
  568. label: '故障件装机日期'
  569. },
  570. {
  571. prop: 'faultyReason',
  572. label: '故障原因'
  573. },
  574. {
  575. prop: 'faultyNature',
  576. label: '故障性质'
  577. },
  578. {
  579. prop: 'faultyResponsibility',
  580. label: '故障责任'
  581. },
  582. {
  583. prop: 'faultyConsequence',
  584. label: '故障后果'
  585. },
  586. {
  587. prop: 'handlingSuggestions',
  588. label: '处理意见'
  589. },
  590. {
  591. prop: 'influenceFrequency',
  592. label: '影响次数'
  593. },
  594. {
  595. prop: 'errorFlyFrequency',
  596. label: '误飞次数'
  597. },
  598. {
  599. prop: 'identificationMethod',
  600. label: '判明方法'
  601. },
  602. {
  603. prop: 'discoveredPeople',
  604. label: '发现人'
  605. },
  606. {
  607. prop: 'exclusionMethod',
  608. label: '排除方法'
  609. },
  610. {
  611. prop: 'exclusionPeople',
  612. label: '排故人'
  613. },
  614. {
  615. prop: 'examinePeople',
  616. label: '审核人'
  617. },
  618. {
  619. prop: 'examineTime',
  620. label: '审核时间'
  621. },
  622. {
  623. prop: 'exclusionDate',
  624. label: '排除日期'
  625. },
  626. {
  627. prop: 'exclusionWorkTime',
  628. label: '排故工时'
  629. },
  630. {
  631. prop: 'exclusionPeopleNum',
  632. label: '排故人数'
  633. },
  634. {
  635. prop: 'exclusionTime',
  636. label: '排故时间'
  637. },
  638. {
  639. prop: 'isAchievement',
  640. label: '是否立功'
  641. },
  642. {
  643. prop: 'needTestFly',
  644. label: '需要试飞'
  645. },
  646. {
  647. button: true,
  648. label: '操作',
  649. width: '240px',
  650. group: [
  651. {
  652. name: '编辑',
  653. type: 'text',
  654. round: false,
  655. plain: false,
  656. onClick: (row, index, scope) => {
  657. this.handUpdate(row)
  658. }
  659. },
  660. {
  661. name: '删除',
  662. type: 'text',
  663. round: false,
  664. plain: false,
  665. onClick: (row, index, scope) => {
  666. this.remove([row])
  667. }
  668. }
  669. ]
  670. }
  671. ],
  672. options: {
  673. stripe: true, // 斑马纹
  674. mutiSelect: true, // 多选框
  675. index: false, // 显示序号, 多选则 mutiSelect
  676. loading: false, // 表格动画
  677. initTable: false, // 是否一挂载就加载数据
  678. border: true,
  679. height: 'calc(100vh - 300px)'
  680. },
  681. tableCheckItems: [],
  682. tableData: [],
  683. tableRequset: {
  684. total: 0,
  685. pageIndex: 1,
  686. pageSize: 10,
  687. searchValue: ''
  688. },
  689. form: {
  690. id: '',
  691. statisticsDate: '',
  692. warZone: '',
  693. army: '',
  694. division: '',
  695. groups: '',
  696. squadron: '',
  697. aircraftNum: '',
  698. aircraftModel: '',
  699. factoryNum: '',
  700. machineType: '',
  701. machineNum: '',
  702. machineModel: '',
  703. machineName: '',
  704. landingGear: '',
  705. major: '',
  706. faultyPartsName: '',
  707. faultyPartsModel: '',
  708. faultyPartsNum: '',
  709. engineModel: '',
  710. engineNum: '',
  711. engineSerialNum: '',
  712. faultyPartsPosition: '',
  713. faultyPhenomenon: '',
  714. faultyPlace: '',
  715. findOpportunity: '',
  716. systems: '',
  717. timingType: '',
  718. faultyPartsManufacturer: '',
  719. faultyPartsRenovate: '',
  720. installationTime: '',
  721. totalWorkTime: '',
  722. repairTime: '',
  723. replacementPartsModel: '',
  724. replacementPartsNum: '',
  725. replacementPartsManufacturer: '',
  726. replacementTotalWorkTime: '',
  727. replacementPartsRenovate: '',
  728. replacementRepairTime: '',
  729. faultyAbnormalCode: '',
  730. faultyPartsInstallDate: '',
  731. faultyReason: '',
  732. faultyNature: '',
  733. faultyResponsibility: '',
  734. faultyConsequence: '',
  735. handlingSuggestions: '',
  736. influenceFrequency: '',
  737. errorFlyFrequency: '',
  738. identificationMethod: '',
  739. discoveredPeople: '',
  740. exclusionMethod: '',
  741. exclusionPeople: '',
  742. examinePeople: '',
  743. examineTime: '',
  744. exclusionDate: '',
  745. exclusionWorkTime: '',
  746. exclusionPeopleNum: '',
  747. exclusionTime: '',
  748. isAchievement: '',
  749. needTestFly: '',
  750. repairStatus: '',
  751. remarks: '',
  752. tenantId: '',
  753. delFlag: '',
  754. version: '',
  755. createBy: '',
  756. createTime: '',
  757. updateBy: '',
  758. updateTime: ''
  759. },
  760. rules: {
  761. statisticsDate: [{ required: true, message: '日期不能为空', trigger: 'blur' }],
  762. installationTime: [{ required: true, message: '故障件装本机工作时次不能为空', trigger: 'blur' }],
  763. totalWorkTime: [{ required: true, message: '故障件总工作时次不能为空', trigger: 'blur' }]
  764. },
  765. debounceFn: debounce(this.fetch, 500)
  766. }
  767. },
  768. watch: {
  769. keyWord() {
  770. this.tableRequset.pageIndex = 1
  771. this.debounceFn()
  772. }
  773. },
  774. mounted() {
  775. this.getFaultStatisticsAPI()
  776. // this.getAircaftTypeAndModelTreeAPI()
  777. },
  778. methods: {
  779. async getFaultStatisticsListAll(params) {
  780. if (params.distinctField == 'aircraft_num') {
  781. params.aircraftModel = this.select.aircraftModel
  782. }
  783. const { data } = await getFaultStatisticsListAll({ ...params })
  784. if (params.distinctField == 'groups') {
  785. this.groupsList = data
  786. } else if (params.distinctField == 'major') {
  787. this.majorList = data
  788. } else if (params.distinctField == 'aircraft_model') {
  789. this.aircraftModelList = data
  790. } else if (params.distinctField == 'aircraft_num') {
  791. this.aircraftNumList = data
  792. } else if (params.distinctField == 'faulty_parts_name') {
  793. this.faultyPartsNameList = data
  794. }
  795. },
  796. async getAircaftTypeAndModelTreeAPI(params) {
  797. const { data } = await getAircaftTypeAndModelTree(params)
  798. this.menuTreeData = data
  799. if (data.length) {
  800. this.currentNodeKey = data[0].value
  801. this.currentNode = data[0]
  802. this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children).map((e) => e.id)
  803. this.getFaultStatisticsAPI({ aircaftModelIdList: this.aircaftModelIdList })
  804. }
  805. },
  806. async removeFaultStatisticsAPI(params) {
  807. try {
  808. const { code } = await removeFaultStatistics(params)
  809. if (code === 200) {
  810. this.$message({
  811. type: 'success',
  812. message: '操作成功!'
  813. })
  814. await this.getFaultStatisticsAPI()
  815. this.handleClose()
  816. }
  817. } catch (error) {}
  818. },
  819. getTreeLeafData(list) {
  820. const newArr = []
  821. function getLeaf(data, arr) {
  822. data.forEach((e) => {
  823. if (e.type === 1) {
  824. arr.push(e)
  825. }
  826. if (e.children.length) {
  827. getLeaf(e.children, arr)
  828. }
  829. })
  830. }
  831. getLeaf(list, newArr)
  832. return newArr
  833. },
  834. async getFaultStatisticsAPI(params) {
  835. if (this.$refs.table) this.$refs.table.clearSelection()
  836. const { keyWord } = this
  837. const { pageSize, pageIndex } = this.tableRequset
  838. const {
  839. data: { list, total }
  840. } = await getFaultStatistics({ pageSize, pageNum: pageIndex, keyWord, ...params })
  841. this.tableData = list
  842. this.tableRequset.total = total
  843. this.getFaultStatisticsListAll({ distinctField: 'groups' })
  844. this.getFaultStatisticsListAll({ distinctField: 'major' })
  845. this.getFaultStatisticsListAll({ distinctField: 'aircraft_model' })
  846. this.getFaultStatisticsListAll({ distinctField: 'aircraft_num' })
  847. this.getFaultStatisticsListAll({ distinctField: 'faulty_parts_name' })
  848. },
  849. fetch() {
  850. this.getFaultStatisticsAPI()
  851. },
  852. searchClick() {
  853. console.log(this.statisticsDate)
  854. if (this.statisticsDate != null) {
  855. this.select.startStatisticsDate = this.statisticsDate[0]
  856. this.select.endStatisticsDate = this.statisticsDate[1]
  857. }
  858. this.getFaultStatisticsAPI(this.select)
  859. },
  860. async addFaultStatisticsAPI() {
  861. this.$refs['form'].validate(async (valid) => {
  862. if (valid) {
  863. try {
  864. delete this.form.aircaftModelName
  865. const { code } = await addFaultStatistics({ ...this.form })
  866. if (code === 200) {
  867. this.$message({
  868. type: 'success',
  869. message: '操作成功!'
  870. })
  871. this.getFaultStatisticsAPI()
  872. this.handleClose()
  873. }
  874. } catch (error) {}
  875. }
  876. })
  877. },
  878. async updateFaultStatisticsAPI() {
  879. this.$refs['form'].validate(async (valid) => {
  880. if (valid) {
  881. try {
  882. const { code } = await updateFaultStatistics({ ...this.form })
  883. if (code === 200) {
  884. this.$message({
  885. type: 'success',
  886. message: '操作成功!'
  887. })
  888. this.getFaultStatisticsAPI()
  889. this.handleClose()
  890. }
  891. } catch (error) {}
  892. }
  893. })
  894. },
  895. treeNodeClick(data) {
  896. this.$refs.table.clearSelection()
  897. this.currentNodeKey = data.id
  898. this.currentNode = data
  899. this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data]).map((e) => e.id)
  900. this.getFaultStatisticsAPI()
  901. },
  902. openDialog() {
  903. this.dialogTitle = '新增'
  904. this.dialogVisible = true
  905. this.form.aircaftModelName = this.currentNode.label
  906. this.form.aircaftModelId = this.currentNode.id
  907. },
  908. handleClose() {
  909. this.dialogVisible = false
  910. this.form = {
  911. id: '',
  912. statisticsDate: '',
  913. warZone: '',
  914. army: '',
  915. division: '',
  916. groups: '',
  917. squadron: '',
  918. aircraftNum: '',
  919. aircraftModel: '',
  920. factoryNum: '',
  921. machineType: '',
  922. machineNum: '',
  923. machineModel: '',
  924. machineName: '',
  925. landingGear: '',
  926. major: '',
  927. faultyPartsName: '',
  928. faultyPartsModel: '',
  929. faultyPartsNum: '',
  930. engineModel: '',
  931. engineNum: '',
  932. engineSerialNum: '',
  933. faultyPartsPosition: '',
  934. faultyPhenomenon: '',
  935. faultyPlace: '',
  936. findOpportunity: '',
  937. systems: '',
  938. timingType: '',
  939. faultyPartsManufacturer: '',
  940. faultyPartsRenovate: '',
  941. installationTime: '',
  942. totalWorkTime: '',
  943. repairTime: '',
  944. replacementPartsModel: '',
  945. replacementPartsNum: '',
  946. replacementPartsManufacturer: '',
  947. replacementTotalWorkTime: '',
  948. replacementPartsRenovate: '',
  949. replacementRepairTime: '',
  950. faultyAbnormalCode: '',
  951. faultyPartsInstallDate: '',
  952. faultyReason: '',
  953. faultyNature: '',
  954. faultyResponsibility: '',
  955. faultyConsequence: '',
  956. handlingSuggestions: '',
  957. influenceFrequency: '',
  958. errorFlyFrequency: '',
  959. identificationMethod: '',
  960. discoveredPeople: '',
  961. exclusionMethod: '',
  962. exclusionPeople: '',
  963. examinePeople: '',
  964. examineTime: '',
  965. exclusionDate: '',
  966. exclusionWorkTime: '',
  967. exclusionPeopleNum: '',
  968. exclusionTime: '',
  969. isAchievement: '',
  970. needTestFly: '',
  971. repairStatus: '',
  972. remarks: '',
  973. tenantId: '',
  974. delFlag: '',
  975. version: '',
  976. createBy: '',
  977. createTime: '',
  978. updateBy: '',
  979. updateTime: ''
  980. }
  981. },
  982. handUpdate(row) {
  983. this.dialogTitle = '编辑'
  984. this.form = deepClone(row)
  985. this.dialogVisible = true
  986. },
  987. submit() {
  988. switch (this.dialogTitle) {
  989. case '编辑':
  990. this.updateFaultStatisticsAPI()
  991. // this.handleClose()
  992. break
  993. case '新增':
  994. this.addFaultStatisticsAPI()
  995. // this.handleClose()
  996. break
  997. }
  998. },
  999. selection(val) {
  1000. this.tableCheckItems = val
  1001. },
  1002. remove(row) {
  1003. this.$confirm('是否删除该机种', '提示', {
  1004. confirmButtonText: '确定',
  1005. cancelButtonText: '取消',
  1006. type: 'warning'
  1007. })
  1008. .then(() => {
  1009. this.removeFaultStatisticsAPI(row.map((e) => e.id))
  1010. })
  1011. .catch(() => {})
  1012. },
  1013. //更多按钮
  1014. handleExport(type) {
  1015. this[type]()
  1016. },
  1017. //导入
  1018. importOperation() {
  1019. this.$refs.ImportDialog.triggerDialog()
  1020. },
  1021. //导入回写
  1022. ImportDialogCallBack() {
  1023. this.getFaultStatisticsAPI()
  1024. },
  1025. //导出全部
  1026. async allExport() {
  1027. // const params = {
  1028. // queryParam: this.searchValue
  1029. // }
  1030. await exportFaultStatisticsExcel({})
  1031. },
  1032. //下载模板
  1033. async downloadTemplate() {
  1034. await downLoadFaultStatistics()
  1035. }
  1036. }
  1037. }
  1038. </script>
  1039. <style lang="scss">
  1040. @import '../index.scss';
  1041. </style>