Browse Source

操作栏右侧固定

zhangjie 2 years ago
parent
commit
fa9f1e5d94
30 changed files with 2156 additions and 1841 deletions
  1. 11 3
      src/modules/analysis/views/AnalysisBatchManage.vue
  2. 16 6
      src/modules/analysis/views/DataInitManage.vue
  3. 1 1
      src/modules/base/views/CampusManage.vue
  4. 1 1
      src/modules/base/views/CardManage.vue
  5. 6 2
      src/modules/base/views/CardRuleManage.vue
  6. 188 188
      src/modules/base/views/ClazzManage.vue
  7. 212 212
      src/modules/base/views/ClazzSimpleManage.vue
  8. 159 159
      src/modules/base/views/CourseSimpleManage.vue
  9. 234 229
      src/modules/base/views/ExamManage.vue
  10. 1 1
      src/modules/base/views/MajorManage.vue
  11. 2 2
      src/modules/base/views/PrintPlanPushManage.vue
  12. 1 1
      src/modules/base/views/PrintTemplateManage.vue
  13. 1 1
      src/modules/base/views/RoleManage.vue
  14. 191 185
      src/modules/base/views/SmsManage.vue
  15. 1 1
      src/modules/base/views/StudentManage.vue
  16. 14 4
      src/modules/exam/components/WaitTaskAnalysis.vue
  17. 148 135
      src/modules/exam/components/WaitTaskFlow.vue
  18. 106 97
      src/modules/exam/components/WaitTaskStmms.vue
  19. 21 9
      src/modules/exam/views/ExamTaskManage.vue
  20. 345 312
      src/modules/exam/views/StatisticsManage.vue
  21. 25 8
      src/modules/exam/views/TaskApplyManage.vue
  22. 34 13
      src/modules/exam/views/TaskPaperManage.vue
  23. 235 217
      src/modules/print/views/BusinessDataDetail.vue
  24. 38 11
      src/modules/print/views/BusinessDataExport.vue
  25. 24 6
      src/modules/print/views/PlanLinkPaper.vue
  26. 29 8
      src/modules/print/views/PrintPlanManage.vue
  27. 45 13
      src/modules/print/views/PrintTaskManage.vue
  28. 46 9
      src/modules/stmms/views/ScoreArchive.vue
  29. 7 3
      src/modules/stmms/views/SyncManage.vue
  30. 14 4
      src/modules/stmms/views/UploadStructure.vue

+ 11 - 3
src/modules/analysis/views/AnalysisBatchManage.vue

@@ -48,9 +48,17 @@
           width="55"
           align="center"
         ></el-table-column>
-        <el-table-column prop="batchName" label="分析批次"></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="status" label="状态">
+        <el-table-column
+          prop="batchName"
+          label="分析批次"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="status" label="状态" min-width="120">
           <template slot-scope="scope">
             <span>
               {{ scope.row.status | analysisBatchStatusFilter }}

+ 16 - 6
src/modules/analysis/views/DataInitManage.vue

@@ -42,20 +42,30 @@
           width="50"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"> </el-table-column>
-        <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="examName" label="考试" min-width="160">
+        </el-table-column>
+        <el-table-column prop="courseCode" label="课程(代码)" min-width="200">
           <span slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </span>
         </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编码"></el-table-column>
-        <el-table-column prop="status" label="状态"> </el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编码"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="status" label="状态" width="100">
+        </el-table-column>
         <el-table-column
           class-name="action-column"
           label="操作"
           width="160px"
-          align="center"
+          fixed="right"
         >
           <template slot-scope="scope">
             <el-button

+ 1 - 1
src/modules/base/views/CampusManage.vue

@@ -23,7 +23,7 @@
         <el-table-column prop="campusName" label="校区名称"></el-table-column>
         <!-- <el-table-column prop="campusCode" label="校区编码"></el-table-column> -->
         <el-table-column prop="printHouseName" label="印刷室"></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 1 - 1
src/modules/base/views/CardManage.vue

@@ -92,7 +92,7 @@
             scope.row.remark | defaultFieldFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" width="180">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 6 - 2
src/modules/base/views/CardRuleManage.vue

