zhangjie 2 vuotta sitten
vanhempi
commit
341580edbc

+ 8 - 0
src/assets/styles/pages.scss

@@ -565,6 +565,9 @@
   .option-body {
     flex-grow: 2;
   }
+  .rich-text {
+    vertical-align: middle;
+  }
 }
 // question-preview
 .question-preview {
@@ -717,3 +720,8 @@
   vertical-align: top;
   line-height: 20px;
 }
+.el-form-item__content {
+  .question-answer {
+    vertical-align: middle;
+  }
+}

+ 6 - 4
src/components/vEditor/renderJSON.js

@@ -122,10 +122,12 @@ function renderBlock(block, inline) {
       node.src = "/img/editor/text_audio.png";
       node.dataset.audioSrc = block.value;
       node.dataset.isAudio = true;
-      node.dataset.duration = block.param.duration;
-      const mDuration = unix(0);
-      mDuration.second(block.param.duration);
-      node.title = mDuration.format("mm:ss");
+      if (block.param && block.param.duration) {
+        node.dataset.duration = block.param.duration;
+        const mDuration = unix(0);
+        mDuration.second(block.param.duration);
+        node.title = mDuration.format("mm:ss");
+      }
     }
   }
 

+ 50 - 33
src/modules/card/api.js

@@ -1,5 +1,4 @@
 import { $httpWithMsg } from "../../plugins/axios";
-import Vue from "vue";
 import { QUESTION_API } from "@/constants/constants.js";
 
 export const questionTeacherQueryApi = () => {
@@ -11,18 +10,23 @@ export const courseQueryApi = (name) => {
   });
 };
 // card-mamage
