|
@@ -1,33 +1,38 @@
|
|
|
<template>
|
|
|
<div :class="classes">
|
|
|
- <div v-if="IS_COMMON_CARD" class="preview-frame" id="preview-frame"></div>
|
|
|
- <card-view
|
|
|
- v-if="!IS_COMMON_CARD && pages.length"
|
|
|
+ <div v-if="IS_HTML_TEMPLATE" class="preview-frame" id="preview-frame"></div>
|
|
|
+
|
|
|
+ <component
|
|
|
+ v-if="!IS_HTML_TEMPLATE && pages.length"
|
|
|
+ :is="editComp"
|
|
|
ref="CardView"
|
|
|
class="preview-body"
|
|
|
:pages="pages"
|
|
|
:card-config="cardConfig"
|
|
|
- ></card-view>
|
|
|
+ ></component>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import CardView from "../../../../card/components/CardView";
|
|
|
+import CardFreeView from "../../../../card/modules/free/components/CardFreeView";
|
|
|
import { cardDetail } from "../api";
|
|
|
import { deepCopy } from "@/plugins/utils";
|
|
|
const JsBarcode = require("jsbarcode");
|
|
|
|
|
|
export default {
|
|
|
name: "card-preview",
|
|
|
- components: { CardView },
|
|
|
+ components: { CardView, CardFreeView },
|
|
|
data() {
|
|
|
return {
|
|
|
isPrint: this.$route.params.viewType !== "view",
|
|
|
isFrame: this.$route.params.viewType === "frame",
|
|
|
cardId: this.$route.params.cardId,
|
|
|
+ cardCreateMethod: "STANDARD",
|
|
|
+ cardType: "CUSTOM",
|
|
|
cardConfig: {},
|
|
|
pages: [],
|
|
|
- IS_COMMON_CARD: false
|
|
|
+ IS_HTML_TEMPLATE: false
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
@@ -38,6 +43,12 @@ export default {
|
|
|
"card-print": this.isPrint
|
|
|
}
|
|
|
];
|
|
|
+ },
|
|
|
+ editComp() {
|
|
|
+ return this.cardCreateMethod === "FREE" ? "card-free-view" : "card-view";
|
|
|
+ },
|
|
|
+ IS_HTML_TEMPLATE1() {
|
|
|
+ return this.cardType === "GENERIC" && this.cardCreateMethod === "UPLOAD";
|
|
|
}
|
|
|
},
|
|
|
mounted() {
|
|
@@ -52,21 +63,26 @@ export default {
|
|
|
const cardData = window.parent.cardData;
|
|
|
if (!cardData) return;
|
|
|
|
|
|
- const { cardConfig, pages } = deepCopy(cardData);
|
|
|
+ const { cardConfig, pages, createMethod, type } = deepCopy(cardData);
|
|
|
+ this.cardCreateMethod = createMethod;
|
|
|
+ this.cardType = type;
|
|
|
let fieldInfos = {};
|
|
|
[...cardConfig.requiredFields, ...cardConfig.extendFields]
|
|
|
.filter(item => item.enable)
|
|
|
.map(item => {
|
|
|
fieldInfos[item.code] = "${" + item.code + "}";
|
|
|
});
|
|
|
- if (cardConfig.examNumberStyle === "PRINT") {
|
|
|
- fieldInfos.examNumber = "data:image/png;base64,${examNumber}";
|
|
|
- fieldInfos.examNumberStr = "${examNumberStr}";
|
|
|
- }
|
|
|
|
|
|
- if (cardConfig.aOrB && cardConfig.paperType === "PRINT") {
|
|
|
- fieldInfos.paperType = "data:image/png;base64,${paperType}";
|
|
|
- fieldInfos.paperTypeName = "${paperTypeName}";
|
|
|
+ if (this.cardCreateMethod === "STANDARD") {
|
|
|
+ if (cardConfig.examNumberStyle === "PRINT") {
|
|
|
+ fieldInfos.examNumber = "data:image/png;base64,${examNumber}";
|
|
|
+ fieldInfos.examNumberStr = "${examNumberStr}";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cardConfig.aOrB && cardConfig.paperType === "PRINT") {
|
|
|
+ fieldInfos.paperType = "data:image/png;base64,${paperType}";
|
|
|
+ fieldInfos.paperTypeName = "${paperTypeName}";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
this.cardConfig = cardConfig;
|
|
@@ -84,11 +100,13 @@ export default {
|
|
|
},
|
|
|
async init() {
|
|
|
const detData = await cardDetail(this.cardId);
|
|
|
+ this.cardCreateMethod = detData.createMethod;
|
|
|
+ this.cardType = detData.type;
|
|
|
|
|
|
- this.IS_COMMON_CARD = detData.type === "GENERIC";
|
|
|
+ this.IS_HTML_TEMPLATE =
|
|
|
+ detData.type === "GENERIC" && detData.createMethod === "UPLOAD";
|
|
|
// 通卡展示
|
|
|
- if (this.IS_COMMON_CARD) {
|
|
|
- // TODO:通卡展示逻辑要调整
|
|
|
+ if (this.IS_HTML_TEMPLATE) {
|
|
|
this.$nextTick(() => {
|
|
|
this.initHtmlTemp(detData.htmlContent);
|
|
|
});
|
|
@@ -120,22 +138,26 @@ export default {
|
|
|
let fieldInfos = {};
|
|
|
const defContent = "相关信息";
|
|
|
const defNumber = "123456789";
|
|
|
+ console.log(cardConfig);
|
|
|
+ // TODO:extendFields => 0 bug
|
|
|
[...cardConfig.requiredFields, ...cardConfig.extendFields]
|
|
|
.filter(item => item.enable)
|
|
|
.map(item => {
|
|
|
fieldInfos[item.code] = stdInfo[item.code] || defContent;
|
|
|
});
|
|
|
- if (cardConfig.examNumberStyle === "PRINT") {
|
|
|
- fieldInfos.examNumber = this.getBase64Barcode(
|
|
|
- stdInfo["examNumber"] || defNumber
|
|
|
- );
|
|
|
- fieldInfos.examNumberStr = stdInfo["examNumber"] || defNumber;
|
|
|
- }
|
|
|
- if (cardConfig.aOrB && cardConfig.paperType === "PRINT") {
|
|
|
- fieldInfos.paperType = this.getBase64Barcode(
|
|
|
- stdInfo["paperType"] || defNumber
|
|
|
- );
|
|
|
- fieldInfos.paperTypeName = stdInfo["paperTypeName"] || "A";
|
|
|
+ if (this.cardCreateMethod === "STANDARD") {
|
|
|
+ if (cardConfig.examNumberStyle === "PRINT") {
|
|
|
+ fieldInfos.examNumber = this.getBase64Barcode(
|
|
|
+ stdInfo["examNumber"] || defNumber
|
|
|
+ );
|
|
|
+ fieldInfos.examNumberStr = stdInfo["examNumber"] || defNumber;
|
|
|
+ }
|
|
|
+ if (cardConfig.aOrB && cardConfig.paperType === "PRINT") {
|
|
|
+ fieldInfos.paperType = this.getBase64Barcode(
|
|
|
+ stdInfo["paperType"] || defNumber
|
|
|
+ );
|
|
|
+ fieldInfos.paperTypeName = stdInfo["paperTypeName"] || "A";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return fieldInfos;
|
|
@@ -155,14 +177,33 @@ export default {
|
|
|
return canvas.toDataURL();
|
|
|
},
|
|
|
appendFieldInfo(pages, fieldInfos) {
|
|
|
- pages.forEach((page, pageNo) => {
|
|
|
- if (pageNo % 2) return;
|
|
|
- const cardHeadElement = page.columns[0].elements[0];
|
|
|
+ if (this.cardCreateMethod === "STANDARD") {
|
|
|
+ pages.forEach((page, pageNo) => {
|
|
|
+ if (pageNo % 2) return;
|
|
|
+ const cardHeadElement = page.columns[0].elements[0];
|
|
|
|
|
|
- if (cardHeadElement.type === "CARD_HEAD") {
|
|
|
- cardHeadElement.fieldInfos = fieldInfos;
|
|
|
- }
|
|
|
- });
|
|
|
+ if (cardHeadElement.type === "CARD_HEAD") {
|
|
|
+ cardHeadElement.fieldInfos = fieldInfos;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ const VALID_ELEMENTS_FOR_EXTERNAL = ["BARCODE", "FILL_FIELD"];
|
|
|
+ pages.forEach(page => {
|
|
|
+ page.columns.forEach(column => {
|
|
|
+ column.elements.forEach(element => {
|
|
|
+ if (!VALID_ELEMENTS_FOR_EXTERNAL.includes(element.type)) return;
|
|
|
+
|
|
|
+ if (element.type === "BARCODE") {
|
|
|
+ const field = element.fields[0] && element.fields[0].code;
|
|
|
+ element.content = `data:image/png;base64,${fieldInfos[field]}`;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ element.fieldInfos = fieldInfos;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
return pages;
|
|
|
}
|
|
|
}
|