DataTaskDialog.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <template>
  2. <el-dialog
  3. class="data-task-dialog page-dialog"
  4. :visible.sync="modalIsShow"
  5. title="数据任务进度"
  6. top="10vh"
  7. width="900px"
  8. :close-on-click-modal="false"
  9. :close-on-press-escape="false"
  10. append-to-body
  11. @open="visibleChange"
  12. >
  13. <div class="part-box part-box-pad">
  14. <el-table ref="TableList" :data="dataList">
  15. <el-table-column
  16. type="index"
  17. label="序号"
  18. width="50"
  19. :index="indexMethod"
  20. ></el-table-column>
  21. <el-table-column prop="type" label="类别" width="140">
  22. <span slot-scope="scope">
  23. {{ scope.row.type | dataTaskTypeFilter }}
  24. </span>
  25. </el-table-column>
  26. <el-table-column prop="status" label="状态" width="100">
  27. <span slot-scope="scope">
  28. {{ scope.row.status | dataTaskStatusFilter }}
  29. </span>
  30. </el-table-column>
  31. <el-table-column prop="result" label="结果" width="80">
  32. <span slot-scope="scope">
  33. {{ scope.row.result | dataTaskResultFilter }}
  34. </span>
  35. </el-table-column>
  36. <el-table-column prop="createTime" label="创建时间" width="170">
  37. <span slot-scope="scope">{{
  38. scope.row.createTime | timestampFilter
  39. }}</span>
  40. </el-table-column>
  41. <el-table-column prop="createName" label="创建人"></el-table-column>
  42. <el-table-column
  43. class-name="action-column"
  44. label="操作"
  45. width="160px"
  46. align="center"
  47. fixed="right"
  48. >
  49. <template slot-scope="scope">
  50. <el-button
  51. v-if="scope.row.hasReportFile"
  52. class="btn-primary"
  53. type="text"
  54. :disabled="loading"
  55. @click="toDonwloadLog(scope.row)"
  56. >导出日志</el-button
  57. >
  58. <el-button
  59. v-if="!scope.row.resetCreatePdf"
  60. class="btn-primary"
  61. type="text"
  62. :disabled="loading"
  63. @click="toDonwloadFile(scope.row)"
  64. >下载文件</el-button
  65. >
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. <div class="part-page">
  70. <el-pagination
  71. background
  72. layout="total,prev, pager, next"
  73. :current-page="current"
  74. :total="total"
  75. :page-size="size"
  76. @current-change="toPage"
  77. >
  78. </el-pagination>
  79. </div>
  80. </div>
  81. <div slot="footer"></div>
  82. </el-dialog>
  83. </template>
  84. <script>
  85. import { dataTaskList } from "../api";
  86. import { attachmentDownload } from "../../login/api";
  87. import { downloadByUrl } from "@/plugins/download";
  88. export default {
  89. name: "data-task-dialog",
  90. props: {
  91. taskType: {
  92. type: String,
  93. default: ""
  94. }
  95. },
  96. data() {
  97. return {
  98. modalIsShow: false,
  99. filter: {
  100. type: "",
  101. status: "",
  102. result: ""
  103. },
  104. dataList: [],
  105. current: 1,
  106. size: this.GLOBAL.pageSize,
  107. total: 0,
  108. loading: false
  109. };
  110. },
  111. methods: {
  112. visibleChange() {
  113. this.filter.type = this.taskType;
  114. this.toPage(1);
  115. },
  116. cancel() {
  117. this.modalIsShow = false;
  118. },
  119. open() {
  120. this.modalIsShow = true;
  121. },
  122. async getList() {
  123. const datas = {
  124. ...this.filter,
  125. pageNumber: this.current,
  126. pageSize: this.size
  127. };
  128. const data = await dataTaskList(datas);
  129. this.dataList = data.records;
  130. this.total = data.total;
  131. },
  132. toPage(page) {
  133. this.current = page;
  134. this.getList();
  135. },
  136. async toDonwloadLog(row) {
  137. if (this.loading) return;
  138. this.loading = true;
  139. const res = await attachmentDownload({
  140. id: row.id,
  141. type: "TASK_REPORT"
  142. }).catch(() => {});
  143. this.loading = false;
  144. if (!res) {
  145. this.$message.error("文件下载失败,请重新尝试!");
  146. return;
  147. }
  148. const url = res.url;
  149. if (url.endsWith(".txt")) {
  150. window.open(url);
  151. return;
  152. }
  153. downloadByUrl(url);
  154. this.$message.success("文件下载成功!");
  155. },
  156. async toDonwloadFile(row) {
  157. if (this.loading) return;
  158. this.loading = true;
  159. const type = row.hasResultFile ? "RESULT" : "IMPORT_FILE";
  160. const res = await attachmentDownload({
  161. id: row.id,
  162. type
  163. }).catch(() => {});
  164. this.loading = false;
  165. if (!res) {
  166. this.$message.error("文件下载失败,请重新尝试!");
  167. return;
  168. }
  169. downloadByUrl(res.url);
  170. this.$message.success("文件下载成功!");
  171. }
  172. }
  173. };
  174. </script>