فهرست منبع

试卷导出pdf修改

zhangjie 2 سال پیش
والد
کامیت
e48b16ec83

+ 5 - 1
src/modules/paper-export/components/PaperBuildConfig.vue

@@ -41,7 +41,7 @@
           <span v-if="item.unit" slot="append">{{ item.unit }}</span>
         </el-input>
       </el-form-item>
-      <el-form-item>
+      <el-form-item v-if="showConfirmBtn">
         <el-button type="primary" @click="confirm">确定</el-button>
       </el-form-item>
     </el-form>
@@ -58,6 +58,10 @@ export default {
         return [];
       },
     },
+    showConfirmBtn: {
+      type: Boolean,
+      default: true,
+    },
   },
   data() {
     return {

+ 7 - 2
src/modules/paper-export/components/PaperTemplateDesign.vue

@@ -200,6 +200,7 @@ import PageNumber from "./PageNumber";
 import TopicElementEdit from "./TopicElementEdit.vue";
 import TopicElementPreview from "./TopicElementPreview.vue";
 import PaperSideEdit from "./PaperSideEdit.vue";
+import { deepCopy } from "@/plugins/utils";
 
 export default {
   name: "PaperTemplateDesign",
@@ -310,8 +311,12 @@ export default {
       this.directChangePage(0);
     },
     addNewTopic(type) {
-      // if (type === 'PAGE')
-      let element = getElementModel(type);
+      let presetData = {};
+      if (type === "PAPER_PROPS") {
+        const elem = this.topics.find((item) => item.type === type);
+        if (elem) presetData = { props: deepCopy(elem.props) };
+      }
+      let element = getElementModel(type, presetData);
       element.w = document.getElementById("topic-column").offsetWidth;
       this.addElement(element);
       this.$nextTick(() => {

+ 15 - 2
src/modules/paper-export/store/index.js

@@ -1,5 +1,5 @@
 import {
-  // deepCopy,
+  deepCopy,
   calcSum,
   getElementId,
   objAssign,
@@ -208,12 +208,25 @@ const actions = {
     commit("setCurElement", element);
   },
   // 修改元素
-  modifyElement({ state }, element) {
+  modifyElement({ state, dispatch }, element) {
+    if (element.type === "PAPER_PROPS") {
+      dispatch("syncElementPaperProps", element);
+      return;
+    }
+
     element.key = randomCode();
     const pos = fetchElementPositionInfos(element, state.topics);
     if (pos === -1) return;
     state.topics.splice(pos, 1, element);
   },
+  syncElementPaperProps({ state }, element) {
+    state.topics
+      .filter((item) => item.type === element.type)
+      .forEach((item) => {
+        item.key = randomCode();
+        item.props = deepCopy(element.props);
+      });
+  },
   // 修改编辑框包含元素
   modifyElementChild({ state, commit }, element) {
     const pos = fetchElementPositionInfos(element.container, state.topics);

+ 5 - 1
src/modules/paper-export/views/PaperTemplateBuild.vue

@@ -133,6 +133,7 @@ export default {
 
         this.seqMode = paperSet.seqMode;
         this.curPaperTemp = paperSet.paperTemp;
+        this.configModalForm = paperSet.configModalForm;
 
         await this.getPaperJson();
 
@@ -165,12 +166,15 @@ export default {
         }
         this.$nextTick(() => {
           try {
-            this.buildReleasePages();
+            this.addDetailScoreTable();
+            this.resetRenderStructSize();
+            this.buildPageAutoPage();
           } catch (error) {
             this.emitFrameResult(false, "构建pdf错误");
           }
 
           this.$nextTick(() => {
+            this.addDetailScoreTable();
             this.emitFrameResult(true, "", this.getPreviewTemp());
           });
         });

+ 52 - 1
src/modules/questions/views/GenPaper.vue

@@ -277,6 +277,7 @@
             v-model="curPaperTemp"
             placeholder="请选择试卷模板"
             value-key="id"
+            @change="paperTempChange"
           >
             <el-option
               v-for="item in paperTempList"
@@ -310,6 +311,12 @@
           </el-select>
         </el-form-item>
       </el-form>
+      <paper-build-config
+        v-if="exportModel.exportContent === 'PAPER'"
+        ref="PaperBuildConfig"
+        :config-sources="configSources"
+        :show-confirm-btn="false"
+      ></paper-build-config>
       <div slot="footer">
         <el-button
           type="primary"
@@ -397,6 +404,7 @@
 </template>
 
 <script>
+import PaperBuildConfig from "../../paper-export/components/PaperBuildConfig.vue";
 import { QUESTION_API } from "@/constants/constants";
 import { LEVEL_TYPE, PUBLICITY_LIST } from "../constants/constants";
 import { mapState } from "vuex";
@@ -405,8 +413,12 @@ import {
   paperTemplateListApi,
   paperPdfDownloadApi,
 } from "../../paper-export/api";
+import { deepCopy } from "@/plugins/utils";
 
 export default {
+  components: {
+    PaperBuildConfig,
+  },
   data() {
     return {
       templateList: [],
@@ -476,6 +488,8 @@ export default {
       downloading: false,
       curPaperTemp: null,
       paperTempList: [],
+      configSources: [],
+      configModalForm: {},
     };
   },
   computed: {
@@ -987,12 +1001,49 @@ export default {
       const res = await paperTemplateListApi("PAPER_EXPORT");
       this.paperTempList = res.data;
     },
-    toDownloadPaperPdf() {
+    paperTempChange(paperTemp) {
+      // console.log(paperTemp);
+      let paperTempJson = paperTemp.content
+        ? JSON.parse(paperTemp.content)
+        : { pages: [], pageConfig: {} };
+      this.getConfigSources(paperTempJson.pages);
+    },
+    getConfigSources(pages) {
+      let sources = [],
+        fieldAble = {};
+      pages.forEach((page) => {
+        page.columns.forEach((column) => {
+          column.elements.forEach((element) => {
+            if (element.type !== "PAPER_PROPS") return;
+            if (!sources.length) {
+              sources = deepCopy(element.props);
+            }
+            element.props.forEach((prop) => {
+              fieldAble[prop.field] = fieldAble[prop.field] || prop.enable;
+            });
+          });
+        });
+      });
+
+      sources.forEach((item) => {
+        item.enable = fieldAble[item.field];
+      });
+      this.configSources = sources;
+    },
+    async toDownloadPaperPdf() {
+      const valid = await this.$refs.PaperBuildConfig.checkData().catch(
+        () => {}
+      );
+      if (!valid) return;
+
       if (this.downloading) return;
       this.downloading = true;
+
+      const configModalForm = this.$refs.PaperBuildConfig.getData();
       window.paperSet = {
         paperTemp: this.curPaperTemp,
         seqMode: this.exportModel.seqMode,
+        configModalForm,
       };
       const url = this.getRouterPath({
         name: "PaperTemplateBuild",