Browse Source

试卷构建调整

zhangjie 2 years ago
parent
commit
082948b3bc

+ 9 - 0
src/modules/paper-export/assets/styles/paper-temp-preview.scss

@@ -113,3 +113,12 @@
   display: inline-block;
   display: inline-block;
   white-space: pre-wrap;
   white-space: pre-wrap;
 }
 }
+// elem-paper-struct
+.elem-paper-struct {
+  ol {
+    padding-left: 15px;
+  }
+  li {
+    list-style: decimal;
+  }
+}

+ 11 - 12
src/modules/paper-export/components/PaperTemplateDesign.vue

@@ -269,7 +269,7 @@ export default {
     },
     },
     getPageNumber(curPageNo, columnNo) {
     getPageNumber(curPageNo, columnNo) {
       let pageNo = this.pageConfig.showCover ? curPageNo - 1 : curPageNo;
       let pageNo = this.pageConfig.showCover ? curPageNo - 1 : curPageNo;
-      return pageNo * this.curPage.columns.length + columnNo + 1;
+      return pageNo * this.pageConfig.columnNumber + columnNo + 1;
     },
     },
     getTotalPage() {
     getTotalPage() {
       let pageCount = this.pageConfig.showCover
       let pageCount = this.pageConfig.showCover
@@ -321,14 +321,17 @@ export default {
       this.setCurElement({});
       this.setCurElement({});
       this.changePage(pindex);
       this.changePage(pindex);
     },
     },
+    getTemplateData() {
+      return {
+        pages: this.pages,
+        pageConfig: this.pageConfig,
+      };
+    },
     getTemplateJson() {
     getTemplateJson() {
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         setTimeout(() => {
         setTimeout(() => {
-          const data = JSON.stringify(
-            {
-              pages: this.pages,
-            },
-            (k, v) => (k.startsWith("_") ? undefined : v)
+          const data = JSON.stringify(this.getTemplateData(), (k, v) =>
+            k.startsWith("_") ? undefined : v
           );
           );
           resolve(data);
           resolve(data);
         }, 100);
         }, 100);
@@ -336,15 +339,11 @@ export default {
     },
     },
     toPreview() {
     toPreview() {
       if (this.isSubmit) return;
       if (this.isSubmit) return;
-      this.$emit("on-preview", {
-        pages: this.pages,
-      });
+      this.$emit("on-preview", this.getTemplateData());
     },
     },
     toSubmit() {
     toSubmit() {
       if (this.isSubmit) return;
       if (this.isSubmit) return;
-      this.$emit("on-submit", {
-        pages: this.pages,
-      });
+      this.$emit("on-submit", this.getTemplateData());
     },
     },
     toExit() {
     toExit() {
       this.$emit("on-exit");
       this.$emit("on-exit");

+ 42 - 7
src/modules/paper-export/components/PaperTemplateView.vue

@@ -6,11 +6,18 @@
         :class="[
         :class="[
           'page-box',
           'page-box',
           `page-box-${page.pageSize}`,
           `page-box-${page.pageSize}`,
-          `page-box-${pageNo % 2}`,
+          `page-box-${pageTypeType(page.pageType)}`,
         ]"
         ]"
       >
       >
         <!-- inner edit area -->
         <!-- inner edit area -->
-        <div class="page-main-inner">
+        <div
+          :class="[
+            'page-main-inner',
+            {
+              'page-main-noside': !page.showSide || page.pageType === 'cover',
+            },
+          ]"
+        >
           <div
           <div
             :class="['page-main', `page-main-${page.columns.length}`]"
             :class="['page-main', `page-main-${page.columns.length}`]"
             :style="{ margin: `0 -${page.columnGap / 2}px` }"
             :style="{ margin: `0 -${page.columnGap / 2}px` }"
@@ -44,16 +51,19 @@
                 </div>
                 </div>
               </div>
               </div>
               <page-number
               <page-number
-                v-if="page.showPageNo"
+                v-if="page.showPageNo && page.pageType !== 'cover'"
                 type="text"
                 type="text"
-                :total="pages.length * page.columns.length"
-                :current="pageNo * page.columns.length + columnNo + 1"
+                :total="getTotalPage()"
+                :current="getPageNumber(pageNo, columnNo)"
               ></page-number>
               ></page-number>
             </div>
             </div>
           </div>
           </div>
         </div>
         </div>
         <!-- side edit erea -->
         <!-- side edit erea -->
-        <div v-if="page.showSide" class="page-column-side">
+        <div
+          v-if="page.showSide && page.pageType !== 'cover'"
+          class="page-column-side"
+        >
           <div class="column-side-body">
           <div class="column-side-body">
             <box-element-preview
             <box-element-preview
               v-for="element in page.sides"
               v-for="element in page.sides"
@@ -89,10 +99,35 @@ export default {
         return [];
         return [];
       },
       },
     },
     },
+    pageConfig: {
+      type: Object,
+      default() {
+        return {};
+      },
+    },
   },
   },
   data() {
   data() {
     return {};
     return {};
   },
   },
-  methods: {},
+  methods: {
+    pageTypeType(pageType) {
+      const types = {
+        cover: 0,
+        front: 0,
+        back: 1,
+      };
+      return types[pageType];
+    },
+    getPageNumber(curPageNo, columnNo) {
+      let pageNo = this.pageConfig.showCover ? curPageNo - 1 : curPageNo;
+      return pageNo * this.pageConfig.columnNumber + columnNo + 1;
+    },
+    getTotalPage() {
+      let pageCount = this.pageConfig.showCover
+        ? this.pages.length - 1
+        : this.pages.length;
+      return pageCount * this.pageConfig.columnNumber;
+    },
+  },
 };
 };
 </script>
 </script>