@@ -68,7 +68,11 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="name" label="题卡规则名称"></el-table-column>
+        <el-table-column
+          prop="name"
+          label="题卡规则名称"
+          min-width="200"
+        ></el-table-column>
         <el-table-column prop="remark" label="备注">
           <span slot-scope="scope">{{
             scope.row.remark | defaultFieldFilter
@@ -79,7 +83,7 @@
             {{ scope.row.enable | enableFilter }}
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" width="180">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 188 - 188
src/modules/base/views/ClazzManage.vue

@@ -1,188 +1,188 @@
-<template>
-  <div class="clazz-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="班级名称:">
-            <el-input
-              style="width: 142px;"
-              v-model.trim="filter.queryParams"
-              placeholder="班级名称"
-              clearable
-            ></el-input>
-          </el-form-item>
-        </template>
-        <el-form-item>
-          <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', 'delete')"
-          type="danger"
-          icon="el-icon-delete"
-          @click="toBatchDelete"
-          >批量删除</el-button
-        >
-        <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"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column
-          type="selection"
-          width="55"
-          align="center"
-        ></el-table-column>
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="clazzName" label="班级名称"></el-table-column>
-        <el-table-column prop="campusName" label="所属校区"></el-table-column>
-        <el-table-column prop="majorName" label="所属专业"></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="120px">
-          <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', '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>
-
-    <modify-clazz
-      :instance="curRow"
-      @modified="getList"
-      ref="ModifyClazz"
-    ></modify-clazz>
-  </div>
-</template>
-
-<script>
-import { clazzListQuery, deleteClazz } from "../api";
-import ModifyClazz from "../components/ModifyClazz";
-
-export default {
-  name: "clazz-manage",
-  components: { ModifyClazz },
-  data() {
-    return {
-      filter: {
-        queryParams: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      multipleSelection: [],
-      curRow: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await clazzListQuery(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.multipleSelection = [];
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curRow = {};
-      this.$refs.ModifyClazz.open();
-    },
-    toEdit(row) {
-      this.curRow = row;
-      this.$refs.ModifyClazz.open();
-    },
-    handleSelectionChange(val) {
-      this.multipleSelection = val.map(item => item.id);
-    },
-    toBatchDelete() {
-      if (!this.multipleSelection.length) {
-        this.$message.error("请选择要删除的数据");
-        return;
-      }
-
-      this.$confirm(`确定要删除选中的这些数据吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteClazz(this.multipleSelection);
-          this.$message.success("删除成功!");
-          this.deletePageLastItem(this.multipleSelection.length);
-          this.multipleSelection = [];
-        })
-        .catch(() => {});
-    },
-    toDelete(row) {
-      this.$confirm(`确定要删除班级【${row.clazzName}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteClazz([row.id]);
-          this.$message.success("删除成功!");
-          this.deletePageLastItem();
-        })
-        .catch(() => {});
-    }
-  }
-};
-</script>
+<template>
+  <div class="clazz-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="班级名称:">
+            <el-input
+              style="width: 142px;"
+              v-model.trim="filter.queryParams"
+              placeholder="班级名称"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+        <el-form-item>
+          <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', 'delete')"
+          type="danger"
+          icon="el-icon-delete"
+          @click="toBatchDelete"
+          >批量删除</el-button
+        >
+        <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"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="clazzName" label="班级名称"></el-table-column>
+        <el-table-column prop="campusName" label="所属校区"></el-table-column>
+        <el-table-column prop="majorName" label="所属专业"></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="120px">
+          <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', '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>
+
+    <modify-clazz
+      :instance="curRow"
+      @modified="getList"
+      ref="ModifyClazz"
+    ></modify-clazz>
+  </div>
+</template>
+
+<script>
+import { clazzListQuery, deleteClazz } from "../api";
+import ModifyClazz from "../components/ModifyClazz";
+
+export default {
+  name: "clazz-manage",
+  components: { ModifyClazz },
+  data() {
+    return {
+      filter: {
+        queryParams: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      multipleSelection: [],
+      curRow: {}
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await clazzListQuery(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.multipleSelection = [];
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curRow = {};
+      this.$refs.ModifyClazz.open();
+    },
+    toEdit(row) {
+      this.curRow = row;
+      this.$refs.ModifyClazz.open();
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map(item => item.id);
+    },
+    toBatchDelete() {
+      if (!this.multipleSelection.length) {
+        this.$message.error("请选择要删除的数据");
+        return;
+      }
+
+      this.$confirm(`确定要删除选中的这些数据吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteClazz(this.multipleSelection);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem(this.multipleSelection.length);
+          this.multipleSelection = [];
+        })
+        .catch(() => {});
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除班级【${row.clazzName}】吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteClazz([row.id]);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem();
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>

+ 212 - 212
src/modules/base/views/ClazzSimpleManage.vue

@@ -1,212 +1,212 @@
-<template>
-  <div class="clazz-simple-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="课程:">
-            <el-select
-              v-model="filter.teachCourseId"
-              placeholder="课程"
-              filterable
-            >
-              <el-option
-                v-for="item in courses"
-                :key="item.id"
-                :value="item.id"
-                :label="item.name"
-              >
-                <span>{{ `${item.name}(${item.code})` }}</span>
-              </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="班级名称:">
-            <el-input
-              v-model.trim="filter.teachClazzName"
-              placeholder="班级名称"
-              clearable
-            ></el-input>
-          </el-form-item>
-        </template>
-        <el-form-item>
-          <el-button
-            v-if="checkPrivilege('button', 'select')"
-            type="primary"
-            :disabled="!filter.teachCourseId"
-            @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="teachClazzName"
-          label="班级名称"
-        ></el-table-column>
-        <el-table-column
-          prop="teachStudentCount"
-          label="学生人数"
-        ></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="170px">
-          <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', 'Window')"
-              class="btn-primary"
-              type="text"
-              @click="toEditStudent(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>
-
-    <!-- ModifyClazzSimple -->
-    <modify-clazz-simple
-      :instance="curRow"
-      :courses="courses"
-      @modified="getList"
-      ref="ModifyClazzSimple"
-    ></modify-clazz-simple>
-    <!-- ModifyClazzSimpleStudent -->
-    <modify-clazz-simple-student
-      ref="ModifyClazzSimpleStudent"
-      :clazz="curRow"
-      @modified="getList"
-    ></modify-clazz-simple-student>
-  </div>
-</template>
-
-<script>
-import {
-  clazzSimpleListPage,
-  clazzTeachCourseQuery,
-  deleteClazzSimple
-} from "../api";
-import ModifyClazzSimple from "../components/ModifyClazzSimple";
-import ModifyClazzSimpleStudent from "../components/ModifyClazzSimpleStudent";
-
-export default {
-  name: "clazz-simple-manage",
-  components: { ModifyClazzSimple, ModifyClazzSimpleStudent },
-  data() {
-    return {
-      filter: {
-        teachCourseId: "",
-        teachClazzName: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      courses: [],
-      dataList: [],
-      curRow: {}
-    };
-  },
-  mounted() {
-    this.initData();
-  },
-  methods: {
-    async initData() {
-      if (this.$route.params.teachCourseId) {
-        this.filter.teachCourseId = this.$route.params.teachCourseId;
-        this.getCourseSimple();
-        this.getList();
-      } else {
-        await this.getCourseSimple();
-        this.filter.teachCourseId = this.courses[0] && this.courses[0].id;
-        this.getList();
-      }
-    },
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await clazzSimpleListPage(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    async getCourseSimple() {
-      const data = await clazzTeachCourseQuery();
-      this.courses = data || [];
-    },
-    toAdd() {
-      this.curRow = { teachCourseId: this.filter.teachCourseId };
-      this.$refs.ModifyClazzSimple.open();
-    },
-    toEdit(row) {
-      this.curRow = row;
-      this.$refs.ModifyClazzSimple.open();
-    },
-    toEditStudent(row) {
-      this.curRow = row;
-      this.$refs.ModifyClazzSimpleStudent.open();
-    },
-    toDelete(row) {
-      this.$confirm(`确定要删除班级【${row.teachClazzName}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteClazzSimple([row.id]);
-          this.$message.success("删除成功!");
-          this.deletePageLastItem();
-        })
-        .catch(() => {});
-    }
-  }
-};
-</script>
+<template>
+  <div class="clazz-simple-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="课程:">
+            <el-select
+              v-model="filter.teachCourseId"
+              placeholder="课程"
+              filterable
+            >
+              <el-option
+                v-for="item in courses"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              >
+                <span>{{ `${item.name}(${item.code})` }}</span>
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="班级名称:">
+            <el-input
+              v-model.trim="filter.teachClazzName"
+              placeholder="班级名称"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+        <el-form-item>
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            :disabled="!filter.teachCourseId"
+            @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="teachClazzName"
+          label="班级名称"
+        ></el-table-column>
+        <el-table-column
+          prop="teachStudentCount"
+          label="学生人数"
+        ></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="170px">
+          <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', 'Window')"
+              class="btn-primary"
+              type="text"
+              @click="toEditStudent(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>
+
+    <!-- ModifyClazzSimple -->
+    <modify-clazz-simple
+      :instance="curRow"
+      :courses="courses"
+      @modified="getList"
+      ref="ModifyClazzSimple"
+    ></modify-clazz-simple>
+    <!-- ModifyClazzSimpleStudent -->
+    <modify-clazz-simple-student
+      ref="ModifyClazzSimpleStudent"
+      :clazz="curRow"
+      @modified="getList"
+    ></modify-clazz-simple-student>
+  </div>
+</template>
+
+<script>
+import {
+  clazzSimpleListPage,
+  clazzTeachCourseQuery,
+  deleteClazzSimple
+} from "../api";
+import ModifyClazzSimple from "../components/ModifyClazzSimple";
+import ModifyClazzSimpleStudent from "../components/ModifyClazzSimpleStudent";
+
+export default {
+  name: "clazz-simple-manage",
+  components: { ModifyClazzSimple, ModifyClazzSimpleStudent },
+  data() {
+    return {
+      filter: {
+        teachCourseId: "",
+        teachClazzName: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      courses: [],
+      dataList: [],
+      curRow: {}
+    };
+  },
+  mounted() {
+    this.initData();
+  },
+  methods: {
+    async initData() {
+      if (this.$route.params.teachCourseId) {
+        this.filter.teachCourseId = this.$route.params.teachCourseId;
+        this.getCourseSimple();
+        this.getList();
+      } else {
+        await this.getCourseSimple();
+        this.filter.teachCourseId = this.courses[0] && this.courses[0].id;
+        this.getList();
+      }
+    },
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await clazzSimpleListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async getCourseSimple() {
+      const data = await clazzTeachCourseQuery();
+      this.courses = data || [];
+    },
+    toAdd() {
+      this.curRow = { teachCourseId: this.filter.teachCourseId };
+      this.$refs.ModifyClazzSimple.open();
+    },
+    toEdit(row) {
+      this.curRow = row;
+      this.$refs.ModifyClazzSimple.open();
+    },
+    toEditStudent(row) {
+      this.curRow = row;
+      this.$refs.ModifyClazzSimpleStudent.open();
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除班级【${row.teachClazzName}】吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteClazzSimple([row.id]);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem();
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>

+ 159 - 159
src/modules/base/views/CourseSimpleManage.vue

@@ -1,159 +1,159 @@
-<template>
-  <div class="course-simple-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="课程名称:">
-            <el-input
-              v-model.trim="filter.courseName"
-              placeholder="课程名称"
-              clearable
-            ></el-input>
-          </el-form-item>
-        </template>
-        <el-form-item>
-          <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="courses">
-        <el-table-column
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="courseName" label="课程名称"></el-table-column>
-        <el-table-column prop="courseCode" label="课程编码"></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="160">
-          <template slot-scope="scope">
-            <el-button
-              v-if="checkPrivilege('link', 'Link')"
-              class="btn-primary"
-              type="text"
-              @click="toEditClazz(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>
-
-    <!-- ModifyCourseSimple -->
-    <modify-course-simple
-      ref="ModifyCourseSimple"
-      :instance="curCourse"
-      @modified="getList"
-    ></modify-course-simple>
-  </div>
-</template>
-
-<script>
-import { courseSimpleListPage, deleteCourseSimple } from "../api";
-import ModifyCourseSimple from "../components/ModifyCourseSimple";
-
-export default {
-  name: "course-simple-manage",
-  components: { ModifyCourseSimple },
-  data() {
-    return {
-      filter: {
-        courseName: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      courses: [],
-      curCourse: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-
-      const data = await courseSimpleListPage(datas);
-      this.courses = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curCourse = {};
-      this.$refs.ModifyCourseSimple.open();
-    },
-    toEdit(row) {
-      this.curCourse = row;
-      this.$refs.ModifyCourseSimple.open();
-    },
-    toEditClazz(row) {
-      this.$router.push({
-        name: "ClazzSimpleManage",
-        params: {
-          teachCourseId: row.id
-        }
-      });
-    },
-    toDelete(row) {
-      this.$confirm(`确定要删除课程【${row.courseName}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteCourseSimple([row.id]);
-          this.$message.success("删除成功!");
-          this.deletePageLastItem();
-        })
-        .catch(() => {});
-    }
-  }
-};
-</script>
+<template>
+  <div class="course-simple-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="课程名称:">
+            <el-input
+              v-model.trim="filter.courseName"
+              placeholder="课程名称"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+        <el-form-item>
+          <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="courses">
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程名称"></el-table-column>
+        <el-table-column prop="courseCode" label="课程编码"></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="160">
+          <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'Link')"
+              class="btn-primary"
+              type="text"
+              @click="toEditClazz(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>
+
+    <!-- ModifyCourseSimple -->
+    <modify-course-simple
+      ref="ModifyCourseSimple"
+      :instance="curCourse"
+      @modified="getList"
+    ></modify-course-simple>
+  </div>
+</template>
+
+<script>
+import { courseSimpleListPage, deleteCourseSimple } from "../api";
+import ModifyCourseSimple from "../components/ModifyCourseSimple";
+
+export default {
+  name: "course-simple-manage",
+  components: { ModifyCourseSimple },
+  data() {
+    return {
+      filter: {
+        courseName: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      courses: [],
+      curCourse: {}
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+
+      const data = await courseSimpleListPage(datas);
+      this.courses = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curCourse = {};
+      this.$refs.ModifyCourseSimple.open();
+    },
+    toEdit(row) {
+      this.curCourse = row;
+      this.$refs.ModifyCourseSimple.open();
+    },
+    toEditClazz(row) {
+      this.$router.push({
+        name: "ClazzSimpleManage",
+        params: {
+          teachCourseId: row.id
+        }
+      });
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除课程【${row.courseName}】吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteCourseSimple([row.id]);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem();
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>

+ 234 - 229
src/modules/base/views/ExamManage.vue

@@ -1,229 +1,234 @@
-<template>
-  <div class="exam-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="学期"
-              clearable
-            ></semester-select>
-          </el-form-item>
-          <el-form-item label="启用/禁用:" label-width="90px">
-            <el-select
-              v-model="filter.enable"
-              style="width: 120px;"
-              placeholder="启用/禁用"
-              clearable
-            >
-              <el-option
-                v-for="(val, key) in ABLE_TYPE"
-                :key="key"
-                :value="key * 1"
-                :label="val"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-        </template>
-        <el-form-item>
-          <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="exams">
-        <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="semesterName" label="学年学期"></el-table-column>
-        <el-table-column prop="category" label="考试类型">
-          <span slot-scope="scope">
-            {{ scope.row.category | examTypeFilter }}
-          </span>
-        </el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column prop="enable" label="启用/禁用" width="100">
-          <template slot-scope="scope">
-            {{ scope.row.enable | enableFilter }}
-          </template>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="180px">
-          <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', 'Set') &&
-                  scope.row.category === 'OFFLINE'
-              "
-              class="btn-primary"
-              type="text"
-              @click="toEditConfig(scope.row)"
-              >设置</el-button
-            >
-            <el-button
-              v-if="checkPrivilege('link', 'Enable')"
-              :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
-              type="text"
-              @click="toEnable(scope.row)"
-              >{{ scope.row.enable ? "禁用" : "启用" }}</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>
-
-    <!-- modify-exam -->
-    <modify-exam
-      ref="ModifyExam"
-      :instance="curExam"
-      @modified="examModified"
-    ></modify-exam>
-    <!-- modify-exam-config -->
-    <modify-exam-config
-      ref="ModifyExamConfig"
-      :exam="curExam"
-    ></modify-exam-config>
-  </div>
-</template>
-
-<script>
-import { examListQuery, deleteExam, ableExam } from "../api";
-import { ABLE_TYPE } from "@/constants/enumerate";
-import ModifyExam from "../components/ModifyExam";
-import ModifyExamConfig from "../components/ModifyExamConfig";
-
-export default {
-  name: "exam-manage",
-  components: { ModifyExam, ModifyExamConfig },
-  data() {
-    return {
-      filter: {
-        semesterId: "",
-        enable: ""
-      },
-      ABLE_TYPE,
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      exams: [],
-      curExam: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      if (datas.enable !== null && datas.enable !== "")
-        datas.enable = !!datas.enable;
-
-      const data = await examListQuery(datas);
-      this.exams = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toAdd() {
-      this.curExam = {};
-      this.$refs.ModifyExam.open();
-    },
-    toEdit(row) {
-      this.curExam = row;
-      this.$refs.ModifyExam.open();
-    },
-    examModified({ isEdit, exam }) {
-      if (!isEdit && exam.category === "OFFLINE") {
-        this.toEditConfig(exam);
-      }
-      this.getList();
-    },
-    toEditConfig(row) {
-      this.curExam = row;
-      this.$refs.ModifyExamConfig.open();
-    },
-    toDelete(row) {
-      this.$confirm(`确定要删除考试【${row.name}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteExam(row.id);
-          this.$message.success("删除成功!");
-          this.deletePageLastItem();
-        })
-        .catch(() => {});
-    },
-    toEnable(row) {
-      const action = row.enable ? "禁用" : "启用";
-      this.$confirm(`确定要${action}考试【${row.name}】吗?`, "提示", {
-        type: "warning"
-      })
-        .then(async () => {
-          const enable = !row.enable;
-          await ableExam({
-            id: row.id,
-            enable
-          });
-          row.enable = enable;
-          this.$message.success("操作成功!");
-        })
-        .catch(() => {});
-    }
-  }
-};
-</script>
+<template>
+  <div class="exam-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="学期"
+              clearable
+            ></semester-select>
+          </el-form-item>
+          <el-form-item label="启用/禁用:" label-width="90px">
+            <el-select
+              v-model="filter.enable"
+              style="width: 120px;"
+              placeholder="启用/禁用"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in ABLE_TYPE"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </template>
+        <el-form-item>
+          <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="exams">
+        <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="semesterName" label="学年学期"></el-table-column>
+        <el-table-column prop="category" label="考试类型" width="100">
+          <span slot-scope="scope">
+            {{ scope.row.category | examTypeFilter }}
+          </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="enable" label="启用/禁用" width="100">
+          <template slot-scope="scope">
+            {{ scope.row.enable | enableFilter }}
+          </template>
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="180px"
+          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', 'Set') &&
+                  scope.row.category === 'OFFLINE'
+              "
+              class="btn-primary"
+              type="text"
+              @click="toEditConfig(scope.row)"
+              >设置</el-button
+            >
+            <el-button
+              v-if="checkPrivilege('link', 'Enable')"
+              :class="scope.row.enable ? 'btn-danger' : 'btn-primary'"
+              type="text"
+              @click="toEnable(scope.row)"
+              >{{ scope.row.enable ? "禁用" : "启用" }}</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>
+
+    <!-- modify-exam -->
+    <modify-exam
+      ref="ModifyExam"
+      :instance="curExam"
+      @modified="examModified"
+    ></modify-exam>
+    <!-- modify-exam-config -->
+    <modify-exam-config
+      ref="ModifyExamConfig"
+      :exam="curExam"
+    ></modify-exam-config>
+  </div>
+</template>
+
+<script>
+import { examListQuery, deleteExam, ableExam } from "../api";
+import { ABLE_TYPE } from "@/constants/enumerate";
+import ModifyExam from "../components/ModifyExam";
+import ModifyExamConfig from "../components/ModifyExamConfig";
+
+export default {
+  name: "exam-manage",
+  components: { ModifyExam, ModifyExamConfig },
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        enable: ""
+      },
+      ABLE_TYPE,
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      exams: [],
+      curExam: {}
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      if (datas.enable !== null && datas.enable !== "")
+        datas.enable = !!datas.enable;
+
+      const data = await examListQuery(datas);
+      this.exams = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toAdd() {
+      this.curExam = {};
+      this.$refs.ModifyExam.open();
+    },
+    toEdit(row) {
+      this.curExam = row;
+      this.$refs.ModifyExam.open();
+    },
+    examModified({ isEdit, exam }) {
+      if (!isEdit && exam.category === "OFFLINE") {
+        this.toEditConfig(exam);
+      }
+      this.getList();
+    },
+    toEditConfig(row) {
+      this.curExam = row;
+      this.$refs.ModifyExamConfig.open();
+    },
+    toDelete(row) {
+      this.$confirm(`确定要删除考试【${row.name}】吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          await deleteExam(row.id);
+          this.$message.success("删除成功!");
+          this.deletePageLastItem();
+        })
+        .catch(() => {});
+    },
+    toEnable(row) {
+      const action = row.enable ? "禁用" : "启用";
+      this.$confirm(`确定要${action}考试【${row.name}】吗?`, "提示", {
+        type: "warning"
+      })
+        .then(async () => {
+          const enable = !row.enable;
+          await ableExam({
+            id: row.id,
+            enable
+          });
+          row.enable = enable;
+          this.$message.success("操作成功!");
+        })
+        .catch(() => {});
+    }
+  }
+};
+</script>

+ 1 - 1
src/modules/base/views/MajorManage.vue

@@ -56,7 +56,7 @@
         ></el-table-column>
         <el-table-column prop="majorName" label="专业名称"></el-table-column>
         <el-table-column prop="collegeName" label="所属机构"></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 2 - 2
src/modules/base/views/PrintPlanPushManage.vue

@@ -64,7 +64,7 @@
         <el-table-column
           prop="name"
           label="印刷计划"
-          min-width="120"
+          min-width="180"
         ></el-table-column>
         <el-table-column prop="examStartTime" label="考试开始时间" width="170">
           <span slot-scope="scope">{{
@@ -100,7 +100,7 @@
         <el-table-column
           prop="thirdRelateName"
           label="考试名称"
-          min-width="120"
+          min-width="180"
         >
           <span slot-scope="scope">{{
             scope.row.thirdRelateName | defaultFieldFilter

+ 1 - 1
src/modules/base/views/PrintTemplateManage.vue

@@ -102,7 +102,7 @@
             {{ scope.row.enable | enableFilter }}
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" width="180">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 1 - 1
src/modules/base/views/RoleManage.vue

@@ -61,7 +61,7 @@
           </template>
         </el-table-column> -->
         <el-table-column prop="interpret" label="角色说明"></el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>

+ 191 - 185
src/modules/base/views/SmsManage.vue

@@ -1,185 +1,191 @@
-<template>
-  <div class="sync-manage">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" inline>
-        <template v-if="checkPrivilege('condition', 'condition')">
-          <el-form-item label="同步类型:">
-            <el-select
-              v-model="filter.messageType"
-              placeholder="短信类型"
-              clearable
-            >
-              <el-option
-                v-for="(val, key) in SMS_TYPE"
-                :key="key"
-                :value="key"
-                :label="val"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="发送结果:">
-            <el-select
-              v-model="filter.sendStatus"
-              placeholder="发送结果"
-              clearable
-              style="width: 120px;"
-            >
-              <el-option
-                v-for="(val, key) in SEND_STATUS"
-                :key="key"
-                :value="key * 1"
-                :label="val"
-              ></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="手机号:">
-            <el-input
-              v-model.trim="filter.mobileNumber"
-              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>
-
-    <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="businessOperate" label="短信类型">
-        </el-table-column>
-        <el-table-column prop="mobileNumber" label="手机号"> </el-table-column>
-        <el-table-column prop="userName" label="用户"> </el-table-column>
-        <el-table-column prop="templateCode" label="模板代号">
-        </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
-        <el-table-column prop="courseCode" label="课程代码"> </el-table-column>
-        <el-table-column prop="sendStatus" label="结果" width="60">
-          <template slot-scope="scope">
-            <span v-if="scope.row.sendStatus === 'OK'">成功</span>
-            <el-popover
-              v-else
-              placement="top"
-              width="300"
-              trigger="hover"
-              :content="scope.row.sendResult"
-            >
-              <span class="color-danger" slot="reference">失败</span>
-            </el-popover>
-          </template>
-        </el-table-column>
-        <el-table-column prop="createTime" label="发送时间" width="160">
-          <span slot-scope="scope">
-            {{ scope.row.createTime | timestampFilter }}
-          </span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
-          <template slot-scope="scope">
-            <el-button
-              v-if="
-                checkPrivilege('link', 'send') && scope.row.sendStatus !== 'OK'
-              "
-              type="text"
-              class="btn-primary"
-              :disabled="loading"
-              @click="toResend(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>
-</template>
-
-<script>
-import { smsListQuery, smsTypes, resendSms } from "../api";
-
-export default {
-  name: "sync-manage",
-  data() {
-    return {
-      SEND_STATUS: {
-        0: "失败",
-        1: "成功"
-      },
-      filter: {
-        sendStatus: "",
-        messageType: "",
-        mobileNumber: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      SMS_TYPE: {},
-      loading: false
-    };
-  },
-  created() {
-    this.getSmsTypes();
-    this.getList();
-  },
-  methods: {
-    async getSmsTypes() {
-      const data = await smsTypes();
-      let types = {};
-      data.forEach(item => {
-        types[item.name] = item.desc;
-      });
-      this.SMS_TYPE = types;
-    },
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      // data.sendStatus
-      const data = await smsListQuery(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    async toResend(row) {
-      if (this.loading) return;
-
-      this.loading = true;
-      const res = await resendSms(row.id).catch(() => {});
-      this.loading = false;
-      if (!res) return;
-      this.$message.success("发送成功!");
-      this.getList();
-    }
-  }
-};
-</script>
+<template>
+  <div class="sync-manage">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" inline>
+        <template v-if="checkPrivilege('condition', 'condition')">
+          <el-form-item label="同步类型:">
+            <el-select
+              v-model="filter.messageType"
+              placeholder="短信类型"
+              clearable
+            >
+              <el-option
+                v-for="(val, key) in SMS_TYPE"
+                :key="key"
+                :value="key"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="发送结果:">
+            <el-select
+              v-model="filter.sendStatus"
+              placeholder="发送结果"
+              clearable
+              style="width: 120px;"
+            >
+              <el-option
+                v-for="(val, key) in SEND_STATUS"
+                :key="key"
+                :value="key * 1"
+                :label="val"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="手机号:">
+            <el-input
+              v-model.trim="filter.mobileNumber"
+              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>
+
+    <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="businessOperate" label="短信类型">
+        </el-table-column>
+        <el-table-column prop="mobileNumber" label="手机号" width="120">
+        </el-table-column>
+        <el-table-column prop="userName" label="用户"> </el-table-column>
+        <el-table-column prop="templateCode" label="模板代号">
+        </el-table-column>
+        <el-table-column prop="paperNumber" label="试卷编号"> </el-table-column>
+        <el-table-column prop="courseCode" label="课程代码"> </el-table-column>
+        <el-table-column prop="sendStatus" label="结果" width="60">
+          <template slot-scope="scope">
+            <span v-if="scope.row.sendStatus === 'OK'">成功</span>
+            <el-popover
+              v-else
+              placement="top"
+              width="300"
+              trigger="hover"
+              :content="scope.row.sendResult"
+            >
+              <span class="color-danger" slot="reference">失败</span>
+            </el-popover>
+          </template>
+        </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="100"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="
+                checkPrivilege('link', 'send') && scope.row.sendStatus !== 'OK'
+              "
+              type="text"
+              class="btn-primary"
+              :disabled="loading"
+              @click="toResend(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>
+</template>
+
+<script>
+import { smsListQuery, smsTypes, resendSms } from "../api";
+
+export default {
+  name: "sync-manage",
+  data() {
+    return {
+      SEND_STATUS: {
+        0: "失败",
+        1: "成功"
+      },
+      filter: {
+        sendStatus: "",
+        messageType: "",
+        mobileNumber: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      SMS_TYPE: {},
+      loading: false
+    };
+  },
+  created() {
+    this.getSmsTypes();
+    this.getList();
+  },
+  methods: {
+    async getSmsTypes() {
+      const data = await smsTypes();
+      let types = {};
+      data.forEach(item => {
+        types[item.name] = item.desc;
+      });
+      this.SMS_TYPE = types;
+    },
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      // data.sendStatus
+      const data = await smsListQuery(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async toResend(row) {
+      if (this.loading) return;
+
+      this.loading = true;
+      const res = await resendSms(row.id).catch(() => {});
+      this.loading = false;
+      if (!res) return;
+      this.$message.success("发送成功!");
+      this.getList();
+    }
+  }
+};
+</script>

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

@@ -87,7 +87,7 @@
         ></el-table-column>
         <el-table-column prop="studentName" label="姓名"></el-table-column>
         <el-table-column prop="studentCode" label="学号"></el-table-column>
-        <el-table-column prop="phoneNumber" label="手机号" min-width="100">
+        <el-table-column prop="phoneNumber" label="手机号" width="120">
           <span slot-scope="scope">{{
             scope.row.phoneNumber | defaultFieldFilter
           }}</span>

+ 14 - 4
src/modules/exam/components/WaitTaskAnalysis.vue

@@ -8,14 +8,24 @@
           width="50"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"> </el-table-column>
-        <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="examName" label="考试" min-width="160">
+        </el-table-column>
+        <el-table-column prop="courseCode" label="课程(代码)" min-width="200">
           <span slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </span>
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button class="btn-primary" type="text" @click="toDo(scope.row)"
               >立即处理</el-button

+ 148 - 135
src/modules/exam/components/WaitTaskFlow.vue

@@ -1,135 +1,148 @@
-<template>
-  <div class="wait-task-flow">
-    <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="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="type" label="课程(代码)">
-          <template slot-scope="scope">
-            {{ scope.row.courseName }}({{ scope.row.courseCode }})
-          </template>
-        </el-table-column>
-        <el-table-column prop="cardRuleName" label="题卡规则"></el-table-column>
-        <el-table-column prop="taskName" label="流程节点">
-          <span slot-scope="scope">
-            {{ scope.row.taskName | flowTaskNameFilter }}
-          </span>
-        </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" width="180">
-          <span slot-scope="scope">{{
-            scope.row.createTime | timestampFilter
-          }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
-          <template slot-scope="scope">
-            <el-button class="btn-primary" type="text" @click="toDo(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>
-
-    <!-- ModifyTaskApply -->
-    <modify-task-apply
-      ref="ModifyTaskApply"
-      :instance="curTask"
-      @modified="taskModified"
-    ></modify-task-apply>
-  </div>
-</template>
-
-<script>
-import { mapMutations, mapActions } from "vuex";
-import { waitExamTaskListPage } from "../api";
-import ModifyTaskApply from "./ModifyTaskApply";
-
-export default {
-  name: "wait-task-flow",
-  components: { ModifyTaskApply },
-  data() {
-    return {
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curTask: {}
-    };
-  },
-  mounted() {
-    this.initData();
-  },
-  methods: {
-    ...mapMutations("exam", ["updateWaitTask"]),
-    ...mapActions("exam", ["updateWaitTaskCount"]),
-    async initData() {
-      const cachePageInfo = this.$ls.get("cachePageInfo");
-      if (cachePageInfo) {
-        this.current = cachePageInfo.page;
-        await this.getList();
-
-        this.$nextTick(() => {
-          const curRow = this.dataList.find(
-            item => item.id === cachePageInfo.curRowId
-          );
-          if (!curRow) return;
-          this.toDo(curRow);
-        });
-      } else {
-        this.toPage(1);
-      }
-      this.$ls.remove("cachePageInfo");
-    },
-    async getList() {
-      const datas = {
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await waitExamTaskListPage(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-      this.updateWaitTask({ flow: this.total });
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toDo(task) {
-      this.curTask = { ...task, source: "REVIEW" };
-      this.$refs.ModifyTaskApply.open();
-    },
-    taskModified() {
-      this.getList();
-      this.updateWaitTaskCount();
-    }
-  },
-  beforeRouteLeave(to, from, next) {
-    console.log(to);
-    if (to.name === "CardEdit") {
-      this.$ls.set("cachePageInfo", {
-        page: this.current,
-        curRowId: this.curTask.id
-      });
-    } else {
-      this.$ls.remove("cachePageInfo");
-    }
-    next();
-  }
-};
-</script>
+<template>
+  <div class="wait-task-flow">
+    <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="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="type" label="课程(代码)" min-width="200">
+          <template slot-scope="scope">
+            {{ scope.row.courseName }}({{ scope.row.courseCode }})
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="cardRuleName"
+          label="题卡规则"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="taskName" label="流程节点" min-width="160">
+          <span slot-scope="scope">
+            {{ scope.row.taskName | flowTaskNameFilter }}
+          </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
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button class="btn-primary" type="text" @click="toDo(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>
+
+    <!-- ModifyTaskApply -->
+    <modify-task-apply
+      ref="ModifyTaskApply"
+      :instance="curTask"
+      @modified="taskModified"
+    ></modify-task-apply>
+  </div>
+</template>
+
+<script>
+import { mapMutations, mapActions } from "vuex";
+import { waitExamTaskListPage } from "../api";
+import ModifyTaskApply from "./ModifyTaskApply";
+
+export default {
+  name: "wait-task-flow",
+  components: { ModifyTaskApply },
+  data() {
+    return {
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curTask: {}
+    };
+  },
+  mounted() {
+    this.initData();
+  },
+  methods: {
+    ...mapMutations("exam", ["updateWaitTask"]),
+    ...mapActions("exam", ["updateWaitTaskCount"]),
+    async initData() {
+      const cachePageInfo = this.$ls.get("cachePageInfo");
+      if (cachePageInfo) {
+        this.current = cachePageInfo.page;
+        await this.getList();
+
+        this.$nextTick(() => {
+          const curRow = this.dataList.find(
+            item => item.id === cachePageInfo.curRowId
+          );
+          if (!curRow) return;
+          this.toDo(curRow);
+        });
+      } else {
+        this.toPage(1);
+      }
+      this.$ls.remove("cachePageInfo");
+    },
+    async getList() {
+      const datas = {
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await waitExamTaskListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+      this.updateWaitTask({ flow: this.total });
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toDo(task) {
+      this.curTask = { ...task, source: "REVIEW" };
+      this.$refs.ModifyTaskApply.open();
+    },
+    taskModified() {
+      this.getList();
+      this.updateWaitTaskCount();
+    }
+  },
+  beforeRouteLeave(to, from, next) {
+    console.log(to);
+    if (to.name === "CardEdit") {
+      this.$ls.set("cachePageInfo", {
+        page: this.current,
+        curRowId: this.curTask.id
+      });
+    } else {
+      this.$ls.remove("cachePageInfo");
+    }
+    next();
+  }
+};
+</script>

+ 106 - 97
src/modules/exam/components/WaitTaskStmms.vue

@@ -1,97 +1,106 @@
-<template>
-  <div class="wait-task-stmms">
-    <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="thirdRelateId" label="考试ID"></el-table-column>
-        <el-table-column
-          prop="thirdRelateName"
-          label="考试名称"
-        ></el-table-column>
-        <el-table-column prop="paperNumber" label="试卷ID"></el-table-column>
-        <el-table-column prop="paperType" label="试卷类型"></el-table-column>
-        <el-table-column prop="statusStr" label="状态" width="100">
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
-          <template slot-scope="scope">
-            <el-button class="btn-primary" type="text" @click="toDo(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>
-
-    <!-- UploadPaperAnswerDialog -->
-    <UploadPaperAnswerDialog
-      ref="UploadPaperAnswerDialog"
-      :instance="curTask"
-      @modified="taskModified"
-    />
-  </div>
-</template>
-
-<script>
-import { mapActions, mapMutations } from "vuex";
-import { stmmsTaskListPage } from "../api";
-import UploadPaperAnswerDialog from "../../stmms/components/UploadPaperAnswerDialog";
-
-export default {
-  name: "wait-task-stmms",
-  components: { UploadPaperAnswerDialog },
-  data() {
-    return {
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curTask: {}
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    ...mapMutations("exam", ["updateWaitTask"]),
-    ...mapActions("exam", ["updateWaitTaskCount"]),
-    async getList() {
-      const datas = {
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await stmmsTaskListPage(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-      this.updateWaitTask({ stmms: this.total });
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    toDo(row) {
-      this.curTask = row;
-      this.$refs.UploadPaperAnswerDialog.open();
-    },
-    taskModified() {
-      this.getList();
-      this.updateWaitTaskCount();
-    }
-  }
-};
-</script>
+<template>
+  <div class="wait-task-stmms">
+    <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="thirdRelateId" label="考试ID"></el-table-column>
+        <el-table-column
+          prop="thirdRelateName"
+          label="考试名称"
+        ></el-table-column>
+        <el-table-column prop="paperNumber" label="试卷ID"></el-table-column>
+        <el-table-column
+          prop="paperType"
+          label="试卷类型"
+          width="80"
+        ></el-table-column>
+        <el-table-column prop="statusStr" label="状态" width="100">
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button class="btn-primary" type="text" @click="toDo(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>
+
+    <!-- UploadPaperAnswerDialog -->
+    <UploadPaperAnswerDialog
+      ref="UploadPaperAnswerDialog"
+      :instance="curTask"
+      @modified="taskModified"
+    />
+  </div>
+</template>
+
+<script>
+import { mapActions, mapMutations } from "vuex";
+import { stmmsTaskListPage } from "../api";
+import UploadPaperAnswerDialog from "../../stmms/components/UploadPaperAnswerDialog";
+
+export default {
+  name: "wait-task-stmms",
+  components: { UploadPaperAnswerDialog },
+  data() {
+    return {
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curTask: {}
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    ...mapMutations("exam", ["updateWaitTask"]),
+    ...mapActions("exam", ["updateWaitTaskCount"]),
+    async getList() {
+      const datas = {
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await stmmsTaskListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+      this.updateWaitTask({ stmms: this.total });
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    toDo(row) {
+      this.curTask = row;
+      this.$refs.UploadPaperAnswerDialog.open();
+    },
+    taskModified() {
+      this.getList();
+      this.updateWaitTaskCount();
+    }
+  }
+};
+</script>

+ 21 - 9
src/modules/exam/views/ExamTaskManage.vue

@@ -118,11 +118,23 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
         <!-- <el-table-column prop="sequence" label="序号"></el-table-column> -->
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="courseName" label="课程(代码)">
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
           <template slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </template>
@@ -130,14 +142,14 @@
         <el-table-column
           prop="userName"
           label="命题老师"
-          width="100"
+          min-width="100"
         ></el-table-column>
-        <el-table-column prop="startTime" label="命题开始时间">
+        <el-table-column prop="startTime" label="命题开始时间" width="170">
           <span slot-scope="scope">{{
             scope.row.startTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="endTime" label="命题结束时间">
+        <el-table-column prop="endTime" label="命题结束时间" width="170">
           <span slot-scope="scope">{{
             scope.row.endTime | timestampFilter
           }}</span>
@@ -152,7 +164,7 @@
             {{ scope.row.enable | enableFilter }}
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>
@@ -161,7 +173,7 @@
           class-name="action-column"
           label="操作"
           width="120px"
-          align="center"
+          fixed="right"
         >
           <template slot-scope="scope">
             <el-button

+ 345 - 312
src/modules/exam/views/StatisticsManage.vue

@@ -1,312 +1,345 @@
-<template>
-  <div class="exam-statistics">
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
-        <el-form-item label="学期:">
-          <semester-select v-model="filter.semesterId"></semester-select>
-        </el-form-item>
-        <el-form-item label="考试:">
-          <exam-select
-            v-model="filter.examId"
-            :semester-id="filter.semesterId"
-            @change="examChange"
-          ></exam-select>
-        </el-form-item>
-        <el-form-item label="开课学院:">
-          <college-select
-            v-model.trim="filter.collegeId"
-            placeholder="开课学院"
-            clearable
-            @change="facultyChange"
-          ></college-select>
-        </el-form-item>
-        <el-form-item label="开课部门:">
-          <el-select
-            v-model="filter.teachingRoomId"
-            placeholder="开课部门"
-            filterable
-            clearable
-          >
-            <el-option
-              v-for="item in teachingRooms"
-              :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"
-            style="width: 142px;"
-            placeholder="完成状态"
-            clearable
-          >
-            <el-option
-              v-for="(val, key) in FINISH_STATUS"
-              :key="key"
-              :value="key"
-              :label="val"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="课程名称:">
-          <el-input
-            v-model.trim="filter.courseName"
-            placeholder="课程名称"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="任课老师:">
-          <el-input
-            v-model.trim="filter.teacherName"
-            placeholder="任课老师"
-            clearable
-          ></el-input>
-        </el-form-item>
-        <el-form-item>
-          <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', 'Delete')"
-          type="danger"
-          icon="el-icon-delete"
-          :loading="loading"
-          @click="toBatDelete"
-          >批量删除</el-button
-        >
-        <el-button
-          v-if="checkPrivilege('button', 'Freshen')"
-          type="primary"
-          icon="el-icon-refresh"
-          :loading="loading"
-          :disabled="!filter.examId"
-          @click="toFresh"
-          >刷新数据</el-button
-        >
-        <el-button
-          type="success"
-          icon="el-icon-download"
-          v-if="checkPrivilege('button', 'import')"
-          ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
-        >
-        <upload-button
-          v-if="checkPrivilege('button', 'import')"
-          btn-icon="el-icon-circle-plus-outline"
-          btn-content="导入"
-          btn-type="success"
-          :upload-url="uploadUrl"
-          :upload-data="uploadData"
-          :format="['xls', 'xlsx']"
-          accept=".xls,.xlsx"
-          :disabled="!filter.examId"
-          @valid-error="validError"
-          @upload-success="uploadSuccess"
-        >
-        </upload-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
-          type="index"
-          label="序号"
-          width="70"
-          :index="indexMethod"
-        ></el-table-column>
-        <el-table-column prop="collegeName" label="开课学院"></el-table-column>
-        <el-table-column prop="teachingRoom" label="开课部门"></el-table-column>
-        <el-table-column prop="courseCode" label="课程代码"></el-table-column>
-        <el-table-column prop="courseName" label="课程名称"></el-table-column>
-        <el-table-column prop="teacher" label="任课老师"></el-table-column>
-        <el-table-column prop="clazzNames" label="班级名称"></el-table-column>
-        <el-table-column prop="printCount" label="总印份数"></el-table-column>
-        <el-table-column prop="status" label="状态">
-          <span slot-scope="scope">{{ FINISH_STATUS[scope.row.status] }}</span>
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100px">
-          <template slot-scope="scope">
-            <el-button
-              v-if="scope.row.clazzContent"
-              class="btn-primary"
-              type="text"
-              @click="toDetail(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>
-
-    <!-- StatisticsDetailDialog -->
-    <statistics-detail-dialog
-      :contents="curContents"
-      ref="StatisticsDetailDialog"
-    ></statistics-detail-dialog>
-  </div>
-</template>
-
-<script>
-import { statisticsList, statisticsDelete, statisticsFreshen } from "../api";
-import { organizationFindByTypeList } from "../../base/api";
-import UploadButton from "../../../components/UploadButton";
-import StatisticsDetailDialog from "../components/StatisticsDetailDialog.vue";
-
-export default {
-  name: "exam-statistics",
-  components: { UploadButton, StatisticsDetailDialog },
-  data() {
-    return {
-      filter: {
-        semesterId: "",
-        examId: "",
-        collegeId: "",
-        teachingRoomId: "",
-        courseName: "",
-        teacherName: "",
-        status: ""
-      },
-      loading: false,
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curRow: {},
-      curContents: [],
-      teachingRooms: [],
-      multipleSelection: [],
-      FINISH_STATUS: { UN_FINISH: "未完成", FINISH: "已完成" },
-      // import
-      uploadData: {},
-      uploadUrl: "/api/admin/statistics/import",
-      downloadUrl: "/temps/examStatisticsTemplate.xlsx",
-      dfilename: "命题计划导入模板.xlsx"
-    };
-  },
-  mounted() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      const data = await statisticsList(datas);
-      this.dataList = data.records;
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    async getTeachingRooms() {
-      this.teachingRooms = await organizationFindByTypeList({
-        orgType: "TEACHING_ROOM",
-        orgId: this.filter.collegeId,
-        auth: false
-      });
-    },
-    facultyChange(val) {
-      this.filter.teachingRoomId = "";
-      this.teachingRooms = [];
-
-      if (!val) return;
-      this.getTeachingRooms();
-    },
-    examChange() {
-      this.uploadData = {
-        examId: this.filter.examId
-      };
-    },
-    handleSelectionChange(val) {
-      this.multipleSelection = val.map(item => item.id);
-    },
-    async toBatDelete() {
-      if (this.loading) return;
-
-      if (!this.multipleSelection.length) {
-        this.$message.error("请选择要删除的数据");
-        return;
-      }
-      const result = await this.$confirm("确定要删除选择的数据吗?", "提示", {
-        type: "warning"
-      }).catch(() => {});
-      if (result !== "confirm") return;
-
-      this.loading = true;
-      const data = await statisticsDelete(
-        this.multipleSelection
-      ).catch(() => {});
-      this.loading = false;
-      if (!data) return;
-
-      this.$message.success("提交成功!");
-      this.toPage(this.current);
-    },
-    async toFresh() {
-      if (!this.filter.examId) {
-        this.$message.error("请先选择考试");
-        return;
-      }
-
-      this.loading = true;
-      const data = await statisticsFreshen({
-        examId: this.filter.examId
-      }).catch(() => {});
-      this.loading = false;
-      if (!data) return;
-
-      this.$message.success("刷新成功!");
-      this.toPage(1);
-    },
-    toDetail(row) {
-      if (!row.clazzContent) {
-        this.$message.error("当前无详情展示");
-        return;
-      }
-      this.curContents = JSON.parse(row.clazzContent);
-      this.$refs.StatisticsDetailDialog.open();
-    },
-    // import
-    validError(errorData) {
-      this.$message.error(errorData.message);
-    },
-    uploadSuccess() {
-      this.$message.success("文件上传成功,后台正在导入!");
-      this.getList();
-    }
-  }
-};
-</script>
+<template>
+  <div class="exam-statistics">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="90px" inline>
+        <el-form-item label="学期:">
+          <semester-select v-model="filter.semesterId"></semester-select>
+        </el-form-item>
+        <el-form-item label="考试:">
+          <exam-select
+            v-model="filter.examId"
+            :semester-id="filter.semesterId"
+            @change="examChange"
+          ></exam-select>
+        </el-form-item>
+        <el-form-item label="开课学院:">
+          <college-select
+            v-model.trim="filter.collegeId"
+            placeholder="开课学院"
+            clearable
+            @change="facultyChange"
+          ></college-select>
+        </el-form-item>
+        <el-form-item label="开课部门:">
+          <el-select
+            v-model="filter.teachingRoomId"
+            placeholder="开课部门"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="item in teachingRooms"
+              :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"
+            style="width: 142px;"
+            placeholder="完成状态"
+            clearable
+          >
+            <el-option
+              v-for="(val, key) in FINISH_STATUS"
+              :key="key"
+              :value="key"
+              :label="val"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="课程名称:">
+          <el-input
+            v-model.trim="filter.courseName"
+            placeholder="课程名称"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="任课老师:">
+          <el-input
+            v-model.trim="filter.teacherName"
+            placeholder="任课老师"
+            clearable
+          ></el-input>
+        </el-form-item>
+        <el-form-item>
+          <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', 'Delete')"
+          type="danger"
+          icon="el-icon-delete"
+          :loading="loading"
+          @click="toBatDelete"
+          >批量删除</el-button
+        >
+        <el-button
+          v-if="checkPrivilege('button', 'Freshen')"
+          type="primary"
+          icon="el-icon-refresh"
+          :loading="loading"
+          :disabled="!filter.examId"
+          @click="toFresh"
+          >刷新数据</el-button
+        >
+        <el-button
+          type="success"
+          icon="el-icon-download"
+          v-if="checkPrivilege('button', 'import')"
+          ><a :href="downloadUrl" :download="dfilename">模板下载</a></el-button
+        >
+        <upload-button
+          v-if="checkPrivilege('button', 'import')"
+          btn-icon="el-icon-circle-plus-outline"
+          btn-content="导入"
+          btn-type="success"
+          :upload-url="uploadUrl"
+          :upload-data="uploadData"
+          :format="['xls', 'xlsx']"
+          accept=".xls,.xlsx"
+          :disabled="!filter.examId"
+          @valid-error="validError"
+          @upload-success="uploadSuccess"
+        >
+        </upload-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
+          type="index"
+          label="序号"
+          width="70"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column
+          prop="collegeName"
+          label="开课学院"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="teachingRoom"
+          label="开课部门"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="courseCode"
+          label="课程代码"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="courseName"
+          label="课程名称"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="teacher"
+          label="任课老师"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="clazzNames"
+          label="班级名称"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="printCount"
+          label="总印份数"
+          width="80"
+        ></el-table-column>
+        <el-table-column prop="status" label="状态" width="60">
+          <span slot-scope="scope">{{ FINISH_STATUS[scope.row.status] }}</span>
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100px"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="scope.row.clazzContent"
+              class="btn-primary"
+              type="text"
+              @click="toDetail(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>
+
+    <!-- StatisticsDetailDialog -->
+    <statistics-detail-dialog
+      :contents="curContents"
+      ref="StatisticsDetailDialog"
+    ></statistics-detail-dialog>
+  </div>
+</template>
+
+<script>
+import { statisticsList, statisticsDelete, statisticsFreshen } from "../api";
+import { organizationFindByTypeList } from "../../base/api";
+import UploadButton from "../../../components/UploadButton";
+import StatisticsDetailDialog from "../components/StatisticsDetailDialog.vue";
+
+export default {
+  name: "exam-statistics",
+  components: { UploadButton, StatisticsDetailDialog },
+  data() {
+    return {
+      filter: {
+        semesterId: "",
+        examId: "",
+        collegeId: "",
+        teachingRoomId: "",
+        courseName: "",
+        teacherName: "",
+        status: ""
+      },
+      loading: false,
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curRow: {},
+      curContents: [],
+      teachingRooms: [],
+      multipleSelection: [],
+      FINISH_STATUS: { UN_FINISH: "未完成", FINISH: "已完成" },
+      // import
+      uploadData: {},
+      uploadUrl: "/api/admin/statistics/import",
+      downloadUrl: "/temps/examStatisticsTemplate.xlsx",
+      dfilename: "命题计划导入模板.xlsx"
+    };
+  },
+  mounted() {
+    this.getList();
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await statisticsList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    async getTeachingRooms() {
+      this.teachingRooms = await organizationFindByTypeList({
+        orgType: "TEACHING_ROOM",
+        orgId: this.filter.collegeId,
+        auth: false
+      });
+    },
+    facultyChange(val) {
+      this.filter.teachingRoomId = "";
+      this.teachingRooms = [];
+
+      if (!val) return;
+      this.getTeachingRooms();
+    },
+    examChange() {
+      this.uploadData = {
+        examId: this.filter.examId
+      };
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val.map(item => item.id);
+    },
+    async toBatDelete() {
+      if (this.loading) return;
+
+      if (!this.multipleSelection.length) {
+        this.$message.error("请选择要删除的数据");
+        return;
+      }
+      const result = await this.$confirm("确定要删除选择的数据吗?", "提示", {
+        type: "warning"
+      }).catch(() => {});
+      if (result !== "confirm") return;
+
+      this.loading = true;
+      const data = await statisticsDelete(
+        this.multipleSelection
+      ).catch(() => {});
+      this.loading = false;
+      if (!data) return;
+
+      this.$message.success("提交成功!");
+      this.toPage(this.current);
+    },
+    async toFresh() {
+      if (!this.filter.examId) {
+        this.$message.error("请先选择考试");
+        return;
+      }
+
+      this.loading = true;
+      const data = await statisticsFreshen({
+        examId: this.filter.examId
+      }).catch(() => {});
+      this.loading = false;
+      if (!data) return;
+
+      this.$message.success("刷新成功!");
+      this.toPage(1);
+    },
+    toDetail(row) {
+      if (!row.clazzContent) {
+        this.$message.error("当前无详情展示");
+        return;
+      }
+      this.curContents = JSON.parse(row.clazzContent);
+      this.$refs.StatisticsDetailDialog.open();
+    },
+    // import
+    validError(errorData) {
+      this.$message.error(errorData.message);
+    },
+    uploadSuccess() {
+      this.$message.success("文件上传成功,后台正在导入!");
+      this.getList();
+    }
+  }
+};
+</script>

+ 25 - 8
src/modules/exam/views/TaskApplyManage.vue

@@ -102,10 +102,22 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="courseName" label="课程(代码)">
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
           <template slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </template>
@@ -113,14 +125,14 @@
         <el-table-column
           prop="userName"
           label="命题老师"
-          width="100"
+          min-width="100"
         ></el-table-column>
-        <el-table-column prop="startTime" label="命题开始时间">
+        <el-table-column prop="startTime" label="命题开始时间" width="170">
           <span slot-scope="scope">{{
             scope.row.startTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="endTime" label="命题结束时间">
+        <el-table-column prop="endTime" label="命题结束时间" width="170">
           <span slot-scope="scope">{{
             scope.row.endTime | timestampFilter
           }}</span>
@@ -130,7 +142,12 @@
             {{ scope.row.auditStatus | auditStatusFilter }}
           </template>
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="160px">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="160px"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

+ 34 - 13
src/modules/exam/views/TaskPaperManage.vue

@@ -95,10 +95,22 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="courseName" label="课程(代码)">
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
           <template slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </template>
@@ -106,40 +118,49 @@
         <el-table-column
           prop="paperType"
           label="卷型"
-          width="100"
+          width="80"
         ></el-table-column>
         <el-table-column
           prop="userName"
           label="命题老师"
-          width="100"
+          min-width="100"
         ></el-table-column>
-        <el-table-column prop="createTime" label="入库时间">
+        <el-table-column prop="createTime" label="入库时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="exposedPaperType" label="已曝光" width="100">
+        <el-table-column prop="exposedPaperType" label="已曝光" width="80">
           <span slot-scope="scope">{{
             scope.row.exposedPaperType | defaultFieldFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="unexposedPaperType" label="未曝光" width="100">
+        <el-table-column prop="unexposedPaperType" label="未曝光" width="80">
           <span slot-scope="scope">{{
             scope.row.unexposedPaperType | defaultFieldFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="cardRuleName" label="题卡规则"></el-table-column>
-        <el-table-column prop="makeMethod" label="题卡创建类型">
+        <el-table-column
+          prop="cardRuleName"
+          label="题卡规则"
+          width="120"
+        ></el-table-column>
+        <el-table-column prop="makeMethod" label="题卡创建类型" width="120">
           <span slot-scope="scope">{{
             scope.row.makeMethod | cardSourceTypeFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="enable" label="启用/禁用" width="100">
+        <el-table-column prop="enable" label="启用/禁用" width="80">
           <template slot-scope="scope">
             {{ scope.row.enable | enableFilter }}
           </template>
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="180px">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="180px"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

+ 235 - 217
src/modules/print/views/BusinessDataDetail.vue

@@ -1,217 +1,235 @@
-<template>
-  <div class="business-data-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="印刷计划:">
-            <print-plan-select
-              v-model.trim="filter.printPlanIdList"
-              placeholder="印刷计划"
-              clearable
-              multiple
-              @change="printPlanChange"
-            ></print-plan-select>
-          </el-form-item>
-          <el-form-item label="课程(代码):" label-width="110px">
-            <course-select
-              v-model.trim="filter.courseCode"
-              :print-plan-id="filter.printPlanIdList"
-              placeholder="课程(代码)"
-              clearable
-            ></course-select>
-          </el-form-item>
-          <el-form-item label="试卷编号:">
-            <paper-number-select
-              ref="PaperNumberSelect"
-              v-model="filter.paperNumber"
-              :print-plan-id="filter.printPlanIdList"
-              placeholder="试卷编号"
-              clearable
-            ></paper-number-select>
-          </el-form-item>
-          <el-form-item label="考点:" label-width="55px">
-            <place-select
-              v-model.trim="filter.examPlace"
-              :print-plan-id="filter.printPlanIdList"
-              placeholder="考点"
-              clearable
-            ></place-select>
-          </el-form-item>
-          <el-form-item label="考场:" label-width="55px">
-            <room-select
-              v-model.trim="filter.examRoom"
-              :print-plan-id="filter.printPlanIdList"
-              placeholder="考场"
-              clearable
-            ></room-select>
-          </el-form-item>
-          <el-form-item label="考试日期:">
-            <el-date-picker
-              v-model="createTime"
-              type="daterange"
-              :picker-options="pickerOptions"
-              range-separator="至"
-              start-placeholder="考试开始日期"
-              end-placeholder="考试结束日期"
-              value-format="timestamp"
-              align="right"
-              unlink-panels
-            >
-            </el-date-picker>
-          </el-form-item>
-          <el-form-item label="考生:" label-width="70px">
-            <el-input
-              v-model="filter.studentParams"
-              placeholder="考生"
-              clearable
-            ></el-input>
-          </el-form-item>
-        </template>
-        <el-form-item label-width="0px">
-          <el-button
-            v-if="checkPrivilege('button', 'select')"
-            type="primary"
-            @click="search"
-            >查询</el-button
-          >
-        </el-form-item>
-      </el-form>
-    </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="printPlanName"
-          label="印刷计划"
-        ></el-table-column>
-        <el-table-column prop="courseNameCode" label="课程(代码)">
-        </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="examDate" label="考试日期"> </el-table-column>
-        <el-table-column prop="examTime" label="考试时间"> </el-table-column>
-        <el-table-column prop="examPlace" label="考点"> </el-table-column>
-        <el-table-column prop="examRoom" label="考场"> </el-table-column>
-        <el-table-column prop="ticketNumber" label="考号" width="120">
-        </el-table-column>
-        <el-table-column prop="studentCode" label="学号" width="120">
-        </el-table-column>
-        <el-table-column prop="studentName" label="姓名" width="120">
-        </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
-          <template slot-scope="scope">
-            <el-button
-              v-if="checkPrivilege('link', 'preview')"
-              class="btn-primary"
-              type="text"
-              @click="toPreview(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>
-
-    <!-- PreviewBusinessStudentDetail -->
-    <preview-business-student-detail
-      :instance="curRow"
-      ref="PreviewBusinessStudentDetail"
-    ></preview-business-student-detail>
-  </div>
-</template>
-
-<script>
-import { businessDataDetailListPage } from "../api";
-import { parseTimeRangeDateAndTime } from "@/plugins/utils";
-import PreviewBusinessStudentDetail from "../components/PreviewBusinessStudentDetail";
-import pickerOptions from "@/constants/datePickerOptions";
-
-export default {
-  name: "business-data-detail",
-  components: { PreviewBusinessStudentDetail },
-  data() {
-    return {
-      filter: {
-        printPlanIdList: [],
-        courseCode: "",
-        paperNumber: "",
-        examPlace: "",
-        examRoom: "",
-        studentParams: "",
-        startDate: "",
-        endDate: ""
-      },
-      current: 1,
-      size: this.GLOBAL.pageSize,
-      total: 0,
-      dataList: [],
-      curRow: {},
-      // date-picker
-      createTime: [],
-      pickerOptions
-    };
-  },
-  mounted() {
-    this.search();
-  },
-  methods: {
-    async getList() {
-      if (!this.checkPrivilege("list", "list")) return;
-
-      const datas = {
-        ...this.filter,
-        pageNumber: this.current,
-        pageSize: this.size
-      };
-      if (this.createTime) {
-        datas.startDate = this.createTime[0];
-        datas.endDate = this.createTime[1];
-      }
-      const data = await businessDataDetailListPage(datas);
-      this.dataList = data.records.map(item => {
-        const { date, time } = parseTimeRangeDateAndTime(
-          item.examStartTime,
-          item.examEndTime
-        );
-        item.examDate = date || "--";
-        item.examTime = time || "--";
-        return item;
-      });
-      this.total = data.total;
-    },
-    toPage(page) {
-      this.current = page;
-      this.getList();
-    },
-    search() {
-      this.toPage(1);
-    },
-    printPlanChange() {
-      this.filter.paperNumber = "";
-      this.filter.courseCode = "";
-      this.filter.examRoom = "";
-      this.filter.examPlace = "";
-    },
-    toPreview(row) {
-      this.curRow = row;
-      this.$refs.PreviewBusinessStudentDetail.open();
-    }
-  }
-};
-</script>
+<template>
+  <div class="business-data-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="印刷计划:">
+            <print-plan-select
+              v-model.trim="filter.printPlanIdList"
+              placeholder="印刷计划"
+              clearable
+              multiple
+              @change="printPlanChange"
+            ></print-plan-select>
+          </el-form-item>
+          <el-form-item label="课程(代码):" label-width="110px">
+            <course-select
+              v-model.trim="filter.courseCode"
+              :print-plan-id="filter.printPlanIdList"
+              placeholder="课程(代码)"
+              clearable
+            ></course-select>
+          </el-form-item>
+          <el-form-item label="试卷编号:">
+            <paper-number-select
+              ref="PaperNumberSelect"
+              v-model="filter.paperNumber"
+              :print-plan-id="filter.printPlanIdList"
+              placeholder="试卷编号"
+              clearable
+            ></paper-number-select>
+          </el-form-item>
+          <el-form-item label="考点:" label-width="55px">
+            <place-select
+              v-model.trim="filter.examPlace"
+              :print-plan-id="filter.printPlanIdList"
+              placeholder="考点"
+              clearable
+            ></place-select>
+          </el-form-item>
+          <el-form-item label="考场:" label-width="55px">
+            <room-select
+              v-model.trim="filter.examRoom"
+              :print-plan-id="filter.printPlanIdList"
+              placeholder="考场"
+              clearable
+            ></room-select>
+          </el-form-item>
+          <el-form-item label="考试日期:">
+            <el-date-picker
+              v-model="createTime"
+              type="daterange"
+              :picker-options="pickerOptions"
+              range-separator="至"
+              start-placeholder="考试开始日期"
+              end-placeholder="考试结束日期"
+              value-format="timestamp"
+              align="right"
+              unlink-panels
+            >
+            </el-date-picker>
+          </el-form-item>
+          <el-form-item label="考生:" label-width="70px">
+            <el-input
+              v-model="filter.studentParams"
+              placeholder="考生"
+              clearable
+            ></el-input>
+          </el-form-item>
+        </template>
+        <el-form-item label-width="0px">
+          <el-button
+            v-if="checkPrivilege('button', 'select')"
+            type="primary"
+            @click="search"
+            >查询</el-button
+          >
+        </el-form-item>
+      </el-form>
+    </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="printPlanName"
+          label="印刷计划"
+          min-width="200"
+        ></el-table-column>
+        <el-table-column
+          prop="courseNameCode"
+          label="课程(代码)"
+          min-width="200"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="examDate" label="考试日期" width="100">
+        </el-table-column>
+        <el-table-column prop="examTime" label="考试时间" width="100">
+        </el-table-column>
+        <el-table-column prop="examPlace" label="考点" min-width="100">
+        </el-table-column>
+        <el-table-column prop="examRoom" label="考场" min-width="100">
+        </el-table-column>
+        <el-table-column prop="ticketNumber" label="考号" width="120">
+        </el-table-column>
+        <el-table-column prop="studentCode" label="学号" width="120">
+        </el-table-column>
+        <el-table-column prop="studentName" label="姓名" min-width="100">
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              v-if="checkPrivilege('link', 'preview')"
+              class="btn-primary"
+              type="text"
+              @click="toPreview(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>
+
+    <!-- PreviewBusinessStudentDetail -->
+    <preview-business-student-detail
+      :instance="curRow"
+      ref="PreviewBusinessStudentDetail"
+    ></preview-business-student-detail>
+  </div>
+</template>
+
+<script>
+import { businessDataDetailListPage } from "../api";
+import { parseTimeRangeDateAndTime } from "@/plugins/utils";
+import PreviewBusinessStudentDetail from "../components/PreviewBusinessStudentDetail";
+import pickerOptions from "@/constants/datePickerOptions";
+
+export default {
+  name: "business-data-detail",
+  components: { PreviewBusinessStudentDetail },
+  data() {
+    return {
+      filter: {
+        printPlanIdList: [],
+        courseCode: "",
+        paperNumber: "",
+        examPlace: "",
+        examRoom: "",
+        studentParams: "",
+        startDate: "",
+        endDate: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      curRow: {},
+      // date-picker
+      createTime: [],
+      pickerOptions
+    };
+  },
+  mounted() {
+    this.search();
+  },
+  methods: {
+    async getList() {
+      if (!this.checkPrivilege("list", "list")) return;
+
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      if (this.createTime) {
+        datas.startDate = this.createTime[0];
+        datas.endDate = this.createTime[1];
+      }
+      const data = await businessDataDetailListPage(datas);
+      this.dataList = data.records.map(item => {
+        const { date, time } = parseTimeRangeDateAndTime(
+          item.examStartTime,
+          item.examEndTime
+        );
+        item.examDate = date || "--";
+        item.examTime = time || "--";
+        return item;
+      });
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    search() {
+      this.toPage(1);
+    },
+    printPlanChange() {
+      this.filter.paperNumber = "";
+      this.filter.courseCode = "";
+      this.filter.examRoom = "";
+      this.filter.examPlace = "";
+    },
+    toPreview(row) {
+      this.curRow = row;
+      this.$refs.PreviewBusinessStudentDetail.open();
+    }
+  }
+};
+</script>

+ 38 - 11
src/modules/print/views/BusinessDataExport.vue

@@ -127,23 +127,50 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
         <el-table-column
           prop="printPlanName"
           label="印刷计划"
+          min-width="200"
         ></el-table-column>
-        <el-table-column prop="examDate" label="考试日期"> </el-table-column>
-        <el-table-column prop="examTime" label="考试时间"> </el-table-column>
-        <el-table-column prop="examPlace" label="考点"> </el-table-column>
-        <el-table-column prop="examRoom" label="考场"> </el-table-column>
-        <el-table-column prop="packageCode" label="卷袋号"> </el-table-column>
-        <el-table-column prop="courseNameCode" label="课程(代码)">
+        <el-table-column prop="examDate" label="考试日期" width="100">
         </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="totalSubjects" label="科次" width="80">
+        <el-table-column prop="examTime" label="考试时间" width="100">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
+        <el-table-column prop="examPlace" label="考点" min-width="100">
+        </el-table-column>
+        <el-table-column prop="examRoom" label="考场" min-width="100">
+        </el-table-column>
+        <el-table-column prop="packageCode" label="卷袋号" min-width="160">
+        </el-table-column>
+        <el-table-column
+          prop="courseNameCode"
+          label="课程(代码)"
+          min-width="200"
+        >
+        </el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="totalSubjects" label="科次" width="60">
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'preview')"

+ 24 - 6
src/modules/print/views/PlanLinkPaper.vue

@@ -84,19 +84,32 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
         <el-table-column
           prop="printPlanName"
           label="印刷计划"
+          min-width="200"
         ></el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="courseName" label="课程(代码)">
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
           <span slot-scope="scope"
             >{{ scope.row.courseName }}({{ scope.row.courseCode }})</span
           >
         </el-table-column>
-        <el-table-column prop="userName" label="命题老师" width="100">
+        <el-table-column prop="userName" label="命题老师" min-width="100">
         </el-table-column>
         <el-table-column prop="exposedPaperType" label="已曝光类型" width="100">
           <span slot-scope="scope">{{
@@ -124,7 +137,12 @@
         </el-table-column>
         <el-table-column prop="totalSubjects" label="总科次" width="80">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'edit')"

+ 29 - 8
src/modules/print/views/PrintPlanManage.vue

@@ -83,15 +83,27 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
-        <el-table-column prop="name" label="印刷计划"></el-table-column>
-        <el-table-column prop="examStartTime" label="考试开始时间">
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="name"
+          label="印刷计划"
+          min-width="200"
+        ></el-table-column>
+        <el-table-column prop="examStartTime" label="考试开始时间" width="170">
           <span slot-scope="scope">{{
             scope.row.examStartTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="examEndTime" label="考试结束时间">
+        <el-table-column prop="examEndTime" label="考试结束时间" width="170">
           <span slot-scope="scope">{{
             scope.row.examEndTime | timestampFilter
           }}</span>
@@ -107,13 +119,22 @@
         </el-table-column>
         <el-table-column prop="totalPackages" label="总卷袋数" width="100">
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间">
+        <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="140">
+        <el-table-column
+          prop="createName"
+          label="创建人"
+          min-width="100"
+        ></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', 'preview')"

+ 45 - 13
src/modules/print/views/PrintTaskManage.vue

@@ -183,14 +183,31 @@
           width="60"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"></el-table-column>
-        <el-table-column prop="packageCode" label="卷袋编号"></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="学期"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examName"
+          label="考试"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="packageCode"
+          label="卷袋编号"
+          min-width="160"
+        ></el-table-column>
         <el-table-column
           prop="printPlanName"
           label="印刷计划"
+          min-width="200"
+        ></el-table-column>
+        <el-table-column
+          prop="printHouseName"
+          label="印刷室"
+          min-width="160"
         ></el-table-column>
-        <el-table-column prop="printHouseName" label="印刷室"></el-table-column>
         <el-table-column
           prop="examDate"
           label="考试日期"
@@ -201,11 +218,27 @@
           label="考试时间"
           width="100"
         ></el-table-column>
-        <el-table-column prop="courseNameCode" label="课程(代码)">
+        <el-table-column
+          prop="courseNameCode"
+          label="课程(代码)"
+          min-width="200"
+        >
         </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
-        <el-table-column prop="examPlace" label="考点"></el-table-column>
-        <el-table-column prop="examRoom" label="考场"></el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="examPlace"
+          label="考点"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="examRoom"
+          label="考场"
+          min-width="100"
+        ></el-table-column>
         <el-table-column
           prop="singlePagesA3"
           label="单科次准印量A3(页)"
@@ -234,17 +267,17 @@
         <el-table-column prop="validate" label="是否校验" width="80">
           <span slot-scope="scope">{{ scope.row.validate ? "是" : "否" }}</span>
         </el-table-column>
-        <el-table-column prop="printStartTime" label="打印开始时间" width="160">
+        <el-table-column prop="printStartTime" label="打印开始时间" width="170">
           <span slot-scope="scope">{{
             scope.row.printStartTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="printEndTime" label="打印完成时间" width="160">
+        <el-table-column prop="printEndTime" label="打印完成时间" width="170">
           <span slot-scope="scope">{{
             scope.row.printEndTime | timestampFilter
           }}</span>
         </el-table-column>
-        <el-table-column prop="normal" label="任务状态">
+        <el-table-column prop="normal" label="任务状态" width="80">
           <span slot-scope="scope">{{
             scope.row.normal ? "正常" : "作废"
           }}</span>
@@ -252,9 +285,8 @@
         <el-table-column
           class-name="action-column"
           label="操作"
-          width="100"
+          width="160"
           fixed="right"
-          align="center"
         >
           <template slot-scope="scope">
             <el-button

+ 46 - 9
src/modules/stmms/views/ScoreArchive.vue

@@ -78,20 +78,57 @@
           width="70"
           :index="indexMethod"
         ></el-table-column>
-        <el-table-column prop="semesterName" label="考试时间"></el-table-column>
-        <el-table-column prop="name" label="姓名" width="120"></el-table-column>
-        <el-table-column prop="studentCode" label="学号"></el-table-column>
-        <el-table-column prop="examNumber" label="准考证号"></el-table-column>
-        <el-table-column prop="orgName" label="院系"></el-table-column>
-        <el-table-column prop="majorName" label="专业"></el-table-column>
-        <el-table-column prop="clazzName" label="班级"></el-table-column>
-        <el-table-column prop="courseName" label="课程名"></el-table-column>
+        <el-table-column
+          prop="semesterName"
+          label="考试时间"
+          width="200"
+        ></el-table-column>
+        <el-table-column
+          prop="name"
+          label="姓名"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="studentCode"
+          label="学号"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="examNumber"
+          label="准考证号"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="orgName"
+          label="院系"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="majorName"
+          label="专业"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="clazzName"
+          label="班级"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column
+          prop="courseName"
+          label="课程名"
+          min-width="160"
+        ></el-table-column>
         <el-table-column
           prop="totalScore"
           label="成绩"
           width="80"
         ></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="160px">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="160px"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="checkPrivilege('link', 'Preview')"

+ 7 - 3
src/modules/stmms/views/SyncManage.vue

@@ -61,7 +61,6 @@
         <el-table-column
           prop="thirdRelateId"
           label="云阅卷考试ID"
-          width="110"
         ></el-table-column>
         <el-table-column prop="objectId" label="同步对象ID"></el-table-column>
         <el-table-column prop="type" label="类别"></el-table-column>
@@ -84,7 +83,7 @@
             <p v-else class="color-success">{{ scope.row.resultStr }}</p>
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" width="180">
+        <el-table-column prop="createTime" label="创建时间" width="170">
           <span slot-scope="scope">{{
             scope.row.createTime | timestampFilter
           }}</span>
@@ -94,7 +93,12 @@
           label="创建人"
           width="140"
         ></el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="100">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="100"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               v-if="scope.row.hasReportFile && checkPrivilege('link', 'export')"

+ 14 - 4
src/modules/stmms/views/UploadStructure.vue

@@ -28,18 +28,23 @@
         <el-table-column
           prop="thirdRelateId"
           label="云阅卷考试ID"
-          width="120"
+          min-width="160"
         ></el-table-column>
         <el-table-column
           prop="thirdRelateName"
           label="云阅卷考试名称"
+          min-width="160"
         ></el-table-column>
-        <el-table-column prop="courseName" label="课程(代码)">
+        <el-table-column prop="courseName" label="课程(代码)" min-width="200">
           <span slot-scope="scope">
             {{ scope.row.courseName }}({{ scope.row.courseCode }})
           </span>
         </el-table-column>
-        <el-table-column prop="paperNumber" label="试卷编号"></el-table-column>
+        <el-table-column
+          prop="paperNumber"
+          label="试卷编号"
+          min-width="160"
+        ></el-table-column>
         <el-table-column
           prop="paperType"
           label="试卷类型"
@@ -47,7 +52,12 @@
         ></el-table-column>
         <el-table-column prop="statusStr" label="状态" width="100">
         </el-table-column>
-        <el-table-column class-name="action-column" label="操作" width="220px">
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="220px"
+          fixed="right"
+        >
           <template slot-scope="scope">
             <el-button
               class="btn-primary"