DataTaskManage.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <template>
  2. <div class="data-task-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="状态:">
  7. <el-select v-model="filter.status" placeholder="状态" clearable>
  8. <el-option
  9. v-for="(val, key) in DATA_TASK_STATUS"
  10. :key="key"
  11. :value="key"
  12. :label="val"
  13. ></el-option>
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="类别:">
  17. <el-select v-model="filter.type" placeholder="类别" clearable>
  18. <el-option
  19. v-for="(val, key) in DATA_TASK_TYPE"
  20. :key="key"
  21. :value="key"
  22. :label="val"
  23. ></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="数据结果:" label-width="85px">
  27. <el-select v-model="filter.result" placeholder="数据结果" clearable>
  28. <el-option
  29. v-for="(val, key) in DATA_TASK_RESULT"
  30. :key="key"
  31. :value="key"
  32. :label="val"
  33. ></el-option>
  34. </el-select>
  35. </el-form-item>
  36. </template>
  37. <el-form-item>
  38. <el-button
  39. v-if="checkPrivilege('button', 'select')"
  40. type="primary"
  41. @click="toPage(1)"
  42. >查询</el-button
  43. >
  44. </el-form-item>
  45. </el-form>
  46. <div class="part-box-action">
  47. <!-- <el-button
  48. type="danger"
  49. icon="el-icon-delete"
  50. @click="toRemove('DELETE')"
  51. >批量删除</el-button
  52. >
  53. <el-button
  54. type="danger"
  55. icon="el-icon-delete-solid"
  56. @click="toRemove('CLEAR')"
  57. >清空</el-button
  58. > -->
  59. </div>
  60. </div>
  61. <div class="part-box part-box-pad">
  62. <el-table
  63. ref="TableList"
  64. :data="tasks"
  65. @selection-change="handleSelectionChange"
  66. >
  67. <el-table-column
  68. type="index"
  69. label="序号"
  70. width="50"
  71. :index="indexMethod"
  72. ></el-table-column>
  73. <el-table-column prop="printPlanName" label="项目"></el-table-column>
  74. <el-table-column prop="type" label="类别"> </el-table-column>
  75. <el-table-column prop="status" label="状态"> </el-table-column>
  76. <el-table-column prop="result" label="结果"> </el-table-column>
  77. <el-table-column prop="createTime" label="创建时间" width="180">
  78. <span slot-scope="scope">{{
  79. scope.row.createTime | timestampFilter
  80. }}</span>
  81. </el-table-column>
  82. <el-table-column prop="createName" label="创建人"></el-table-column>
  83. <el-table-column class-name="action-column" label="操作" width="100px">
  84. <template slot-scope="scope">
  85. <el-button
  86. v-if="scope.row.hasReportFile && checkPrivilege('link', 'export')"
  87. class="btn-primary"
  88. type="text"
  89. :disabled="loading"
  90. @click="toDonwloadLog(scope.row)"
  91. >导出日志</el-button
  92. >
  93. <el-button
  94. v-if="
  95. scope.row.resetCreatePdf && checkPrivilege('link', 'createPdf')
  96. "
  97. class="btn-primary"
  98. type="text"
  99. :disabled="loading"
  100. @click="toResetCreatePdf(scope.row)"
  101. >重新生成PDF</el-button
  102. >
  103. <el-button
  104. v-if="
  105. !scope.row.resetCreatePdf && checkPrivilege('link', 'download')
  106. "
  107. class="btn-primary"
  108. type="text"
  109. :disabled="loading"
  110. @click="toDonwloadFile(scope.row)"
  111. >下载文件</el-button
  112. >
  113. </template>
  114. </el-table-column>
  115. </el-table>
  116. <div class="part-page">
  117. <el-pagination
  118. background
  119. layout="total,prev, pager, next"
  120. :current-page="current"
  121. :total="total"
  122. :page-size="size"
  123. @current-change="toPage"
  124. >
  125. </el-pagination>
  126. </div>
  127. </div>
  128. </div>
  129. </template>
  130. <script>
  131. import {
  132. DATA_TASK_STATUS,
  133. DATA_TASK_TYPE,
  134. DATA_TASK_RESULT
  135. } from "@/constants/enumerate";
  136. import { dataTaskList, removeDataTask, taskResetPdf } from "../api";
  137. import { attachmentDownload } from "../../login/api";
  138. import { downloadFileURL } from "@/plugins/utils";
  139. export default {
  140. name: "data-task-manage",
  141. data() {
  142. return {
  143. filter: {
  144. type: "",
  145. status: "",
  146. result: ""
  147. },
  148. current: 1,
  149. size: this.GLOBAL.pageSize,
  150. total: 0,
  151. DATA_TASK_STATUS,
  152. DATA_TASK_TYPE,
  153. DATA_TASK_RESULT,
  154. tasks: [],
  155. curTask: {},
  156. multipleSelection: [],
  157. loading: false
  158. };
  159. },
  160. mounted() {
  161. this.toPage(1);
  162. },
  163. methods: {
  164. async getList() {
  165. if (!this.checkPrivilege("list", "list")) return;
  166. const datas = {
  167. ...this.filter,
  168. pageNumber: this.current,
  169. pageSize: this.size
  170. };
  171. const data = await dataTaskList(datas);
  172. this.tasks = data.records;
  173. this.total = data.total;
  174. },
  175. toPage(page) {
  176. this.current = page;
  177. this.getList();
  178. this.multipleSelection = [];
  179. },
  180. handleSelectionChange(val) {
  181. this.multipleSelection = val.map(item => item.id);
  182. console.log(this.multipleSelection);
  183. },
  184. toRemove(type) {
  185. let tips = "";
  186. if (type === "CLEAR") {
  187. tips = "确定要清空所有任务吗?";
  188. } else {
  189. tips = "确定要删除选中的任务吗?";
  190. if (!this.multipleSelection.length) {
  191. this.$message.error("请选择要删除的记录!");
  192. return;
  193. }
  194. }
  195. this.$confirm(tips, "提示", {
  196. type: "warning"
  197. })
  198. .then(async () => {
  199. const data = await removeDataTask({
  200. ids: type === "CLEAR" ? null : this.multipleSelection,
  201. type: type === "CLEAR" ? "ALL" : null
  202. }).catch(() => {});
  203. if (!data) return;
  204. this.$message.success("操作成功!");
  205. this.deletePageLastItem();
  206. })
  207. .catch(() => {});
  208. },
  209. async toDonwloadLog(row) {
  210. if (this.loading) return;
  211. this.loading = true;
  212. const res = await attachmentDownload({
  213. id: row.id,
  214. type: "REPORT"
  215. }).catch(() => {});
  216. if (!res) {
  217. this.loading = false;
  218. this.$message.error("文件下载失败,请重新尝试!");
  219. return;
  220. }
  221. const url = res.url;
  222. let result = true;
  223. await downloadFileURL(url).catch(() => {
  224. result = false;
  225. });
  226. this.loading = false;
  227. if (result) {
  228. this.$message.success("文件下载成功!");
  229. } else {
  230. this.$message.error("文件下载失败,请重新尝试!");
  231. }
  232. },
  233. async toDonwloadFile(row) {
  234. if (this.loading) return;
  235. this.loading = true;
  236. const type = row.hasResultFile ? "RESULT" : "IMPORT_FILE";
  237. const res = await attachmentDownload({
  238. id: row.id,
  239. type
  240. }).catch(() => {});
  241. if (!res) {
  242. this.loading = false;
  243. this.$message.error("文件下载失败,请重新尝试!");
  244. return;
  245. }
  246. const url = res.url;
  247. let result = true;
  248. await downloadFileURL(url).catch(() => {
  249. result = false;
  250. });
  251. this.loading = false;
  252. if (result) {
  253. this.$message.success("文件下载成功!");
  254. } else {
  255. this.$message.error("文件下载失败,请重新尝试!");
  256. }
  257. },
  258. async toResetCreatePdf(row) {
  259. if (this.loading) return;
  260. this.loading = true;
  261. const res = await taskResetPdf(row.id).catch(() => {});
  262. this.loading = false;
  263. if (!res) return;
  264. this.$message.success("操作成功!");
  265. this.getList();
  266. }
  267. }
  268. };
  269. </script>