index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. <template>
  2. <div class="view-table-content">
  3. <div class="view-dataSpecies-left">
  4. <MenuTree :currentNodeKey="currentNodeKey" nodeKey="id" :treedata="menuTreeData" @TreeNodeclick="treeNodeClick" v-bind="treeObj"> </MenuTree>
  5. </div>
  6. <div class="view-dataSpecies-right">
  7. <div class="view-dataType-title">
  8. <div class="view-dataType-title-btn">
  9. <el-button type="success" @click="openDialog()" :disabled="currentNode && currentNode.type == 0">新增</el-button>
  10. <el-button type="warning" @click="remove(tableCheckItems)" :disabled="tableCheckItems.length == 0">删除</el-button>
  11. </div>
  12. <div class="view-dataType-title-search">
  13. <el-input placeholder="请输入关键字" v-model="keyWord" class="input1">
  14. <el-button slot="append" icon="el-icon-search" @click="searchClick"></el-button>
  15. </el-input>
  16. </div>
  17. </div>
  18. <div class="view-dataType-table">
  19. <LTable ref="table" @selection-change="selection" :defaultFetch="false" :fetch="fetch" :columns="columns" :dataSource="tableData" :options="options" :pagination="tableRequset"></LTable>
  20. </div>
  21. <!-- 添加或修改维修信息对话框 -->
  22. <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px" :before-close="handleClose">
  23. <el-form ref="form" :model="form" label-width="80px">
  24. <el-form-item label="飞机编码" prop="aircraftCode">
  25. <el-input v-model="form.aircraftCode" placeholder="请输入飞机编码" />
  26. </el-form-item>
  27. <el-form-item label="故障代码" prop="faultCode">
  28. <el-input v-model="form.faultCode" placeholder="请输入故障代码" />
  29. </el-form-item>
  30. <el-form-item label="故障名称" prop="faultName">
  31. <el-input v-model="form.faultName" placeholder="请输入故障名称" />
  32. </el-form-item>
  33. <el-form-item label="故障位置" prop="location">
  34. <el-input v-model="form.location" placeholder="请输入故障位置" />
  35. </el-form-item>
  36. <el-form-item label="故障等级" prop="level">
  37. <el-input v-model="form.level" placeholder="请输入故障等级" />
  38. </el-form-item>
  39. <el-form-item label="故障发生时间" prop="faultDate">
  40. <el-date-picker clearable v-model="form.faultDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择故障发生时间"> </el-date-picker>
  41. </el-form-item>
  42. <el-form-item label="故障现象" prop="symptoms">
  43. <el-input v-model="form.symptoms" placeholder="请输入故障现象" />
  44. </el-form-item>
  45. <el-form-item label="故障原因" prop="faultCause">
  46. <el-input v-model="form.faultCause" placeholder="请输入故障原因" />
  47. </el-form-item>
  48. <el-form-item label="维修负责人" prop="supervisor">
  49. <el-input v-model="form.supervisor" placeholder="请输入维修负责人" />
  50. </el-form-item>
  51. <el-form-item label="维修时间" prop="maintenanceTime">
  52. <el-date-picker clearable v-model="form.maintenanceTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择维修时间"> </el-date-picker>
  53. </el-form-item>
  54. <el-form-item label="换件前器材编码" prop="beforeEquipmentCode">
  55. <el-input v-model="form.beforeEquipmentCode" placeholder="请输入换件前器材编码" />
  56. </el-form-item>
  57. <el-form-item label="换件前器材名称" prop="beforeEquipmentName">
  58. <el-input v-model="form.beforeEquipmentName" placeholder="请输入换件前器材名称" />
  59. </el-form-item>
  60. <el-form-item label="换件前规格型号" prop="beforeModelNumber">
  61. <el-input v-model="form.beforeModelNumber" placeholder="请输入换件前规格型号" />
  62. </el-form-item>
  63. <el-form-item label="换件后器材编码" prop="afterEquipmentCode1">
  64. <el-input v-model="form.afterEquipmentCode1" placeholder="请输入换件后器材编码" />
  65. </el-form-item>
  66. <el-form-item label="换件后器材名称" prop="afterEquipmentName1">
  67. <el-input v-model="form.afterEquipmentName1" placeholder="请输入换件后器材名称" />
  68. </el-form-item>
  69. <el-form-item label="换件后规格型号" prop="afterModelNumber1">
  70. <el-input v-model="form.afterModelNumber1" placeholder="请输入换件后规格型号" />
  71. </el-form-item>
  72. <el-form-item label="更换数量" prop="quantity">
  73. <el-input v-model="form.quantity" placeholder="请输入更换数量" />
  74. </el-form-item>
  75. <el-form-item label="备注" prop="remarks">
  76. <el-input v-model="form.remarks" type="textarea" :rows="2" placeholder="请输入备注" />
  77. </el-form-item>
  78. </el-form>
  79. <span slot="footer" class="dialog-footer">
  80. <el-button @click="handleClose">取 消</el-button>
  81. <el-button type="primary" @click="submit">确 定</el-button>
  82. </span>
  83. </el-dialog>
  84. </div>
  85. </div>
  86. </template>
  87. <script>
  88. import { getMaintenance, getAircaftTypeAndModelTree, addMaintenance, updateMaintenance, removeMaintenance } from '@/api/als/maintenance'
  89. import { deepClone, debounce } from '@/utils/index'
  90. export default {
  91. name: 'Maintenance',
  92. components: {},
  93. data() {
  94. // 这里存放数据
  95. return {
  96. dialogTitle: '新增',
  97. dialogVisible: false,
  98. keyWord: '',
  99. aircaftModelIdList: [],
  100. currentNodeKey: null,
  101. currentNode: null,
  102. menuTreeData: [],
  103. treeObj: {
  104. title: '所属机种',
  105. activityheight: '275px',
  106. searchIcon: false,
  107. configure: {
  108. children: 'children',
  109. label: 'label'
  110. }
  111. },
  112. typeTree: {
  113. children: 'children',
  114. label: 'label'
  115. },
  116. searchValue: '',
  117. columns: [
  118. { prop: 'id', label: '编号' },
  119. {
  120. prop: 'aircraftCode',
  121. label: '飞机编码'
  122. },
  123. {
  124. prop: 'faultCode',
  125. label: '故障代码'
  126. },
  127. {
  128. prop: 'faultName',
  129. label: '故障名称'
  130. },
  131. {
  132. prop: 'location',
  133. label: '故障位置'
  134. },
  135. {
  136. prop: 'level',
  137. label: '故障等级'
  138. },
  139. {
  140. prop: 'faultDate',
  141. label: '故障发生时间'
  142. },
  143. {
  144. prop: 'symptoms',
  145. label: '故障现象'
  146. },
  147. {
  148. prop: 'faultCause',
  149. label: '故障原因'
  150. },
  151. {
  152. prop: 'status',
  153. label: '维修结果'
  154. },
  155. {
  156. prop: 'supervisor',
  157. label: '维修负责人'
  158. },
  159. {
  160. prop: 'maintenanceTime',
  161. label: '维修时间'
  162. },
  163. {
  164. prop: 'beforeEquipmentCode',
  165. label: '换件前器材编码'
  166. },
  167. {
  168. prop: 'beforeEquipmentName',
  169. label: '换件前器材名称'
  170. },
  171. {
  172. prop: 'beforeModelNumber',
  173. label: '换件前规格型号'
  174. },
  175. {
  176. prop: 'afterEquipmentCode1',
  177. label: '换件后器材编码'
  178. },
  179. {
  180. prop: 'afterEquipmentName1',
  181. label: '换件后器材名称'
  182. },
  183. {
  184. prop: 'afterModelNumber1',
  185. label: '换件后规格型号'
  186. },
  187. {
  188. prop: 'quantity',
  189. label: '更换数量'
  190. },
  191. {
  192. prop: 'remarks',
  193. label: '备注'
  194. },
  195. {
  196. button: true,
  197. label: '操作',
  198. width: '240px',
  199. group: [
  200. {
  201. name: '编辑',
  202. type: 'text',
  203. round: false,
  204. plain: false,
  205. onClick: (row, index, scope) => {
  206. _this.handUpdate(row)
  207. }
  208. },
  209. {
  210. name: '删除',
  211. type: 'text',
  212. round: false,
  213. plain: false,
  214. onClick: (row, index, scope) => {
  215. _this.remove([row])
  216. }
  217. }
  218. ]
  219. }
  220. ],
  221. options: {
  222. stripe: true, // 斑马纹
  223. mutiSelect: true, // 多选框
  224. index: false, // 显示序号, 多选则 mutiSelect
  225. loading: false, // 表格动画
  226. initTable: false, // 是否一挂载就加载数据
  227. border: true,
  228. height: 'calc(100vh - 300px)'
  229. },
  230. tableCheckItems: [],
  231. tableData: [],
  232. tableRequset: {
  233. total: 0,
  234. pageIndex: 1,
  235. pageSize: 10,
  236. searchValue: ''
  237. },
  238. form: {
  239. id: '',
  240. aircraftCode: '',
  241. faultCode: '',
  242. faultName: '',
  243. location: '',
  244. level: '',
  245. faultDate: '',
  246. symptoms: '',
  247. faultCause: '',
  248. status: '',
  249. supervisor: '',
  250. maintenanceTime: '',
  251. beforeEquipmentCode: '',
  252. beforeEquipmentName: '',
  253. beforeModelNumber: '',
  254. afterEquipmentCode1: '',
  255. afterEquipmentName1: '',
  256. afterModelNumber1: '',
  257. quantity: '',
  258. remarks: '',
  259. tenantId: '',
  260. version: '',
  261. delFlag: '',
  262. createBy: '',
  263. createTime: '',
  264. updateBy: '',
  265. updateTime: ''
  266. },
  267. debounceFn: debounce(this.fetch, 500)
  268. }
  269. },
  270. watch: {
  271. keyWord() {
  272. this.tableRequset.pageIndex = 1
  273. this.debounceFn()
  274. }
  275. },
  276. mounted() {
  277. this.getAircaftTypeAndModelTreeAPI()
  278. },
  279. methods: {
  280. async getAircaftTypeAndModelTreeAPI(params) {
  281. const { data } = await getAircaftTypeAndModelTree(params)
  282. this.menuTreeData = data
  283. if (data.length) {
  284. this.currentNodeKey = data[0].value
  285. this.currentNode = data[0]
  286. this.aircaftModelIdList = this.getTreeLeafData(data[0]?.children).map((e) => e.id)
  287. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  288. }
  289. },
  290. async removeMaintenanceAPI(params) {
  291. try {
  292. const { success } = await removeMaintenance(params)
  293. if (success) {
  294. this.$message({
  295. type: 'success',
  296. message: '操作成功!'
  297. })
  298. await this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  299. this.handleClose()
  300. }
  301. } catch (error) {}
  302. },
  303. getTreeLeafData(list) {
  304. const newArr = []
  305. function getLeaf(data, arr) {
  306. data.forEach((e) => {
  307. if (e.type === 1) {
  308. arr.push(e)
  309. }
  310. if (e.children.length) {
  311. getLeaf(e.children, arr)
  312. }
  313. })
  314. }
  315. getLeaf(list, newArr)
  316. return newArr
  317. },
  318. async getMaintenanceAPI(params) {
  319. if (this.$refs.table) this.$refs.table.clearSelection()
  320. const { keyWord } = this
  321. const { pageSize, pageIndex } = this.tableRequset
  322. const {
  323. data: { list, total }
  324. } = await getMaintenance({ pageSize, pageIndex, keyWord, ...params })
  325. this.tableData = list
  326. this.tableRequset.total = total
  327. },
  328. fetch() {
  329. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  330. },
  331. searchClick() {
  332. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  333. },
  334. async addMaintenanceAPI() {
  335. try {
  336. delete this.form.aircaftModelName
  337. const { success } = await addMaintenance({ ...this.form })
  338. if (success) {
  339. this.$message({
  340. type: 'success',
  341. message: '操作成功!'
  342. })
  343. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  344. }
  345. } catch (error) {}
  346. },
  347. async updateMaintenanceAPI() {
  348. try {
  349. const { success } = await updateMaintenance({ ...this.form })
  350. if (success) {
  351. this.$message({
  352. type: 'success',
  353. message: '操作成功!'
  354. })
  355. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  356. }
  357. } catch (error) {}
  358. },
  359. treeNodeClick(data) {
  360. this.$refs.table.clearSelection()
  361. this.currentNodeKey = data.id
  362. this.currentNode = data
  363. this.aircaftModelIdList = this.getTreeLeafData(data.children.length ? data.children : [data]).map((e) => e.id)
  364. this.getMaintenanceAPI({ aircaftModelIdList: this.aircaftModelIdList })
  365. },
  366. openDialog() {
  367. this.dialogTitle = '新增'
  368. this.dialogVisible = true
  369. this.form.aircaftModelName = this.currentNode.label
  370. this.form.aircaftModelId = this.currentNode.id
  371. },
  372. handleClose() {
  373. this.dialogVisible = false
  374. this.form = {
  375. id: '',
  376. aircraftCode: '',
  377. faultCode: '',
  378. faultName: '',
  379. location: '',
  380. level: '',
  381. faultDate: '',
  382. symptoms: '',
  383. faultCause: '',
  384. status: '',
  385. supervisor: '',
  386. maintenanceTime: '',
  387. beforeEquipmentCode: '',
  388. beforeEquipmentName: '',
  389. beforeModelNumber: '',
  390. afterEquipmentCode1: '',
  391. afterEquipmentName1: '',
  392. afterModelNumber1: '',
  393. quantity: '',
  394. remarks: '',
  395. tenantId: '',
  396. version: '',
  397. delFlag: '',
  398. createBy: '',
  399. createTime: '',
  400. updateBy: '',
  401. updateTime: ''
  402. }
  403. },
  404. handUpdate(row) {
  405. this.dialogTitle = '编辑'
  406. this.form = deepClone(row)
  407. this.dialogVisible = true
  408. },
  409. submit() {
  410. switch (this.dialogTitle) {
  411. case '编辑':
  412. this.updateMaintenanceAPI()
  413. this.handleClose()
  414. break
  415. case '新增':
  416. this.addMaintenanceAPI()
  417. this.handleClose()
  418. break
  419. }
  420. },
  421. selection(val) {
  422. this.tableCheckItems = val
  423. },
  424. remove(row) {
  425. this.$confirm('是否删除该数据', '提示', {
  426. confirmButtonText: '确定',
  427. cancelButtonText: '取消',
  428. type: 'warning'
  429. })
  430. .then(() => {
  431. this.removeMaintenanceAPI(row.map((e) => e.id))
  432. })
  433. .catch(() => {})
  434. }
  435. }
  436. }
  437. </script>
  438. <style lang="scss" scoped>
  439. @import '../index.scss';
  440. </style>