index.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. size="small"
  7. :inline="true"
  8. v-show="showSearch"
  9. label-width="110px"
  10. >
  11. <el-form-item label="ZQ" prop="zq">
  12. <el-input
  13. v-model="queryParams.zq"
  14. placeholder="请输入ZQ"
  15. clearable
  16. @keyup.enter.native="handleQuery"
  17. />
  18. </el-form-item>
  19. <el-form-item label="J/JD/XY" prop="jjdJxy">
  20. <el-input
  21. v-model="queryParams.jjdJxy"
  22. placeholder="请输入J/JD/XY"
  23. clearable
  24. @keyup.enter.native="handleQuery"
  25. />
  26. </el-form-item>
  27. <el-form-item label="S" prop="s">
  28. <el-input
  29. v-model="queryParams.s"
  30. placeholder="请输入S"
  31. clearable
  32. @keyup.enter.native="handleQuery"
  33. />
  34. </el-form-item>
  35. <el-form-item label="LT" prop="bdlt">
  36. <el-input
  37. v-model="queryParams.bdlt"
  38. placeholder="请输入LT"
  39. clearable
  40. @keyup.enter.native="handleQuery"
  41. />
  42. </el-form-item>
  43. <el-form-item label="发现时机" prop="discoveryTime">
  44. <el-input
  45. v-model="queryParams.discoveryTime"
  46. placeholder="请输入发现时机"
  47. clearable
  48. @keyup.enter.native="handleQuery"
  49. />
  50. </el-form-item>
  51. <el-form-item label="专业" prop="major">
  52. <el-input
  53. v-model="queryParams.major"
  54. placeholder="请输入专业"
  55. clearable
  56. @keyup.enter.native="handleQuery"
  57. />
  58. </el-form-item>
  59. <el-form-item label="故障描述" prop="failureDescription">
  60. <el-input
  61. v-model="queryParams.failureDescription"
  62. placeholder="请输入故障描述"
  63. clearable
  64. @keyup.enter.native="handleQuery"
  65. />
  66. </el-form-item>
  67. <el-form-item label="故障原因" prop="failureCause">
  68. <el-input
  69. v-model="queryParams.failureCause"
  70. placeholder="请输入故障原因"
  71. clearable
  72. @keyup.enter.native="handleQuery"
  73. />
  74. </el-form-item>
  75. <el-form-item label="故障名称" prop="failureName">
  76. <el-input
  77. v-model="queryParams.failureName"
  78. placeholder="请输入故障名称"
  79. clearable
  80. @keyup.enter.native="handleQuery"
  81. />
  82. </el-form-item>
  83. <el-form-item label="故障件名称" prop="unserviceableCompName">
  84. <el-input
  85. v-model="queryParams.unserviceableCompName"
  86. placeholder="请输入故障件名称"
  87. clearable
  88. @keyup.enter.native="handleQuery"
  89. />
  90. </el-form-item>
  91. <el-form-item label="故障件号码" prop="unserviceableCompNum">
  92. <el-input
  93. v-model="queryParams.unserviceableCompNum"
  94. placeholder="请输入故障件号码"
  95. clearable
  96. @keyup.enter.native="handleQuery"
  97. />
  98. </el-form-item>
  99. <el-form-item label="故障件所属系统" prop="unserviceableCompSystem">
  100. <el-input
  101. v-model="queryParams.unserviceableCompSystem"
  102. placeholder="请输入故障件所属系统"
  103. clearable
  104. @keyup.enter.native="handleQuery"
  105. />
  106. </el-form-item>
  107. <el-form-item label="故障后果" prop="failureConsequence">
  108. <el-input
  109. v-model="queryParams.failureConsequence"
  110. placeholder="请输入故障后果"
  111. clearable
  112. @keyup.enter.native="handleQuery"
  113. />
  114. </el-form-item>
  115. <el-form-item label="故障责任" prop="failureDuty">
  116. <el-input
  117. v-model="queryParams.failureDuty"
  118. placeholder="请输入故障责任"
  119. clearable
  120. @keyup.enter.native="handleQuery"
  121. />
  122. </el-form-item>
  123. <el-form-item label="故换件名称" prop="replacementCompName">
  124. <el-input
  125. v-model="queryParams.replacementCompName"
  126. placeholder="请输入故换件名称"
  127. clearable
  128. @keyup.enter.native="handleQuery"
  129. />
  130. </el-form-item>
  131. <el-form-item label="故换件号码" prop="replacementCompNum">
  132. <el-input
  133. v-model="queryParams.replacementCompNum"
  134. placeholder="请输入故换件号码"
  135. clearable
  136. @keyup.enter.native="handleQuery"
  137. />
  138. </el-form-item>
  139. <el-form-item label="排除方法" prop="eliminationMethods">
  140. <el-input
  141. v-model="queryParams.eliminationMethods"
  142. placeholder="请输入排除方法"
  143. clearable
  144. @keyup.enter.native="handleQuery"
  145. />
  146. </el-form-item>
  147. <el-form-item>
  148. <el-button
  149. type="primary"
  150. icon="el-icon-search"
  151. size="mini"
  152. @click="handleQuery"
  153. >搜索</el-button
  154. >
  155. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  156. >重置</el-button
  157. >
  158. </el-form-item>
  159. </el-form>
  160. <el-row :gutter="10" class="mb8">
  161. <el-col :span="1.5">
  162. <el-button
  163. type="primary"
  164. plain
  165. icon="el-icon-plus"
  166. size="mini"
  167. @click="handleAdd"
  168. v-hasPermi="['system:failure:add']"
  169. >新增</el-button
  170. >
  171. </el-col>
  172. <el-col :span="1.5">
  173. <el-button
  174. type="success"
  175. plain
  176. icon="el-icon-edit"
  177. size="mini"
  178. :disabled="single"
  179. @click="handleUpdate"
  180. v-hasPermi="['system:failure:edit']"
  181. >修改</el-button
  182. >
  183. </el-col>
  184. <el-col :span="1.5">
  185. <el-button
  186. type="danger"
  187. plain
  188. icon="el-icon-delete"
  189. size="mini"
  190. :disabled="multiple"
  191. @click="handleDelete"
  192. v-hasPermi="['system:failure:remove']"
  193. >删除</el-button
  194. >
  195. </el-col>
  196. <el-col :span="1.5">
  197. <el-button
  198. type="info"
  199. plain
  200. icon="el-icon-upload2"
  201. size="mini"
  202. @click="handleImport"
  203. v-hasPermi="['system:failure:import']"
  204. >导入</el-button
  205. >
  206. </el-col>
  207. <el-col :span="1.5">
  208. <el-button
  209. type="warning"
  210. plain
  211. icon="el-icon-download"
  212. size="mini"
  213. @click="handleExport"
  214. v-hasPermi="['system:failure:export']"
  215. >导出</el-button
  216. >
  217. </el-col>
  218. <el-col :span="1.5">
  219. <el-button
  220. type="warning"
  221. plain
  222. icon="el-icon-download"
  223. size="mini"
  224. @click="handleGenerateReport"
  225. v-hasPermi="['system:failure:export']"
  226. >报告生成</el-button
  227. >
  228. </el-col>
  229. <right-toolbar
  230. :showSearch.sync="showSearch"
  231. @queryTable="getList"
  232. ></right-toolbar>
  233. </el-row>
  234. <el-table
  235. v-loading="loading"
  236. :data="failureList"
  237. @selection-change="handleSelectionChange"
  238. >
  239. <el-table-column type="selection" width="55" align="center" />
  240. <el-table-column label="序号" align="center" prop="id" />
  241. <el-table-column label="ZQ" align="center" prop="zq" />
  242. <el-table-column label="J/JD/XY" align="center" prop="jjdJxy" />
  243. <el-table-column label="S" align="center" prop="s" />
  244. <el-table-column label="LT" align="center" prop="bdlt" />
  245. <el-table-column
  246. label="故障日期"
  247. align="center"
  248. prop="failureDate"
  249. width="180"
  250. >
  251. <template slot-scope="scope">
  252. <span>{{ parseTime(scope.row.failureDate, "{y}-{m}-{d}") }}</span>
  253. </template>
  254. </el-table-column>
  255. <el-table-column label="机型" align="center" prop="aircraftType" />
  256. <el-table-column label="发现时机" align="center" prop="discoveryTime" />
  257. <el-table-column label="专业" align="center" prop="major" />
  258. <el-table-column
  259. label="故障描述"
  260. align="center"
  261. prop="failureDescription"
  262. />
  263. <el-table-column label="故障原因" align="center" prop="failureCause" />
  264. <el-table-column label="故障名称" align="center" prop="failureName" />
  265. <el-table-column
  266. label="故障件名称"
  267. align="center"
  268. prop="unserviceableCompName"
  269. />
  270. <el-table-column
  271. label="故障件型别"
  272. align="center"
  273. prop="unserviceableCompType"
  274. />
  275. <el-table-column
  276. label="故障件号码"
  277. align="center"
  278. prop="unserviceableCompNum"
  279. />
  280. <el-table-column
  281. label="故障件所属系统"
  282. align="center"
  283. prop="unserviceableCompSystem"
  284. />
  285. <el-table-column
  286. label="故障后果"
  287. align="center"
  288. prop="failureConsequence"
  289. />
  290. <el-table-column label="故障责任" align="center" prop="failureDuty" />
  291. <el-table-column
  292. label="故换件名称"
  293. align="center"
  294. prop="replacementCompName"
  295. />
  296. <el-table-column
  297. label="故换件型别"
  298. align="center"
  299. prop="replacementCompType"
  300. />
  301. <el-table-column
  302. label="故换件号码"
  303. align="center"
  304. prop="replacementCompNum"
  305. />
  306. <el-table-column
  307. label="排除方法"
  308. align="center"
  309. prop="eliminationMethods"
  310. />
  311. <el-table-column
  312. label="操作"
  313. align="center"
  314. class-name="small-padding fixed-width"
  315. >
  316. <template slot-scope="scope">
  317. <el-button
  318. size="mini"
  319. type="text"
  320. icon="el-icon-edit"
  321. @click="handleUpdate(scope.row)"
  322. v-hasPermi="['system:failure:edit']"
  323. >修改</el-button
  324. >
  325. <el-button
  326. size="mini"
  327. type="text"
  328. icon="el-icon-delete"
  329. @click="handleDelete(scope.row)"
  330. v-hasPermi="['system:failure:remove']"
  331. >删除</el-button
  332. >
  333. </template>
  334. </el-table-column>
  335. </el-table>
  336. <pagination
  337. v-show="total > 0"
  338. :total="total"
  339. :page.sync="queryParams.pageNum"
  340. :limit.sync="queryParams.pageSize"
  341. @pagination="getList"
  342. />
  343. <!-- 添加或修改故障记录对话框 -->
  344. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  345. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  346. <el-form-item label="ZQ" prop="zq">
  347. <el-input v-model="form.zq" placeholder="请输入ZQ" />
  348. </el-form-item>
  349. <el-form-item label="J/JD/XY" prop="jjdJxy">
  350. <el-input v-model="form.jjdJxy" placeholder="请输入J/JD/XY" />
  351. </el-form-item>
  352. <el-form-item label="S" prop="s">
  353. <el-input v-model="form.s" placeholder="请输入S" />
  354. </el-form-item>
  355. <el-form-item label="LT" prop="bdlt">
  356. <el-input v-model="form.bdlt" placeholder="请输入LT" />
  357. </el-form-item>
  358. <el-form-item label="故障日期" prop="failureDate">
  359. <el-date-picker
  360. clearable
  361. v-model="form.failureDate"
  362. type="date"
  363. value-format="yyyy-MM-dd"
  364. placeholder="请选择故障日期"
  365. >
  366. </el-date-picker>
  367. </el-form-item>
  368. <el-form-item label="发现时机" prop="discoveryTime">
  369. <el-input v-model="form.discoveryTime" placeholder="请输入发现时机" />
  370. </el-form-item>
  371. <el-form-item label="专业" prop="major">
  372. <el-input v-model="form.major" placeholder="请输入专业" />
  373. </el-form-item>
  374. <el-form-item label="故障描述" prop="failureDescription">
  375. <el-input
  376. v-model="form.failureDescription"
  377. placeholder="请输入故障描述"
  378. />
  379. </el-form-item>
  380. <el-form-item label="故障原因" prop="failureCause">
  381. <el-input v-model="form.failureCause" placeholder="请输入故障原因" />
  382. </el-form-item>
  383. <el-form-item label="故障名称" prop="failureName">
  384. <el-input v-model="form.failureName" placeholder="请输入故障名称" />
  385. </el-form-item>
  386. <el-form-item label="故障件名称" prop="unserviceableCompName">
  387. <el-input
  388. v-model="form.unserviceableCompName"
  389. placeholder="请输入故障件名称"
  390. />
  391. </el-form-item>
  392. <el-form-item label="故障件号码" prop="unserviceableCompNum">
  393. <el-input
  394. v-model="form.unserviceableCompNum"
  395. placeholder="请输入故障件号码"
  396. />
  397. </el-form-item>
  398. <el-form-item label="故障件所属系统" prop="unserviceableCompSystem">
  399. <el-input
  400. v-model="form.unserviceableCompSystem"
  401. placeholder="请输入故障件所属系统"
  402. />
  403. </el-form-item>
  404. <el-form-item label="故障后果" prop="failureConsequence">
  405. <el-input
  406. v-model="form.failureConsequence"
  407. placeholder="请输入故障后果"
  408. />
  409. </el-form-item>
  410. <el-form-item label="故障责任" prop="failureDuty">
  411. <el-input v-model="form.failureDuty" placeholder="请输入故障责任" />
  412. </el-form-item>
  413. <el-form-item label="故换件名称" prop="replacementCompName">
  414. <el-input
  415. v-model="form.replacementCompName"
  416. placeholder="请输入故换件名称"
  417. />
  418. </el-form-item>
  419. <el-form-item label="故换件号码" prop="replacementCompNum">
  420. <el-input
  421. v-model="form.replacementCompNum"
  422. placeholder="请输入故换件号码"
  423. />
  424. </el-form-item>
  425. <el-form-item label="排除方法" prop="eliminationMethods">
  426. <el-input
  427. v-model="form.eliminationMethods"
  428. placeholder="请输入排除方法"
  429. />
  430. </el-form-item>
  431. </el-form>
  432. <div slot="footer" class="dialog-footer">
  433. <el-button type="primary" @click="submitForm">确 定</el-button>
  434. <el-button @click="cancel">取 消</el-button>
  435. </div>
  436. </el-dialog>
  437. <!-- 导入对话框 -->
  438. <el-dialog
  439. :title="upload.title"
  440. :visible.sync="upload.open"
  441. width="400px"
  442. append-to-body
  443. >
  444. <el-upload
  445. ref="upload"
  446. :limit="1"
  447. accept=".xlsx, .xls"
  448. :headers="upload.headers"
  449. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  450. :disabled="upload.isUploading"
  451. :on-progress="handleFileUploadProgress"
  452. :on-success="handleFileSuccess"
  453. :auto-upload="false"
  454. drag
  455. >
  456. <i class="el-icon-upload"></i>
  457. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  458. <div class="el-upload__tip text-center" slot="tip">
  459. <div class="el-upload__tip" slot="tip">
  460. <el-checkbox v-model="upload.updateSupport" />
  461. 是否更新已经存在的故障数据
  462. </div>
  463. <span>仅允许导入xls、xlsx格式文件。</span>
  464. <el-link
  465. type="primary"
  466. :underline="false"
  467. style="font-size: 12px; vertical-align: baseline"
  468. @click="importTemplate"
  469. >下载模板</el-link
  470. >
  471. </div>
  472. </el-upload>
  473. <div slot="footer" class="dialog-footer">
  474. <el-button type="primary" @click="submitFileForm">确 定</el-button>
  475. <el-button @click="upload.open = false">取 消</el-button>
  476. </div>
  477. </el-dialog>
  478. <!-- 报告对话框 -->
  479. <el-dialog
  480. :title="report.title"
  481. :visible.sync="report.open"
  482. width="400px"
  483. append-to-body
  484. >
  485. <div style="margin: 5px">
  486. <el-row>
  487. <el-col>
  488. <span style="">故障月份</span>
  489. </el-col>
  490. <el-col>
  491. <el-date-picker
  492. v-model="report.reportDate"
  493. type="month"
  494. placeholder="选择故障月份"
  495. value-format="yyyy-MM"
  496. >
  497. </el-date-picker>
  498. </el-col>
  499. </el-row>
  500. </div>
  501. <div style="margin: 5px">
  502. <el-row>
  503. <el-col><span style="">专业</span></el-col>
  504. <el-col>
  505. <el-select v-model="report.major" placeholder="请选择专业">
  506. <el-option
  507. v-for="item in report.majorOption"
  508. :key="item.major"
  509. :label="item.major"
  510. :value="item.major"
  511. >
  512. </el-option>
  513. </el-select>
  514. </el-col>
  515. </el-row>
  516. </div>
  517. <div slot="footer" class="dialog-footer">
  518. <el-button type="primary" @click="submitGenerateReport"
  519. >确 定</el-button
  520. >
  521. <el-button @click="report.open = false">取 消</el-button>
  522. </div>
  523. </el-dialog>
  524. </div>
  525. </template>
  526. <script>
  527. import {
  528. listFailure,
  529. getFailure,
  530. delFailure,
  531. addFailure,
  532. updateFailure,
  533. generateReport,
  534. getMajorOption,
  535. } from "@/api/system/failure";
  536. import { getToken } from "@/utils/auth";
  537. export default {
  538. name: "Failure",
  539. data() {
  540. return {
  541. // 遮罩层
  542. loading: true,
  543. // 选中数组
  544. ids: [],
  545. // 非单个禁用
  546. single: true,
  547. // 非多个禁用
  548. multiple: true,
  549. // 显示搜索条件
  550. showSearch: true,
  551. // 总条数
  552. total: 0,
  553. // 故障记录表格数据
  554. failureList: [],
  555. // 弹出层标题
  556. title: "",
  557. // 是否显示弹出层
  558. open: false,
  559. // 导入参数
  560. upload: {
  561. // 是否显示弹出层(用户导入)
  562. open: false,
  563. // 弹出层标题(用户导入)
  564. title: "",
  565. // 是否禁用上传
  566. isUploading: false,
  567. // 是否更新已经存在的用户数据
  568. updateSupport: 0,
  569. // 设置上传的请求头部
  570. headers: { Authorization: "Bearer " + getToken() },
  571. // 上传的地址
  572. url: process.env.VUE_APP_BASE_API + "/system/failure/importData",
  573. },
  574. // 查询参数
  575. queryParams: {
  576. pageNum: 1,
  577. pageSize: 10,
  578. zq: null,
  579. jjdJxy: null,
  580. s: null,
  581. bdlt: null,
  582. failureDate: null,
  583. aircraftType: null,
  584. discoveryTime: null,
  585. major: null,
  586. failureDescription: null,
  587. failureCause: null,
  588. failureName: null,
  589. unserviceableCompName: null,
  590. unserviceableCompType: null,
  591. unserviceableCompNum: null,
  592. unserviceableCompSystem: null,
  593. failureConsequence: null,
  594. failureDuty: null,
  595. replacementCompName: null,
  596. replacementCompType: null,
  597. replacementCompNum: null,
  598. eliminationMethods: null,
  599. },
  600. // 表单参数
  601. form: {},
  602. // 表单校验
  603. rules: {},
  604. // 报告参数
  605. report: {
  606. // 是否显示弹出层
  607. open: false,
  608. // 弹出层标题
  609. title: "生成报告",
  610. // 报告日期
  611. reportDate: null,
  612. // 专业
  613. major: null,
  614. majorOption: [],
  615. },
  616. };
  617. },
  618. created() {
  619. this.getList();
  620. },
  621. methods: {
  622. /** 查询故障记录列表 */
  623. getList() {
  624. this.loading = true;
  625. listFailure(this.queryParams).then((response) => {
  626. this.failureList = response.rows;
  627. this.total = response.total;
  628. this.loading = false;
  629. });
  630. },
  631. // 取消按钮
  632. cancel() {
  633. this.open = false;
  634. this.reset();
  635. },
  636. // 表单重置
  637. reset() {
  638. this.form = {
  639. id: null,
  640. zq: null,
  641. jjdJxy: null,
  642. s: null,
  643. bdlt: null,
  644. failureDate: null,
  645. aircraftType: null,
  646. discoveryTime: null,
  647. major: null,
  648. failureDescription: null,
  649. failureCause: null,
  650. failureName: null,
  651. unserviceableCompName: null,
  652. unserviceableCompType: null,
  653. unserviceableCompNum: null,
  654. unserviceableCompSystem: null,
  655. failureConsequence: null,
  656. failureDuty: null,
  657. replacementCompName: null,
  658. replacementCompType: null,
  659. replacementCompNum: null,
  660. eliminationMethods: null,
  661. createBy: null,
  662. createTime: null,
  663. updateBy: null,
  664. updateTime: null,
  665. };
  666. this.resetForm("form");
  667. },
  668. /** 搜索按钮操作 */
  669. handleQuery() {
  670. this.queryParams.pageNum = 1;
  671. this.getList();
  672. },
  673. /** 重置按钮操作 */
  674. resetQuery() {
  675. this.resetForm("queryForm");
  676. this.handleQuery();
  677. },
  678. // 多选框选中数据
  679. handleSelectionChange(selection) {
  680. this.ids = selection.map((item) => item.id);
  681. this.single = selection.length !== 1;
  682. this.multiple = !selection.length;
  683. },
  684. /** 新增按钮操作 */
  685. handleAdd() {
  686. this.reset();
  687. this.open = true;
  688. this.title = "添加故障记录";
  689. },
  690. /** 修改按钮操作 */
  691. handleUpdate(row) {
  692. this.reset();
  693. const id = row.id || this.ids;
  694. getFailure(id).then((response) => {
  695. this.form = response.data;
  696. this.open = true;
  697. this.title = "修改故障记录";
  698. });
  699. },
  700. /** 提交按钮 */
  701. submitForm() {
  702. this.$refs["form"].validate((valid) => {
  703. if (valid) {
  704. if (this.form.id != null) {
  705. updateFailure(this.form).then((response) => {
  706. this.$modal.msgSuccess("修改成功");
  707. this.open = false;
  708. this.getList();
  709. });
  710. } else {
  711. addFailure(this.form).then((response) => {
  712. this.$modal.msgSuccess("新增成功");
  713. this.open = false;
  714. this.getList();
  715. });
  716. }
  717. }
  718. });
  719. },
  720. /** 删除按钮操作 */
  721. handleDelete(row) {
  722. const ids = row.id || this.ids;
  723. this.$modal
  724. .confirm('是否确认删除故障记录编号为"' + ids + '"的数据项?')
  725. .then(function () {
  726. return delFailure(ids);
  727. })
  728. .then(() => {
  729. this.getList();
  730. this.$modal.msgSuccess("删除成功");
  731. })
  732. .catch(() => {});
  733. },
  734. /** 导入按钮操作 */
  735. handleImport() {
  736. this.upload.title = "导入";
  737. this.upload.open = true;
  738. },
  739. /** 下载模板操作 */
  740. importTemplate() {
  741. this.download(
  742. "system/failure/importTemplate",
  743. {},
  744. `failure_template_${new Date().getTime()}.xlsx`
  745. );
  746. },
  747. // 文件上传中处理
  748. handleFileUploadProgress(event, file, fileList) {
  749. this.upload.isUploading = true;
  750. },
  751. // 文件上传成功处理
  752. handleFileSuccess(response, file, fileList) {
  753. this.upload.open = false;
  754. this.upload.isUploading = false;
  755. this.$refs.upload.clearFiles();
  756. this.$alert(
  757. "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
  758. response.msg +
  759. "</div>",
  760. "导入结果",
  761. { dangerouslyUseHTMLString: true }
  762. );
  763. this.getList();
  764. },
  765. // 提交上传文件
  766. submitFileForm() {
  767. this.$refs.upload.submit();
  768. },
  769. /** 导出按钮操作 */
  770. handleExport() {
  771. this.download(
  772. "system/failure/export",
  773. {
  774. ...this.queryParams,
  775. },
  776. `failure_${new Date().getTime()}.xlsx`
  777. );
  778. },
  779. /** 生成报告按钮操作 */
  780. handleGenerateReport() {
  781. this.report.title = "生成报告";
  782. this.report.open = true;
  783. this.report.reportDate = null;
  784. this.report.major = null;
  785. this.report.majorOption = getMajorOption();
  786. getMajorOption().then((response) => {
  787. this.report.majorOption = response.data;
  788. });
  789. },
  790. // 生成报告
  791. submitGenerateReport() {
  792. if (!this.report.reportDate && !this.report.major) {
  793. this.$message({
  794. showClose: true,
  795. message: "需要选择故障月份和专业",
  796. type: "error",
  797. });
  798. return;
  799. }
  800. if (!this.report.reportDate) {
  801. this.$message({
  802. showClose: true,
  803. message: "需要选择故障月份",
  804. type: "error",
  805. });
  806. return;
  807. }
  808. if (!this.report.major) {
  809. this.$message({
  810. showClose: true,
  811. message: "需要选择专业",
  812. type: "error",
  813. });
  814. return;
  815. }
  816. console.info("报告生成参数" + this.report);
  817. generateReport(this.report.reportDate, this.report.major).then(
  818. (response) => {
  819. console.info("报告返回结果" + response);
  820. this.$message({
  821. showClose: true,
  822. message: "恭喜你,报告已生成。" + response.msg,
  823. type: "success",
  824. });
  825. }
  826. );
  827. this.report.open = false;
  828. },
  829. },
  830. };
  831. </script>