谢杰标 2 سال پیش
والد
کامیت
20306115be

+ 9 - 0
src/api/resource/volumeManagement.js

@@ -36,3 +36,12 @@ export function questionBatchDel(data) {
         data
     })
 }
+
+// 知识点列表
+export function knowledgeList(query) {
+    return request({
+        url: `/exam/knowledge/list`,
+        method: 'get',
+        params: query
+    })
+}

+ 151 - 44
src/views/resource/bankManagement/testPaperManagement/PaperSort.vue

@@ -1,47 +1,63 @@
 <template>
   <div class="sort_box margin_bs">
     试卷排序:
-    <el-radio-group v-model="formData.paperSort">
-      <el-radio :label="0">顺序</el-radio>
-      <el-radio :label="1">随机</el-radio>
+    <el-radio-group v-model="form.type">
+      <el-radio :label="1">顺序</el-radio>
+      <el-radio :label="2">随机</el-radio>
     </el-radio-group>
     <ul>
       <li v-for="(item, index) in list" :key="index">
         <span>{{ item.name }}</span>
-        <el-radio v-model="form['radio1' + index]" label="1">取题</el-radio>
+        <el-radio v-model="radio" :label="1">取题</el-radio>
         <el-input-number
           style="margin: 0px 6px; width: 100px"
-          v-model="passScore"
+          v-model="form[item.key].qnum"
+          @blur="blur(form[item.key], 'qnum')"
           controls-position="right"
           :min="0"
           size="mini"
         ></el-input-number>
         <el-radio
-          v-model="form['radio' + index]"
-          label="1"
-          :disabled="form.radio0 == 0 && index != 0"
+          v-model="form[item.key].randomNum"
+          :label="1"
+          :disabled="form[item.key].randomNum == 0 && index != 0"
           >顺序</el-radio
         >
         <el-input-number
           style="margin: 0px 6px; width: 100px"
-          v-model="passScore"
+          v-model="form[item.key].orderNum"
           controls-position="right"
-          :min="0"
+          @blur="blur(form[item.key], 'orderNum')"
+          :min="1"
+          :max="3"
           size="mini"
         ></el-input-number>
         <el-radio
-          v-model="form['radio' + index]"
-          label="0"
+          v-model="form[item.key].randomNum"
+          :label="0"
           :disabled="
-            formData.paperSort == 0 || (form.radio0 == 1 && index != 0)
+            form.type == 1 || (form[item.key].randomNum == 1 && index != 0)
           "
           >随机</el-radio
         >
+        <template v-if="form[item.key].knowledIds.length">
+          <el-radio v-model="radio" :label="1">知识点取题</el-radio>
+          <el-input-number
+            style="margin: 0px 6px; width: 100px"
+            v-model="form[item.key].knum"
+            @blur="blur(form[item.key], 'knum')"
+            controls-position="right"
+            :min="0"
+            :max="form[item.key].qnum"
+            size="mini"
+          ></el-input-number>
+        </template>
+
         <el-button
           type="primary"
           icon="el-icon-plus"
           size="mini"
-          @click="handelClick"
+          @click="handelClick(item.key)"
           >更多</el-button
         >
       </li>
@@ -58,71 +74,162 @@
         ref="table"
         :data="tableData"
         border
-        @selection-change="selectionChange"
+        @select="select"
+        @select-all="select"
+        row-key="knowledgeId"
       >
-        <el-table-column type="selection" width="55" align="center">
+        <el-table-column
+          :reserve-selection="true"
+          type="selection"
+          width="55"
+          align="center"
+        >
         </el-table-column>
         <el-table-column type="index" label="序号" width="50" align="center">
         </el-table-column>
         <el-table-column
-          prop="name"
+          prop="knowledgeName"
           label="知识点标题"
           align="center"
           show-overflow-tooltip
         >
         </el-table-column>
       </el-table>
+      <el-pagination
+        style="margin: 20px 0 0 200px"
+        @current-change="getKnowledgeList"
+        :current-page.sync="params.pageNum"
+        :page-size="params.pageSize"
+        layout="total, prev, pager, next"
+        :total="total"
+      >
+      </el-pagination>
     </Base-dialog>
   </div>
 </template>
 
 <script>
