瀏覽代碼

封面多页修改

zhangjie 2 年之前
父節點
當前提交
6b63aa226f

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

@@ -59,7 +59,10 @@
             :key="pageNo"
             :type="curPageNo === pageNo ? 'primary' : 'default'"
             @click="swithPage(pageNo)"
-            >{{ PAGE_TYPE[page.pageType] }}</el-button
+            ><span>{{ PAGE_TYPE[page.pageType] }}</span
+            ><span v-if="page.pageType === 'cover'">{{
+              pageNo + 1
+            }}</span></el-button
           >
         </div>
         <div class="control-right">
@@ -268,13 +271,16 @@ export default {
       return types[pageType];
     },
     getPageNumber(curPageNo, columnNo) {
-      let pageNo = this.pageConfig.showCover ? curPageNo - 1 : curPageNo;
+      const coverPageCount = this.pages.filter(
+        (p) => p.pageType === "cover"
+      ).length;
+      let pageNo = this.pageConfig.showCover
+        ? curPageNo - coverPageCount
+        : curPageNo;
       return pageNo * this.pageConfig.columnNumber + columnNo + 1;
     },
     getTotalPage() {
-      let pageCount = this.pageConfig.showCover
-        ? this.pages.length - 1
-        : this.pages.length;
+      const pageCount = this.pages.filter((p) => p.pageType !== "cover").length;
       return pageCount * this.pageConfig.columnNumber;
     },
     initCard() {

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

@@ -119,13 +119,16 @@ export default {
       return types[pageType];
     },
     getPageNumber(curPageNo, columnNo) {
-      let pageNo = this.pageConfig.showCover ? curPageNo - 1 : curPageNo;
+      const coverPageCount = this.pages.filter(
+        (p) => p.pageType === "cover"
+      ).length;
+      let pageNo = this.pageConfig.showCover
+        ? curPageNo - coverPageCount
+        : curPageNo;
       return pageNo * this.pageConfig.columnNumber + columnNo + 1;
     },
     getTotalPage() {
-      let pageCount = this.pageConfig.showCover
-        ? this.pages.length - 1
-        : this.pages.length;
+      const pageCount = this.pages.filter((p) => p.pageType !== "cover").length;
       return pageCount * this.pageConfig.columnNumber;
     },
   },

+ 35 - 11
src/modules/paper-export/store/index.js

@@ -5,6 +5,7 @@ import {
   objAssign,
   randomCode,
 } from "../../card/plugins/utils";
