Parcourir la source

activiti对接现有用户系统

xiongzhu il y a 7 ans
Parent
commit
8e18953569

+ 63 - 0
awesome-admin.iml

@@ -30,6 +30,51 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-engine:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-bpmn-converter:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-process-validation:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-image-generator:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-spring:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-explorer:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-crystalball:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.imgscalr:imgscalr-lib:4.2" level="project" />
+    <orderEntry type="library" name="Maven: org.codehaus.groovy:groovy-all:2.4.5" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-modeler:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-common-rest:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:3.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:3.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:3.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-parser:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-awt-util:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-util:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-xml:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-transcoder:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:fop:0.94" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:1.2" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.avalon.framework:avalon-framework-api:4.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.avalon.framework:avalon-framework-impl:4.3.1" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-dom:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-gvt:1.7" level="project" />
+    <orderEntry type="library" name="Maven: xml-apis:xml-apis-ext:1.3.04" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-bridge:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-anim:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-ext:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-script:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-js:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-codec:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-css:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svg-dom:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svggen:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-rest:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-simple-workflow:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-bpmn-layout:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:3.2.3.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-diagram-rest:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-json-converter:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-bpmn-model:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: org.activiti:activiti-cxf:5.22.0" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.13" level="project" />
+    <orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.13" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.5.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-beans:4.3.5.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.5.RELEASE" level="project" />
@@ -52,6 +97,24 @@
     <orderEntry type="library" name="Maven: org.mybatis:mybatis:3.3.1" level="project" />
     <orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.2.2" level="project" />
     <orderEntry type="library" name="Maven: com.alibaba:druid:1.0.31" level="project" />
+    <orderEntry type="module-library">
+      <library name="Maven: com.alibaba:jconsole:1.8.0">
+        <CLASSES>
+          <root url="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/lib/jconsole.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library">
+      <library name="Maven: com.alibaba:tools:1.8.0">
+        <CLASSES>
+          <root url="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/lib/tools.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
     <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.30" level="project" />
     <orderEntry type="library" scope="TEST" name="Maven: com.microsoft.sqlserver:mssql-jdbc:6.4.0.jre8" level="project" />
     <orderEntry type="library" name="Maven: c3p0:c3p0:0.9.1.1" level="project" />

+ 36 - 0
src/main/java/com/izouma/awesomeadmin/activiti/CustomGroupEntityManager.java

@@ -0,0 +1,36 @@
+package com.izouma.awesomeadmin.activiti;
+
+import com.izouma.awesomeadmin.model.SysRole;
+import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.UserInfoService;
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.impl.persistence.entity.GroupEntity;
+import org.activiti.engine.impl.persistence.entity.GroupEntityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomGroupEntityManager extends GroupEntityManager {
+    @Autowired
+    private UserInfoService userInfoService;
+
+    @Override
+    public List<Group> findGroupsByUser(String userId) {
+        List<Group> groupList = new ArrayList<>();
+        UserInfo userInfo = userInfoService.getUserInfoById(userId);
+        if (userInfo == null) {
+            return null;
+        }
+        if (userInfo.getRoleInfoList() != null) {
+            for (SysRole sysRole : userInfo.getRoleInfoList()) {
+                Group group = new GroupEntity();
+                group.setId(sysRole.getId().toString());
+                group.setName(sysRole.getName());
+                group.setType("assignment");
+                groupList.add(group);
+            }
+        }
+        return groupList;
+    }
+}

+ 24 - 0
src/main/java/com/izouma/awesomeadmin/activiti/CustomGroupEntityManagerFactory.java

@@ -0,0 +1,24 @@
+package com.izouma.awesomeadmin.activiti;
+
+import org.activiti.engine.impl.interceptor.Session;
+import org.activiti.engine.impl.interceptor.SessionFactory;
+import org.activiti.engine.impl.persistence.entity.GroupIdentityManager;
+
+public class CustomGroupEntityManagerFactory implements SessionFactory {
+
+    private CustomGroupEntityManager customGroupEntityManager;
+
+    @Override
+    public Class<?> getSessionType() {
+        return GroupIdentityManager.class;
+    }
+
+    @Override
+    public Session openSession() {
+        return customGroupEntityManager;
+    }
+
+    public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {
+        this.customGroupEntityManager = customGroupEntityManager;
+    }
+}

+ 51 - 0
src/main/java/com/izouma/awesomeadmin/activiti/CustomUserEntityManager.java

@@ -0,0 +1,51 @@
+package com.izouma.awesomeadmin.activiti;
+
+import com.izouma.awesomeadmin.model.SysRole;
+import com.izouma.awesomeadmin.model.UserInfo;
+import com.izouma.awesomeadmin.service.UserInfoService;
+import org.activiti.engine.identity.Group;
+import org.activiti.engine.identity.User;
+import org.activiti.engine.impl.persistence.entity.GroupEntity;
+import org.activiti.engine.impl.persistence.entity.UserEntity;
+import org.activiti.engine.impl.persistence.entity.UserEntityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomUserEntityManager extends UserEntityManager {
+
+    @Autowired
+    private UserInfoService userInfoService;
+
+    @Override
+    public User findUserById(String userId) {
+        UserInfo userInfo = userInfoService.getUserInfoById(userId);
+        if (userInfo != null) {
+            User user = new UserEntity();
+            user.setId(userInfo.getId().toString());
+            user.setFirstName(userInfo.getUsername());
+            user.setLastName(userInfo.getNickname());
+        }
+        return null;
+    }
+
+    @Override
+    public List<Group> findGroupsByUser(String userId) {
+        List<Group> groupList = new ArrayList<>();
+        UserInfo userInfo = userInfoService.getUserInfoById(userId);
+        if (userInfo == null) {
+            return null;
+        }
+        if (userInfo.getRoleInfoList() != null) {
+            for (SysRole sysRole : userInfo.getRoleInfoList()) {
+                Group group = new GroupEntity();
+                group.setId(sysRole.getId().toString());
+                group.setName(sysRole.getName());
+                group.setType("assignment");
+                groupList.add(group);
+            }
+        }
+        return groupList;
+    }
+}

+ 23 - 0
src/main/java/com/izouma/awesomeadmin/activiti/CustomUserEntityManagerFactory.java

@@ -0,0 +1,23 @@
+package com.izouma.awesomeadmin.activiti;
+
+import org.activiti.engine.impl.interceptor.Session;
+import org.activiti.engine.impl.interceptor.SessionFactory;
+import org.activiti.engine.impl.persistence.entity.UserIdentityManager;
+
+public class CustomUserEntityManagerFactory implements SessionFactory {
+    private CustomUserEntityManager customUserEntityManager;
+
+    @Override
+    public Class<?> getSessionType() {
+        return UserIdentityManager.class;
+    }
+
+    @Override
+    public Session openSession() {
+        return customUserEntityManager;
+    }
+
+    public void setCustomUserEntityManager(CustomUserEntityManager customUserEntityManager) {
+        this.customUserEntityManager = customUserEntityManager;
+    }
+}

+ 1 - 1
src/main/java/com/izouma/awesomeadmin/dao/UserInfoMapper.xml

@@ -355,7 +355,7 @@
         </where>
         order by id desc
     </select>
-    <select id="queryUserInfo" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserInfo">
+    <select id="queryUserInfo" parameterType="java.util.Map" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List"/>
         from user_info

+ 7 - 0
src/main/java/com/izouma/awesomeadmin/dto/TreeNode.java

