zhangjie %!s(int64=3) %!d(string=hai) anos
pai
achega
7db9263bba

+ 1 - 0
src/assets/styles/pages.scss

@@ -682,6 +682,7 @@
   }
   .user-types {
     font-size: 0;
+    margin-bottom: 5px;
   }
   .user-type {
     display: inline-block;

+ 1 - 1
src/constants/enumerate.js

@@ -15,7 +15,7 @@ export const BOOLEAN_TYPE = {
 
 // 审核状态
 export const AUDITING_STATUS = {
-  START: "已开始",
+  START: "待审核",
   AUDITING: "审核中",
   REJECT: "已驳回",
   CANCEL: "已撤回",

+ 17 - 81
src/modules/base/components/ModifyFlowDetail.vue

@@ -45,31 +45,16 @@
                 >审批人
               </div>
               <div v-if="node.type === 'PROCESS'" class="flow-node-content">
-                <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>
+                <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 class="flow-node-content">
                 <span><i :class="nodeIcons[node.type]"></i></span>
@@ -88,24 +73,7 @@
             <h3 class="flow-property-title">节点属性</h3>
             <div class="property-part">
               <h4 class="property-part-title">设置审批人</h4>
-              <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"
-              >
+              <div class="flow-users">
                 <el-button
                   size="small"
                   type="primary"
@@ -134,36 +102,8 @@
                   >
                 </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
-              v-if="curNode.property.approveUserType === 'USER'"
-              class="property-part"
-            >
+            <div class="property-part">
               <h4 class="property-part-title">设置抄送人</h4>
               <div class="flow-users">
                 <el-button
@@ -479,15 +419,11 @@ export default {
       const nodeUserValid = !this.nodes
         .filter(node => node.type === "PROCESS")
         .some(node => {
-          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;
-          }
+          return !node.property.approveUsers.length;
+          // return !(
+          //   node.property.approveUsers.length &&
+          //   node.property.copyForUsers.length
+          // );
         });
       if (!nodeUserValid) {
         this.$message.error("请完成节点设置");

+ 75 - 8
src/modules/base/components/SelectUserDialog.vue

@@ -12,7 +12,6 @@
   >
     <el-row type="flex" :gutter="10">
       <el-col :span="12">
-        <div class="user-part-title">组织架构</div>
         <div class="user-search">
           <el-input
             v-model="filterLabel"
@@ -23,6 +22,20 @@
             @input="labelChange"
           ></el-input>
         </div>
+        <div class="user-types">
+          <div
+            :class="['user-type', { 'is-active': userType === 'org' }]"
+            @click="switchUserType('org')"
+          >
+            组织架构
+          </div>
+          <div
+            :class="['user-type', { 'is-active': userType === 'role' }]"
+            @click="switchUserType('role')"
+          >
+            角色
+          </div>
+        </div>
         <div class="user-tree">
           <el-tree
             ref="UserTree"
@@ -46,8 +59,7 @@
         <div class="user-list">
           <div v-for="user in selectedUsers" :key="user.id" class="user-item">
             <p class="user-cont">
-              <span>{{ user.name }}</span
-              ><span>{{ user.phoneNumber }}</span>
+              <span>{{ user.label }}</span>
             </p>
             <el-button
               class="user-delete"
@@ -91,7 +103,9 @@ export default {
     return {
       modalIsShow: false,
       filterLabel: "",
+      userType: "org",
       orgUsers: [],
+      roleUsers: [],
       userTree: [],
       userList: [],
       selectedUsers: [],
@@ -99,7 +113,7 @@ export default {
       selectValid: true,
       defaultProps: {
         children: "children",
-        label: "name"
+        label: "label"
       }
     };
   },
@@ -109,11 +123,12 @@ export default {
   methods: {
     async getOrgUser() {
       const data = await organizationList();
+      let roleUserMap = {};
       const parseUser = list => {
         return list.map(item => {
           let nitem = {
             id: item.id,
-            name: item.name,
+            label: item.name,
             isUser: false,
             children: []
           };
@@ -123,12 +138,24 @@ export default {
           }
           if (item["sysUserList"] && item["sysUserList"].length) {
             const users = item.sysUserList.map(user => {
-              return {
+              const nuser = {
                 id: user.id,
+                label: user.realName,
                 name: user.realName,
                 orgName: item.name,
                 isUser: true
               };
+              if (!roleUserMap[user.roleId]) {
+                roleUserMap[user.roleId] = {
+                  id: user.roleId,
+                  label: user.roleName,
+                  children: []
+                };
+              }
+              let ruser = { ...nuser };
+              ruser.label = `${ruser.name}(${ruser.orgName})`;
+              roleUserMap[user.roleId].children.push(ruser);
+              return nuser;
             });
             nitem.children = [...nitem.children, ...users];
           }
@@ -136,6 +163,7 @@ export default {
         });
       };
       this.orgUsers = parseUser(data);
+      this.roleUsers = Object.values(roleUserMap);
       this.userTree = this.orgUsers;
       this.getUserList();
     },
@@ -166,7 +194,7 @@ export default {
           .filter(item => reg.test(item.name))
           .map(item => {
             let nitme = { ...item };
-            nitme.name = `${nitme.name}(${nitme.orgName})`;
+            nitme.label = `${nitme.name}(${nitme.orgName})`;
             return nitme;
           });
       }
@@ -188,8 +216,47 @@ export default {
     open() {
       this.modalIsShow = true;
     },
+    switchUserType(type) {
+      this.userType = type;
+      this.userTree = type === "org" ? this.orgUsers : this.roleUsers;
+    },
     userChange() {
-      this.selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
+      if (this.filterLabel) {
+        let prevSelectUserIds = this.selectedUsers.map(item => item.id);
+        const prevUserListSelectUserIds = this.userTree
+          .filter(user => prevSelectUserIds.includes(user.id))
+          .map(user => user.id);
+        const selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
+        const sIds = selectedUsers.map(user => user.id);
+        const prevDeletedUserIds = prevUserListSelectUserIds.filter(
+          uid => !sIds.includes(uid)
+        );
+        this.selectedUsers = this.selectedUsers.filter(
+          user => !prevDeletedUserIds.includes(user.id)
+        );
+        prevSelectUserIds = this.selectedUsers.map(item => item.id);
+
+        selectedUsers.forEach(user => {
+          if (prevSelectUserIds.includes(user.id)) return;
+          const nuser = {
+            id: user.id,
+            name: user.name,
+            label: `${user.name}(${user.orgName})`
+          };
+          this.selectedUsers.push(nuser);
+        });
+      } else {
+        const selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
+        this.selectedUsers = selectedUsers.map(user => {
+          const nuser = {
+            id: user.id,
+            name: user.name,
+            label: `${user.name}(${user.orgName})`
+          };
+          return nuser;
+        });
+      }
+      // console.log(this.selectedUsers);
       this.selectedUserIds = this.selectedUsers.map(item => item.id);
       this.checkValid();
     },