zhangjie 2 éve
szülő
commit
7e8259163b

+ 4 - 231
src/constants/enumerate.js

@@ -12,15 +12,10 @@ export const BOOLEAN_TYPE = {
   0: "否",
   1: "是"
 };
-
-// 审核状态
-export const AUDITING_STATUS = {
-  START: "待审核",
-  AUDITING: "审核中",
-  REJECT: "已驳回",
-  CANCEL: "已撤回",
-  END: "已终止",
-  FINISH: "已结束"
+// 是 / 否
+export const BOUND_TYPE = {
+  0: "未绑定",
+  1: "已绑定"
 };
 
 // 审核结果
@@ -28,231 +23,9 @@ export const AUDITING_RESULT = {
   NOT_PASS: "未通过",
   PASS: "通过"
 };
-export const TASK_AUDIT_RESULT = {
-  REJECT: "驳回",
-  PASS: "通过"
-};
 
 // 权限类型
 export const PRIVILEGE_TYPE = {
   MENU: "菜单",
   URL: "操作"
 };
-
-// 基础 -------------->
-// 机构
-export const ORG_TYPE = {
-  PRINTING_HOUSE: "印刷室"
-};
-// 角色
-export const ROLE_TYPE = {
-  SCHOOL_ADMIN: "管理员",
-  EXAM_TEACHER: "考务老师",
-  QUESTION_TEACHER: "命题老师",
-  CUSTOMER: "客服人员",
-  PRINT: "印刷人员",
-  CUSTOM: "自定义"
-};
-
-export const SMS_TYPE = {
-  SCHOOL_ADMIN: "管理员",
-  EXAM_TEACHER: "考务老师"
-};
-
-// 通用题卡规则id
-export const COMMON_CARD_RULE_ID = "-1";
-
-export const CARD_CREATE_METHOD_TYPE = {
-  UPLOAD: "上传文件",
-  STANDARD: "标准模式",
-  FREE: "自由模式"
-};
-export const CARD_TYPE = {
-  GENERIC: "通卡",
-  CUSTOM: "自定义专卡"
-};
-
-// 模板类型
-export const TEMPLATE_TYPE = {
-  VARIABLE: "变量印品模板",
-  ORDINARY: "普通印品模板"
-};
-
-// 提交印刷方式
-export const CONFIRM_PRINT_TYPE = {
-  MANUAL: "手动",
-  AUTO: "自动"
-};
-
-// 印刷计划推送状态
-export const SYNC_PRINT_STATUS = {
-  INIT: "未开始",
-  START_SYNC: "同步中", // 开始同步
-  EXAM_FINISH: "同步中", // 考试同步成功
-  STUDENT_FINISH: "同步中", // 考生同步成功
-  FINISH: "已结束"
-};
-
-// 考试
-export const EXAM_TYPE = {
-  OFFLINE: "线下考试",
-  ONLINE: "线上考试"
-};
-
-export const EXAM_MODE_TYPE = {
-  MODEL1: "模式1:电子交卷环节需要提交考务数据",
-  MODEL2: "模式2:电子交卷环节不需要提交考务数据,只输入印刷份数即可",
-  MODEL3: "模式3:电子交卷环节不需要提交考务数据"
-};
-
-export const FLOW_TYPE = {
-  ELECTRON_FLOW: "电子交卷审核"
-  // QUESTION_ELECTRON_FLOW: "题库试题提交审核",
-  // PAPER_ELECTRON_FLOW: "题库试卷审核"
-};
-export const FLOW_MODEL_TYPE = {
-  USER_FIXED: "管理员指定",
-  APPROVE_SET: "发起人自选"
-};
-
-export const FLOW_APPROVE_OPERATION_TYPE = {
-  SUBMIT: "提交",
-  APPROVE: "审批",
-  EXCHANGE: "转他人审批",
-  REJECT: "驳回",
-  END: "终止"
-};
-
-// 命题 -------------->
-// 待办任务警告时间
-export const TASK_WARNING_TIME = 3 * 24 * 60 * 60 * 1000;
-
-// 题卡
-// 条码类型
-export const EXAM_NUMBER_STYLE = {
-  PRINT: "印刷条码",
-  PASTE: "粘贴条码",
-  FILL: "考号填涂"
-};
-// 试卷类型方式
-export const PAPER_TYPE = {
-  PRINT: "印刷"
-  // FILL: "填涂"
-};
-
-// 命题任务状态
-export const EXAM_TASK_STATUS = {
-  DRAFT: "新建",
-  STAGE: "待命题",
-  AUDITING: "审核中",
-  REJECT: "驳回",
-  FINISH: "已完成"
-};
-
-// 题卡创建方式
-export const CARD_SOURCE_TYPE = {
-  SELECT: "选择已有答题卡",
-  SELF: "自助创建",
-  CUST: "申请客服制卡"
-};
-
-// 模板类型
-export const TEMPLATE_CLASSIFY = {
-  SIGN: "签到表",
-  PACKAGE: "卷袋贴",
-  CHECK_IN: "考试情况登记表"
-};
-
-// 数据管理
-export const DATA_TASK_STATUS = {
-  INIT: "未开始",
-  RUNNING: "进行中",
-  FINISH: "已完成"
-};
-export const DATA_TASK_TYPE = {
-  QUESTION_MISSION_BATCH_CREATE: "批量新建命题任务",
-  SAMPLE_EXPORT: "导出审核样本",
-  EXAMINATION_IMPORT: "考务数据导入",
-  EXAMINATION_EXPORT: "考务数据导出",
-  PRINT_PDF_DOWNLOAD: "批量下载pdf",
-  CREATE_PDF: "生成pdf",
-  USER_IMPORT: "用户导入",
-  STUDENT_IMPORT: "学生导入",
-  COURSE_IMPORT: "课程导入",
-  PAPER_AND_CARD_PDF_DOWNLOAD: "卷库查询管理试卷、空白题卡批量下载pdf",
-  STATISTICS_IMPORT: "命题统计导入",
-  SCORE_EXPORT: "成绩导出",
-  SCORE_DOWNLOAD: "成绩轨迹下载"
-};
-export const DATA_TASK_RESULT = {
-  SUCCESS: "成功",
-  ERROR: "失败"
-};
-
-// 印刷 -------------->
-// 印刷计划状态
-export const PRINT_PLAN_STATUS = {
-  NEW: "新建",
-  READY: "就绪",
-  PRINTING: "印刷中",
-  PRINT_FINISH: "印刷完成",
-  END: "已结束"
-};
-// 印刷计划相关
-export const DRAW_RULE_TYPE = {
-  ONE: "只抽取一次",
-  CIRCLE: "可反复抽取"
-};
-export const PRINT_BACKUP_TYPE = {
-  ROOM: "每考场"
-  // STUDENT: "每考生"
-};
-export const PAPER_BACKUP_TYPE = {
-  ROOM: "每考场"
-  // PLACE: "每考点"
-};
-export const PRINT_CONTENT_TYPE = {
-  PAPER: "试卷",
-  CARD: "题卡"
-};
-
-// 印刷任务状态
-export const PRINT_TASK_STATUS = {
-  NEW: "新建",
-  READY: "就绪",
-  WAITING: "待印刷",
-  PRINTING: "印刷中",
-  FINISH: "已完成"
-};
-// pdf文件类型
-export const PRINT_PDF_TYPE = {
-  PAPER: "试卷",
-  CARD_A3: "题卡",
-  PACKAGE: "卷袋贴",
-  SIGN: "签到表",
-  CHECK_IN: "登记表"
-};
-
-// stmms
-export const MARK_TASK_SYNC_STATUS = {
-  INIT: "未同步",
-  FINISH: "已同步"
-};
-export const STMMS_SYNC_TYPE = {
-  USER_PUSH: "用户推送",
-  EXAM_PUSH: "考试、考生、题卡推送",
-  STRUCTURE_PUSH: "试卷结构推送",
-  SCORE_PUSH: "成绩推送"
-};
-
-// analysis
-export const ANALYSIS_BATCH_STATUS = {
-  SETTING_GRADE_PAPER: "数据准备中",
-  PUSH_GRADE_BATCH: "提交分析数据",
-  SETTING_GRADE_PAPER_PARAM: "蓝图数据准备中",
-  READY_TO_CALCULATE: "待计算",
-  CALCULATING: "计算中",
-  FINISH_CALCULATE: "已完成"
-};
-
-export const PDF_LIST = ["A3", "A4", "A5", "B3", "B4", "B5", "8K"];

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

@@ -617,6 +617,15 @@ export default [
       }
     ],
     buttons: [
+      {
+        id: "511",
+        name: "学期管理-新建学期",
+        url: "select",
+        type: "BUTTON",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
       {
         id: "511",
         name: "学期管理-新建学期",
@@ -640,12 +649,130 @@ export default [
       {
         id: "559",
         name: "学期管理-设置当前使用学期",
+        url: "Detail",
+        type: "LINK",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
+      {
+        id: "513",
+        name: "学期管理-删除",
+        url: "Delete",
+        type: "LINK",
+        parentId: "510",
+        sequence: 2,
+        enable: true
+      }
+    ],
+    lists: [
+      {
+        id: "514",
+        name: "学期管理-列表",
+        url: "List",
+        type: "LIST",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      }
+    ],
+    conditions: [
+      {
+        id: "400",
+        name: "学生管理-查询条件",
+        url: "Condition",
+        type: "CONDITION",
+        parentId: "358",
+        sequence: 1,
+        enable: true
+      }
+    ]
+  },
+  {
+    id: "81",
+    name: "档案详情",
+    url: "RecordDetail",
+    type: "MENU",
+    parentId: "7",
+    sequence: 1,
+    enable: true,
+    urls: [
+      {
+        id: "533",
+        name: "学期管理-查询",
+        url: "/api/admin/basic/semester/query",
+        type: "URL",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
+      {
+        id: "560",
+        name: "学期管理-设置当前使用学期",
+        url: "/api/admin/basic/semester/set_in_used",
+        type: "URL",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
+      {
+        id: "534",
+        name: "学期管理-新增/编辑",
+        url: "/api/admin/basic/semester/save",
+        type: "URL",
+        parentId: "510",
+        sequence: 2,
+        enable: true
+      },
+      {
+        id: "535",
+        name: "学期管理-删除",
+        url: "/api/admin/basic/semester/delete",
+        type: "URL",
+        parentId: "510",
+        sequence: 3,
+        enable: true
+      }
+    ],
+    buttons: [
+      {
+        id: "511",
+        name: "学期管理-新建学期",
+        url: "select",
+        type: "BUTTON",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
+      {
+        id: "511",
+        name: "学期管理-新建学期",
+        url: "Add",
+        type: "BUTTON",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      }
+    ],
+    links: [
+      {
+        id: "512",
+        name: "学期管理-编辑",
         url: "Edit",
         type: "LINK",
         parentId: "510",
         sequence: 1,
         enable: true
       },
+      {
+        id: "559",
+        name: "学期管理-设置当前使用学期",
+        url: "Detail",
+        type: "LINK",
+        parentId: "510",
+        sequence: 1,
+        enable: true
+      },
       {
         id: "513",
         name: "学期管理-删除",
@@ -666,6 +793,17 @@ export default [
         sequence: 1,
         enable: true
       }
+    ],
+    conditions: [
+      {
+        id: "400",
+        name: "学生管理-查询条件",
+        url: "Condition",
+        type: "CONDITION",
+        parentId: "358",
+        sequence: 1,
+        enable: true
+      }
     ]
   },
   {
@@ -1135,3 +1273,5 @@ export default [
     ]
   }
 ];
+
+export const HIDE_MENU_NAME = ["RecordDetail"];

+ 0 - 78
src/constants/shortcutData.js

@@ -1,78 +0,0 @@
-export default [
-  {
-    router: "ExamTaskManage",
-    name: "命题任务管理",
-    icon: "icon-exam-task",
-    params: {}
-  },
-  {
-    router: "TaskApplyManage",
-    name: "入库申请",
-    icon: "icon-task-apply",
-    params: {}
-  },
-  {
-    router: "TaskReviewManage",
-    name: "入库审核",
-    icon: "icon-task-review",
-    params: {}
-  },
-  {
-    router: "TaskPaperManage",
-    name: "卷库查询",
-    icon: "icon-task-paper",
-    params: {}
-  },
-  {
-    router: "PrintPlanManage",
-    name: "印刷计划管理",
-    icon: "icon-print-plan",
-    params: {}
-  },
-  {
-    router: "MarkerLogin",
-    name: "评卷员阅卷",
-    icon: "icon-marker-login",
-    params: {
-      trigger: "MARKER"
-    }
-  },
-  {
-    router: "MarkerLogin",
-    name: "科组长阅卷",
-    icon: "icon-marker-leader-login",
-    params: {
-      trigger: "MARK_LEADER"
-    }
-  },
-  {
-    router: "ScoreArchive",
-    name: "成绩管理",
-    icon: "icon-score-archive",
-    params: {}
-  },
-  {
-    router: "AnalysisReportView",
-    name: "教务处看板",
-    icon: "icon-report-office-teacher",
-    params: {
-      trigger: "OFFICE_TEACHER"
-    }
-  },
-  {
-    router: "AnalysisReportView",
-    name: "学院分析报告",
-    icon: "icon-report-president",
-    params: {
-      trigger: "PRESIDENT"
-    }
-  },
-  {
-    router: "AnalysisReportView",
-    name: "任课老师报告",
-    icon: "icon-report-teacher",
-    params: {
-      trigger: "TEACHER"
-    }
-  }
-];

+ 0 - 29
src/constants/staticMenu.js

@@ -1,29 +0,0 @@
-export default [
-  {
-    id: "h01",
-    name: "首页",
-    url: "HomePage",
-    type: "MENU",
-    parentId: "-1",
-    sequence: 1,
-    enable: true
-  },
-  {
-    id: "h0101",
-    name: "我的工作台",
-    url: "work",
-    type: "MENU",
-    parentId: "h01",
-    sequence: 1,
-    enable: true
-  },
-  {
-    id: "h010101",
-    name: "待办任务",
-    url: "WaitTask",
-    type: "MENU",
-    parentId: "h0101",
-    sequence: 1,
-    enable: true
-  }
-];

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

@@ -28,3 +28,14 @@ export const dataCheckStateDetail = datas => {
 export const releaseUserDataCheckTask = datas => {
   return $postParam("/api/admin/sys/role/bind_range", datas);
 };
+
+// record-manage
+export const recordListPage = datas => {
+  return $postParam("/api/admin/sys/role/list", datas);
+};
+export const updateRecord = datas => {
+  return $post("/api/admin/sys/user/save", datas);
+};
+export const deleteRecord = ids => {
+  return $postParam("/api/admin/sys/role/remove", { ids });
+};

+ 208 - 0
src/modules/record/components/ModifyRecord.vue

@@ -0,0 +1,208 @@
+<template>
+  <el-dialog
+    class="modify-record"
+    :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="110px"
+    >
+      <el-form-item prop="name" label="档案名称:">
+        <el-input
+          v-model.trim="modalForm.name"
+          placeholder="请输入档案名称"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-form-item prop="recordType" label="档案类型:">
+        <el-select
+          class="width-full"
+          v-model="modalForm.recordType"
+          placeholder="请选择档案类型"
+          filterable
+        >
+          <el-option
+            v-for="item in recordTypes"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="semesterId" label="所属学期:">
+        <semester-select
+          class="width-full"
+          v-model="modalForm.semesterId"
+        ></semester-select>
+      </el-form-item>
+      <el-form-item prop="adminUserId" label="档案管理员:">
+        <el-select
+          class="width-full"
+          v-model="modalForm.adminUserId"
+          placeholder="请选择档案管理员"
+          filterable
+        >
+          <el-option
+            v-for="item in adminUsers"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item prop="orgId" label="档案管理部门:">
+        <org-select class="width-full" v-model="modalForm.orgId"></org-select>
+      </el-form-item>
+      <el-form-item prop="warningTime" label="到期预警时间:">
+        <el-date-picker
+          v-model="modalForm.warningTime"
+          type="datetime"
+          value-format="timestamp"
+          placeholder="请选择到期预警时间"
+          style="width: 100%"
+        >
+        </el-date-picker>
+      </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 { updateRecord } from "../api";
+
+const initModalForm = {
+  id: "",
+  name: "",
+  recordType: "",
+  semesterId: "",
+  adminUserId: "",
+  orgId: "",
+  warningTime: undefined
+};
+
+export default {
+  name: "modify-record",
+  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"
+          }
+        ],
+        recordType: [
+          {
+            required: true,
+            message: "请选择档案类型",
+            trigger: "change"
+          }
+        ],
+        semesterId: [
+          {
+            required: true,
+            message: "请选择学期",
+            trigger: "change"
+          }
+        ],
+        adminUserId: [
+          {
+            required: true,
+            message: "请选择档案管理员",
+            trigger: "change"
+          }
+        ],
+        orgId: [
+          {
+            required: true,
+            message: "请选择档案管理部门",
+            trigger: "change"
+          }
+        ]
+      },
+      orgs: [],
+      recordTypes: [],
+      adminUsers: []
+    };
+  },
+  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 updateRecord(datas).catch(() => {});
+      this.isSubmit = false;
+      if (!data) return;
+
+      this.$message.success("修改成功!");
+      this.cancel();
+      this.$emit("modified");
+    }
+  }
+};
+</script>

