zhangjie 3 лет назад
Родитель
Сommit
f23e34db2e

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

@@ -81,6 +81,18 @@ export const updateAnalysisBatch = datas => {
 export const deleteAnalysisBatch = ids => {
   return $post("/api/admin/sys/org/list", { ids });
 };
+export const analysisBatchPaperList = datas => {
+  return $postParam("/api/admin/sys/org/list", datas);
+};
+export const addAnalysisBatchPaper = datas => {
+  return $postParam("/api/admin/sys/org/list", datas);
+};
+export const deleteAnalysisBatchPaper = ids => {
+  return $postParam("/api/admin/sys/org/list", { ids });
+};
+export const analysisPaperList = datas => {
+  return $postParam("/api/admin/sys/org/list", datas);
+};
 
 // common
 export const uploadFile = datas => {

+ 118 - 91
src/modules/base/components/ModifyAnalysisBatchPaper.vue

@@ -1,96 +1,122 @@
 <template>
-  <el-dialog
-    class="modify-analysis-batch"
-    :visible.sync="modalIsShow"
-    :title="title"
-    top="0px"
-    width="80%"
-    :close-on-click-modal="false"
-    :close-on-press-escape="false"
-    append-to-body
-    @opened="visibleChange"
-  >
-    <div class="part-box part-box-filter part-box-flex">
-      <el-form ref="FilterForm" label-position="left" label-width="55px" inline>
-        <el-form-item label="学期:">
-          <semester-select v-model="filter.semester"></semester-select>
-        </el-form-item>
-        <el-form-item label="考试:">
-          <exam-select
-            v-model="filter.examId"
-            :semester="filter.semester"
-          ></exam-select>
-        </el-form-item>
-        <el-form-item label="课程:">
-          <course-select
-            v-model="filter.courseCode"
-            :exam-id="filter.examId"
-            inspect
-          ></course-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" @click="toPage(1)">查询</el-button>
-        </el-form-item>
-      </el-form>
-      <div class="part-box-action">
-        <el-button type="danger" :loading="loading" @click="toBatchDelete"
-          >批量删除</el-button
+  <div class="modify-analysis-batch">
+    <el-dialog
+      :visible.sync="modalIsShow"
+      :title="title"
+      top="0px"
+      width="80%"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @opened="visibleChange"
+    >
+      <div class="part-box part-box-filter part-box-flex">
+        <el-form
+          ref="FilterForm"
+          label-position="left"
+          label-width="55px"
+          inline
         >
-        <el-button type="primary" @click="toAdd">添加分析试卷</el-button>
+          <el-form-item label="学期:">
+            <semester-select v-model="filter.semester"></semester-select>
+          </el-form-item>
+          <el-form-item label="考试:">
+            <exam-select
+              v-model="filter.examId"
+              :semester="filter.semester"
+            ></exam-select>
+          </el-form-item>
+          <el-form-item label="课程:">
+            <course-select
+              v-model="filter.courseCode"
+              :exam-id="filter.examId"
+              inspect
+            ></course-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" @click="toPage(1)">查询</el-button>
+          </el-form-item>
+        </el-form>
+        <div class="part-box-action">
+          <el-button type="danger" :loading="loading" @click="toBatchDelete"
+            >批量删除</el-button
+          >
+          <el-button type="primary" @click="toAdd">添加分析试卷</el-button>
+        </div>
       </div>
-    </div>
-    <div class="part-box part-box-pad">
-      <el-table
-        ref="TableList"
-        :data="tasks"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column prop="semester" label="学期"></el-table-column>
-        <el-table-column prop="examName" label="考试"> </el-table-column>
-        <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
-          <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="paperType" label="试卷类型"> </el-table-column>
-        <el-table-column prop="teachName" label="命题老师"> </el-table-column>
-        <el-table-column
-          class-name="action-column"
-          label="操作"
-          width="160px"
-          align="center"
+      <div class="part-box part-box-pad">
+        <el-table
+          ref="TableList"
+          :data="dataList"
+          @selection-change="handleSelectionChange"
         >
-          <template slot-scope="scope">
-            <el-button
-              class="btn-danger"
-              type="text"
-              :disabled="loading"
-              @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>
+          <el-table-column prop="semester" label="学期"></el-table-column>
+          <el-table-column prop="examName" label="考试"> </el-table-column>
+          <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
+            <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="paperType" label="试卷类型"> </el-table-column>
+          <el-table-column prop="teachName" label="命题老师"> </el-table-column>
+          <el-table-column
+            class-name="action-column"
+            label="操作"
+            width="160px"
+            align="center"
+          >
+            <template slot-scope="scope">
+              <el-button
+                class="btn-danger"
+                type="text"
+                :disabled="loading"
+                @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>
-    </div>
-    <div slot="footer"></div>
-  </el-dialog>
+      <div slot="footer"></div>
+    </el-dialog>
+
+    <!-- SelectAnalysisPaper -->
+    <select-analysis-paper
+      ref="SelectAnalysisPaper"
+      :batch-id="instance.id"
+      @modified="getList"
+    ></select-analysis-paper>
+  </div>
 </template>
 
 <script>
+import { analysisBatchPaperList, deleteAnalysisBatchPaper } from "../api";
+import SelectAnalysisPaper from "./SelectAnalysisPaper.vue";
+
 export default {
   name: "modify-analysis-batch-paper",
+  components: { SelectAnalysisPaper },
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      }
+    }
+  },
   data() {
     return {
       modalIsShow: false,
@@ -102,8 +128,8 @@ export default {
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
-      tasks: [],
-      curTask: {},
+      dataList: [],
+      curRow: {},
       multipleSelection: [],
       loading: false
     };
@@ -117,11 +143,12 @@ export default {
     async getList() {
       const datas = {
         ...this.filter,
+        batchId: this.instance.id,
         pageNumber: this.current,
         pageSize: this.size
       };
-      const data = await dataInitList(datas);
-      this.tasks = data.records;
+      const data = await analysisBatchPaperList(datas);
+      this.dataList = data.records;
       this.total = data.total;
     },
     toPage(page) {
@@ -138,18 +165,18 @@ export default {
         return;
       }
 
-      const confirm = await this.$confirm(`确定要删除选中的批次吗?`, "提示", {
+      const confirm = await this.$confirm(`确定要删除选中的试卷吗?`, "提示", {
         type: "warning"
       }).catch(() => {});
       if (confirm !== "confirm") return;
 
-      await deleteAnalysisBatch(this.multipleSelection);
+      await deleteAnalysisBatchPaper(this.multipleSelection);
       this.$message.success("删除成功!");
       this.deletePageLastItem();
     },
     async toDelete(row) {
       const confirm = await this.$confirm(
-        `确定要删除批次【${row.name}】吗?`,
+        `确定要删除试卷【${row.paperNumber}】吗?`,
         "提示",
         {
           type: "warning"
@@ -157,7 +184,7 @@ export default {
       ).catch(() => {});
       if (confirm !== "confirm") return;
 
-      await deleteAnalysisBatch([row.id]);
+      await deleteAnalysisBatchPaper([row.id]);
       this.$message.success("删除成功!");
       this.deletePageLastItem();
     }

+ 84 - 3
src/modules/base/components/SelectAnalysisPaper.vue

@@ -89,7 +89,7 @@
       </div>
     </div>
     <div v-else class="part-box part-box-pad">
-      <el-table ref="TableList" :data="selectedPapers">
+      <el-table ref="SelectedTableList" :data="selectedPapers">
         <el-table-column prop="semester" label="学期"></el-table-column>
         <el-table-column prop="examName" label="考试"> </el-table-column>
         <el-table-column prop="courseCode" label="课程(代码)" min-width="120">
@@ -104,7 +104,7 @@
         <el-table-column
           class-name="action-column"
           label="操作"
-          width="160px"
+          width="80px"
           align="center"
         >
           <template slot-scope="scope">
@@ -118,15 +118,38 @@
         </el-table-column>
       </el-table>
     </div>
+
+    <div slot="footer">
+      <el-button type="primary" :loading="isSubmit" @click="submit"
+        >确认</el-button
+      >
+      <el-button type="danger" @click="cancel" plain>取消</el-button>
+    </div>
   </el-dialog>
 </template>
 
 <script>
+import { analysisPaperList, addAnalysisBatchPaper } from "../api";
+
 export default {
   name: "select-analysis-paper",
+  props: {
+    batchId: {
+      type: String
+    }
+  },
   data() {
     return {
       modalIsShow: false,
+      filter: {
+        semester: "",
+        examId: "",
+        courseCode: "",
+        name: ""
+      },
+      current: 1,
+      size: this.GLOBAL.pageSize,
+      total: 0,
       curTab: "query",
       tabs: [
         {
@@ -140,12 +163,50 @@ export default {
       ],
       dataList: [],
       selectedPapers: [],
-      selectedPaperIds: []
+      selectedPaperIds: [],
+      isSubmit: false
     };
   },
   methods: {
+    visibleChange() {
+      this.curTab = "query";
+      this.selectedPapers = [];
+      this.selectedPaperIds = [];
+    },
+    cancel() {
+      this.modalIsShow = false;
+    },
+    open() {
+      this.modalIsShow = true;
+    },
+    async getList() {
+      const datas = {
+        ...this.filter,
+        pageNumber: this.current,
+        pageSize: this.size
+      };
+      const data = await analysisPaperList(datas);
+      this.dataList = data.records;
+      this.total = data.total;
+
+      this.$nextTick(() => this.changeCurListSelect());
+    },
+    changeCurListSelect() {
+      const curPageSelectedList = this.dataList.filter(item =>
+        this.selectedPaperIds.includes(item.id)
+      );
+      this.$refs.TableList.clearSelection();
+      this.$refs.TableList.toggleRowSelection(curPageSelectedList, true);
+    },
+    toPage(page) {
+      this.current = page;
+      this.getList();
+    },
     selectMenu(tab) {
       this.curTab = tab;
+      if (tab === "query") {
+        this.$nextTick(() => this.changeCurListSelect());
+      }
     },
     toDelete(row) {
       this.selectedPapers = this.selectedPapers.filter(
@@ -170,6 +231,26 @@ export default {
         }
       });
       this.updateSelectedIds();
+    },
+    async submit() {
+      if (!this.selectedPapers.length) {
+        this.$message.error("请选择试卷");
+        return;
+      }
+
+      if (this.isSubmit) return;
+      this.isSubmit = true;
+
+      const res = await addAnalysisBatchPaper({
+        batchId: this.batchId,
+        paperIds: this.selectedPaperIds
+      }).catch(() => {});
+      this.isSubmit = false;
+      if (!res) return;
+
+      this.$message.success("添加成功!");
+      this.cancel();
+      this.$emit("modified");
     }
   }
 };

+ 15 - 8
src/modules/base/views/AnalysisBatchManage.vue

@@ -30,7 +30,7 @@
     <div class="part-box part-box-pad">
       <el-table
         ref="TableList"
-        :data="tasks"
+        :data="dataList"
         @selection-change="handleSelectionChange"
       >
         <el-table-column
@@ -87,9 +87,14 @@
     <!-- ModifyAnalysisBatch -->
     <modify-analysis-batch
       ref="ModifyAnalysisBatch"
-      :instance="curTask"
+      :instance="curRow"
       @modified="getList"
     ></modify-analysis-batch>
+    <!-- ModifyAnalysisBatchPaper -->
+    <modify-analysis-batch-paper
+      ref="ModifyAnalysisBatchPaper"
+      :instance="curRow"
+    ></modify-analysis-batch-paper>
   </div>
 </template>
 
@@ -101,10 +106,11 @@ import {
 } from "../api";
 
 import ModifyAnalysisBatch from "../components/ModifyAnalysisBatch.vue";
+import ModifyAnalysisBatchPaper from "../components/ModifyAnalysisBatchPaper.vue";
 
 export default {
   name: "analysis-batch-manage",
-  components: { ModifyAnalysisBatch },
+  components: { ModifyAnalysisBatch, ModifyAnalysisBatchPaper },
   data() {
     return {
       filter: {
@@ -113,8 +119,8 @@ export default {
       current: 1,
       size: this.GLOBAL.pageSize,
       total: 0,
-      tasks: [],
-      curTask: {},
+      dataList: [],
+      curRow: {},
       batchs: [],
       loading: false,
       multipleSelection: []
@@ -136,7 +142,7 @@ export default {
         pageSize: this.size
       };
       const data = await analysisBatchList(datas);
-      this.tasks = data.records;
+      this.dataList = data.records;
       this.total = data.total;
     },
     toPage(page) {
@@ -163,11 +169,12 @@ export default {
       this.deletePageLastItem();
     },
     toAdd() {
-      this.curTask = {};
+      this.curRow = {};
       this.$refs.ModifyAnalysisBatch.open();
     },
     toAddCourse(row) {
-      console.log(row);
+      this.curRow = row;
+      this.$refs.ModifyAnalysisBatchPaper.open();
     },
     toCalc(row) {
       console.log(row);