zhangjie 2 жил өмнө
parent
commit
3e5ec8a895

+ 9 - 0
src/constants/menus-data.js

@@ -750,6 +750,15 @@ export default [
         parentId: "510",
         sequence: 1,
         enable: true
+      },
+      {
+        id: "511",
+        name: "学期管理-导入",
+        url: "bind",
+        type: "BUTTON",
+        parentId: "510",
+        sequence: 1,
+        enable: true
       }
     ],
     links: [

+ 1 - 1
src/modules/admin/components/ModifyPrivilege.vue

@@ -106,7 +106,7 @@ export default {
           {
             required: true,
             max: 30,
-            message: "菜单名称不能超过30",
+            message: "菜单名称不能超过30字符",
             trigger: "change"
           }
         ],

+ 3 - 3
src/modules/admin/components/ModifyUser.vue

@@ -130,7 +130,7 @@ export default {
           },
           {
             max: 50,
-            message: "用户名不能超过50",
+            message: "用户名不能超过50字符",
             trigger: "change"
           }
         ],
@@ -142,7 +142,7 @@ export default {
           },
           {
             max: 50,
-            message: "姓名不能超过50",
+            message: "姓名不能超过50字符",
             trigger: "change"
           }
         ],
@@ -154,7 +154,7 @@ export default {
           },
           {
             max: 50,
-            message: "工号不能超过50",
+            message: "工号不能超过50字符",
             trigger: "change"
           }
         ],

+ 1 - 1
src/modules/base/components/ModifyRecordType.vue

@@ -67,7 +67,7 @@ export default {
             trigger: "change"
           },
           {
-            message: "类型名称不能超过100字",
+            message: "类型名称不能超过100字",
             max: 100,
             trigger: "change"
           }

+ 1 - 1
src/modules/base/components/ModifyRole.vue

@@ -96,7 +96,7 @@ export default {
           {
             required: false,
             max: 100,
-            message: "角色描述最多100字符",
+            message: "角色描述最多100字符",
             trigger: "change"
           }
         ]

+ 1 - 1
src/modules/base/components/ModifySemester.vue

@@ -73,7 +73,7 @@ export default {
             trigger: "change"
           },
           {
-            message: "学期名称不能超过100字",
+            message: "学期名称不能超过100字",
             max: 100,
             trigger: "change"
           }

+ 2 - 2
src/modules/base/components/ModifyStudent.vue

@@ -126,7 +126,7 @@ export default {
             trigger: "change"
           },
           {
-            message: "姓名不能超过50字",
+            message: "姓名不能超过50字",
             max: 50,
             trigger: "change"
           }
@@ -138,7 +138,7 @@ export default {
             trigger: "change"
           },
           {
-            message: "学号不能超过50字",
+            message: "学号不能超过50字",
             max: 50,
             trigger: "change"
           }

+ 9 - 0
src/modules/record/api.js

@@ -4,6 +4,9 @@ import { $postParam, $post } from "@/plugins/axios";
 export const scanTaskListPage = datas => {
   return $postParam("/api/admin/sys/role/list", datas);
 };
+export const updateScanTask = datas => {
+  return $post("/api/admin/sys/user/save", datas);
+};
 export const ableScanTask = ({ id, enable }) => {
   return $post("/api/admin/sys/role/enable", { id, enable });
 };