+ 42 - 35
src/modules/record/components/ScanTaskDetailDialog.vue

@@ -1,47 +1,49 @@
 <template>
   <el-dialog
-    class="scan-task-detail-dialog"
+    class="scan-task-detail-dialog page-dialog"
     :visible.sync="modalIsShow"
-    title="详情"
+    :title="title"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     append-to-body
     fullscreen
     @open="visibleChange"
   >
-    <el-table ref="TableList" :data="dataList">
-      <el-table-column
-        type="index"
-        label="序号"
-        width="70"
-        :index="indexMethod"
-      ></el-table-column>
-      <el-table-column prop="chckerName" label="姓名"></el-table-column>
-      <el-table-column prop="chckerName" label="学号"></el-table-column>
-      <el-table-column prop="chckerName" label="课程"></el-table-column>
-      <el-table-column prop="chckerName" label="任课老师"></el-table-column>
-      <el-table-column prop="chckerName" label="教学班"></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>
-    <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 class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="chckerName" label="姓名"></el-table-column>
+        <el-table-column prop="chckerName" label="学号"></el-table-column>
+        <el-table-column prop="chckerName" label="课程"></el-table-column>
+        <el-table-column prop="chckerName" label="任课老师"></el-table-column>
+        <el-table-column prop="chckerName" label="教学班"></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>
+      <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>
   </el-dialog>
 </template>
