zhangjie пре 6 месеци
родитељ
комит
36fb06417c
2 измењених фајлова са 50 додато и 2 уклоњено
  1. 48 0
      src/modules/paper-export/views/PaperTemplateBuild.vue
  2. 2 2
      src/plugins/htmlToPdf.js

+ 48 - 0
src/modules/paper-export/views/PaperTemplateBuild.vue

@@ -29,6 +29,18 @@
           >
           </el-option>
         </el-select>
+        <el-input-number
+          v-if="showScaleEdit"
+          v-model="pdfScale"
+          class="margin-right-10"
+          style="width: 100px"
+          :min="1"
+          :max="6"
+          :step="1"
+          step-strictly
+          :controls="false"
+          placeholder="缩放比率"
+        ></el-input-number>
         <el-button
           type="primary"
           size="small"
@@ -142,6 +154,9 @@ export default {
       paperId: this.$route.params.paperId,
       viewType: this.$route.params.viewType,
       seqMode: "MODE3",
+      showScaleEdit: false,
+      keys: [],
+      pdfScale: 6,
       paperJson: {},
       paperTempJson: {
         pages: [],
@@ -176,6 +191,10 @@ export default {
     }
 
     this.initData();
+    this.registScaleEvent();
+  },
+  beforeDestroy() {
+    this.unRegistScaleEvent();
   },
   methods: {
     async initFrame() {
@@ -241,6 +260,7 @@ export default {
                 {
                   element: document.getElementById("paper-template-view"),
                   pageSize: this.paperTempJson.pageConfig.pageSize,
+                  scale: this.pdfScale,
                 },
                 true
               ).catch((error) => {
@@ -516,6 +536,7 @@ export default {
         element: document.getElementById("paper-template-view"),
         filename: `${this.fieldData.courseName}(${this.fieldData.courseCode})_${this.fieldData.paperName}.pdf`,
         pageSize: this.paperTempJson.pageConfig.pageSize,
+        scale: this.pdfScale,
       }).catch((error) => {
         result = false;
         console.error(error);
@@ -536,6 +557,7 @@ export default {
         {
           element: document.getElementById("paper-template-view"),
           pageSize: this.paperTempJson.pageConfig.pageSize,
+          scale: this.pdfScale,
         },
         true
       ).catch((error) => {
@@ -551,6 +573,7 @@ export default {
         {
           element: document.getElementById("answer-template-view"),
           pageSize: "A4",
+          scale: this.pdfScale,
         },
         true
       ).catch((error) => {
@@ -634,6 +657,31 @@ export default {
           dom.setAttribute("style", undefined);
         });
     },
+    // scale event
+    registScaleEvent() {
+      document.addEventListener("keydown", this.scaleEventHandle);
+    },
+    unRegistScaleEvent() {
+      document.removeEventListener("keydown", this.scaleEventHandle);
+    },
+    scaleEventHandle(e) {
+      if (e.target.tagName !== "BODY") return;
+      e.preventDefault();
+      // console.log(e);
+      if (!this.keys.length) {
+        setTimeout(() => {
+          this.keys = [];
+        }, 1000);
+      }
+      if (e.repeat) return;
+      this.keys.push(e.code);
+      // console.log(this.keys);
+      if (this.keys.join("-") === "Space-KeyF") {
+        this.showScaleEdit = !this.showScaleEdit;
+        this.keys = [];
+        return;
+      }
+    },
   },
 };
 </script>

+ 2 - 2
src/plugins/htmlToPdf.js

@@ -13,12 +13,12 @@ export const jsPDFConfigs = {
 };
 
 export async function buildPdf(
-  { element, pageSize, filename },
+  { element, pageSize, filename, scale },
   returnBlob = false
 ) {
   const opt = {
     margin: 0,
-    html2canvas: { scale: 6, useCORS: true },
+    html2canvas: { scale: scale || 6, useCORS: true },
     filename: filename || "",
     image: { type: "jpeg", quality: 0.8 },
     jsPDF: {