+import { getModel as getPageModel } from "../elements/page/model";
 
 const state = {
   pageConfig: {},
@@ -46,9 +47,13 @@ const mutations = {
   switchTopics(state, pageType) {
     let topics = [];
     if (pageType === "cover") {
-      state.pages[0].columns.forEach((column) => {
-        topics.push(...column.elements);
-      });
+      state.pages
+        .filter((p) => p.pageType === "cover")
+        .forEach((page) => {
+          page.columns.forEach((column) => {
+            topics.push(...column.elements);
+          });
+        });
     } else {
       state.pages
         .filter((p) => p.pageType !== "cover")
@@ -280,8 +285,7 @@ const actions = {
     });
   },
   rebuildPages({ state, commit }) {
-    const pageInfo = state.pages[0];
-    const { columnNumber } = pageInfo;
+    const { columnNumber } = state.pageConfig;
     // 更新元件最新的高度信息
     // 整理所有元件
     state.topics.forEach((element) => {
@@ -341,17 +345,37 @@ const actions = {
     // 最后一栏的处理。
     columns.push([...curColumnElements]);
     if (state.curPage.pageType === "cover") {
-      // 封面只能有一页
-      columns = columns.slice(0, 1 * columnNumber);
-      for (let i = 0; i < columnNumber; i++) {
-        state.pages[0].columns[i].elements = columns[i] || [];
-      }
+      // 封面不限制页数
+      // 构建pages
+      let pages = [];
+      let page = {};
+      columns.forEach((column, cindex) => {
+        const columnNo = cindex % columnNumber;
+        if (!columnNo) {
+          page = getPageModel({
+            ...state.pageConfig,
+            pageType: "cover",
+          });
+        }
+        page.columns[columnNo].elements = column;
+
+        if (columnNo + 1 === columnNumber || cindex === columns.length - 1) {
+          pages.push(page);
+        }
+      });
+      state.pages = [
+        ...pages,
+        ...state.pages.filter((p) => p.pageType !== "cover"),
+      ];
     } else {
       // 正文只能有两页
+      const coverPageCount = state.pages.filter(
+        (p) => p.pageType === "cover"
+      ).length;
       columns = columns.slice(0, 2 * columnNumber);
       let cno = 0;
       for (let pNo = 0; pNo < 2; pNo++) {
-        let pageNo = state.pageConfig.showCover ? pNo + 1 : pNo;
+        let pageNo = state.pageConfig.showCover ? pNo + coverPageCount : pNo;
         for (let columnNo = 0; columnNo < columnNumber; columnNo++) {
           state.pages[pageNo].columns[columnNo].elements = columns[cno++] || [];
         }

+ 24 - 13
src/modules/paper-export/views/PaperTemplateBuild.vue

@@ -295,7 +295,8 @@ export default {
               return;
             }
 
-            questionInfo.subQuestions.forEach((sq) => {
+            questionInfo.subQuestions.forEach((sq, sqindex) => {
+              sq.subNumber = sqindex + 1;
               if (isMatches) sq.quesOptions = []; // 选词填空、段落匹配小题中不展示选项
               const contents = this.parseSimpleQuestion(sq, false);
               renderStructList.push(...contents);
@@ -419,8 +420,9 @@ export default {
     },
     buildPrePages() {
       let pages = deepCopy(this.paperTempJson.pages);
-      pages[0].columns[0].texts = [];
-      pages[0].columns[0].texts.push(...this.renderStructList);
+      const firstPageNo = pages.findIndex((p) => p.pageType !== "cover");
+      pages[firstPageNo].columns[0].texts = [];
+      pages[firstPageNo].columns[0].texts.push(...this.renderStructList);
       this.pages = pages;
     },
     buildReleasePages() {
@@ -557,11 +559,26 @@ export default {
         pages.push(curPage);
         curPage = null;
       }
-      // todo:保证试卷偶数页输出(待需求)
+      // 正文部分保证偶数页
+      if (pages.length % 2) {
+        pages.push(this.getNewPageModel(pages.length));
+      }
 
       if (this.paperTempJson.pageConfig.showCover) {
-        let coverPage = deepCopy(this.paperTempJson.pages[0]);
-        pages.unshift(coverPage);
+        // 封面自动插入反面空白页
+        let coverPages = deepCopy(
+          this.paperTempJson.pages.filter((p) => p.pageType === "cover")
+        );
+        let coverBackPage = deepCopy(coverPages[0]);
+        coverBackPage.columns.forEach((column) => {
+          column.elements = [];
+        });
+        let nCoverPages = [];
+        coverPages.forEach((cpage) => {
+          nCoverPages.push(cpage);
+          nCoverPages.push(coverBackPage);
+        });
+        pages = [...nCoverPages, ...pages];
       }
 
       this.pages = pages;
@@ -570,13 +587,7 @@ export default {
       let contentPages = this.paperTempJson.pages.slice(-2);
       let pNo = pageNo % 2;
       const pageTemp = contentPages[pNo];
-      let newPage = getPageModel({
-        pageSize: pageTemp.pageSize,
-        columnNumber: pageTemp.columnNumber,
-        columnGap: pageTemp.columnGap,
-        showPageNo: pageTemp.showPageNo,
-        showSide: pageTemp.showSide,
-      });
+      let newPage = getPageModel(this.paperTempJson.pageConfig);
       newPage.sides = pageTemp.sides.map((elem) => {
         let nelem = deepCopy(elem);
         nelem.id = getElementId();

+ 1 - 1
src/modules/paper/views/EditPaper.vue

@@ -332,7 +332,7 @@
                     >上移
                   </el-button>
                   <el-button
-                    v-if="unitIndex < paperDetail.paperDetailUnits.length"
+                    v-if="unitIndex < paperDetail.paperDetailUnits.length - 1"
                     size="small"
                     type="primary"
                     plain