@@ -68,6 +70,11 @@ export default {
       total: 0
     };
   },
+  computed: {
+    title() {
+      return `${this.task.name}-${this.task.courseName}-详情`;
+    }
+  },
   methods: {
     visibleChange() {
       this.dataList = [];

+ 12 - 0
src/modules/record/router.js

@@ -1,9 +1,21 @@
 import ScanTaskManage from "./views/ScanTaskManage";
+import RecordManage from "./views/RecordManage";
+import RecordDetail from "./views/RecordDetail";
 
 export default [
   {
     path: "/record/scan-manage",
     name: "ScanTaskManage",
     component: ScanTaskManage
+  },
+  {
+    path: "/record/record-manage",
+    name: "RecordManage",
+    component: RecordManage
+  },
+  {
+    path: "/record/record-detail/:recordId",
+    name: "RecordDetail",
+    component: RecordDetail
   }
 ];

+ 270 - 0
src/modules/record/views/RecordDetail.vue

@@ -0,0 +1,270 @@
+<template>
+  <div class="record-detail">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="学院:">
+            <el-select v-model="filter.collegeId" placeholder="学院" filterable>
+              <el-option
+                v-for="item in collegeList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="专业:">
+            <el-select v-model="filter.majorId" placeholder="专业" filterable>
+              <el-option
+                v-for="item in majorList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="班级:">
+            <el-select v-model="filter.clazzId" placeholder="班级" filterable>
+              <el-option
+                v-for="item in clazzList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="课程:">
+            <el-select
+              v-model="filter.courseCode"
+              placeholder="课程"
+              filterable
+            >
+              <el-option
+                v-for="item in courseList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="任课老师:">
+            <el-input
+              v-model.trim="filter.teacherName"
+              placeholder="任课老师"
+              clearable
+            ></el-input>
+          </el-form-item>
+          <el-form-item label="教学班:">
+            <el-select
+              v-model="filter.teachingClazzId"
+              placeholder="教学班"
+              filterable
+            >
+              <el-option
+                v-for="item in teachingClazzList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="绑定状态:">
+            <el-select v-model="filter.status" placeholder="绑定状态" clearable>
+              <el-option
+                v-for="(val, key) in BOUND_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="模糊查询:">
+            <el-input
+              v-model.trim="filter.info"
+              placeholder="姓名/学号"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+
+        <el-form-item label-width="0px">
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            @click="toPage(1)"
+            >查询</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'add')"
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toBatchDownload"
+          >批量下载</el-button
+        >
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
+        <el-table-column prop="name" label="姓名"></el-table-column>
+        <el-table-column prop="code" label="学号"></el-table-column>
+        <el-table-column prop="code" label="专业" width="120"></el-table-column>
+        <el-table-column prop="id" label="班级" width="180"></el-table-column>
+        <el-table-column
+          prop="recordType"
+          label="课程"
+          width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="recordNumber"
+          label="任课老师"
+          width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="recordNumber"
+          label="教学班"
+          width="120"
+        ></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
+          class-name="action-column"
+          label="图片"
+          width="80"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'edit')"
+              class="btn-primary"
+              type="text"
+              @click="toDetail(scope.row)"
+            >
+              <span class="cont-link">{{ scope.row.imageCount }}</span>
+            </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>
+    <!-- ModifyRecord -->
+    <modify-record
+      ref="ModifyRecord"
+      :instance="curRow"
+      @modified="getList"
+    ></modify-record>
+  </div>
+</template>
+
+<script>
+import { recordListPage } from "../api";
+import ModifyRecord from "../components/ModifyRecord.vue";
+import { BOUND_TYPE } from "../../../constants/enumerate";
+
+export default {
+  name: "record-detail",
+  components: { ModifyRecord },
+  data() {
+    return {
+      filter: {
+        recordId: "",
+        collegeId: "",
+        majorId: "",
+        clazzId: "",
+        courseCode: "",
+        teacherName: "",
+        teachingClazzId: "",
+        status: "",
+        info: ""
+      },
+      BOUND_TYPE,
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      multipleSelection: [],
+      dataList: [
+        {
+          id: "1",
+          name: "12312",
+          imageCount: 5
+        }
+      ],
+      curRow: {},
+      collegeList: [],
+      majorList: [],
+      clazzList: [],
+      courseList: [],
+      teachingClazzList: []
+    };
+  },
+  created() {
+    this.filter.recordId = this.$route.params.recordId;
+    if (!this.filter.recordId) {
+      this.$message.error("缺少档案信息,请退出当前页面!");
+      return;
+    }
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await recordListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map(item => item.id);
+    },
+    toDetail(row) {
+      this.curRow = row;
+      this.$refs.ModifyRecord.open();
+    },
+    toBatchDownload() {
+      if (!this.multipleSelection.length) {
+        this.$message.error("请选择要下载的数据!");
+        return;
+      }
+    }
+  }
+};
+</script>