+import { knowledgeList } from "@/api/resource/volumeManagement";
 export default {
   props: {
-    // formData: {
-    //   type: Object,
-    // },
+    formData: {
+      type: String,
+      default: "",
+    },
   },
   data() {
     return {
       isShow: false,
-      formData: {
-        paperSort: 0,
-      },
-      passScore: "",
-      list: [{ name: "单选题" }, { name: "多选题" }, { name: "案例题" }],
+      list: [
+        { name: "单选题", key: "caseQuestion" },
+        { name: "多选题", key: "multipleChoice" },
+        { name: "案例题", key: "singleChoice" },
+      ],
       tableData: [{ name: 1 }],
       selectList: [],
-      form: {
-        radio10: "1",
-        radio11: "1",
-        radio12: "1",
-        radio0: "2",
-        radio1: "2",
-        radio2: "2",
-      },
+      form: {},
+      radio: 1,
+      params: {},
+      total: 0,
+      key: "",
     };
   },
-  mounted() {},
   methods: {
-    handelClick() {
+    blur(item, key) {
+      if (!item[key]) {
+        item[key] = 0;
+      }
+    },
+    handleSizeChange(v) {
+      this.params = {
+        pageNum: 1,
+        pageSize: v,
+      };
+      this.getKnowledgeList();
+    },
+    handleCurrentChange(v) {
+      this.params.pageNum = v;
+      this.getKnowledgeList();
+    },
+    handelClick(key) {
       this.isShow = true;
+      this.key = key;
+      this.params = {
+        pageNum: 1,
+        pageSize: 10,
+      };
+      this.$nextTick(() => {
+        this.$refs.table.clearSelection();
+      });
+      this.getKnowledgeList();
     },
     submit(e) {
-      console.log(this.selectList);
+      this.isShow = false;
+    },
+    select(val) {
+      this.form[this.key].knowledIds = val.map((e) => e.knowledgeId);
+    },
+    getKnowledgeList() {
+      knowledgeList(this.params).then(({ rows, total }) => {
+        this.tableData = rows;
+        this.total = total;
+        rows.forEach((item) => {
+          if (this.form[this.key].knowledIds.includes(item.knowledgeId)) {
+            this.$nextTick(() => {
+              this.$refs.table.toggleRowSelection(item, true);
+            });
+          }
+        });
+      });
+    },
+    initform() {
+      this.form = {
+        caseQuestion: {
+          knowledIds: [],
+          knum: 0,
+          orderNum: 1,
+          qnum: 0,
+          randomNum: 1,
+        },
+        multipleChoice: {
+          knowledIds: [],
+          knum: 0,
+          orderNum: 2,
+          qnum: 0,
+          randomNum: 1,
+        },
+        singleChoice: {
+          knowledIds: [],
+          knum: 0,
+          orderNum: 3,
+          qnum: 0,
+          randomNum: 1,
+        },
+        type: 1,
+      };
     },
-    selectionChange(val) {
-      this.selectList = val;
-      console.log(val);
+    init() {
+      this.initform();
     },
   },
   watch: {
-    isShow(val) {
-      if (val) {
-        this.$nextTick(() => {
-          this.$refs.table.toggleRowSelection(this.tableData[0], true);
+    "form.caseQuestion.randomNum": {
+      handler(val) {
+        this.list.forEach((ele) => {
+          this.form[ele.key].randomNum = val;
         });
-      }
+      },
+    },
+    formData: {
+      handler(val) {
+        if (!val) {
+          this.init();
+        } else {
+          this.form = JSON.parse(val);
+        }
+      },
+      deep: true,
+      immediate: true,
     },
   },
 };

+ 75 - 63
src/views/resource/bankManagement/testPaperManagement/addPaper/topicAddPaper/index.vue

@@ -26,7 +26,10 @@
             @click="$refs.batchPop.openBoxs(tableData, businObj, 2)"
             type="success"
             >Word批量导入</el-button
-          ><el-button size="medium" @click="$refs.batchPop.openBoxs(tableData, businObj, 1)" type="success"
+          ><el-button
+            size="medium"
+            @click="$refs.batchPop.openBoxs(tableData, businObj, 1)"
+            type="success"
             >Excel批量导入</el-button
           ><el-button size="medium" @click="delAll" type="danger"
             >批量删除</el-button
@@ -342,7 +345,7 @@
       </el-dialog>
       <el-dialog
         :visible.sync="diansBoxStatus"
-        width="960px"
+        width="1000px"
         :show-close="false"
         :close-on-click-modal="false"
       >
@@ -357,63 +360,64 @@
           </div>
         </div>
         <div>
-          <div class="dis_fos">
-            <div>
-              <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
-              <div class="margin_bs" v-if="examsType === 2">
-                及格分数:<el-input-number
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="passScore"
-                  controls-position="right"
-                  :min="0"
-                  size="mini"
-                ></el-input-number>
-              </div>
-              <div class="margin_bs" v-if="examsType === 2">
-                答卷时长:
-                <el-radio-group v-model="djTimeType">
-                  <el-radio :label="0">无限时长</el-radio>
-                  <el-radio :label="1">有限时长</el-radio>
-                </el-radio-group>
-                <el-input-number
-                  v-if="djTimeType === 1"
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="djTime"
-                  controls-position="right"
-                  :min="1"
-                  size="mini"
-                ></el-input-number
-                ><span v-if="djTimeType === 1">分钟</span>
-              </div>
-              <div class="margin_bs">
-                答卷次数:
-                <el-radio-group v-model="djNumType">
-                  <el-radio :label="0">无限次</el-radio>
-                  <el-radio :label="1">有限次</el-radio>
-                </el-radio-group>
-                <el-input-number
-                  v-if="djNumType === 1"
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="djNum"
-                  controls-position="right"
-                  :min="1"
-                  size="mini"
-                ></el-input-number>
-              </div>
-              <div class="margin_bs">
+          <div>
+            <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
+            <div class="margin_bs" v-if="examsType === 2">
+              及格分数:<el-input-number
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="passScore"
+                controls-position="right"
+                :min="0"
+                size="mini"
+              ></el-input-number>
+            </div>
+            <Paper-sort ref="papersort" v-if="examsType == 2"></Paper-sort>
+            <div class="margin_bs" v-if="examsType === 2">
+              答卷时长:
+              <el-radio-group v-model="djTimeType">
+                <el-radio :label="0">无限时长</el-radio>
+                <el-radio :label="1">有限时长</el-radio>
+              </el-radio-group>
+              <el-input-number
+                v-if="djTimeType === 1"
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="djTime"
+                controls-position="right"
+                :min="1"
+                size="mini"
+              ></el-input-number
+              ><span v-if="djTimeType === 1">分钟</span>
+            </div>
+            <div class="margin_bs">
+              答卷次数:
+              <el-radio-group v-model="djNumType">
+                <el-radio :label="0">无限次</el-radio>
+                <el-radio :label="1">有限次</el-radio>
+              </el-radio-group>
+              <el-input-number
+                v-if="djNumType === 1"
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="djNum"
+                controls-position="right"
+                :min="1"
+                size="mini"
+              ></el-input-number>
+            </div>
+            <div class="margin_bs dis_fos">
+              <div>
                 做题类型:
                 <el-radio-group v-model="examsType">
                   <el-radio :label="1">练习</el-radio>
                   <el-radio :label="2">考试</el-radio>
                 </el-radio-group>
               </div>
-            </div>
-            <div class="margin_bs">
-              <el-button size="mini" @click="activeOpens"
-                >按选中设置分数</el-button
-              ><el-button size="mini" @click="activePicis"
-                >按题型设置分数</el-button
-              >
+              <div class="margin_bs">
+                <el-button size="mini" @click="activeOpens"
+                  >按选中设置分数</el-button
+                ><el-button size="mini" @click="activePicis"
+                  >按题型设置分数</el-button
+                >
+              </div>
             </div>
           </div>
           <el-table
@@ -675,6 +679,7 @@ import tableList from "@/components/tableList";
 import busIns from "@/components/busIns";
 import questionBank from "@/components/questionBank";
 import BatchImportPop from "../../BatchImportPop.vue";
+import PaperSort from "../../PaperSort.vue";
 export default {
   name: "TopicAddPaper",
   components: {
@@ -684,6 +689,7 @@ export default {
     busIns,
     questionBank,
     BatchImportPop,
+    PaperSort,
   },
   data() {
     return {
@@ -746,12 +752,12 @@ export default {
           prop: "type",
           hidden: true,
           scope: "topic",
-          width:"140px"
+          width: "140px",
         },
         {
           label: "标题前缀",
           prop: "prefixName",
-          hidden: false,
+          hidden: true,
         },
         {
           label: "题目详细",
@@ -775,7 +781,7 @@ export default {
           prop: "publishStatus",
           hidden: true,
           scope: "fabStatus",
-          width:"140px"
+          width: "140px",
         },
       ],
       tableData: [],
@@ -951,6 +957,7 @@ export default {
       localStart: false, //定时器是否已经开始
       pageId: "", //试卷ID
       uploadStatus: false, //是否同步预览
+      simulateConfigJson: '', //随机抽题目分组排序
     };
   },
   computed: {
@@ -1078,7 +1085,7 @@ export default {
             this.tableData = this.tableData.filter((item) => {
               return !dataIndedx.includes(item.index);
             });
-            this.$refs.tableList.clearMoreActive()
+            this.$refs.tableList.clearMoreActive();
             this.$message({
               type: "success",
               message: "删除成功!",
@@ -1092,6 +1099,7 @@ export default {
     },
     getInfos() {
       this.$api.obtainbankexam(this.$route.query.id).then((res) => {
+        console.log(res, "res");
         this.businObj = {
           businessId: res.data.businessId,
           businessName: res.data.businessName,
@@ -1106,6 +1114,7 @@ export default {
         this.djNum = res.data.answerNum;
         this.examsType = res.data.doType;
         this.passScore = res.data.passScore;
+        this.simulateConfigJson = res.data.simulateConfigJson || '';
       });
     },
     // --------------------------分割线---------------------------
@@ -1146,10 +1155,11 @@ export default {
             return item.index === v.index;
           });
           this.tableData.splice(index, 1);
-          if(this.$refs.tableList.allCheckData.length){
-            this.$refs.tableList.allCheckData = this.$refs.tableList.allCheckData.filter(item => {
-              return item.index !== v.index
-            })
+          if (this.$refs.tableList.allCheckData.length) {
+            this.$refs.tableList.allCheckData =
+              this.$refs.tableList.allCheckData.filter((item) => {
+                return item.index !== v.index;
+              });
           }
         })
         .catch(() => {
@@ -1677,7 +1687,7 @@ export default {
       }
       this.disabledBtn = true;
       var arrs = [];
-      for (let i = this.tableData.length-1; i >= 0; i--) {
+      for (let i = this.tableData.length - 1; i >= 0; i--) {
         if (self.tableData[i].questionId) {
           await self.uploadApis(self.tableData[i]);
         } else {
@@ -1690,13 +1700,15 @@ export default {
           score: self.tableData[i].score,
           partScore: self.tableData[i].partScore,
         });
-      } 
+      }
       var data = {
         examId: this.$route.query.id,
         questionList: arrs,
         status: 1,
         passScore: this.passScore,
         doType: this.examsType,
+        simulateConfigJson:
+          this.examsType === 2 ? this.$refs["papersort"].form : null,
       };
       if (this.djTimeType === 0) {
         data.answerTime = 0;

+ 67 - 57
src/views/resource/bankManagement/testPaperManagement/editPaper/topicEditPaper/index.vue

@@ -348,7 +348,7 @@
       </el-dialog>
       <el-dialog
         :visible.sync="diansBoxStatus"
-        width="960px"
+        width="1000px"
         :show-close="false"
         :close-on-click-modal="false"
       >
@@ -363,66 +363,71 @@
           </div>
         </div>
         <div>
-          <div class="dis_fos">
-            <div>
-              <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
-              <div class="margin_bs" v-if="examsType === 2">
-                及格分数:<el-input-number
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="passScore"
-                  controls-position="right"
-                  :min="0"
-                  size="mini"
-                ></el-input-number>
-              </div>
-              <Paper-sort></Paper-sort>
-              <div class="margin_bs" v-if="examsType === 2">
-                答卷时长:
-                <el-radio-group v-model="djTimeType">
-                  <el-radio :label="0">无限时长</el-radio>
-                  <el-radio :label="1">有限时长</el-radio>
-                </el-radio-group>
-                <el-input-number
-                  v-if="djTimeType === 1"
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="djTime"
-                  controls-position="right"
-                  :min="1"
-                  size="mini"
-                ></el-input-number
-                ><span v-if="djTimeType === 1">分钟</span>
-              </div>
-              <div class="margin_bs">
-                答卷次数:
-                <el-radio-group v-model="djNumType">
-                  <el-radio :label="0">无限次</el-radio>
-                  <el-radio :label="1">有限次</el-radio>
-                </el-radio-group>
-                <el-input-number
-                  v-if="djNumType === 1"
-                  style="margin: 0px 6px; width: 100px !important"
-                  v-model="djNum"
-                  controls-position="right"
-                  :min="1"
-                  size="mini"
-                ></el-input-number>
-              </div>
-              <div class="margin_bs">
+          <div>
+            <div class="margin_bs">当前总分:{{ getAllpocis }}</div>
+            <div class="margin_bs" v-if="examsType === 2">
+              及格分数:<el-input-number
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="passScore"
+                controls-position="right"
+                :min="0"
+                size="mini"
+              ></el-input-number>
+            </div>
+            <Paper-sort
+              ref="papersort"
+              v-if="examsType == 2"
+              :formData="simulateConfigJson"
+            ></Paper-sort>
+            <div class="margin_bs" v-if="examsType === 2">
+              答卷时长:
+              <el-radio-group v-model="djTimeType">
+                <el-radio :label="0">无限时长</el-radio>
+                <el-radio :label="1">有限时长</el-radio>
+              </el-radio-group>
+              <el-input-number
+                v-if="djTimeType === 1"
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="djTime"
+                controls-position="right"
+                :min="1"
+                size="mini"
+              ></el-input-number
+              ><span v-if="djTimeType === 1">分钟</span>
+            </div>
+            <div class="margin_bs">
+              答卷次数:
+              <el-radio-group v-model="djNumType">
+                <el-radio :label="0">无限次</el-radio>
+                <el-radio :label="1">有限次</el-radio>
+              </el-radio-group>
+              <el-input-number
+                v-if="djNumType === 1"
+                style="margin: 0px 6px; width: 100px !important"
+                v-model="djNum"
+                controls-position="right"
+                :min="1"
+                size="mini"
+              ></el-input-number>
+            </div>
+            <div class="margin_bs dis_fos">
+              <div>
                 做题类型:
                 <el-radio-group v-model="examsType">
                   <el-radio :label="1">练习</el-radio>
                   <el-radio :label="2">考试</el-radio>
                 </el-radio-group>
               </div>
-            </div>
-            <div class="margin_bs">
-              <el-button size="mini" @click="activeOpens"
-                >按选中设置分数</el-button
-              ><el-button size="mini" @click="activePicis"
-                >按题型设置分数</el-button
-              >
+              <div class="margin_bs">
+                <el-button size="mini" @click="activeOpens"
+                  >按选中设置分数</el-button
+                ><el-button size="mini" @click="activePicis"
+                  >按题型设置分数</el-button
+                >
+              </div>
             </div>
           </div>
+
           <el-table
             ref="multipleTables"
             :data="boxtableDataPags"
@@ -683,7 +688,8 @@ import tableList from "@/components/tableList";
 import busIns from "@/components/busIns";
 import questionBank from "@/components/questionBank";
 import BatchImportPop from "../../BatchImportPop.vue";
-import PaperSort from "../../PaperSort.vue"
+import PaperSort from "../../PaperSort.vue";
+import JSZip from "jszip";
 export default {
   components: {
     searchBoxNew,
@@ -692,7 +698,7 @@ export default {
     busIns,
     questionBank,
     BatchImportPop,
-    PaperSort
+    PaperSort,
   },
   data() {
     return {
@@ -893,7 +899,7 @@ export default {
       sujectApisTable: [],
       newSujectApisTable: [],
       // -------------------------------------
-      diansBoxStatus: !false,
+      diansBoxStatus: false,
       boxtableDataPags: [],
       tableSetTablesPags: [
         {
@@ -966,6 +972,7 @@ export default {
       localStart: false, //定时器是否已经开始
       pageId: "", //试卷ID
       uploadStatus: false, //是否同步预览
+      simulateConfigJson: "",
     };
   },
   computed: {
@@ -1122,6 +1129,7 @@ export default {
         this.djNum = res.data.answerNum;
         this.examsType = res.data.doType;
         this.passScore = res.data.passScore;
+        this.simulateConfigJson = res.data.simulateConfigJson || "";
       });
     },
     // --------------------------分割线---------------------------
@@ -1750,6 +1758,8 @@ export default {
         status: 1,
         passScore: this.passScore,
         doType: this.examsType,
+        simulateConfigJson:
+          this.examsType === 2 ? this.$refs["papersort"].form : null,
       };
       if (this.djTimeType === 0) {
         data.answerTime = 0;
@@ -2083,7 +2093,7 @@ export default {
   margin-top: 18px;
 }
 .dis_fos {
-  align-items: flex-end;
+  align-items: center;
   display: flex;
   justify-content: space-between;
 }