ソースを参照

阅卷管理-f

zhangjie 1 年間 前
コミット
e7eb645c80

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

@@ -121,3 +121,14 @@ export const markQualityUpdate = (datas) => {
 export const markQualityChart = (datas) => {
   return $postParam("/api/admin/mark/quality/chart", datas);
 };
+// mark-detail-issue
+export const markIssueListPage = (datas) => {
+  return $postParam("/api/admin/mark/problem/list", datas);
+};
+export const markIssueReset = (datas) => {
+  return $postParam("/api/admin/mark/problem/reset", datas);
+};
+// mark-detail-arbitration
+export const markArbitrationListPage = (datas) => {
+  return $postParam("/api/admin/mark/arbitrate/list", datas);
+};

+ 157 - 0
src/modules/mark/components/markDetail/MarkDetailArbitration.vue

@@ -0,0 +1,157 @@
+<template>
+  <div class="mark-detail-arbitration">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="评阅题目">
+          <el-select
+            v-model="filter.groupQuestion"
+            placeholder="评阅题目"
+            clearable
+          >
+            <el-option :value="1">班级1</el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" @click="search">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          :disabled="!multipleSelection.length"
+          @click="toDone(multipleSelection)"
+        >
+          批量处理
+        </el-button>
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
+        <el-table-column prop="studentName" label="姓名" min-width="100">
+        </el-table-column>
+        <el-table-column
+          prop="studentCode"
+          label="学号"
+          width="180"
+        ></el-table-column>
+        <el-table-column
+          prop="groupQuestions"
+          label="评阅题目"
+          min-width="200"
+        ></el-table-column>
+        <el-table-column
+          prop="statusName"
+          label="状态"
+          width="100"
+        ></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="updateUserName"
+          label="处理人"
+          min-width="160"
+        ></el-table-column>
+        <el-table-column prop="updateTime" label="处理时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.updateTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="80"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toDone([scope.row])"
+              >处理</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total, sizes, prev, pager, next, jumper"
+          :pager-count="5"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+          @size-change="pageSizeChange"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { markArbitrationListPage } from "../api";
+
+export default {
+  name: "mark-detail-arbitration",
+  props: {
+    baseInfo: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      filter: {
+        groupQuestion: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      multipleSelection: [],
+    };
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await markArbitrationListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    search() {
+      this.toPage(1);
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    toDone(data) {
+      // TODO: 处理
+      console.log(data);
+    },
+  },
+};
+</script>

+ 234 - 0
src/modules/mark/components/markDetail/MarkDetailIssue.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="mark-detail-issue">
+    <div class="part-box part-box-filter part-box-flex">
+      <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
+        <el-form-item label="类型">
+          <el-select v-model="filter.problemType" placeholder="类型" clearable>
+            <el-option :value="1">班级1</el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="评阅题目">
+          <el-select
+            v-model="filter.groupQuestion"
+            placeholder="评阅题目"
+            clearable
+          >
+            <el-option :value="1">班级1</el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="状态">
+          <el-select v-model="filter.status" placeholder="状态" clearable>
+            <el-option :value="1">已处理</el-option>
+            <el-option :value="0">未处理</el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="密号">
+          <el-input
+            v-model.trim="filter.secretNumber"
+            placeholder="密号"
+            clearable
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item label-width="0px">
+          <el-button type="primary" @click="search">查询</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="part-box-action">
+        <el-button
+          type="primary"
+          :disabled="!multipleSelection.length"
+          @click="toBatchReset"
+        >
+          重置
+        </el-button>
+        <el-button
+          type="primary"
+          :disabled="!multipleSelection.length"
+          @click="toDone(multipleSelection)"
+        >
+          批量处理
+        </el-button>
+      </div>
+    </div>
+
+    <div class="part-box part-box-pad">
+      <el-table
+        ref="TableList"
+        :data="dataList"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column
+          type="selection"
+          width="55"
+          align="center"
+        ></el-table-column>
+        <el-table-column prop="studentName" label="姓名" min-width="100">
+        </el-table-column>
+        <el-table-column
+          prop="studentCode"
+          label="学号"
+          width="180"
+        ></el-table-column>
+        <el-table-column
+          prop="secretNumber"
+          label="密号"
+          width="180"
+        ></el-table-column>
+        <el-table-column
+          prop="userName"
+          label="评卷员"
+          min-width="100"
+        ></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="problemTypeName"
+          label="问题类型"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          prop="updateUserName"
+          label="处理人"
+          min-width="100"
+        ></el-table-column>
+        <el-table-column prop="updateTime" label="处理时间" width="170">
+          <span slot-scope="scope">{{
+            scope.row.updateTime | timestampFilter
+          }}</span>
+        </el-table-column>
+        <el-table-column
+          prop="statusName"
+          label="状态"
+          width="100"
+        ></el-table-column>
+        <el-table-column
+          class-name="action-column"
+          label="操作"
+          width="120"
+          fixed="right"
+        >
+          <template slot-scope="scope">
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toSimpleReset(scope.row)"
+              >重置</el-button
+            >
+            <el-button
+              class="btn-primary"
+              type="text"
+              @click="toDone([scope.row])"
+              >处理</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="part-page">
+        <el-pagination
+          background
+          layout="total, sizes, prev, pager, next, jumper"
+          :pager-count="5"
+          :current-page="current"
+          :total="total"
+          :page-size="size"
+          @current-change="toPage"
+          @size-change="pageSizeChange"
+        >
+        </el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { markIssueListPage, markIssueReset } from "../api";
+
+export default {
+  name: "mark-detail-issue",
+  props: {
+    baseInfo: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
+  },
+  data() {
+    return {
+      filter: {
+        problemType: "",
+        groupQuestion: "",
+        status: "",
+        secretNumber: "",
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
+      dataList: [],
+      multipleSelection: [],
+      chartData: {},
+    };
+  },
+  methods: {
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size,
+      };
+      const data = await markIssueListPage(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
+    search() {
+      this.toPage(1);
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    async toBatchReset() {
+      if (!this.multipleSelection.length) return;
+
+      const confirm = await this.$confirm(
+        "确定要重置选中的问题卷吗?",
+        "提示",
+        {
+          type: "warning",
+        }
+      ).catch(() => {});
+      if (confirm !== "confirm") return;
+
+      this.toReset(this.multipleSelection.map((item) => item.id));
+    },
+    async toSimpleReset(row) {
+      const confirm = await this.$confirm("确定要重置当前问题卷吗?", "提示", {
+        type: "warning",
+      }).catch(() => {});
+      if (confirm !== "confirm") return;
+
+      this.toReset([row.id]);
+    },
+    async toReset(taskIds) {
+      if (!taskIds.length) return;
+
+      await markIssueReset({
+        taskIds,
+      });
+      this.$message.success("操作成功!");
+      this.getList();
+    },
+    toDone(data) {
+      // TODO: 处理
+      console.log(data);
+    },
+  },
+};
+</script>