+ 247 - 0
src/modules/record/views/RecordManage.vue

@@ -0,0 +1,247 @@
+<template>
+  <div class="record-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="学期:">
+            <semester-select
+              v-model="filter.semesterId"
+              placeholder="学期"
+            ></semester-select>
+          </el-form-item>
+          <el-form-item label="档案管理部门:">
+            <el-select
+              v-model="filter.orgId"
+              placeholder="档案管理部门"
+              filterable
+            >
+              <el-option
+                v-for="item in orgs"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="档案类型:">
+            <el-select
+              v-model="filter.recordType"
+              placeholder="档案类型"
+              filterable
+            >
+              <el-option
+                v-for="item in recordTypes"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="档案名称:">
+            <el-input
+              style="width: 180px;"
+              v-model.trim="filter.name"
+              placeholder="档案名称"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+
+        <el-form-item label-width="0px">
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            @click="toPage(1)"
+            >查询</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          v-if="checkPrivilege('button', 'add')"
+          type="primary"
+          icon="el-icon-circle-plus-outline"
+          @click="toAdd"
+          >新增档案</el-button
+        >
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table ref="TableList" :data="dataList">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="name" label="档案名称"></el-table-column>
+        <el-table-column prop="code" label="档案编号"></el-table-column>
+        <el-table-column
+          prop="code"
+          label="档案类型"
+          width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="id"
+          label="所属学期"
+          width="180"
+        ></el-table-column>
+        <el-table-column
+          prop="recordType"
+          label="档案管理部门"
+          width="120"
+        ></el-table-column>
+        <el-table-column
+          prop="recordNumber"
+          label="档案管理员"
+          width="120"
+        ></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="warningTime"
+          label="档案到期预警时间"
+          width="170"
+        >
+          <span slot-scope="scope">{{
+            scope.row.warningTime | timestampFilter
+          }}</span>
+        </el-table-column>
+
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="140"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'edit')"
+              class="btn-primary"
+              type="text"
+              @click="toEdit(scope.row)"
+              >编辑</el-button
+            >
+            <el-button
+              v-if="checkPrivilege('link', 'detail')"
+              class="btn-primary"
+              type="text"
+              @click="toDetail(scope.row)"
+              >查看</el-button
+            >
+            <el-button
+              v-if="checkPrivilege('link', 'delete')"
+              class="btn-danger"
+              type="text"
+              @click="toDelete(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>
+    <!-- ModifyRecord -->
+    <modify-record
+      ref="ModifyRecord"
+      :instance="curRow"
+      @modified="getList"
+    ></modify-record>
+  </div>
+</template>
+
+<script>
+import { deleteRecord, recordListPage } from "../api";
+import ModifyRecord from "../components/ModifyRecord.vue";
+
+export default {
+  name: "record-manage",
+  components: { ModifyRecord },
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        orgId: "",
+        recordType: "",
+        name: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [
+        {
+          id: "1",
+          name: "12312"
+        }
+      ],
+      curRow: {},
+      orgs: [],
+      recordTypes: []
+    };
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await recordListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curRow = {};
+      this.$refs.ModifyRecord.open();
+    },
+    toEdit(row) {
+      this.curRow = row;
+      this.$refs.ModifyRecord.open();
+    },
+    toDetail(row) {
+      this.$router.push({
+        name: "RecordDetail",
+        params: {
+          recordId: row.id
+        }
+      });
+    },
+    async toDelete(row) {
+      const res = await this.$confirm(
+        `确定要删除档案【${row.name}】吗??`,
+        "提示",
+        {
+          type: "warning"
+        }
+      ).catch(() => {});
+      if (res !== "confirm") return;
+
+      await deleteRecord([row.id]);
+      this.$message.success("操作成功!");
+      this.deletePageLastItem();
+    }
+  }
+};
+</script>