@@ -28,6 +28,13 @@ public class TreeNode {
         this.name = name;
     }
 
+    public TreeNode(String id, String name, String parentId, Object extra) {
+        this.id = id;
+        this.parentId = parentId;
+        this.name = name;
+        this.extra = extra;
+    }
+
     public TreeNode(String id, String name, TreeNode parent) {
         this.id = id;
         this.parentId = parent.getId();

+ 0 - 3
src/main/java/com/izouma/awesomeadmin/service/DepartInfoService.java

@@ -26,9 +26,6 @@ public interface DepartInfoService {
 
 	boolean updateDepartInfo(DepartInfo record);
 
-	List <DepartInfo> findPower(DepartInfo record);
-
-
 	List <DepartInfo> getParentList(Integer id);
 
 	List<TreeNode> getDepartTree(boolean all, Integer userId);

+ 154 - 206
src/main/java/com/izouma/awesomeadmin/service/impl/DepartInfoServiceImpl.java

@@ -4,6 +4,8 @@ import java.util.*;
 
 import com.izouma.awesomeadmin.dto.TreeNode;
 import com.izouma.awesomeadmin.service.UserInfoService;
+import com.izouma.awesomeadmin.util.TreeUtils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,240 +19,186 @@ import com.izouma.awesomeadmin.service.DepartInfoService;
 /**
  * depart_info service接口实现类
  * Thu Apr 26 10:56:37 CST 2018  Suo Chen Cheng
- */ 
+ */
 @Service
 public class DepartInfoServiceImpl implements DepartInfoService {
 
-	private static Logger   logger = Logger.getLogger(DepartInfoServiceImpl.class);
+    private static Logger logger = Logger.getLogger(DepartInfoServiceImpl.class);
 
-	@Autowired
-	private DepartInfoMapper departInfoMapper;
+    @Autowired
+    private DepartInfoMapper departInfoMapper;
 
-	@Autowired
-	private UserInfoService userInfoService;
+    @Autowired
+    private UserInfoService userInfoService;
 
-	@Override
-	public List <DepartInfo> getDepartInfoList(DepartInfo record) {
+    @Override
+    public List<DepartInfo> getDepartInfoList(DepartInfo record) {
 
-		logger.info("getDepartInfoList");
-		try {
+        logger.info("getDepartInfoList");
+        try {
 
-			return departInfoMapper.queryAllDepartInfo(record);
-		} catch (Exception e) {
-			logger.error("getDepartInfoList", e);
-		}
+            return departInfoMapper.queryAllDepartInfo(record);
+        } catch (Exception e) {
+            logger.error("getDepartInfoList", e);
+        }
 
-		return null;
-	}
+        return null;
+    }
 
-	@Override
-	public List <DepartInfo> getDepartInfoByPage(Page page, DepartInfo record) {
+    @Override
+    public List<DepartInfo> getDepartInfoByPage(Page page, DepartInfo record) {
 
-		logger.info("getDepartInfoByPage");
-		try {
+        logger.info("getDepartInfoByPage");
+        try {
 
-			Map <String, Object> parameter = new HashMap <String, Object>();
-			parameter.put("record", record);
-			parameter.put(AppConstant.PAGE, page);
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
 
-			return departInfoMapper.queryDepartInfosByPage(parameter);
-		} catch (Exception e) {
-			logger.error("getDepartInfoByPage", e);
-		}
+            return departInfoMapper.queryDepartInfosByPage(parameter);
+        } catch (Exception e) {
+            logger.error("getDepartInfoByPage", e);
+        }
 
-		return null;
-	}
+        return null;
+    }
 
-	@Override
-	public DepartInfo getDepartInfoById(String id) {
+    @Override
+    public DepartInfo getDepartInfoById(String id) {
 
-		logger.info("getDepartInfoById");
-		try {
+        logger.info("getDepartInfoById");
+        try {
 
-			return departInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
-		} catch (Exception e) {
-			logger.error("getDepartInfoById", e);
-		}
+            return departInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
+        } catch (Exception e) {
+            logger.error("getDepartInfoById", e);
+        }
 
-		return null;
-	}
+        return null;
+    }
 
-	@Override
-	public DepartInfo getDepartInfo(DepartInfo record) {
+    @Override
+    public DepartInfo getDepartInfo(DepartInfo record) {
 
-		logger.info("getDepartInfo");
-		try {
+        logger.info("getDepartInfo");
+        try {
 
-			return departInfoMapper.queryDepartInfo(record);
-		} catch (Exception e) {
-			logger.error("getDepartInfo", e);
-		}
+            return departInfoMapper.queryDepartInfo(record);
+        } catch (Exception e) {
+            logger.error("getDepartInfo", e);
+        }
 
-		return null;
-	}
+        return null;
+    }
 
-	@Override
-	public boolean createDepartInfo(DepartInfo record) {
+    @Override
+    public boolean createDepartInfo(DepartInfo record) {
 
-		logger.info("createDepartInfo");
-		try {
+        logger.info("createDepartInfo");
+        try {
 
-			int updates = departInfoMapper.insertSelective(record);
+            int updates = departInfoMapper.insertSelective(record);
 
-			if (updates > 0) {
-				return true;
-			}
-		} catch (Exception e) {
-			logger.error("createDepartInfo", e);
-		}
+            if (updates > 0) {
+                return true;
+            }
+        } catch (Exception e) {
+            logger.error("createDepartInfo", e);
+        }
 
-		return false;
-	}
+        return false;
+    }
 
-	@Override
-	public boolean deleteDepartInfo(String id) {
+    @Override
+    public boolean deleteDepartInfo(String id) {
 
-		logger.info("deleteDepartInfo");
-		try {
-
-			int updates = departInfoMapper.delete(id);
-
-			if (updates > 0) {
-				return true;
-			}
-		} catch (Exception e) {
-			logger.error("deleteDepartInfo", e);
-		}
-
-		return false;
-	}
-
-	@Override
-	public boolean updateDepartInfo(DepartInfo record) {
-
-		logger.info("updateDepartInfo");
-		try {
-
-			int updates = departInfoMapper.updateByPrimaryKeySelective(record);
-
-			if (updates > 0) {
-				return true;
-			}
-		} catch (Exception e) {
-			logger.error("updateDepartInfo", e);
-		}
-
-		return false;
-	}
-
-
-	@Override
-	public List <DepartInfo> findPower(DepartInfo record) {
-
-		logger.info("findPower");
-		try {
-
-			return departInfoMapper.findPower(record);
-		} catch (Exception e) {
-			logger.error("findPower", e);
-		}
-
-		return null;
-	}
-
-	@Override
-	public List<DepartInfo> getParentList(Integer id) {
-		logger.info("getParentList");
-		try {
-
-			List<DepartInfo> list = departInfoMapper.getParentList(id);
-
-			return list;
-		} catch (Exception e) {
-			logger.error("getParentList", e);
-		}
-		return null;
-	}
-
-	private List<DepartInfo> getParents(DepartInfo departInfo) {
-		List<DepartInfo> menuList = new ArrayList<>();
-		menuList.add(departInfo);
-		if (departInfo.getParentId() != null) {
-			DepartInfo parent = getDepartInfoById(String.valueOf(departInfo.getParentId()));
-			if (parent != null) {
-				menuList.addAll(getParents(parent));
-			}
-		}
-		return menuList;
-	}
-
-
-	@Override
-	public List<TreeNode> getDepartTree(boolean all, Integer userId) {
-
-		logger.info("getDepartTree");
-		try {
-			List<DepartInfo> pp = new ArrayList<>();
-			if (all) {
-				pp = getDepartInfoList(new DepartInfo());
-			} else {
-				List<String> menuIds = new ArrayList<>();
-				/*UserInfo userInfo = userInfoService.getUserInfoById(String.valueOf(userId));
-				for (SysRole role : userInfo.getRoleInfoList()) {
-					if (StringUtils.isNotEmpty(role.getMenuIds())) {
-						menuIds.addAll(Arrays.asList(role.getMenuIds().split(",")));
-					}
-				}
-				removeDuplicate(menuIds);*/
-				StringBuilder sb = new StringBuilder();
-				for (String s : menuIds) {
-					sb.append(s).append(",");
-				}
-				for (DepartInfo departInfo : departInfoMapper.selectByPrimaryKeys(sb.toString())) {
-					pp.addAll(getParents(departInfo));
-				}
-				List<DepartInfo> list = new ArrayList<>();
-				for (DepartInfo menu : pp) {
-					if (!list.contains(menu)) {
-						list.add(menu);
-					}
-				}
-				pp = list;
-			}
-
-			List<TreeNode> trees = new ArrayList<>();
-			List<TreeNode> tree = new ArrayList<>();
-			for (DepartInfo m : pp) {
-				TreeNode treeNode = new TreeNode(String.valueOf(m.getId()), m.getDepartName(), String.valueOf(m.getParentId()));
-				treeNode.setExtra(m);
-				tree.add(treeNode);
-			}
-			for (TreeNode treeNode : tree) {
-				if ("0".equals(treeNode.getParentId())) {
-					trees.add(treeNode);
-				}
-
-				for (TreeNode it : tree) {
-					if (it.getParentId().equals(treeNode.getId())) {
-						if (treeNode.getChildren() == null) {
-							treeNode.setChildren(new ArrayList<>());
-						}
-						treeNode.getChildren().add(it);
-					}
-				}
-			}
-			return trees;
-		} catch (Exception e) {
-			logger.error("getDepartTree", e);
-		}
-
-		return null;
-	}
-	private List removeDuplicate(List list) {
-		HashSet h = new HashSet(list);
-		list.clear();
-		list.addAll(h);
-		return list;
-	}
+        logger.info("deleteDepartInfo");
+        try {
+
+            int updates = departInfoMapper.delete(id);
+
+            if (updates > 0) {
+                return true;
+            }
+        } catch (Exception e) {
+            logger.error("deleteDepartInfo", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean updateDepartInfo(DepartInfo record) {
+
+        logger.info("updateDepartInfo");
+        try {
+
+            int updates = departInfoMapper.updateByPrimaryKeySelective(record);
+
+            if (updates > 0) {
+                return true;
+            }
+        } catch (Exception e) {
+            logger.error("updateDepartInfo", e);
+        }
+
+        return false;
+    }
+
+    @Override
+    public List<DepartInfo> getParentList(Integer id) {
+        logger.info("getParentList");
+        try {
+
+            List<DepartInfo> list = departInfoMapper.getParentList(id);
+
+            return list;
+        } catch (Exception e) {
+            logger.error("getParentList", e);
+        }
+        return null;
+    }
+
+    private List<DepartInfo> getParents(DepartInfo departInfo) {
+        List<DepartInfo> menuList = new ArrayList<>();
+        menuList.add(departInfo);
+        if (departInfo.getParentId() != null) {
+            DepartInfo parent = getDepartInfoById(String.valueOf(departInfo.getParentId()));
+            if (parent != null) {
+                menuList.addAll(getParents(parent));
+            }
+        }
+        return menuList;
+    }
+
+
+    @Override
+    public List<TreeNode> getDepartTree(boolean all, Integer userId) {
+
+        logger.info("getDepartTree");
+        try {
+            List<DepartInfo> pp = getDepartInfoList(new DepartInfo());
+            List<TreeNode> trees = new ArrayList<>();
+            List<TreeNode> allNodes = new ArrayList<>();
+            for (DepartInfo info : pp) {
+                TreeNode treeNode = new TreeNode(String.valueOf(info.getId()), info.getDepartName(), String.valueOf(info.getParentId()), info);
+                allNodes.add(treeNode);
+            }
+            TreeUtils.buildTree(trees, allNodes);
+            return trees;
+        } catch (Exception e) {
+            logger.error("getDepartTree", e);
+        }
+
+        return null;
+    }
+
+
+    private List removeDuplicate(List list) {
+        HashSet h = new HashSet(list);
+        list.clear();
+        list.addAll(h);
+        return list;
+    }
 }
 

+ 3 - 15
src/main/java/com/izouma/awesomeadmin/service/impl/SysMenuServiceImpl.java

@@ -10,6 +10,7 @@ import com.izouma.awesomeadmin.model.SysRole;
 import com.izouma.awesomeadmin.model.UserInfo;
 import com.izouma.awesomeadmin.service.SysMenuService;
 import com.izouma.awesomeadmin.service.UserInfoService;
+import com.izouma.awesomeadmin.util.TreeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +28,7 @@ public class SysMenuServiceImpl implements SysMenuService {
     private static Logger logger = Logger.getLogger(SysMenuServiceImpl.class);
 
     @Autowired
-    private SysMenuMapper sysMenuMapper;
+    private SysMenuMapper   sysMenuMapper;
     @Autowired
     private UserInfoService userInfoService;
 
@@ -185,20 +186,7 @@ public class SysMenuServiceImpl implements SysMenuService {
                 treeNode.setExtra(m);
                 tree.add(treeNode);
             }
-            for (TreeNode treeNode : tree) {
-                if ("0".equals(treeNode.getParentId())) {
-                    trees.add(treeNode);
-                }
-
-                for (TreeNode it : tree) {
-                    if (it.getParentId().equals(treeNode.getId())) {
-                        if (treeNode.getChildren() == null) {
-                            treeNode.setChildren(new ArrayList<>());
-                        }
-                        treeNode.getChildren().add(it);
-                    }
-                }
-            }
+            TreeUtils.buildTree(trees, tree);
             return trees;
         } catch (Exception e) {
             logger.error("updateSysMenu", e);

+ 25 - 0
src/main/java/com/izouma/awesomeadmin/util/TreeUtils.java

@@ -0,0 +1,25 @@
+package com.izouma.awesomeadmin.util;
+
+import com.izouma.awesomeadmin.dto.TreeNode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TreeUtils {
+    public static void buildTree(List<TreeNode> trees, List<TreeNode> allNodes) {
+        for (TreeNode treeNode : allNodes) {
+            if ("0".equals(treeNode.getParentId())) {
+                trees.add(treeNode);
+            }
+
+            for (TreeNode it : allNodes) {
+                if (it.getParentId().equals(treeNode.getId())) {
+                    if (treeNode.getChildren() == null) {
+                        treeNode.setChildren(new ArrayList<>());
+                    }
+                    treeNode.getChildren().add(it);
+                }
+            }
+        }
+    }
+}

+ 104 - 116
src/main/java/com/izouma/awesomeadmin/web/DepartInfoController.java

@@ -24,124 +24,112 @@ import javax.servlet.http.HttpServletRequest;
 /**
  * depart_info controller类
  * Thu Apr 26 10:56:37 CST 2018  Suo Chen Cheng
- */ 
+ */
 @Controller
 @RequestMapping("/departInfo")
-public class DepartInfoController extends BaseController  {
-
-	@Autowired
-	private DepartInfoService departInfoService;
-
-	@Autowired
-	private UserInfoService userInfoService;
-
-	/**
-	 * <p>获取全部记录。</p>
-	 */ 
-	@RequestMapping(value = "/all", method = RequestMethod.GET)
-	@ResponseBody
-	public Result all(DepartInfo record) {
-
-		List <DepartInfo> pp = departInfoService.getDepartInfoList(record);
-		return new Result(true, pp);
-	}
-
-	/**
-	 * <p>根据Id。</p>
-	 */ 
-	@RequestMapping(value = "/getDepartInfo", method = RequestMethod.GET)
-	@ResponseBody
-	public Result getDepartInfo(@RequestParam(required = false, value = "id") String id) {
-
-		DepartInfo data = departInfoService.getDepartInfoById(id);
-		return new Result(true, data);
-	}
-
-	/**
-	 * <p>根据条件获取。</p>
-	 */ 
-	@RequestMapping(value = "/getOne", method = RequestMethod.GET)
-	@ResponseBody
-	public Result getOne(DepartInfo record) {
-
-		DepartInfo data = departInfoService.getDepartInfo(record);
-		return new Result(true, data);
-	}
-
-	/**
-	 * <p>分页查询。</p>
-	 */ 
-	@RequestMapping(value = "/page", method = RequestMethod.GET)
-	@ResponseBody
-	public Result page(Page page, DepartInfo record) {
-
-		Map <String, Object> result = new HashMap <>();
-
-		List <DepartInfo> pp = departInfoService.getDepartInfoByPage(page, record);
-
-		result.put(AppConstant.PAGE, page);
-		result.put("pp", pp);
-		return new Result(true, result);
-	}
-
-	/**
-	 * <p>保存。</p>
-	 */ 
-	@RequestMapping(value = "/save", method = RequestMethod.POST)
-	@ResponseBody
-	public Result save(HttpServletRequest request,DepartInfo record) {
-			boolean num = departInfoService.createDepartInfo(record);
-			if (num) {
-				return new Result(true, record.getId());
-			}
-		return new Result(false, "越权操作");
-	}
-
-	/**
-	 * <p>更新信息。</p>
-	 */ 
-	@RequestMapping(value = "/update", method = RequestMethod.POST)
-	@ResponseBody
-	public Result updateDepartInfo(HttpServletRequest request,DepartInfo record) {
-	/*	String userId = (String) request.getSession().getAttribute("superUserId");
-		UserInfo userInfo=userInfoService.getUserInfoById(userId);
-		DepartInfo departInfo=new DepartInfo();
-		departInfo.setAllParentId(userInfo.getDepartId());
-		departInfo.setParentId(record.getParentId());
-		List<DepartInfo> departInfos= departInfoService.findPower(departInfo);
-		if(departInfos.size()>0){*/
-			boolean num = departInfoService.updateDepartInfo(record);
-			if (num) {
-				return new Result(true, "保存成功");
-			}
-	/*	}*/
-		return new Result(false, "越权操作");
-	}
-
-	/**
-	 * <p>删除。</p>
-	 */ 
-	@RequestMapping(value = "/del", method = RequestMethod.POST)
-	@ResponseBody
-	public Result deleteDepartInfo(HttpServletRequest request,@RequestParam(required = true, value = "id") String id) {
-			boolean num = departInfoService.deleteDepartInfo(id);
-			if (num) {
-				return new Result(true, "删除成功");
-			}
-		return new Result(false, "越权操作");
-	}
-
-
-	@RequestMapping(value = "/departTree", method = RequestMethod.GET)
-	@ResponseBody
-	public Result departTree() {
-		List<TreeNode> trees = departInfoService.getDepartTree(true, null);
-		if (trees != null) {
-			return new Result(true, trees);
-		}
-		return new Result(false, "获取失败");
-	}
-
+public class DepartInfoController extends BaseController {
+
+    @Autowired
+    private DepartInfoService departInfoService;
+
+    /**
+     * <p>获取全部记录。</p>
+     */
+    @RequestMapping(value = "/all", method = RequestMethod.GET)
+    @ResponseBody
+    public Result all(DepartInfo record) {
+
+        List<DepartInfo> pp = departInfoService.getDepartInfoList(record);
+        return new Result(true, pp);
+    }
+
+    /**
+     * <p>根据Id。</p>
+     */
+    @RequestMapping(value = "/getDepartInfo", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getDepartInfo(@RequestParam(required = false, value = "id") String id) {
+
+        DepartInfo data = departInfoService.getDepartInfoById(id);
+        return new Result(true, data);
+    }
+
+    /**
+     * <p>根据条件获取。</p>
+     */
+    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOne(DepartInfo record) {
+
+        DepartInfo data = departInfoService.getDepartInfo(record);
+        return new Result(true, data);
+    }
+
+    /**
+     * <p>分页查询。</p>
+     */
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @ResponseBody
+    public Result page(Page page, DepartInfo record) {
+
+        Map<String, Object> result = new HashMap<>();
+
+        List<DepartInfo> pp = departInfoService.getDepartInfoByPage(page, record);
+
+        result.put(AppConstant.PAGE, page);
+        result.put("pp", pp);
+        return new Result(true, result);
+    }
+
+    /**
+     * <p>保存。</p>
+     */
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result save(HttpServletRequest request, DepartInfo record) {
+        boolean num = departInfoService.createDepartInfo(record);
+        if (num) {
+            return new Result(true, record.getId());
+        }
+        return new Result(false, "越权操作");
+    }
+
+    /**
+     * <p>更新信息。</p>
+     */
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateDepartInfo(HttpServletRequest request, DepartInfo record) {
+        boolean num = departInfoService.updateDepartInfo(record);
+        if (num) {
+            return new Result(true, "保存成功");
+        }
+        return new Result(false, "越权操作");
+    }
+
+    /**
+     * <p>删除。</p>
+     */
+    @RequestMapping(value = "/del", method = RequestMethod.POST)
+    @ResponseBody
+    public Result deleteDepartInfo(HttpServletRequest request, @RequestParam(required = true, value = "id") String id) {
+        boolean num = departInfoService.deleteDepartInfo(id);
+        if (num) {
+            return new Result(true, "删除成功");
+        }
+        return new Result(false, "越权操作");
+    }
+
+
+    @RequestMapping(value = "/departTree", method = RequestMethod.GET)
+    @ResponseBody
+    public Result departTree() {
+        List<TreeNode> trees = departInfoService.getDepartTree(true, null);
+        if (trees != null) {
+            return new Result(true, trees);
+        }
+        return new Result(false, "获取失败");
+    }
 
 }
 

+ 18 - 0
src/main/resources/spring/applicationContext.xml

@@ -63,6 +63,24 @@
         <property name="transactionManager" ref="transactionManager"/>
         <property name="databaseSchemaUpdate" value="true"/>
         <property name="jobExecutorActivate" value="true"/>
+        <property name="customSessionFactories">
+            <list>
+                <bean class="com.izouma.awesomeadmin.activiti.CustomUserEntityManagerFactory">
+                    <property name="customUserEntityManager" ref="customUserEntityManager">
+                    </property>
+                </bean>
+                <bean class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManagerFactory">
+                    <property name="customGroupEntityManager" ref="customGroupEntityManager">
+                    </property>
+                </bean>
+            </list>
+        </property>
+    </bean>
+
+    <bean id="customUserEntityManager" class="com.izouma.awesomeadmin.activiti.CustomUserEntityManager">
+    </bean>
+
+    <bean id="customGroupEntityManager" class="com.izouma.awesomeadmin.activiti.CustomGroupEntityManager">
     </bean>
 
     <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

+ 71 - 16
src/main/vue/src/pages/departInfos.vue → src/main/vue/src/pages/Departs.vue

@@ -21,7 +21,7 @@
             </el-form>
             <div slot="footer">
                 <el-button @click="dialogVisible = false" size="small">取消</el-button>
-                <el-button type="primary" @click="addMenu" :loading="loading" size="small">添加</el-button>
+                <el-button type="primary" @click="addMenu" :loading="loading" size="small">保存</el-button>
             </div>
         </el-dialog>
     </div>
@@ -52,11 +52,11 @@
                     departName: '',
                     departCode: ''
                 };
-              /*  if (this.menus && this.menus.length > 0) {
-                    this.menu.sort = this.menus[this.menus.length - 1].extra.sort + 1;
-                } else {
-                    this.menu.sort = 1;
-                }*/
+                /*  if (this.menus && this.menus.length > 0) {
+                      this.menu.sort = this.menus[this.menus.length - 1].extra.sort + 1;
+                  } else {
+                      this.menu.sort = 1;
+                  }*/
                 this.dialogVisible = true;
             },
             showAddDialog(node, data) {
@@ -77,12 +77,12 @@
                     if (valid) {
                         this.loading = true;
                         this.$http.post({
-                            url: '/departInfo/save',
+                            url: this.menu.id ? '/departInfo/update' : '/departInfo/save',
                             data: this.menu
                         }).then(res => {
                             this.loading = false;
                             if (res.success) {
-                                this.$message.success('添加成功')
+                                this.$message.success('保存成功')
                                 this.dialogVisible = false;
                                 this.getData();
                             } else {
@@ -92,6 +92,58 @@
                     }
                 });
             },
+            showEditDialog(node, data) {
+                this.menu = {
+                    id: data.extra.id,
+                    departName: data.extra.departName,
+                    departCode: data.extra.departCode,
+                };
+                this.dialogVisible = true;
+            },
+            moveUp(node, data) {
+                const formData = d => {
+                    let formData = new FormData();
+                    for (let key in d) {
+                        if (d.hasOwnProperty(key)) {
+                            formData.append(key, d[key]);
+                        }
+                    }
+                    return formData;
+                }
+                if (node.previousSibling) {
+                    axios.all([axios.post(this.$baseUrl + '/departInfo/update', formData({
+                        id: node.data.id,
+                        sort: node.previousSibling.data.extra.sort
+                    })), axios.post(this.$baseUrl + '/departInfo/update', formData({
+                        id: node.previousSibling.data.id,
+                        sort: node.data.extra.sort
+                    }))]).then(axios.spread((acct, perms) => {
+                        this.getData();
+                    }));
+                }
+            },
+            moveDown(node, data) {
+                const formData = d => {
+                    let formData = new FormData();
+                    for (let key in d) {
+                        if (d.hasOwnProperty(key)) {
+                            formData.append(key, d[key]);
+                        }
+                    }
+                    return formData;
+                }
+                if (node.nextSibling) {
+                    axios.all([axios.post(this.$baseUrl + '/departInfo/update', formData({
+                        id: node.data.id,
+                        sort: node.nextSibling.data.extra.sort
+                    })), axios.post(this.$baseUrl + '/departInfo/update', formData({
+                        id: node.nextSibling.data.id,
+                        sort: node.data.extra.sort
+                    }))]).then(axios.spread((acct, perms) => {
+                        this.getData();
+                    }));
+                }
+            },
             remove(node, data) {
                 this.$confirm('确定删除菜单?', '提示', {
                     confirmButtonText: '确定',
@@ -143,14 +195,17 @@
             renderContent(h, { node, data, store }) {
                 return (
                     <span class="custom-tree-node">
-                    <span>{node.label}</span>
-                <span class="url">{data.extra.href}</span>
-                <span class="opt">
-                <el-button size="mini" type="text" on-click={ () => this.showAddDialog(node, data) }>添加</el-button>
-                <el-button size="mini" type="text" on-click={ () => this.remove(node, data) }>删除</el-button>
-                </span>
-                </span>
-            );
+                        <span>{node.label}</span>
+                        <span class="url">{data.extra.href}</span>
+                        <span class="opt">
+                            <el-button size="mini" type="text" on-click={ () => this.moveUp(node, data) } class="up">上移</el-button>
+                            <el-button size="mini" type="text" on-click={ () => this.moveDown(node, data) }>下移</el-button>
+                            <el-button size="mini" type="text" on-click={ () => this.showEditDialog(node, data) }>编辑</el-button>
+                            <el-button size="mini" type="text" on-click={ () => this.showAddDialog(node, data) }>添加</el-button>
+                            <el-button size="mini" type="text" on-click={ () => this.remove(node, data) }>删除</el-button>
+                        </span>
+                    </span>
+                );
             }
         }
     }

+ 1 - 6
src/main/vue/src/pages/Menus.vue

@@ -1,6 +1,6 @@
 <!--suppress ALL -->
 <template>
-    <div style="width: 550px">
+    <div style="">
         <el-tree
             :data="menus"
             :render-content="renderContent"
@@ -107,11 +107,6 @@
                     icon: iconName
                 };
                 this.icon = iconName;
-                if (node.childNodes && node.childNodes.length > 0) {
-                    this.menu.sort = node.childNodes[node.childNodes.length - 1].data.extra.sort + 1;
-                } else {
-                    this.menu.sort = 1;
-                }
                 this.dialogVisible = true;
                 setTimeout(()=>{
                     this.showIcon(iconName);

+ 30 - 54
src/main/vue/src/pages/User.vue

@@ -21,24 +21,11 @@
                     </el-option>
                 </el-select>
             </el-form-item>
-            <!--   <el-form-item label="所属部门">
-                   <el-cascader
-                       v-model="departId"
-                       :options="departs"
-                       change-on-select
-                       :show-all-levels="false"
-                       style="width: 70%"
-                   ></el-cascader>
-               </el-form-item>-->
             <el-form-item prop="departId" label="部门">
-                <el-select v-model="departId" filterable clearable placeholder="请选择" style="width: 100%;">
-                    <el-option
-                        v-for="item in departs"
-                        :key="item.departName"
-                        :label="item.departName"
-                        :value="item.id">
-                    </el-option>
-                </el-select>
+                <el-cascader
+                    :options="departs"
+                    v-model="formData.departId">
+                </el-cascader>
             </el-form-item>
             <el-form-item prop="birthday" label="生日">
                 <el-date-picker
@@ -75,13 +62,9 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                        if (res.data.roleId) {
-                            res.data.roleId = res.data.roleId.split(',').map(i => Number(i));
-                        } else {
-                            res.data.roleId = []
-                        }
+                        res.data.roleId = res.data.roleId ? res.data.roleId.split(',').map(i => Number(i)) : [];
+                        res.data.departId = res.data.departId ? res.data.departId.split(',') : [];
                         this.formData = res.data;
-                        this.departId = res.data.departId;
                     }
                 })
             }
@@ -91,43 +74,38 @@
                 if (res.success) {
                     this.roles = res.data;
                 }
-            })
-
+            });
             this.$http.get({
-                url: '/departInfo/all'
+                url: '/departInfo/departTree'
             }).then(res => {
                 if (res.success) {
-                    this.departs = res.data;
+                    const parse = (trees) => {
+                        trees.sort((a, b) => {
+                            return a.extra.sort - b.extra.sort;
+                        });
+                        return trees.map(i => {
+                            let t = {
+                                value: i.id,
+                                label: i.name,
+                                parentId: i.parentId,
+                                extra: i.extra
+                            };
+                            if (i.children instanceof Array) {
+                                t.children = parse(i.children);
+                            }
+                            return t;
+                        });
+                    };
+                    this.departs = parse(res.data);
                 }
-            })
-            /*   this.$http.get({
-                   url: '../userInfo/departInfoTree',
-                   data: {
-                       includeParent:1
-                   }
-               }).then(res => {
-                   if (res.success) {
-                       const parse = (list) => {
-                           if (list) {
-                               list.forEach(t => {
-                                   t.value = t.id;
-                                   t.label = t.name + "(" + t.id + ")";
-                                   if (t.children && t.children.length > 0) {
-                                       parse(t.children)
-                                   }
-                               })
-                           }
-                           return list;
-                       }
-
-                       this.departs = parse(res.data.pp);
-                   };
-               })*/
+            });
         },
         data() {
             return {
                 saving: false,
-                formData: {},
+                formData: {
+                    departId: []
+                },
                 rules: {
                     icon: [
                         {required: true, message: '请上传头像', trigger: 'blur'},
@@ -155,7 +133,6 @@
                 },
                 roles: [],
                 departs: [],
-                departId: ''
             }
         },
         methods: {
@@ -170,7 +147,6 @@
             },
             submit() {
                 var data = JSON.parse(JSON.stringify(this.formData));
-                data.departId = this.departId;
                 this.$http.post({
                     url: this.formData.id ? '/userInfo/update' : '/userInfo/save',
                     data: data

+ 0 - 158
src/main/vue/src/pages/departInfo.vue

@@ -1,158 +0,0 @@
-<template>
-	<div>
-		<el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
-				style="max-width: 500px;">
-
-
-			<el-form-item prop="departName" label="部门名称">
-				<el-input v-model="formData.departName"></el-input>
-			</el-form-item>
-			<!--<el-form-item prop="parentId" label="上级部门id">
-				<el-input v-model="formData.parentId"></el-input>
-			</el-form-item>-->
-            <el-form-item prop="allParentId" label="上级部门">
-                <el-select v-model="formData.allParentId"  filterable clearable  placeholder="请选择"  style="width: 100%;">
-                    <el-option
-                        v-for="item in departs"
-                        :key="item.id"
-                        :label="item.departName"
-                        :value="item.allParentId+','+item.id"
-                    >
-                    </el-option>
-                </el-select>
-            </el-form-item>
-		<!--	<el-form-item prop="allParentId" label="所有上级id">
-				<el-input v-model="formData.allParentId"></el-input>
-			</el-form-item>-->
-			<el-form-item prop="description" label="描述">
-				<el-input v-model="formData.description"></el-input>
-			</el-form-item>
-			<el-form-item prop="departCode" label="部门代码">
-				<el-input v-model="formData.departCode"></el-input>
-			</el-form-item>
-		<!--	<el-form-item prop="orgCode" label="组织代码">
-				<el-input v-model="formData.orgCode"></el-input>
-			</el-form-item>-->
-		<!--	<el-form-item prop="type" label="类型">
-				<el-input v-model="formData.type"></el-input>
-			</el-form-item>-->
-			<el-form-item prop="remark" label="备注">
-				<el-input v-model="formData.remark"></el-input>
-			</el-form-item>
-			<el-form-item prop="order" label="排序">
-				<el-input v-model="formData.order"></el-input>
-			</el-form-item>
-			<el-form-item prop="permission" label="权限标识">
-				<el-input v-model="formData.permission"></el-input>
-			</el-form-item>
-			<el-form-item>
-				<el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
-				<el-button @click="$router.go(-1)">取消</el-button>
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-<script>
-	export default {
-		created() {
-			if (this.$route.query.id) {
-				this.$http.get({
-					url: '/departInfo/getDepartInfo',
-					data: {
-						id: this.$route.query.id
-					}
-				}).then(res => {
-					if (res.success) {
-						this.formData = res.data;
-					}
-				})
-			}
-
-            this.$http.get({
-                url: '/departInfo/all'
-            }).then(res => {
-                if (res.success) {
-                    this.departs = res.data;
-                }
-            })
-		},
-		data() {
-			return {
-				saving: false,
-				formData: {},
-				rules: {
-					departName: [
-						{required: true, message: '请输入部门名称', trigger: 'blur'},
-					],
-					parentId: [
-						{required: true, message: '请输入上级部门id', trigger: 'blur'},
-					],
-				/*	allParentId: [
-						{required: true, message: '请输入所有上级id', trigger: 'blur'},
-					],*/
-					description: [
-						{required: true, message: '请输入描述', trigger: 'blur'},
-					],
-					departCode: [
-						{required: true, message: '请输入部门代码', trigger: 'blur'},
-					],
-					orgCode: [
-						{required: true, message: '请输入组织代码', trigger: 'blur'},
-					],
-					type: [
-						{required: true, message: '请输入类型', trigger: 'blur'},
-					],
-					remark: [
-						{required: true, message: '请输入备注', trigger: 'blur'},
-					],
-					order: [
-						{required: true, message: '请输入排序', trigger: 'blur'},
-					],
-					delFlag: [
-						{required: true, message: '请输入del_flag', trigger: 'blur'},
-					],
-					createTime: [
-						{required: true, message: '请输入create_time', trigger: 'blur'},
-					],
-					permission: [
-						{required: true, message: '请输入权限标识', trigger: 'blur'},
-					]
-				},
-                departs:[]
-			}
-		},
-	methods: {
-			onSave() {
-				this.$refs.form.validate((valid) => {
-					if (valid) {
-						this.submit();
-					} else {
-						return false;
-					}
-				});
-			},
-			submit() {
-                var data = JSON.parse(JSON.stringify(this.formData));
-                if(data.allParentId==null){
-                    data.allParentId=0;
-                }
-				this.$http.post({
-					url: this.formData.id ? '/departInfo/update' : '/departInfo/save',
-					data: data
-				}).then(res => {
-					if (res.success) {
-						this.$message.success('成功');
-						this.$router.go(-1);
-					} else {
-						this.$message.warning('越权操作!')
-					}
-				});
-			}
-		}
-	}
-</script>
-<style lang="less" scoped>
-
-</style>
-
-

+ 0 - 101
src/main/vue/src/pages/genTestTable.vue

@@ -1,101 +0,0 @@
-<template>
-	<div>
-		<el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
-				style="max-width: 500px;">
-
-
-			<el-form-item prop="myColumn" label="我的">
-				<el-input v-model="formData.myColumn"></el-input>
-			</el-form-item>
-			<el-form-item prop="aaaTest" label="测试">
-				<el-input v-model="formData.aaaTest"></el-input>
-			</el-form-item>
-			<el-form-item prop="bbbFlag" label="bbb标识">
-				<el-input v-model="formData.bbbFlag"></el-input>
-			</el-form-item>
-			<el-form-item prop="noComment" label="no_comment">
-				<el-input v-model="formData.noComment"></el-input>
-			</el-form-item>
-			<el-form-item prop="createTime" label="创建时间">
-				<el-input v-model="formData.createTime"></el-input>
-			</el-form-item>
-			<el-form-item prop="updateTime" label="更新时间">
-				<el-input v-model="formData.updateTime"></el-input>
-			</el-form-item>
-			<el-form-item prop="delFlag" label="删除标识">
-				<el-input v-model="formData.delFlag"></el-input>
-			</el-form-item>
-			<el-form-item>
-				<el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
-				<el-button @click="$router.go(-1)">取消</el-button>
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-<script>
-	export default {
-		created() {
-			if (this.$route.query.id) {
-				this.$http.get({
-					url: '/genTestTable/getGenTestTable',
-					data: {
-						id: this.$route.query.id
-					}
-				}).then(res => {
-					if (res.success) {
-						this.formData = res.data;
-					}
-				})
-			}
-		},
-		data() {
-			return {
-				saving: false,
-				formData: {},
-				rules: {
-					myColumn: [
-						{required: true, message: '请输入我的', trigger: 'blur'},
-					],
-					aaaTest: [
-						{required: true, message: '请输入测试', trigger: 'blur'},
-					],
-					bbbFlag: [
-						{required: true, message: '请输入bbb标识', trigger: 'blur'},
-					],
-					noComment: [
-						{required: true, message: '请输入no_comment', trigger: 'blur'},
-					]
-				},
-			}
-		},
-	methods: {
-			onSave() {
-				this.$refs.form.validate((valid) => {
-					if (valid) {
-						this.submit();
-					} else {
-						return false;
-					}
-				});
-			},
-			submit() {
-				this.$http.post({
-					url: this.formData.id ? '/genTestTable/update' : '/genTestTable/save',
-					data: this.formData
-				}).then(res => {
-					if (res.success) {
-						this.$message.success('成功');
-						this.$router.go(-1);
-					} else {
-						this.$message.warning('失败')
-					}
-				});
-			}
-		}
-	}
-</script>
-<style lang="less" scoped>
-
-</style>
-
-

+ 0 - 237
src/main/vue/src/pages/genTestTables.vue

@@ -1,237 +0,0 @@
-<template>
-	<div>
-		<div class="filters-container">
-			<el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
-			<el-select placeholder="选择框" size="small" v-model="filter2" clearable class="filter-item">
-				<el-option
-					label="值1"
-					value="item1">
-				</el-option>
-				<el-option
-					label="值2"
-					value="item1">
-				</el-option>
-			</el-select>
-			<el-button @click="getData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
-			</el-button>
-			<el-button @click="$router.push('/genTestTable')" type="primary" size="small" icon="el-icon-edit"
-						class="filter-item">添加
-			</el-button>
-			<el-dropdown trigger="click" size="medium" class="table-column-filter">
-				<span>
-				筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
-				</span>
-				<el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
-					<el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
-					</el-checkbox>
-				</el-dropdown-menu>
-			</el-dropdown>
-		</div>
-		<el-table
-			:data="tableData"
-			:height="tableHeight"
-			ref="table">
-			<el-table-column
-				v-if="multipleMode"
-				align="center"
-				type="selection"
-				width="50">
-			</el-table-column>
-			<el-table-column
-				type="index"
-				min-width="50"
-				align="center">
-			</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('myColumn')"
-				prop="myColumn"
-				label="我的"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('aaaTest')"
-				prop="aaaTest"
-				label="测试"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('bbbFlag')"
-				prop="bbbFlag"
-				label="bbb标识"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('noComment')"
-				prop="noComment"
-				label="no_comment"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('createTime')"
-				prop="createTime"
-				label="创建时间"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('updateTime')"
-				prop="updateTime"
-				label="更新时间"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				v-if="isColumnShow('delFlag')"
-				prop="delFlag"
-				label="删除标识"
-				min-width="300">
-		</el-table-column>
-			<el-table-column
-				label="操作"
-				align="center"
-				fixed="right">
-				<template slot-scope="scope">
-					<el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
-				</template>
-			</el-table-column>
-		</el-table>
-		<div class="pagination-wrapper">
-			<div class="multiple-mode-wrapper">
-				<el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
-				<el-button-group v-else>
-					<el-button size="small" @click="operation1">批量操作1</el-button>
-					<el-button size="small" @click="operation2">批量操作2</el-button>
-					<el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
-				</el-button-group>
-			</div>
-			<el-pagination
-				background
-				@size-change="pageSizeChange"
-				@current-change="currentPageChange"
-				:current-page="currentPage"
-				:page-sizes="[10, 20, 30, 40, 50]"
-				:page-size="pageSize"
-				layout="total, sizes, prev, pager, next, jumper"
-				:total="totalNumber">
-			</el-pagination>
-		</div>
-	</div>
-</template>
-<script>
-	import {mapState} from 'vuex'
-
-	export default {
-		created() {
-			this.getData();
-		},
-		data() {
-			return {
-				totalNumber: 0,
-				totalPage: 10,
-				currentPage: 1,
-				pageSize: 20,
-				tableData: [],
-				filter1: '',
-				filter2: '',
-				tableColumns: [
-				{
-					label: '我的',
-					value: 'myColumn',
-					show: true
-				},
-				{
-					label: '测试',
-					value: 'aaaTest',
-					show: true
-				},
-				{
-					label: 'bbb标识',
-					value: 'bbbFlag',
-					show: true
-				},
-				{
-					label: 'no_comment',
-					value: 'noComment',
-					show: true
-				},
-				{
-					label: '创建时间',
-					value: 'createTime',
-					show: true
-				},
-				{
-					label: '更新时间',
-					value: 'updateTime',
-					show: true
-				},
-				{
-					label: '删除标识',
-					value: 'delFlag',
-					show: true
-				},
-				],
-				multipleMode: false
-			}
-		},
-		computed: {
-			...mapState(['tableHeight']),
-			selection() {
-				return this.$refs.table.selection.map(i => i.id);
-			}
-		},
-		methods: {
-			pageSizeChange(size) {
-				this.pageSize = size;
-				this.getData();
-			},
-			currentPageChange(page) {
-				this.currentPage = page;
-				this.getData();
-			},
-			getData() {
-				this.$http.get({
-					url: '/genTestTable/page',
-					data: {
-						currentPage: this.currentPage,
-						pageNumber: this.pageSize
-					}
-				}).then(res => {
-					if (res.success) {
-						this.totalNumber = res.data.page.totalNumber;
-						this.tableData = res.data.pp;
-					}
-				})
-			},
-			isColumnShow(column) {
-				var row = this.tableColumns.find(i => i.value === column);
-				return row ? row.show : false;
-			},
-			toggleMultipleMode(multipleMode) {
-				this.multipleMode = multipleMode;
-				if (!multipleMode) {
-					this.$refs.table.clearSelection();
-				}
-			},
-			editRow(row) {
-				this.$router.push({
-					path: '/genTestTable',
-					query: {
-						id: row.id
-					}
-				})
-			},
-			operation1() {
-				this.$notify({
-					title: '提示',
-					message: this.selection
-				});
-			},
-			operation2() {
-				this.$message('操作2');
-			}
-		}
-	}
-</script>
-<style lang="less" scoped>
-
-</style>
-
-

+ 140 - 138
src/main/vue/src/router/index.js

@@ -6,177 +6,179 @@ import axios from 'axios'
 Vue.use(Router);
 
 const router = new Router({
-    routes: [{
-        path: '/',
-        name: 'admin',
-        component: () => import('../pages/App'),
-        children: [{
-            path: '/',
-            redirect: 'dashboard'
-        },
-        {
-            path: '/404',
-            name: '404',
-            component: () => import('../pages/404')
-        },
-        {
-            path: '/dashboard',
-            name: 'dashboard',
-            component: () => import('../pages/Dashboard')
-        },
-        {
-            path: '/users',
-            name: 'users',
-            component: () => import('../pages/Users')
-        },
-        {
-            path: '/user',
-            name: 'user',
-            component: () => import('../pages/User')
-        },
-        {
-            path: '/menus',
-            name: 'menus',
-            component: () => import('../pages/Menus')
-        },
-        {
-            path: '/roles',
-            name: 'roles',
-            component: () => import('../pages/Roles')
-        },
-        {
-            path: '/role',
-            name: 'role',
-            component: () => import('../pages/Role')
-        },
-        {
-            path: '/api',
-            name: 'api',
-            component: () => import('../pages/Api')
-        },
-        {
-            path: '/genCode',
-            name: 'genCode',
-            component: () => import('../pages/GenCode')
-        },
+    routes: [
         {
-            path: '/permissions',
-            name: 'permissions',
-            component: () => import('../pages/Permissions')
+            path: '/',
+            name: 'admin',
+            component: () => import('../pages/App'),
+            children: [
+                {
+                    path: '/',
+                    redirect: 'dashboard'
+                },
+                {
+                    path: '/404',
+                    name: '404',
+                    component: () => import('../pages/404')
+                },
+                {
+                    path: '/dashboard',
+                    name: 'dashboard',
+                    component: () => import('../pages/Dashboard')
+                },
+                {
+                    path: '/users',
+                    name: 'users',
+                    component: () => import('../pages/Users')
+                },
+                {
+                    path: '/user',
+                    name: 'user',
+                    component: () => import('../pages/User')
+                },
+                {
+                    path: '/menus',
+                    name: 'menus',
+                    component: () => import('../pages/Menus')
+                },
+                {
+                    path: '/roles',
+                    name: 'roles',
+                    component: () => import('../pages/Roles')
+                },
+                {
+                    path: '/role',
+                    name: 'role',
+                    component: () => import('../pages/Role')
+                },
+                {
+                    path: '/api',
+                    name: 'api',
+                    component: () => import('../pages/Api')
+                },
+                {
+                    path: '/genCode',
+                    name: 'genCode',
+                    component: () => import('../pages/GenCode')
+                },
+                {
+                    path: '/permissions',
+                    name: 'permissions',
+                    component: () => import('../pages/Permissions')
+                },
+                {
+                    path: '/permission',
+                    name: 'permission',
+                    component: () => import('../pages/Permission')
+                },
+                {
+                    path: '/departs',
+                    name: 'departs',
+                    component: () => import('../pages/Departs')
+                },
+                {
+                    path: '/lineChart',
+                    name: 'lineChart',
+                    component: () => import('../pages/LineChart')
+                },
+                {
+                    path: '/barChart',
+                    name: 'barChart',
+                    component: () => import('../pages/BarChart')
+                },
+                {
+                    path: '/polarAreaChart',
+                    name: 'polarAreaChart',
+                    component: () => import('../pages/PolarAreaChart')
+                },
+                {
+                    path: '/pieChart',
+                    name: 'pieChart',
+                    component: () => import('../pages/PieChart')
+                },
+                {
+                    path: '/radarChart',
+                    name: 'radarChart',
+                    component: () => import('../pages/RadarChart')
+                },
+                {
+                    path: '/bubbleChart',
+                    name: 'bubbleChart',
+                    component: () => import('../pages/BubbleChart')
+                },
+                {
+                    path: '/testAaa',
+                    name: 'testAaa',
+                    component: () =>
+                        import('../pages/TestAaa')
+                },
+                {
+                    path: '/testAaas',
+                    name: 'testAaas',
+                    component: () =>
+                        import('../pages/TestAaas')
+                }
+            ]
         },
         {
-            path: '/permission',
-            name: 'permission',
-            component: () => import('../pages/Permission')
+            path: '/login',
+            name: 'login',
+            component: () => import('../pages/Login')
         },
         {
-            path: '/departInfos',
-            name: 'departInfos',
-            component: () => import('../pages/departInfos')
+            path: '*',
+            component: () => import('../pages/404')
         },
         {
-            path: '/lineChart',
-            name: 'lineChart',
+            path: '/appLineChart',
+            name: 'appLineChart',
             component: () => import('../pages/LineChart')
         },
         {
-            path: '/barChart',
-            name: 'barChart',
+            path: '/appBarChart',
+            name: 'appBarChart',
             component: () => import('../pages/BarChart')
         },
         {
-            path: '/polarAreaChart',
-            name: 'polarAreaChart',
-            component: () => import('../pages/PolarAreaChart')
-        },
-        {
-            path: '/pieChart',
-            name: 'pieChart',
-            component: () => import('../pages/PieChart')
-        },
-        {
-            path: '/radarChart',
-            name: 'radarChart',
-            component: () => import('../pages/RadarChart')
+            path: '/appPieChart',
+            name: 'appPieChart',
+            component: () =>
+                import('../pages/PieChart')
         },
         {
-            path: '/bubbleChart',
-            name: 'bubbleChart',
-            component: () => import('../pages/BubbleChart')
+            path: '/appPolarAreaChart',
+            name: 'appPolarAreaChart',
+            component: () =>
+                import('../pages/PolarAreaChart')
         },
         {
-            path: '/testAaa',
-            name: 'testAaa',
+            path: '/appRadarChart',
+            name: 'appRadarChart',
             component: () =>
-                import('../pages/TestAaa')
+                import('../pages/RadarChart')
         },
         {
-            path: '/testAaas',
-            name: 'testAaas',
+            path: '/appBubbleChart',
+            name: 'appBubbleChart',
             component: () =>
-                import('../pages/TestAaas')
-        }]
-    },
-    {
-        path: '/login',
-        name: 'login',
-        component: () => import('../pages/Login')
-    },
-    {
-        path: '*',
-        component: () => import('../pages/404')
-    },
-    {
-        path: '/appLineChart',
-        name: 'appLineChart',
-        component: () => import('../pages/LineChart')
-    },
-    {
-        path: '/appBarChart',
-        name: 'appBarChart',
-        component: () => import('../pages/BarChart')
-    },
-    {
-        path: '/appPieChart',
-        name: 'appPieChart',
-        component: () =>
-            import('../pages/PieChart')
-    },
-    {
-        path: '/appPolarAreaChart',
-        name: 'appPolarAreaChart',
-        component: () =>
-            import('../pages/PolarAreaChart')
-    },
-    {
-        path: '/appRadarChart',
-        name: 'appRadarChart',
-        component: () =>
-            import('../pages/RadarChart')
-    },
-    {
-        path: '/appBubbleChart',
-        name: 'appBubbleChart',
-        component: () =>
-            import('../pages/BubbleChart')
-    }
+                import('../pages/BubbleChart')
+        }
     ]
 });
 router.beforeEach((to, from, next) => {
     if (/^\/http/.test(to.path)) {
         console.log(Vue.$baseUrl);
         let url = to.path.replace('/', '');
-        let params = '';
+        let params = [];
         if (to.query) {
             for (let key in to.query) {
                 if (to.query.hasOwnProperty(key)) {
-                    params += `&${key}=${to.query[key]}`;
+                    params.push(`${key}=${to.query[key]}`);
                 }
             }
-            params = params.replace('&', '');
         }
-        if (params) {
-            url += `?${params}`;
+        if (params.length > 0) {
+            url += `?${params.join('&')}`;
         }
         window.open(url);
         return;