浏览代码

数据结果新增

zhangjie 2 年之前
父节点
当前提交
376e880d1a

+ 17 - 0
src/constants/enumerate.js

@@ -32,6 +32,23 @@ export const PRIVILEGE_TYPE = {
 export const ORG_TYPE = {
   PRINTING_HOUSE: "印刷室"
 };
+// 数据管理
+export const DATA_TASK_TYPE = {
+  ORG_IMPORT: "导入组织架构",
+  USER_IMPORT: "导入用户",
+  STUDENT_IMPORT: "导入学生",
+  PAPER_SCAN_TASK_IMPORT: "导入任务",
+  PAPER_DOWNLOAD: "批量下载"
+};
+export const DATA_TASK_STATUS = {
+  INIT: "未开始",
+  RUNNING: "进行中",
+  FINISH: "已完成"
+};
+export const DATA_TASK_RESULT = {
+  SUCCESS: "成功",
+  ERROR: "失败"
+};
 
 // 注意:下方数组内容必须与组件名称格式保持一致
 // [routeNameShouldKeepAlive, [whenReturedFromThisRoute]]

+ 5 - 0
src/modules/base/api.js

@@ -197,3 +197,8 @@ export const uploadFile = datas => {
 export const getCode = type => {
   return $postParam("/api/admin/common/get_code", { type });
 };
+
+// data-task
+export const dataTaskList = datas => {
+  return $postParam("/api/admin/data/t_b_task/query", datas);
+};

+ 184 - 0
src/modules/base/components/DataTaskDialog.vue

@@ -0,0 +1,184 @@
+<template>
+  <el-dialog
+    class="data-task-dialog page-dialog"
+    :visible.sync="modalIsShow"
+    title="数据任务进度"
+    top="10vh"
+    width="900px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="50"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="type" label="类别" width="140">
+          <span slot-scope="scope">
+            {{ scope.row.type | dataTaskTypeFilter }}
+          </span>
+        </el-table-column>
+        <el-table-column prop="status" label="状态" width="100">
+          <span slot-scope="scope">
+            {{ scope.row.status | dataTaskStatusFilter }}
+          </span>
+        </el-table-column>
+        <el-table-column prop="result" label="结果" width="80">
+          <span slot-scope="scope">
+            {{ scope.row.result | dataTaskResultFilter }}
+          </span>
+        </el-table-column>
+        <el-table-column prop="createTime" label="创建时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.createTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column prop="createName" label="创建人"></el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="160px"
+          align="center"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="scope.row.hasReportFile"
+              class="btn-primary"
+              type="text"
+              :disabled="loading"
+              @click="toDonwloadLog(scope.row)"
+              >导出日志</el-button
+            >
+            <el-button
+              v-if="!scope.row.resetCreatePdf"
+              class="btn-primary"
+              type="text"
+              :disabled="loading"
+              @click="toDonwloadFile(scope.row)"
+              >下载文件</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total,prev, pager, next"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+        >
+        </el-pagination>
+      </div>
+    </div>
+
+    <div slot="footer"></div>
+  </el-dialog>
+</template>
+
+<script>
+import { dataTaskList } from "../api";
+import { attachmentDownload } from "../../login/api";
+import { downloadByUrl } from "@/plugins/download";
+
+export default {
+  name: "data-task-dialog",
+  props: {
+    taskType: {
+      type: String,
+      default: ""
+    }
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      filter: {
+        type: "",
+        status: "",
+        result: ""
+      },
+      dataList: [],
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      loading: false
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.filter.type = this.taskType;
+      this.toPage(1);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await dataTaskList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async toDonwloadLog(row) {
+      if (this.loading) return;
+
+      this.loading = true;
+      const res = await attachmentDownload({
+        id: row.id,
+        type: "TASK_REPORT"
+      }).catch(() => {});
+      this.loading = false;
+
+      if (!res) {
+        this.$message.error("文件下载失败,请重新尝试!");
+        return;
+      }
+
+      const url = res.url;
+      if (url.endsWith(".txt")) {
+        window.open(url);
+        return;
+      }
+
+      downloadByUrl(url);
+      this.$message.success("文件下载成功!");
+    },
+    async toDonwloadFile(row) {
+      if (this.loading) return;
+
+      this.loading = true;
+      const type = row.hasResultFile ? "RESULT" : "IMPORT_FILE";
+      const res = await attachmentDownload({
+        id: row.id,
+        type
+      }).catch(() => {});
+      this.loading = false;
+
+      if (!res) {
+        this.$message.error("文件下载失败,请重新尝试!");
+        return;
+      }
+
+      downloadByUrl(res.url);
+      this.$message.success("文件下载成功!");
+    }
+  }
+};
+</script>

+ 17 - 1
src/modules/base/views/OrganizationManage.vue

@@ -21,6 +21,12 @@
           @upload-success="uploadSuccess"
         >
         </upload-button>
+        <el-button
+          v-if="checkPrivilege('button', 'import')"
+          type="primary"
+          @click="viewResult"
+          >导入结果</el-button
+        >
       </div>
     </div>
     <div class="part-box part-box-pad part-box-border">
@@ -89,6 +95,12 @@
       :org-types="orgTypes"
       @confirm="getList"
     ></modify-organization>
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      v-if="checkPrivilege('button', 'import')"
+      ref="DataTaskDialog"
+      task-type="ORG_IMPORT"
+    ></data-task-dialog>
   </div>
 </template>
 
@@ -96,10 +108,11 @@
 import { organizationList, deleteOrganization } from "../api";
 import ModifyOrganization from "../components/ModifyOrganization";
 import UploadButton from "../../../components/UploadButton";
+import DataTaskDialog from "../components/DataTaskDialog.vue";
 
 export default {
   name: "organization-manage",
-  components: { ModifyOrganization, UploadButton },
+  components: { ModifyOrganization, UploadButton, DataTaskDialog },
   data() {
     return {
       orgs: [],
@@ -190,6 +203,9 @@ export default {
     },
     uploadSuccess() {
       this.getList();
+    },
+    viewResult() {
+      this.$refs.DataTaskDialog.open();
     }
   }
 };

+ 17 - 1
src/modules/base/views/StudentManage.vue

@@ -57,6 +57,12 @@
           @click="toImportStudent"
           >导入学生</el-button
         >
+        <el-button
+          v-if="checkPrivilege('button', 'import')"
+          type="primary"
+          @click="viewResult"
+          >导入结果</el-button
+        >
         <el-button
           v-if="checkPrivilege('button', 'add')"
           type="primary"
@@ -138,6 +144,12 @@
       :auto-upload="false"
       @upload-success="uploadSuccess"
     ></import-file>
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      v-if="checkPrivilege('button', 'import')"
+      ref="DataTaskDialog"
+      task-type="STUDENT_IMPORT"
+    ></data-task-dialog>
   </div>
 </template>
 
@@ -145,10 +157,11 @@
 import { studentListQuery, deleteStudent, deleteFilterStudent } from "../api";
 import ModifyStudent from "../components/ModifyStudent";
 import ImportFile from "../../../components/ImportFile.vue";
+import DataTaskDialog from "../components/DataTaskDialog.vue";
 
 export default {
   name: "student-manage",
-  components: { ModifyStudent, ImportFile },
+  components: { ModifyStudent, ImportFile, DataTaskDialog },
   data() {
     return {
       filter: {
@@ -234,6 +247,9 @@ export default {
     uploadSuccess() {
       this.$message.success("文件上传成功,后台正在导入!");
       this.getList();
+    },
+    viewResult() {
+      this.$refs.DataTaskDialog.open();
     }
   }
 };

+ 17 - 1
src/modules/base/views/UserManage.vue

@@ -38,6 +38,12 @@
           @click="toImportUser"
           >导入用户</el-button
         >
+        <el-button
+          v-if="checkPrivilege('button', 'export')"
+          type="primary"
+          @click="viewResult"
+          >导入结果</el-button
+        >
         <el-button
           v-if="checkPrivilege('button', 'add')"
           type="primary"
@@ -157,6 +163,12 @@
       :auto-upload="false"
       @upload-success="uploadSuccess"
     ></import-file>
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      v-if="checkPrivilege('button', 'export')"
+      ref="DataTaskDialog"
+      task-type="USER_IMPORT"
+    ></data-task-dialog>
   </div>
 </template>
 
@@ -170,10 +182,11 @@ import {
   deleteUser
 } from "../api";
 import ImportFile from "../../../components/ImportFile.vue";
+import DataTaskDialog from "../components/DataTaskDialog.vue";
 
 export default {
   name: "user-manage",
-  components: { ModifyUser, ImportFile },
+  components: { ModifyUser, ImportFile, DataTaskDialog },
   data() {
     return {
       filter: {
@@ -310,6 +323,9 @@ export default {
     uploadSuccess() {
       this.$message.success("导入成功!");
       this.getList();
+    },
+    viewResult() {
+      this.$refs.DataTaskDialog.open();
     }
   }
 };

+ 11 - 1
src/modules/record/views/ArchivesDetail.vue

@@ -73,6 +73,7 @@
           @click="toBatchDownload"
           >批量下载</el-button
         >
+        <el-button type="primary" @click="viewResult">下载结果</el-button>
       </div>
     </div>
 
@@ -145,6 +146,11 @@
       ref="ArchivesDetailStudentDialog"
       :student="curRow"
     ></archives-detail-student-dialog>
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      ref="DataTaskDialog"
+      task-type="PAPER_DOWNLOAD"
+    ></data-task-dialog>
   </div>
 </template>
 
@@ -152,10 +158,11 @@
 import { archivesDetailListPage } from "../api";
 import { BOUND_TYPE } from "../../../constants/enumerate";
 import ArchivesDetailStudentDialog from "../components/ArchivesDetailStudentDialog.vue";
+import DataTaskDialog from "../../base/components/DataTaskDialog.vue";
 
 export default {
   name: "archives-detail",
-  components: { ArchivesDetailStudentDialog },
+  components: { ArchivesDetailStudentDialog, DataTaskDialog },
   data() {
     return {
       filter: {
@@ -213,6 +220,9 @@ export default {
         this.$message.error("请选择要下载的数据!");
         return;
       }
+    },
+    viewResult() {
+      this.$refs.DataTaskDialog.open();
     }
   }
 };

+ 18 - 1
src/modules/record/views/ScanTaskManage.vue

@@ -65,6 +65,12 @@
           @click="toImportTask"
           >导入任务</el-button
         >
+        <el-button
+          v-if="checkPrivilege('button', 'import')"
+          type="primary"
+          @click="viewResult"
+          >导入结果</el-button
+        >
       </div>
     </div>
 
@@ -214,6 +220,12 @@
       ref="ScanTaskDetailDialog"
       :task="curRow"
     ></scan-task-detail-dialog>
+    <!-- DataTaskDialog -->
+    <data-task-dialog
+      v-if="checkPrivilege('button', 'import')"
+      ref="DataTaskDialog"
+      task-type="PAPER_SCAN_TASK_IMPORT"
+    ></data-task-dialog>
   </div>
 </template>
 
@@ -227,13 +239,15 @@ import {
 import ImportFile from "../../../components/ImportFile.vue";
 import LibraryStateDialog from "../components/LibraryStateDialog.vue";
 import ScanTaskDetailDialog from "../components/ScanTaskDetailDialog.vue";
+import DataTaskDialog from "../../base/components/DataTaskDialog.vue";
 
 export default {
   name: "scan-task-manage",
   components: {
     ImportFile,
     LibraryStateDialog,
-    ScanTaskDetailDialog
+    ScanTaskDetailDialog,
+    DataTaskDialog
   },
   data() {
     return {
@@ -368,6 +382,9 @@ export default {
     uploadSuccess() {
       this.$message.error("导入操作提交成功!");
       this.getList();
+    },
+    viewResult() {
+      this.$refs.DataTaskDialog.open();
     }
   }
 };

+ 15 - 1
src/plugins/filters.js

@@ -1,5 +1,10 @@
 import Vue from "vue";
-import { ORG_TYPE } from "../constants/enumerate";
+import {
+  ORG_TYPE,
+  DATA_TASK_STATUS,
+  DATA_TASK_TYPE,
+  DATA_TASK_RESULT
+} from "../constants/enumerate";
 import { formatDate } from "../plugins/utils";
 
 const DEFAULT_FIELD = "--";
@@ -27,3 +32,12 @@ Vue.filter("timestampFilter", function(val) {
 Vue.filter("orgTypeFilter", function(val) {
   return ORG_TYPE[val] || DEFAULT_FIELD;
 });
+Vue.filter("dataTaskTypeFilter", function(val) {
+  return DATA_TASK_TYPE[val] || DEFAULT_FIELD;
+});
+Vue.filter("dataTaskStatusFilter", function(val) {
+  return DATA_TASK_STATUS[val] || DEFAULT_FIELD;
+});
+Vue.filter("dataTaskResultFilter", function(val) {
+  return DATA_TASK_RESULT[val] || DEFAULT_FIELD;
+});