Browse Source

流程新增选角色,bug修改

zhangjie 3 years ago
parent
commit
e9d001392a

+ 5 - 4
card/store/card.js

@@ -357,9 +357,9 @@ const actions = {
       state.topics
     );
     // 缓存已编辑的小题高度信息。
-    const elementHeights = positionInfos.map(
-      pos => state.topics[pos._elementNo].h
-    );
+    // const elementHeights = positionInfos.map(
+    //   pos => state.topics[pos._elementNo].h
+    // );
     // 删除所有小题
     positionInfos.reverse().forEach(pos => {
       state.topics.splice(pos._elementNo, 1);
@@ -368,7 +368,8 @@ const actions = {
     const newElements = createFunc[element.type](element);
     const pos = positionInfos.pop();
     newElements.forEach((newElement, index) => {
-      newElement.h = Math.max(elementHeights[index] || 0, newElement.h);
+      // 不再复用缓存高度,修改于2022-03-10 09:23
+      // newElement.h = Math.max(elementHeights[index] || 0, newElement.h);
       state.topics.splice(pos._elementNo + index, 0, newElement);
     });
   },

+ 16 - 0
src/assets/styles/login.scss

@@ -11,6 +11,22 @@
   background-size: cover;
   overflow: auto;
 }
+.login-footer {
+  position: absolute;
+  width: 100%;
+  bottom: 0;
+  padding: 10px;
+  color: $--color-text-gray;
+  text-align: center;
+
+  a {
+    margin: 0 5px;
+
+    &:hover {
+      color: $--color-primary;
+    }
+  }
+}
 
 .login-box {
   position: absolute;

+ 89 - 18
src/modules/base/components/ModifyFlowDetail.vue

@@ -45,16 +45,31 @@
                 >审批人
               </div>
               <div v-if="node.type === 'PROCESS'" class="flow-node-content">
-                <p>
-                  {{
-                    node.property.approveUsers.map(item => item.name).join(",")
-                  }}
-                </p>
-                <p v-if="node.property.copyForUsers.length">
-                  抄送:{{
-                    node.property.copyForUsers.map(item => item.name).join(",")
-                  }}
-                </p>
+                <div v-if="node.property.approveUserType === 'USER'">
+                  <p>
+                    {{
+                      node.property.approveUsers
+                        .map(item => item.name)
+                        .join(",")
+                    }}
+                  </p>
+                  <p v-if="node.property.copyForUsers.length">
+                    抄送:{{
+                      node.property.copyForUsers
+                        .map(item => item.name)
+                        .join(",")
+                    }}
+                  </p>
+                </div>
+                <div v-else>
+                  <p>
+                    {{
+                      node.property.approveRoles
+                        .map(item => item.name)
+                        .join(",")
+                    }}
+                  </p>
+                </div>
               </div>
               <div v-else class="flow-node-content">
                 <span><i :class="nodeIcons[node.type]"></i></span>
@@ -73,7 +88,24 @@
             <h3 class="flow-property-title">节点属性</h3>
             <div class="property-part">
               <h4 class="property-part-title">设置审批人</h4>
-              <div class="flow-users">
+              <div class="flow-radio">
+                <el-radio-group
+                  v-model="curNode.property.approveUserType"
+                  size="small"
+                  @change="curNodeChange"
+                >
+                  <el-radio
+                    v-for="(val, key) in APPROVE_USER_TYPE"
+                    :key="key"
+                    :label="key"
+                    >{{ val }}</el-radio
+                  >
+                </el-radio-group>
+              </div>
+              <div
+                v-if="curNode.property.approveUserType === 'USER'"
+                class="flow-users"
+              >
                 <el-button
                   size="small"
                   type="primary"
@@ -102,8 +134,36 @@
                   >
                 </div>
               </div>
+              <div v-else class="flow-users">
+                <el-button size="small" type="primary" @click="toAddApproveRole"
+                  >添加角色</el-button
+                >
+                <div class="user-list">
+                  <el-tag
+                    v-for="role in curNode.property.approveRoles"
+                    :key="role.id"
+                    size="small"
+                    closable
+                    :disable-transitions="false"
+                    @close="deleteApproveRole(role)"
+                  >
+                    {{ role.name }}
+                  </el-tag>
+                  <el-button
+                    class="user-clear"
+                    type="danger"
+                    size="mini"
+                    plain
+                    @click="clearApproveRole"
+                    >清空</el-button
+                  >
+                </div>
+              </div>
             </div>
-            <div class="property-part">
+            <div
+              v-if="curNode.property.approveUserType === 'USER'"
+              class="property-part"
+            >
               <h4 class="property-part-title">设置抄送人</h4>
               <div class="flow-users">
                 <el-button
@@ -200,6 +260,12 @@
       :users="curAddUsers"
       @modified="userModified"
     ></select-user-dialog>
+    <!-- SelectRoleDialog -->
+    <select-role-dialog
+      ref="SelectRoleDialog"
+      :data="curAddRoles"
+      @modified="roleModified"
+    ></select-role-dialog>
   </div>
 </template>
 
@@ -207,6 +273,7 @@
 import { deepCopy } from "../../../plugins/utils";
 import { flowDetail, updateFlowDetail } from "../api";
 import SelectUserDialog from "./SelectUserDialog";
+import SelectRoleDialog from "./SelectRoleDialog";
 
 const DEFAULT_NODE = {
   id: "",
@@ -229,7 +296,7 @@ const DEFAULT_NODE = {
 
 export default {
   name: "modify-flow-detail",
-  components: { SelectUserDialog },
+  components: { SelectUserDialog, SelectRoleDialog },
   props: {
     instance: {
       type: Object,
@@ -412,11 +479,15 @@ export default {
       const nodeUserValid = !this.nodes
         .filter(node => node.type === "PROCESS")
         .some(node => {
-          return !node.property.approveUsers.length;
-          // return !(
-          //   node.property.approveUsers.length &&
-          //   node.property.copyForUsers.length
-          // );
+          if (node.property.approveUserType === "USER") {
+            return !node.property.approveUsers.length;
+            // return !(
+            //   node.property.approveUsers.length &&
+            //   node.property.copyForUsers.length
+            // );
+          } else {
+            return !node.property.approveRoles.length;
+          }
         });
       if (!nodeUserValid) {
         this.$message.error("请完成节点设置");

+ 1 - 1
src/modules/base/views/SemesterManage.vue

@@ -48,7 +48,7 @@
         <el-table-column class-name="action-column" label="操作" width="200px">
           <template slot-scope="scope">
             <el-button
-              v-if="checkPrivilege('link', 'edit')"
+              v-if="checkPrivilege('link', 'edit') && !scope.row.inUsed"
               class="btn-primary"
               type="text"
               @click="setUsed(scope.row)"

+ 1 - 0
src/modules/exam/components/ModifyTaskPaper.vue

@@ -197,6 +197,7 @@ import { attachmentPreview } from "../../login/api";
 import { examRuleDetail } from "../../base/api";
 
 const initTaskApply = {
+  examId: "",
   examTaskId: "",
   paperType: "A",
   paperAttachmentIds: "",

+ 6 - 24
src/modules/exam/components/createExamAndPrintTask/InfoExamTask.vue

@@ -10,19 +10,11 @@
         <el-row>
           <el-col :span="12">
             <el-form-item prop="semesterId" label="使用学期:">
-              <el-select
-                v-model.trim="examTask.semesterId"
-                placeholder="请选择使用学期"
+              <semester-select
+                v-model="examTask.semesterId"
                 class="width-full"
                 @change="semesterChange"
-              >
-                <el-option
-                  v-for="item in semesters"
-                  :key="item.id"
-                  :value="item.id"
-                  :label="item.name"
-                ></el-option>
-              </el-select>
+              ></semester-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -242,7 +234,7 @@ import UploadPaperDialog from "../UploadPaperDialog";
 import SimpleImagePreview from "@/components/SimpleImagePreview";
 import { CARD_SOURCE_TYPE } from "@/constants/enumerate";
 import { cardForSelectList } from "../../api";
-import { courseQuery, examSemesterList } from "../../../base/api";
+import { courseQuery } from "../../../base/api";
 
 export default {
   name: "info-exam-task",
@@ -319,7 +311,6 @@ export default {
   },
   mounted() {
     this.initData();
-    this.getSemesters();
   },
   methods: {
     initData() {
@@ -363,17 +354,8 @@ export default {
       });
       this.courses = res || [];
     },
-    async getSemesters() {
-      const res = await examSemesterList({ inUsed: 1 });
-      this.semesters = res || [];
-      this.examTask.semesterId = this.semesters[0].id;
-      this.examTask.paperName = this.semesters[0].name;
-    },
-    semesterChange() {
-      const curSemester = this.semesters.find(
-        item => item.id === this.semesterId
-      );
-      this.examTask.paperName = curSemester.name;
+    semesterChange(val) {
+      this.examTask.paperName = val.name;
     },
     teachingRoomChange() {
       this.examTask.courseCode = "";

+ 10 - 0
src/modules/login/views/LoginHome.vue

@@ -1,6 +1,16 @@
 <template>
   <div class="login-home">
     <router-view></router-view>
+    <div class="login-footer">
+      <p>
+        <a href="http://www.qmth.com.cn" target="_blank"
+          >Copyright © 2022 启明泰和</a
+        >
+        <a href="https://beian.miit.gov.cn/" target="_blank"
+          >鄂ICP备12000033号-9</a
+        >
+      </p>
+    </div>
   </div>
 </template>
 

+ 4 - 18
src/modules/print/components/ModifyPrintPlan.vue

@@ -43,19 +43,11 @@
           </el-date-picker>
         </el-form-item>
         <el-form-item prop="semesterId" label="使用学期:">
-          <el-select
-            v-model.trim="modalForm.semesterId"
-            placeholder="请选择使用学期"
-            style="width: 100%"
+          <semester-select
+            v-model="modalForm.semesterId"
+            class="width-full"
             :disabled="!editable"
-          >
-            <el-option
-              v-for="item in semesters"
-              :key="item.id"
-              :value="item.id"
-              :label="item.name"
-            ></el-option>
-          </el-select>
+          ></semester-select>
         </el-form-item>
         <el-form-item prop="examId" label="考试:">
           <exam-select
@@ -288,7 +280,6 @@ import {
 } from "@/constants/enumerate";
 import { deepCopy } from "@/plugins/utils";
 import { updatePrintPlan, printPlanTemplateList } from "../api";
-import { examSemesterList } from "../../base/api";
 
 const initModalForm = {
   id: null,
@@ -475,7 +466,6 @@ export default {
   },
   mounted() {
     this.getTemplates();
-    this.getSemesters();
   },
   methods: {
     async getTemplates() {
@@ -487,10 +477,6 @@ export default {
       });
       this.templateSources = templateSources;
     },
-    async getSemesters() {
-      const res = await examSemesterList({ inUsed: 1 });
-      this.semesters = res || [];
-    },
     selectAll(selected) {
       if (selected) {
         this.modalForm.printContent = ["PAPER", "CARD"];