Kaynağa Gözat

v2.0.1新增需求

zhangjie 4 yıl önce
ebeveyn
işleme
67b144e73e

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

@@ -100,6 +100,9 @@ export const ableTemplate = ({ id, enable }) => {
 export const templateCategoryList = type => {
   return $postParam("/api/admin/basic/template/list", type);
 };
+export const templateContentView = attachmentId => {
+  return $postParam("/api/admin/basic/template/read_content", { attachmentId });
+};
 // course-manage
 export const courseListPage = datas => {
   return $postParam("/api/admin/basic/course/list", datas);

+ 54 - 5
src/modules/base/views/TemplateManage.vue

@@ -144,13 +144,26 @@
       :template-type="templateType"
       @modified="getList"
     ></modify-template>
+    <!-- template-detail -->
+    <el-dialog
+      :visible.sync="templateDetailDialogIsShow"
+      title="印品模板"
+      width="1200px"
+      top="10px"
+      :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 { ABLE_TYPE, TEMPLATE_TYPE } from "@/constants/enumerate";
 import pickerOptions from "@/constants/datePickerOptions";
-import { templateListPage, ableTemplate } from "../api";
+import { templateListPage, ableTemplate, templateContentView } from "../api";
 import ModifyTemplate from "../components/ModifyTemplate";
 
 export default {
@@ -182,6 +195,7 @@ export default {
       curTemplate: {},
       editType: "ADD",
       ABLE_TYPE,
+      templateDetailDialogIsShow: false,
       // date-picker
       createTime: [],
       pickerOptions
@@ -222,10 +236,45 @@ export default {
       this.editType = "EDIT";
       this.$refs.ModifyTemplate.open();
     },
-    toDetail(row) {
-      this.curTemplate = { ...row, type: this.templateType };
-      this.editType = "PREVIEW";
-      this.$refs.ModifyTemplate.open();
+    async toDetail(row) {
+      if (this.templateType === "GENERIC") {
+        window.open(
+          this.getRouterPath({
+            name: "CardPreview",
+            params: {
+              cardId: row.cardId,
+              viewType: "view"
+            }
+          })
+        );
+        return;
+      }
+      const content = await templateContentView(row.attachmentId);
+      if (!content) return;
+
+      this.templateDetailDialogIsShow = true;
+      this.$nextTick(() => {
+        this.initFrame(content);
+      });
+    },
+    initFrame(htmlContent) {
+      // 移除framemark标签
+      // 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();
     },
     toEnable(row) {
       const action = row.enable ? "禁用" : "启用";

+ 14 - 1
src/modules/base/views/UserManage.vue

@@ -102,6 +102,7 @@
         >
           <template slot-scope="scope">
             <el-button
+              v-if="checkCanEdit(scope.row)"
               class="btn-table-icon"
               type="text"
               icon="icon icon-edit"
@@ -175,9 +176,15 @@ export default {
       ABLE_TYPE,
       roles: [],
       users: [],
-      curUser: {}
+      curUser: {},
+      userRoles: this.$ls.get("user", { roleList: [] }).roleList
     };
   },
+  computed: {
+    IS_SCHOOL_ADMIN() {
+      return this.userRoles.includes("SCHOOL_ADMIN");
+    }
+  },
   created() {
     this.getRoleList();
     this.getList();
@@ -206,6 +213,12 @@ export default {
       this.current = page;
       this.getList();
     },
+    checkCanEdit(row) {
+      return (
+        !this.IS_SCHOOL_ADMIN ||
+        !row.roles.some(role => role.type === "SCHOOL_ADMIN")
+      );
+    },
     toEnable(row) {
       // 自己不可以启用/禁用自己
       const userId = this.$ls.get("user", { id: "" }).id;

+ 4 - 1
src/modules/exam/views/TaskPaperManage.vue

@@ -38,7 +38,7 @@
           >
         </el-form-item>
       </el-form>
-      <div class="part-box-action">
+      <div class="part-box-action" v-if="!IS_SCHOOL_ADMIN">
         <el-button
           icon="el-icon-download"
           type="primary"
@@ -201,6 +201,9 @@ export default {
       IS_QUESTION_TEACHER: this.$ls
         .get("user", { roleList: [] })
         .roleList.includes("QUESTION_TEACHER"),
+      IS_SCHOOL_ADMIN: this.$ls
+        .get("user", { roleList: [] })
+        .roleList.includes("SCHOOL_ADMIN"),
       // date-picker
       createTime: [],
       pickerOptions

+ 10 - 0
src/modules/print/components/ModifyPrintPlan.vue

@@ -49,6 +49,7 @@
           <el-checkbox-group
             v-model="modalForm.printContent"
             :disabled="!editable"
+            @change="printContentChange"
           >
             <el-checkbox
               v-for="(val, key) in PRINT_CONTENT_TYPE"
@@ -368,6 +369,7 @@ export default {
       variableContent: [],
       ordinaryContent: [],
       templateSources: {},
+      oldPrintContent: [],
       rules: {
         name: [
           {
@@ -452,6 +454,14 @@ export default {
 
       this.$refs.modalFormComp.validateField("selectedPrint");
     },
+    printContentChange(val) {
+      const isSelectPaper =
+        !this.oldPrintContent.includes("PAPER") && val.includes("PAPER");
+      if (isSelectPaper && !val.includes("CARD")) {
+        val.push("CARD");
+      }
+      this.oldPrintContent = val;
+    },
     initData(val) {
       if (val.id) {
         this.createTime = [val.examStartTime, val.examEndTime];

+ 23 - 2
src/modules/print/views/PrintTaskManage.vue

@@ -61,7 +61,21 @@
         <el-form-item label="考试日期:">
           <el-date-picker
             v-model="createTime"
-            type="daterange"
+            type="datetimerange"
+            :picker-options="pickerOptions"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="timestamp"
+            align="right"
+            unlink-panels
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="打印时间:">
+          <el-date-picker
+            v-model="printTime"
+            type="datetimerange"
             :picker-options="pickerOptions"
             range-separator="至"
             start-placeholder="开始日期"
@@ -297,7 +311,9 @@ export default {
         examPlace: "",
         examRoom: "",
         examStartTime: "",
-        examEndTime: ""
+        examEndTime: "",
+        printStartTime: "",
+        printEndTime: ""
       },
       current: 1,
       size: this.GLOBAL.pageSize,
@@ -312,6 +328,7 @@ export default {
       curTask: {},
       // date-picker
       createTime: [],
+      printTime: [],
       pickerOptions
     };
   },
@@ -329,6 +346,10 @@ export default {
         datas.examStartTime = this.createTime[0];
         datas.examEndTime = this.createTime[1];
       }
+      if (this.printTime) {
+        datas.printStartTime = this.printTime[0];
+        datas.printEndTime = this.printTime[1];
+      }
       const data = await printTaskListPage(datas);
       this.dataList = data.records.map(item => {
         const { date, time } = parseTimeRangeDateAndTime(