@@ -13,3 +16,9 @@ export const deleteScanTask = ids => {
 export const scanTaskBindUser = datas => {
   return $postParam("/api/admin/sys/role/bind_range", datas);
 };
+export const dataCheckStateDetail = datas => {
+  return $postParam("/api/admin/sys/role/bind_range", datas);
+};
+export const releaseUserDataCheckTask = datas => {
+  return $postParam("/api/admin/sys/role/bind_range", datas);
+};

+ 92 - 0
src/modules/record/components/DataCheckStateDialog.vue

@@ -0,0 +1,92 @@
+<template>
+  <el-dialog
+    class="data-check-state-dialog"
+    :visible.sync="modalIsShow"
+    title="绑定详情"
+    top="10vh"
+    width="600px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-table ref="TableList" :data="dataList">
+      <el-table-column type="index" label="序号" width="70"></el-table-column>
+      <el-table-column
+        prop="chckerName"
+        label="绑定员"
+        width="120"
+      ></el-table-column>
+      <el-table-column
+        prop="chckerName"
+        label="已绑量"
+        width="120"
+      ></el-table-column>
+      <el-table-column
+        prop="chckerName"
+        label="绑定中"
+        width="120"
+      ></el-table-column>
+      <el-table-column class-name="action-column" label="操作" width="100">
+        <el-button class="btn-primary" type="text" @click="toRelease(scope.row)"
+          >释放任务</el-button
+        >
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+
+<script>
+import { dataCheckStateDetail, releaseUserDataCheckTask } from "../api";
+
+export default {
+  name: "data-check-state-dialog",
+  props: {
+    task: {
+      type: Object,
+      default() {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      dataList: []
+    };
+  },
+  methods: {
+    visibleChange() {
+      this.dataList = [];
+      this.getList();
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async getList() {
+      const datas = {
+        taskId: this.taskId
+      };
+      const data = await dataCheckStateDetail(datas);
+      this.dataList = data || [];
+    },
+    async toRelease() {
+      const res = await this.$confirm(
+        `确定要释放绑定员【${row.realName}】的绑定任务吗??`,
+        "提示",
+        {
+          type: "warning"
+        }
+      ).catch(() => {});
+      if (res !== "confirm") return;
+
+      await releaseUserDataCheckTask({ id: row.id });
+      this.$message.success("操作成功!");
+      this.getList();
+    }
+  }
+};
+</script>

+ 231 - 0
src/modules/record/components/ModifyScanTask.vue

@@ -0,0 +1,231 @@
+<template>
+  <el-dialog
+    class="modify-scan-task"
+    :visible.sync="modalIsShow"
+    :title="title"
+    top="10vh"
+    width="500px"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    append-to-body
+    @open="visibleChange"
+  >
+    <el-form
+      ref="modalFormComp"
+      :model="modalForm"
+      :rules="rules"
+      label-width="90px"
+    >
+      <el-form-item prop="name" label="任务名称:">
+        <el-input
+          v-model.trim="modalForm.name"
+          placeholder="请输入任务名称"
+          :disabled="isEdit"
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="recordId" label="档案名称:">
+        <el-select
+          style="width:100%;"
+          v-model="modalForm.recordId"
+          placeholder="请选择档案名称"
+          filterable
+        >
+          <el-option
+            v-for="item in records"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="courseName" label="课程:">
+        <el-input
+          v-model.trim="modalForm.courseName"
+          placeholder="请输入课程"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="teacherName" label="任课老师:">
+        <el-input
+          v-model.trim="modalForm.teacherName"
+          placeholder="请输入任课老师"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="teachingClass" label="教学班:">
+        <el-input
+          v-model.trim="modalForm.teachingClass"
+          placeholder="请输入教学班"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="scanUserId" label="扫描员:">
+        <el-select
+          style="width:100%;"
+          v-model="modalForm.scanUserId"
+          placeholder="请选择扫描员"
+          filterable
+        >
+          <el-option
+            v-for="item in scanUsers"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <div slot="footer">
+      <el-button type="primary" :disabled="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button @click="cancel">取消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { updateScanTask } from "../api";
+
+const initModalForm = {
+  id: "",
+  name: "",
+  recordId: "",
+  courseName: "",
+  teacherName: "",
+  teachingClass: "",
+  scanUserId: ""
+};
+
+export default {
+  name: "modify-scan-task",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      }
+    }
+  },
+  computed: {
+    isEdit() {
+      return !!this.instance.id;
+    },
+    title() {
+      return (this.isEdit ? "编辑" : "新增") + "扫描任务";
+    }
+  },
+  data() {
+    return {
+      modalIsShow: false,
+      isSubmit: false,
+      modalForm: {},
+      rules: {
+        name: [
+          {
+            required: true,
+            message: "请输入任务名称",
+            trigger: "change"
+          },
+          {
+            max: 100,
+            message: "任务名称不能超过100字符",
+            trigger: "change"
+          }
+        ],
+        recordId: [
+          {
+            required: true,
+            message: "请选择档案",
+            trigger: "change"
+          }
+        ],
+        courseName: [
+          {
+            required: true,
+            message: "请输入课程",
+            trigger: "change"
+          },
+          {
+            max: 50,
+            message: "课程不能超过50字符",
+            trigger: "change"
+          }
+        ],
+        teacherName: [
+          {
+            required: true,
+            message: "请输入任课老师",
+            trigger: "change"
+          },
+          {
+            max: 50,
+            message: "任课老师不能超过50字符",
+            trigger: "change"
+          }
+        ],
+        teachingClass: [
+          {
+            required: true,
+            message: "请输入教学班",
+            trigger: "change"
+          },
+          {
+            max: 100,
+            message: "教学班不能超过100字符",
+            trigger: "change"
+          }
+        ],
+        scanUserId: [
+          {
+            required: true,
+            message: "请选择扫描员",
+            trigger: "change"
+          }
+        ]
+      },
+      records: [],
+      scanUsers: []
+    };
+  },
+  methods: {
+    initData(val) {
+      if (val.id) {
+        this.modalForm = this.$objAssign(initModalForm, val);
+      } else {
+        this.modalForm = { ...initModalForm };
+        this.$nextTick(() => {
+          this.$refs.modalFormComp.clearValidate();
+        });
+      }
+    },
+    visibleChange() {
+      this.initData(this.instance);
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async submit() {
+      const valid = await this.$refs.modalFormComp.validate().catch(() => {});
+      if (!valid) return;
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const datas = { ...this.modalForm };
+      const data = await updateScanTask(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("修改成功!");
+      this.cancel();
+      this.$emit("modified");
+    }
+  }
+};
+</script>

+ 67 - 13
src/modules/record/views/ScanTaskManage.vue

@@ -38,6 +38,13 @@
           @click="toImportTask"
           >导入任务</el-button
         >
+        <el-button
+          v-if="checkPrivilege('button', 'bind')"
+          type="primary"
+          icon="el-icon-upload"
+          @click="toBind"
+          >绑定扫描员</el-button
+        >
         <el-button
           v-if="checkPrivilege('button', 'add')"
           type="primary"
@@ -60,24 +67,45 @@
           align="center"
         ></el-table-column>
         <el-table-column prop="name" label="任务名称"></el-table-column>
-        <el-table-column prop="id" label="任务ID" width="120"></el-table-column>
+        <el-table-column prop="id" label="任务ID" width="180"></el-table-column>
         <el-table-column
           prop="recordType"
           label="档案名称"
           width="120"
         ></el-table-column>
-        <el-table-column prop="recordNumber" label="档案编号"></el-table-column>
+        <el-table-column
+          prop="recordNumber"
+          label="档案编号"
+          width="180"
+        ></el-table-column>
         <el-table-column prop="courseName" label="课程"> </el-table-column>
-        <el-table-column prop="teacherName" label="任课老师"> </el-table-column>
+        <el-table-column prop="teacherName" label="任课老师" width="120">
+        </el-table-column>
         <el-table-column prop="teachingRoomName" label="教学班">
         </el-table-column>
-        <el-table-column prop="scanCount" label="扫描量(份)">
+        <el-table-column prop="scanCount" label="扫描量(份)" width="110">
+        </el-table-column>
+        <el-table-column prop="scanUser" label="扫描员" width="120">
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="绑定进度"
+          width="80"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toShowProgress(scope.row)"
+              >{{ scope.row.progress || 0 }}%</el-button
+            >
+          </template>
         </el-table-column>
-        <el-table-column prop="scanUser" label="扫描员"> </el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"
-          width="200px"
+          width="200"
           fixed="right"
         >
           <template slot-scope="scope">
@@ -92,7 +120,7 @@
               v-if="checkPrivilege('link', 'detail')"
               class="btn-primary"
               type="text"
-              @click="toEdit(scope.row)"
+              @click="toDetail(scope.row)"
               >查看详情</el-button
             >
             <el-button
@@ -124,7 +152,7 @@
       :instance="curRow"
       @modified="getList"
     ></scan-task-bind-user-dialog>
-    <!-- ImportFile -->
+    <!-- ImportTask -->
     <import-file
       v-if="checkPrivilege('button', 'import')"
       ref="ImportTask"
@@ -166,6 +194,24 @@
         </el-form-item>
       </el-form>
     </import-file>
+    <!-- TaskBindScanUser -->
+    <import-file
+      v-if="checkPrivilege('button', 'bind')"
+      ref="TaskBindScanUser"
+      title="绑定扫描员"
+      :upload-url="bindUrl"
+      :format="['xls', 'xlsx']"
+      :download-url="bindTemplateUrl"
+      :download-filename="bindTemplateFilename"
+      :auto-upload="false"
+      @upload-success="uploadSuccess"
+    ></import-file>
+    <!-- ModifyScanTask -->
+    <modify-scan-task
+      ref="ModifyScanTask"
+      :instance="curRow"
+      :modified="getList"
+    ></modify-scan-task>
   </div>
 </template>
 
@@ -173,10 +219,11 @@
 import { scanTaskListPage, deleteScanTask } from "../api";
 import ImportFile from "../../../components/ImportFile.vue";
 import ScanTaskBindUserDialog from "../components/ScanTaskBindUserDialog.vue";
+import ModifyScanTask from "../components/ModifyScanTask.vue";
 
 export default {
   name: "user-manage",
-  components: { ScanTaskBindUserDialog, ImportFile },
+  components: { ScanTaskBindUserDialog, ImportFile, ModifyScanTask },
   data() {
     return {
       filter: {},
@@ -189,6 +236,7 @@ export default {
       loading: false,
       userId: this.$ls.get("user", { id: "" }).id,
       records: [],
+      // import-task
       modalForm: { recordId: "" },
       rules: {
         recordId: [
@@ -199,11 +247,14 @@ export default {
           }
         ]
       },
-      // import
       uploadData: {},
       uploadUrl: "/api/admin/sys/user/import",
       downloadUrl: "/temps/userTemplate.xlsx",
-      dfilename: "扫描任务导入模板.xlsx"
+      dfilename: "扫描任务导入模板.xlsx",
+      // bind-scan-user
+      bindUrl: "/api/admin/sys/user/import",
+      bindTemplateUrl: "/temps/userTemplate.xlsx",
+      bindTemplateFilename: "绑定扫描员导入模板.xlsx"
     };
   },
   mounted() {
@@ -232,17 +283,20 @@ export default {
       this.curRow = row;
       this.$refs.ScanTaskBindUserDialog.open();
     },
-    toEdit(row) {
+    toDetail(row) {
       this.curRow = row;
       this.$refs.ScanTaskBindUserDialog.open();
     },
     toAdd() {
       this.curRow = {};
-      this.$refs.ScanTaskBindUserDialog.open();
+      this.$refs.ModifyScanTask.open();
     },
     toImportTask() {
       this.$refs.ImportTask.open();
     },
+    toBind() {
+      this.$refs.TaskBindScanUser.open();
+    },
     async batchDelete() {
       if (!this.multipleSelection.length) {
         this.$message.error("请选择要删除的数据");