-export const cardListApi = (datas, { pageNo, pageSize }) => {
-  return $httpWithMsg.get(`${QUESTION_API}/card-list/${pageNo}/${pageSize}`, {
+export const cardListApi = (datas) => {
+  return $httpWithMsg.post(`${QUESTION_API}/card/page`, {
     params: datas,
   });
 };
-export const cardDeleteApi = (cardId) => {
-  return $httpWithMsg.get(QUESTION_API + "/card-list", {
-    params: { id: cardId },
+export const cardDeleteApi = (ids) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/delete", {
+    params: { ids },
+  });
+};
+export const cardDownloadApi = (ids) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/download", {
+    params: { ids },
   });
 };
 export const cardEnableApi = ({ id, enable }) => {
-  return $httpWithMsg.get(QUESTION_API + "/card-list", {
+  return $httpWithMsg.post(QUESTION_API + "/card/toggle", {
     params: { id, enable },
   });
 };
@@ -30,55 +34,68 @@ export const cardUpdateApi = (datas) => {
   return $httpWithMsg.post(QUESTION_API + "/card-list", datas);
 };
 // card-head-manage
-export const cardHeadListApi = (datas, { pageNo, pageSize }) => {
-  return $httpWithMsg.get(`${QUESTION_API}/card-list/${pageNo}/${pageSize}`, {
+export const cardHeadListApi = (datas) => {
+  return $httpWithMsg.post(`${QUESTION_API}/card/head/page`, {
     params: datas,
   });
 };
-export const cardHeadDeleteApi = (cardHeadId) => {
-  return $httpWithMsg.get(QUESTION_API + "/card-list", {
-    params: { id: cardHeadId },
+export const cardHeadDeleteApi = (ids) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/head/delete", {
+    params: { ids },
   });
 };
 export const cardHeadDetailApi = (cardHeadId) => {
-  return $httpWithMsg.get(QUESTION_API + "/card-list", {
+  return $httpWithMsg.post(QUESTION_API + "/card/head/find", {
     params: { id: cardHeadId },
   });
 };
 export const cardHeadUpdateApi = (datas) => {
-  return $httpWithMsg.post(QUESTION_API + "/card-list", datas);
+  return $httpWithMsg.post(QUESTION_API + "/card/head/save", datas);
 };
 export const cardHeadEnableApi = ({ id, enable }) => {
-  return $httpWithMsg.get(QUESTION_API + "/card-list", {
+  return $httpWithMsg.post(QUESTION_API + "/card/head/toggle", {
     params: { id, enable },
   });
 };
+export const cardTemplateListApi = () => {
+  return $httpWithMsg.post(QUESTION_API + "/card/template/list", {});
+};
 
 // card-edit
 export const cardConfigInfos = () => {
-  return Promise.resolve({
-    id: "173438690998091776",
-    createId: "173437828976345088",
-    createTime: 1632291806278,
-    updateId: null,
-    updateTime: 1632291806278,
-    name: "测试题卡规则1-版头名称",
-    cardTitle: "测试题卡规则1-题卡标题",
-    attention:
-      "测试题卡规则1-注意事项\n测试题卡规则1-注意事项\n测试题卡规则1-注意事项",
-    objectiveAttention: "测试题卡规则1-客观题-注意事项",
-    subjectiveAttention: "测试题卡规则1-主观题-注意事项",
-    templateType: "GRADUATE",
+  return $httpWithMsg.post(QUESTION_API + "/card/head/get", {});
+
+  // return Promise.resolve({
+  //   id: "173438690998091776",
+  //   createId: "173437828976345088",
+  //   createTime: 1632291806278,
+  //   updateId: null,
+  //   updateTime: 1632291806278,
+  //   name: "测试题卡规则1-版头名称",
+  //   cardTitle: "测试题卡规则1-题卡标题",
+  //   attention:
+  //     "测试题卡规则1-注意事项\n测试题卡规则1-注意事项\n测试题卡规则1-注意事项",
+  //   objectiveAttention: "测试题卡规则1-客观题-注意事项",
+  //   subjectiveAttention: "测试题卡规则1-主观题-注意事项",
+  //   templateType: "GRADUATE",
+  // });
+};
+export const cardDetail = (cardId) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/find", {
+    params: { id: cardId },
   });
 };
-export const cardDetail = () => {
-  const cardData = Vue.ls.get("cardData", {});
-  return Promise.resolve(cardData);
+export const cardDetailByPaperId = (paperId) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/paper", {
+    params: { paperId },
+  });
 };
 
 export const saveCard = (datas) => {
-  window.sessionStorage.setItem("cardData", JSON.stringify(datas));
-  return Promise.resolve("11");
+  return $httpWithMsg.post(QUESTION_API + "/card/save/structure", datas);
+};
+export const saveCardByPaper = (datas) => {
+  return $httpWithMsg.post(QUESTION_API + "/card/save/paper", datas);
 };
 export const paperDetailApi = (paperId) => {
   return $httpWithMsg.get(`${QUESTION_API}/paper/${paperId}`, {});

+ 40 - 21
src/modules/card/views/CardHeadEdit.vue

@@ -3,7 +3,7 @@
     <div class="part-box">
       <div class="part-box-header">
         <h2 class="part-box-title">版头模板预选设置</h2>
-        <el-button type="danger" plain icon="icon icon-back" @click="goBack"
+        <el-button type="danger" plain icon="icon icon-back" @click="goback"
           >返回</el-button
         >
       </div>
@@ -22,9 +22,9 @@
             clearable
           ></el-input>
         </el-form-item>
-        <el-form-item prop="cardTitle" label="题卡标题:">
+        <el-form-item prop="title" label="题卡标题:">
           <el-input
-            v-model="modalForm.cardTitle"
+            v-model="modalForm.title"
             type="textarea"
             :rows="2"
           ></el-input>
@@ -53,17 +53,26 @@
             clearable
           ></el-input>
         </el-form-item>
-        <el-form-item prop="templateId" label="模板选择">
+        <el-form-item prop="cardTemplateId" label="模板选择">
           <div class="template-list">
-            <div class="template-item">
+            <div
+              v-for="item in templates"
+              :key="item.id"
+              :class="[
+                'template-item',
+                { 'is-active': modalForm.cardTemplateId === item.id },
+              ]"
+            >
               <div class="template-item-body">
-                <img src="" alt="" />
+                <img :src="item.imgSrc" :alt="item.name" />
                 <div class="template-item-action">
                   <el-button type="primary" plain>预览</el-button>
-                  <el-button type="primary">使用</el-button>
+                  <el-button type="primary" @click="selectTemplate(item)"
+                    >使用</el-button
+                  >
                 </div>
               </div>
-              <p class="template-item-title">111</p>
+              <p class="template-item-title">{{ item.name }}</p>
             </div>
           </div>
         </el-form-item>
@@ -79,15 +88,19 @@
 </template>
 
 <script>
-import { cardHeadDetailApi, cardHeadUpdateApi } from "../api";
+import {
+  cardHeadDetailApi,
+  cardHeadUpdateApi,
+  cardTemplateListApi,
+} from "../api";
 const initModalForm = {
   id: null,
   name: "",
-  cardTitle: "",
+  title: "",
   attention: "",
   objectiveAttention: "",
   subjectiveAttention: "",
-  templateType: null,
+  cardTemplateId: null,
 };
 
 export default {
@@ -105,6 +118,7 @@ export default {
       isSubmit: false,
       loading: false,
       cardHeadId: this.$route.params.cardHeadId,
+      templates: [],
       modalForm: { ...initModalForm },
       rules: {
         name: [
@@ -119,7 +133,7 @@ export default {
             trigger: "change",
           },
         ],
-        cardTitle: [
+        title: [
           {
             required: true,
             message: "请输入题卡标题",
@@ -179,7 +193,7 @@ export default {
             trigger: "change",
           },
         ],
-        templateType: [
+        cardTemplateId: [
           {
             required: true,
             message: "请选择模板",
@@ -190,7 +204,8 @@ export default {
     };
   },
   mounted() {
-    // this.initData();
+    this.initData();
+    this.getTemplates();
   },
   methods: {
     async initData() {
@@ -202,14 +217,18 @@ export default {
         this.modalForm = { ...initModalForm };
       }
     },
-    goBack() {
-      this.$router.push({
-        name: "CardHeadManage",
-        params: {
-          isClear: sessionStorage.getItem("card_head_manage") == "true" ? 0 : 1,
-        },
+    async getTemplates() {
+      const res = await cardTemplateListApi();
+      const dataList = res.data || [];
+      this.templates = dataList.map((item) => {
+        item.imgSrc = item.imagePath[0];
+        return item;
       });
     },
+    selectTemplate(item) {
+      this.modalForm.cardTemplateId = item.id;
+      this.$refs.modalFormComp.validateField("cardTemplateId");
+    },
     async submit() {
       const valid = await this.$refs.modalFormComp.validate().catch(() => {});
       if (!valid) return;
@@ -224,7 +243,7 @@ export default {
       if (!data) return;
 
       this.$message.success("保存成功!");
-      this.goBack();
+      this.goback();
     },
   },
 };

+ 12 - 7
src/modules/card/views/CardHeadManage.vue

@@ -58,9 +58,13 @@
           width="50"
           align="center"
         ></el-table-column>
-        <el-table-column prop="loginName" label="版头名称"></el-table-column>
-        <el-table-column width="170" label="创建时间"></el-table-column>
-        <el-table-column prop="name" label="创建人"></el-table-column>
+        <el-table-column prop="name" label="版头名称"></el-table-column>
+        <el-table-column
+          prop="creationTime"
+          width="170"
+          label="创建时间"
+        ></el-table-column>
+        <el-table-column prop="creator" label="创建人"></el-table-column>
         <el-table-column width="50" label="状态">
           <template slot-scope="scope">
             <span v-if="scope.row.enable">
@@ -164,16 +168,17 @@ export default {
       if (this.loading) return;
       this.loading = true;
 
-      const res = await cardHeadListApi(this.searchForm, {
-        pageNo: this.currentPage,
+      const res = await cardHeadListApi({
+        ...this.searchForm,
+        pageNumber: this.currentPage,
         pageSize: this.pageSize,
       }).catch(() => {});
 
       this.loading = false;
       if (!res) return;
 
-      this.tableData = res.data.list;
-      this.total = res.data.total;
+      this.tableData = res.data.content;
+      this.total = res.data.totalElements;
     },
     handleCurrentChange(val) {
       this.selectedIds = [];

+ 21 - 18
src/modules/card/views/CardManage.vue

@@ -95,10 +95,18 @@
           >
           </span>
         </el-table-column>
-        <el-table-column width="170" label="创建时间"></el-table-column>
-        <el-table-column prop="name" label="创建人"></el-table-column>
-        <el-table-column width="170" label="提交时间"></el-table-column>
-        <el-table-column prop="teacherName" label="命题老师"></el-table-column>
+        <el-table-column
+          prop="createTime"
+          label="创建时间"
+          width="170"
+        ></el-table-column>
+        <el-table-column prop="creator" label="创建人"></el-table-column>
+        <el-table-column
+          prop="submitTime"
+          width="170"
+          label="提交时间"
+        ></el-table-column>
+        <el-table-column prop="teacher" label="命题老师"></el-table-column>
         <el-table-column width="50" label="状态">
           <template slot-scope="scope">
             <span v-if="scope.row.enable">
@@ -234,19 +242,13 @@ export default {
         teacherName: "",
       },
       selectedIds: [],
-      tableData: [
-        {
-          id: "1",
-          courseNamesStr: "123",
-          teacherName: "2332",
-        },
-      ],
+      tableData: [],
       curRow: {},
       currentPage: 1,
       pageSize: 10,
       total: 10,
       // upload
-      uploadUrl: `${QUESTION_API}/upload`,
+      uploadUrl: `${QUESTION_API}/card/structure/import`,
       templateUrl: "",
     };
   },
@@ -265,10 +267,10 @@ export default {
       this.handleCurrentChange(this.currentPage);
       window.sessionStorage.removeItem("card-manage");
     } else {
-      // this.handleCurrentChange(1);
+      this.handleCurrentChange(1);
     }
     this.getCoursesList();
-    this.templateUrl = `${QUESTION_API}/course/importTemplate?$key=${this.user.key}&$token=${this.user.token}`;
+    this.templateUrl = `${QUESTION_API}/card/import/template?$key=${this.user.key}&$token=${this.user.token}`;
   },
   methods: {
     async getCoursesList() {
@@ -279,16 +281,17 @@ export default {
       if (this.loading) return;
       this.loading = true;
 
-      const res = await cardListApi(this.searchForm, {
-        pageNo: this.currentPage,
+      const res = await cardListApi({
+        ...this.searchForm,
+        pageNumber: this.currentPage,
         pageSize: this.pageSize,
       }).catch(() => {});
 
       this.loading = false;
       if (!res) return;
 
-      this.tableData = res.data.list;
-      this.total = res.data.total;
+      this.tableData = res.data.content;
+      this.total = res.data.totalElements;
     },
     handleCurrentChange(val) {
       this.selectedIds = [];

+ 7 - 0
src/modules/questions/component/QuestionAnswer.vue

@@ -54,6 +54,13 @@ export default {
       return this.data.questionType === "TEXT_ANSWER_QUESTION";
     },
   },
+  watch: {
+    "data.quesAnswer": {
+      handler() {
+        this.initData();
+      },
+    },
+  },
   mounted() {
     this.initData();
   },

+ 4 - 1
src/modules/questions/views/EditPaper.vue

@@ -2326,7 +2326,7 @@ export default {
             }
           }
         }
-        paperDetailUnitExp.question.quesAnswer = this.answer;
+        // paperDetailUnitExp.question.quesAnswer = this.answer;
         this.$http
           .put(QUESTION_API + "/paperDetailUnit", paperDetailUnitExp)
           .then(() => {
@@ -2355,6 +2355,7 @@ export default {
       ) {
         return false;
       }
+      let quesAnswer = [];
       for (var i = 0; i < this.quesModel.quesOptions.length; i++) {
         var option = this.quesModel.quesOptions[i];
         var answerOrderNum = String.fromCharCode(65 + i);
@@ -2366,7 +2367,9 @@ export default {
           option["isCorrect"] =
             this.multipleRightAnswer.indexOf(answerOrderNum) > -1 ? 1 : 0;
         }
+        if (option["isCorrect"]) quesAnswer.push(i + 1);
       }
+      this.quesModel.quesAnswer = JSON.stringify(quesAnswer);
     },
     //删除试题
     deleteQues(paperDetailUnit) {

+ 4 - 1
src/modules/questions/views/EditPaperPendingTrial.vue

@@ -2435,7 +2435,7 @@ export default {
             }
           }
         }
-        paperDetailUnitExp.question.quesAnswer = this.answer;
+        // paperDetailUnitExp.question.quesAnswer = this.answer;
         this.$http
           .put(QUESTION_API + "/paperDetailUnit", paperDetailUnitExp)
           .then(() => {
@@ -2464,6 +2464,7 @@ export default {
       ) {
         return false;
       }
+      let quesAnswer = [];
       for (var i = 0; i < this.quesModel.quesOptions.length; i++) {
         var option = this.quesModel.quesOptions[i];
         var answerOrderNum = String.fromCharCode(65 + i);
@@ -2475,7 +2476,9 @@ export default {
           option["isCorrect"] =
             this.multipleRightAnswer.indexOf(answerOrderNum) > -1 ? 1 : 0;
         }
+        if (option["isCorrect"]) quesAnswer.push(i + 1);
       }
+      this.quesModel.quesAnswer = JSON.stringify(quesAnswer);
     },
     //删除试题
     deleteQues(paperDetailUnit) {

+ 3 - 0
src/modules/questions/views/EditSelectQuestion.vue

@@ -529,6 +529,7 @@ export default {
       if (this.quesModel.quesOptions.length == 0) {
         return false;
       }
+      let quesAnswer = [];
       for (var i = 0; i < this.quesModel.quesOptions.length; i++) {
         var option = this.quesModel.quesOptions[i];
         var answerOrderNum = String.fromCharCode(65 + i);
@@ -540,7 +541,9 @@ export default {
           option["isCorrect"] =
             this.multipleRightAnswer.indexOf(answerOrderNum) > -1 ? 1 : 0;
         }
+        if (option["isCorrect"]) quesAnswer.push(i + 1);
       }
+      this.quesModel.quesAnswer = JSON.stringify(quesAnswer);
     },
     hasAnswer() {
       if (this.quesModel.questionType == "SINGLE_ANSWER_QUESTION") {