zhangjie 4 роки тому
батько
коміт
9f2827c4a9

+ 1 - 0
card/assets/styles/card-preview.scss

@@ -1235,6 +1235,7 @@
   .elem-composition-element {
     .composition-element-body {
       position: absolute;
+      overflow: hidden;
     }
   }
 }

+ 1 - 0
card/components/common/ElementResize.vue

@@ -337,6 +337,7 @@ export default {
       this.lastSizePos = { ...this.sizePos };
       if (this.positionType === "relative")
         this.offsetTopOrigin = this.$el.offsetTop < 0 ? 0 : this.$el.offsetTop;
+      this.emitChange();
       this.$emit("resize-over", this.sizePos);
     },
     moveStart() {

+ 2 - 3
card/elements/composition/ElemCompositionEdit.vue

@@ -85,12 +85,11 @@ export default {
     },
     dropInnerElement(e) {
       let { layerX: x, layerY: y } = e;
-      const { offsetLeft, offsetTop } = this.getOffsetInfo(e.target);
       // 作文题的子元素中会新增container字段
       const curElement = {
         ...this.curDragElement,
-        x: x + offsetLeft,
-        y: y + offsetTop,
+        x,
+        y,
         container: {
           id: this.data.id,
           type: this.data.type

+ 17 - 0
src/assets/styles/element-ui-costom.scss

@@ -81,9 +81,11 @@
     height: 100%;
     top: 0;
     left: 0;
+    padding: 0;
     background-color: transparent;
   }
 }
+
 // form
 .el-form {
   &-item {
@@ -518,3 +520,18 @@
     line-height: 28px;
   }
 }
+
+// el-step
+.el-step {
+  &__title.is-success,
+  &__description.is-success {
+    color: $--color-primary;
+  }
+  &__head.is-success {
+    color: $--color-primary;
+    border-color: $--color-primary;
+    .el-step__line {
+      background-color: $--color-primary;
+    }
+  }
+}

+ 1 - 1
src/main.js

@@ -87,7 +87,7 @@ axios.interceptors.request.use(
           {
             token: token,
             account: sessionId,
-            uri: config.url,
+            uri: config.url.split("?")[0],
             method: config.method
           },
           "token"

+ 24 - 0
src/modules/admin/components/ModifyUser.vue

@@ -106,6 +106,13 @@ export default {
     }
   },
   data() {
+    const roleIdsValidator = (rule, value, callback) => {
+      if (!value || !value.length) {
+        callback(new Error("请选择角色"));
+      } else {
+        callback();
+      }
+    };
     return {
       modalIsShow: false,
       isSubmit: false,
@@ -117,6 +124,11 @@ export default {
             required: true,
             message: "请输入用户名",
             trigger: "change"
+          },
+          {
+            max: 50,
+            message: "用户名不能超过50",
+            trigger: "change"
           }
         ],
         realName: [
@@ -124,6 +136,18 @@ export default {
             required: true,
             message: "请输入姓名",
             trigger: "change"
+          },
+          {
+            max: 50,
+            message: "姓名不能超过50",
+            trigger: "change"
+          }
+        ],
+        roleIds: [
+          {
+            required: true,
+            validator: roleIdsValidator,
+            trigger: "change"
           }
         ]
       },

+ 2 - 0
src/modules/base/components/RuleExam.vue

@@ -162,6 +162,8 @@ export default {
       this.isSubmit = false;
       if (!data) return;
 
+      this.modalForm.id = data;
+
       this.$message.success("保存成功!");
     }
   }

+ 7 - 1
src/modules/exam/components/ApplyContent.vue

@@ -94,7 +94,12 @@
           v-for="(img, index) in paperConfirmAttachments"
           :key="index"
         >
-          <img :src="img.url" :alt="img.filename" @click="toPreview(index)" />
+          <img
+            :src="img.url"
+            :alt="img.filename"
+            title="点击查看大图"
+            @click="toPreview(index)"
+          />
           <div v-if="IS_APPLY" class="image-delete">
             <i
               class="el-icon-delete-solid"
@@ -290,6 +295,7 @@ export default {
       this.curTaskApply.courseCode = this.examTask.courseCode;
       this.curTaskApply.courseName = this.examTask.courseName;
       this.curTaskApply.cardRuleId = this.examTask.cardRuleId;
+      this.curTaskApply.customCard = this.examTask.customCard;
       this.paperAttachments = this.curTaskApply.paperAttachmentIds
         ? JSON.parse(this.curTaskApply.paperAttachmentIds)
         : [];

+ 1 - 1
src/modules/exam/components/ModifyTaskApply.vue

@@ -22,7 +22,7 @@
           </el-col>
           <el-col :span="14">
             <el-form-item label="适用专业(方向):">
-              <span>{{ modalForm.specialty }}</span>
+              <span>{{ modalForm.specialty | defaultFieldFilter }}</span>
             </el-form-item>
           </el-col>
         </el-row>

+ 0 - 1
src/modules/exam/views/TaskReviewManage.vue

@@ -208,7 +208,6 @@
     ></modify-task-apply>
     <!-- audit-dialog-->
     <el-dialog
-      class="modify-task-apply"
       :visible.sync="auditDialogShow"
       title="审核不通过"
       width="500px"

+ 3 - 0
src/modules/print/api.js

@@ -90,3 +90,6 @@ export const getPrintTaskPdf = examDetailId => {
 export const downloadPrintTaskPdf = ids => {
   return $post("/api/admin/exam/print/task_download_pdf", { ids });
 };
+export const printTaskTemplateView = printPlanId => {
+  return $post("/api/admin/exam/print/template_view", { printPlanId });
+};

+ 115 - 0
src/modules/print/components/PreviewPrintTaskTemplate.vue

@@ -0,0 +1,115 @@
+<template>
+  <div class="preview-print-task-template">
+    <!-- view template-->
+    <el-dialog
+      :visible.sync="templateDialogIsShow"
+      title="查看印品"
+      width="500px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+      @open="initData"
+    >
+      <el-table :data="templates" border stripe>
+        <el-table-column
+          type="index"
+          label="序号"
+          width="70"
+          align="center"
+          :index="indexMethod"
+        ></el-table-column>
+        <el-table-column prop="type" label="印品名称">
+          <span slot-scope="scope">
+            {{ scope.row.type | templateClassifyFilter }}
+          </span>
+        </el-table-column>
+        <el-table-column class-name="action-column" label="操作" align="center">
+          <div slot-scope="scope">
+            <el-button
+              class="btn-table-icon"
+              type="text"
+              icon="icon icon-circle-right"
+              @click="toViewTemplate(scope.row)"
+              title="查看详情"
+            ></el-button>
+          </div>
+        </el-table-column>
+      </el-table>
+      <div slot="footer"></div>
+    </el-dialog>
+    <!-- template-detail -->
+    <el-dialog
+      :visible.sync="templateDetailDialogIsShow"
+      title="印品模板"
+      width="1200px"
+      top="0px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+    >
+      <div id="template-frame"></div>
+      <div slot="footer"></div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { printTaskTemplateView } from "../api";
+
+export default {
+  name: "preview-print-task-template",
+  props: {
+    instance: {
+      type: Object,
+      default() {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      templateDialogIsShow: false,
+      templateDetailDialogIsShow: false,
+      templates: []
+    };
+  },
+  methods: {
+    async initData() {
+      this.templates = [];
+      const data = await printTaskTemplateView(this.instance.printPlanId);
+      this.templates = data || [];
+    },
+    toViewTemplate(row) {
+      if (row.url) {
+        window.open(row.url);
+      } else {
+        this.templateDetailDialogIsShow = true;
+        this.$nextTick(() => {
+          this.initFrame(row.content);
+        });
+      }
+    },
+    initFrame(htmlContent) {
+      htmlContent = htmlContent
+        .replace(/\$\{.+?\}/g, "")
+        .replace(/<#.+?>/g, "")
+        .replace(/<\/#.+?>/g, "");
+      const frameContainerDom = document.getElementById("template-frame");
+      frameContainerDom.innerHTML = "";
+      const iframeDom = document.createElement("iframe");
+      frameContainerDom.appendChild(iframeDom);
+      console.dir(frameContainerDom);
+      const wwidth = frameContainerDom.parentNode.clientWidth - 50;
+      const wheight = window.innerHeight - 130;
+      iframeDom.style.cssText = `width: ${wwidth}px;height: ${wheight}px;border:none;outline:none;background-color: #fff;`;
+      const iframeDoc = iframeDom.contentDocument;
+      iframeDoc.open();
+      iframeDoc.write(htmlContent);
+      iframeDoc.close();
+    },
+    open() {
+      this.templateDialogIsShow = true;
+    }
+  }
+};
+</script>

+ 14 - 1
src/modules/print/views/PrintTaskManage.vue

@@ -259,6 +259,12 @@
         </el-pagination>
       </div>
     </div>
+
+    <!-- PreviewPrintTaskTemplate-->
+    <preview-print-task-template
+      :instance="curTask"
+      ref="PreviewPrintTaskTemplate"
+    ></preview-print-task-template>
   </div>
 </template>
 
@@ -275,9 +281,11 @@ import {
 import { PRINT_TASK_STATUS } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
 import { parseTimeRangeDateAndTime } from "@/plugins/utils";
+import PreviewPrintTaskTemplate from "../components/PreviewPrintTaskTemplate";
 
 export default {
   name: "print-task-manage",
+  components: { PreviewPrintTaskTemplate },
   data() {
     return {
       filter: {
@@ -299,6 +307,8 @@ export default {
       multipleSelection: [],
       PRINT_TASK_STATUS,
       loading: false,
+      // view-template
+      curTask: {},
       // date-picker
       createTime: [],
       pickerOptions
@@ -355,7 +365,10 @@ export default {
     handleSelectionChange(val) {
       this.multipleSelection = val.map(item => item.examDetailId);
     },
-    toPreview(row) {},
+    toPreview(row) {
+      this.curTask = row;
+      this.$refs.PreviewPrintTaskTemplate.open();
+    },
     toSubmit(row) {
       this.$confirm("确定提交该印刷任务吗?", "提示", {
         cancelButtonClass: "el-button--danger is-plain",