+ 8 - 2
src/modules/record/views/ScanTaskManage.vue

@@ -5,7 +5,6 @@
         <template v-if="checkPrivilege('condition', 'condition')">
           <el-form-item label="课程:">
             <el-select
-              style="width:100%;"
               v-model="filter.courseCode"
               placeholder="请选择课程"
               filterable
@@ -229,6 +228,11 @@
     <!-- DataCheckStateDialog -->
     <data-check-state-dialog ref="DataCheckStateDialog" :task="curRow">
     </data-check-state-dialog>
+    <!-- ScanTaskDetailDialog -->
+    <scan-task-detail-dialog
+      ref="ScanTaskDetailDialog"
+      :task="curRow"
+    ></scan-task-detail-dialog>
   </div>
 </template>
 
@@ -237,13 +241,15 @@ import { scanTaskListPage, deleteScanTask, clearScanTaskData } from "../api";
 import ImportFile from "../../../components/ImportFile.vue";
 import ModifyScanTask from "../components/ModifyScanTask.vue";
 import DataCheckStateDialog from "../components/DataCheckStateDialog.vue";
+import ScanTaskDetailDialog from "../components/ScanTaskDetailDialog.vue";
 
 export default {
   name: "scan-task-manage",
   components: {
     ImportFile,
     ModifyScanTask,
-    DataCheckStateDialog
+    DataCheckStateDialog,
+    ScanTaskDetailDialog
   },
   data() {
     return {

+ 1 - 93
src/plugins/filters.js

@@ -1,28 +1,5 @@
 import Vue from "vue";
-import {
-  TEMPLATE_CLASSIFY,
-  TEMPLATE_TYPE,
-  EXAM_TASK_STATUS,
-  AUDITING_STATUS,
-  AUDITING_RESULT,
-  PRINT_PLAN_STATUS,
-  PRINT_TASK_STATUS,
-  DATA_TASK_STATUS,
-  DATA_TASK_TYPE,
-  DATA_TASK_RESULT,
-  ORG_TYPE,
-  CARD_SOURCE_TYPE,
-  MARK_TASK_SYNC_STATUS,
-  STMMS_SYNC_TYPE,
-  SYNC_PRINT_STATUS,
-  PRINT_PDF_TYPE,
-  EXAM_TYPE,
-  CARD_TYPE,
-  CARD_CREATE_METHOD_TYPE,
-  FLOW_APPROVE_OPERATION_TYPE,
-  ANALYSIS_BATCH_STATUS,
-  FLOW_TYPE
-} from "../constants/enumerate";
+// import {} from "../constants/enumerate";
 import { formatDate } from "../plugins/utils";
 
 const DEFAULT_FIELD = "--";
@@ -33,12 +10,6 @@ Vue.filter("defaultFieldFilter", function(val) {
 Vue.filter("enableFilter", function(val) {
   return val ? "启用" : "禁用";
 });
-Vue.filter("templateClassifyFilter", function(val) {
-  return TEMPLATE_CLASSIFY[val] || DEFAULT_FIELD;
-});
-Vue.filter("templateTypeFilter", function(val) {
-  return TEMPLATE_TYPE[val] || DEFAULT_FIELD;
-});
 Vue.filter("orgsFilter", function(val) {
   return val.map(item => item.name).join(",");
 });
@@ -48,71 +19,8 @@ Vue.filter("rolesFilter", function(val) {
 Vue.filter("coursesFilter", function(val) {
   return val.map(item => `${item.name}(${item.code})`).join(",");
 });
-Vue.filter("examTaskStatusFilter", function(val) {
-  return EXAM_TASK_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("auditStatusFilter", function(val) {
-  return AUDITING_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("reviewStatusFilter", function(val) {
-  return AUDITING_RESULT[val] || DEFAULT_FIELD;
-});
-Vue.filter("printPlanStatusFilter", function(val) {
-  return PRINT_PLAN_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("printTaskStatusFilter", function(val) {
-  return PRINT_TASK_STATUS[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;
-});
-Vue.filter("orgTypeFilter", function(val) {
-  return ORG_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardSourceTypeFilter", function(val) {
-  return CARD_SOURCE_TYPE[val] || DEFAULT_FIELD;
-});
 Vue.filter("timestampFilter", function(val) {
   return val
     ? formatDate("YYYY-MM-DD HH:mm:ss", new Date(val * 1))
     : DEFAULT_FIELD;
 });
-Vue.filter("flowTaskNameFilter", function(val) {
-  return val ? val.replace(/\(.+?\)/g, "") : DEFAULT_FIELD;
-});
-Vue.filter("markTaskSyncStatusFilter", function(val) {
-  return MARK_TASK_SYNC_STATUS[val] || "失败";
-});
-Vue.filter("stmmsSyncTypeFilter", function(val) {
-  return STMMS_SYNC_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("syncPrintStatusFilter", function(val) {
-  return SYNC_PRINT_STATUS[val] || DEFAULT_FIELD;
-});
-Vue.filter("printPdfTypeFilter", function(val) {
-  return PRINT_PDF_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("examTypeFilter", function(val) {
-  return EXAM_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardTypeFilter", function(val) {
-  return CARD_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("cardCreateMethodTypeFilter", function(val) {
-  return CARD_CREATE_METHOD_TYPE[val] || DEFAULT_FIELD;
-});
-Vue.filter("flowApproveOperationTypeFilter", function(val) {
-  return FLOW_APPROVE_OPERATION_TYPE[val] || "";
-});
-Vue.filter("flowTypeFilter", function(val) {
-  return FLOW_TYPE[val] || "";
-});
-Vue.filter("analysisBatchStatusFilter", function(val) {
-  return ANALYSIS_BATCH_STATUS[val] || DEFAULT_FIELD;
-});

+ 6 - 2
src/views/Home.vue

@@ -114,7 +114,7 @@
 </template>
 
 <script>
-import localMenus from "@/constants/menus-data";
+import localMenus, { HIDE_MENU_NAME } from "@/constants/menus-data";
 import { sysMenu, logout } from "../modules/login/api";
 import ResetPwd from "../modules/base/components/ResetPwd";
 import { SYS_ADMIN_NAME } from "@/constants/enumerate";
@@ -129,6 +129,7 @@ export default {
 
     return {
       APP_TITLE,
+      HIDE_MENU_NAME,
       privileges: [],
       menus: [],
       curMenu: { url: "", children: [] },
@@ -220,8 +221,11 @@ export default {
       });
     },
     getMenu() {
+      const privileges = this.privileges.filter(
+        item => !this.HIDE_MENU_NAME.includes(item.url)
+      );
       const getChildren = id => {
-        return this.privileges
+        return privileges
           .filter(item => item.parentId === id)
           .map(item => {
             return { ...item };