File diff suppressed because it is too large
+ 0 - 0
src/modules/paper-export/previewTemp.js


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

@@ -33,6 +33,7 @@
         ref="PaperTemplateView"
         ref="PaperTemplateView"
         class="preview-body"
         class="preview-body"
         :pages="pages"
         :pages="pages"
+        :page-config="paperTempJson.pageConfig"
       ></paper-template-view>
       ></paper-template-view>
     </div>
     </div>
   </div>
   </div>
@@ -77,13 +78,17 @@ export default {
       renderStructList: [],
       renderStructList: [],
       pages: [],
       pages: [],
       paperJson: {},
       paperJson: {},
-      paperTempJson: [],
+      paperTempJson: {
+        pages: [],
+        pageConfig: {},
+      },
       maxColumnWidth: 200,
       maxColumnWidth: 200,
       maxColumnHeight: 200,
       maxColumnHeight: 200,
       paperTempList: [],
       paperTempList: [],
       curPaperTemp: {},
       curPaperTemp: {},
       downloading: false,
       downloading: false,
       fieldData: {},
       fieldData: {},
+      paperStructs: [],
     };
     };
   },
   },
   mounted() {
   mounted() {
@@ -109,7 +114,7 @@ export default {
 
 
         let paperTempJson = this.curPaperTemp.content
         let paperTempJson = this.curPaperTemp.content
           ? JSON.parse(this.curPaperTemp.content)
           ? JSON.parse(this.curPaperTemp.content)
-          : { pages: [] };
+          : { pages: [], pageConfig: {} };
         this.paperTempJson = paperTempJson;
         this.paperTempJson = paperTempJson;
         this.pages = paperTempJson.pages;
         this.pages = paperTempJson.pages;
         this.updaterFieldInfo();
         this.updaterFieldInfo();
@@ -184,6 +189,13 @@ export default {
         totalScore: res.data.totalScore,
         totalScore: res.data.totalScore,
         rootOrgName: res.data.rootOrgName,
         rootOrgName: res.data.rootOrgName,
       };
       };
+      this.paperStructs = this.paperJson.paperDetails.map((detail) => {
+        return {
+          detailName: detail.name,
+          questionCount: detail.unitCount,
+          totalScore: detail.score,
+        };
+      });
     },
     },
     async seqModeChange() {
     async seqModeChange() {
       await this.getPaperJson();
       await this.getPaperJson();
@@ -200,7 +212,7 @@ export default {
       this.curPaperTemp = paperTemp;
       this.curPaperTemp = paperTemp;
       let paperTempJson = paperTemp.content
       let paperTempJson = paperTemp.content
         ? JSON.parse(paperTemp.content)
         ? JSON.parse(paperTemp.content)
-        : { pages: [] };
+        : { pages: [], pageConfig: {} };
       this.paperTempJson = paperTempJson;
       this.paperTempJson = paperTempJson;
       this.pages = paperTempJson.pages;
       this.pages = paperTempJson.pages;
       this.updaterFieldInfo();
       this.updaterFieldInfo();
@@ -214,6 +226,10 @@ export default {
       this.paperTempJson.pages.forEach((page) => {
       this.paperTempJson.pages.forEach((page) => {
         page.columns.forEach((column) => {
         page.columns.forEach((column) => {
           column.elements.forEach((elem) => {
           column.elements.forEach((elem) => {
+            if (elem.type === "PAPER_STRUCT") {
+              elem.structs = this.paperStructs;
+            }
+
             if (!elem.elements || !elem.elements.length) return;
             if (!elem.elements || !elem.elements.length) return;
 
 
             elem.elements.forEach((element) => {
             elem.elements.forEach((element) => {
@@ -407,7 +423,6 @@ export default {
       pages[0].columns[0].texts.push(...this.renderStructList);
       pages[0].columns[0].texts.push(...this.renderStructList);
       this.pages = pages;
       this.pages = pages;
     },
     },
-
     buildReleasePages() {
     buildReleasePages() {
       this.resetRenderStructSize();
       this.resetRenderStructSize();
       this.buildPageAutoPage();
       this.buildPageAutoPage();
@@ -542,12 +557,19 @@ export default {
         pages.push(curPage);
         pages.push(curPage);
         curPage = null;
         curPage = null;
       }
       }
+      // todo:保证试卷偶数页输出(待需求)
+
+      if (this.paperTempJson.pageConfig.showCover) {
+        let coverPage = deepCopy(this.paperTempJson.pages[0]);
+        pages.unshift(coverPage);
+      }
 
 
       this.pages = pages;
       this.pages = pages;
     },
     },
     getNewPageModel(pageNo) {
     getNewPageModel(pageNo) {
+      let contentPages = this.paperTempJson.pages.slice(-2);
       let pNo = pageNo % 2;
       let pNo = pageNo % 2;
-      const pageTemp = this.paperTempJson.pages[pNo];
+      const pageTemp = contentPages[pNo];
       let newPage = getPageModel({
       let newPage = getPageModel({
         pageSize: pageTemp.pageSize,
         pageSize: pageTemp.pageSize,
         columnNumber: pageTemp.columnNumber,
         columnNumber: pageTemp.columnNumber,

Some files were not shown because too many files changed in this diff