Procházet zdrojové kódy

调整分组逻辑

AE86 před 2 roky
rodič
revize
9fdd9f77d0

+ 8 - 14
dbsyncer-biz/src/main/java/org/dbsyncer/biz/ProjectGroupService.java

@@ -1,12 +1,13 @@
 package org.dbsyncer.biz;
 
+import org.dbsyncer.biz.vo.ProjectGroupVo;
 import org.dbsyncer.parser.model.ProjectGroup;
 
 import java.util.List;
 import java.util.Map;
 
 /**
- * 项目组
+ * 分组管理服务
  *
  * @author xinpeng.Fu
  * @version 1.0.0
@@ -15,46 +16,39 @@ import java.util.Map;
 public interface ProjectGroupService {
 
     /**
-     * 新增项目
+     * 新增
      *
      * @param params
      */
     String add(Map<String, String> params);
 
     /**
-     * 修改项目
+     * 修改
      *
      * @param params
      */
     String edit(Map<String, String> params);
 
     /**
-     * 删除项目
+     * 删除
      *
      * @param id
      */
     String remove(String id);
 
     /**
-     * 获取项目
+     * 获取
      *
      * @param id
      * @return
      */
-    ProjectGroup getProjectGroup(String id);
+    ProjectGroupVo getProjectGroup(String id);
 
     /**
-     * 获取所有项目
+     * 获取所有
      *
      * @return
      */
     List<ProjectGroup> getProjectGroupAll();
 
-    /**
-     * 获取项目组详细
-     *
-     * @return
-     */
-    ProjectGroup getProjectGroupDetail(String projectGroupId);
-
 }

+ 10 - 15
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/projectgroup/ProjectGroupChecker.java → dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/group/ProjectGroupChecker.java

@@ -1,13 +1,14 @@
-package org.dbsyncer.biz.checker.impl.projectgroup;
+package org.dbsyncer.biz.checker.impl.group;
 
 import org.dbsyncer.biz.checker.AbstractChecker;
 import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ProjectGroup;
 import org.dbsyncer.storage.constant.ConfigConstant;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -24,8 +25,8 @@ import static org.dbsyncer.storage.constant.ConfigConstant.PROJECT_GROUP;
 @Component
 public class ProjectGroupChecker extends AbstractChecker {
 
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
+    @Autowired
+    private Manager manager;
 
     /**
      * 新增配置
@@ -44,7 +45,6 @@ public class ProjectGroupChecker extends AbstractChecker {
         projectGroup.setType(PROJECT_GROUP);
         projectGroup.setName(name);
 
-
         // 修改基本配置
         this.modifyConfigModel(projectGroup, params);
 
@@ -60,15 +60,10 @@ public class ProjectGroupChecker extends AbstractChecker {
     @Override
     public ConfigModel checkEditConfigModel(Map<String, String> params) {
         String id = params.get(CONFIG_MODEL_ID);
-        String mappingIds = params.get("mappingIds");
-        String connectorIds = params.get("connectorIds");
-        String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
-        ProjectGroup projectGroup = new ProjectGroup();
-        projectGroup.setMappingIds(StringUtil.isBlank(mappingIds) ? Collections.emptyList() : Arrays.asList(mappingIds.split(",")));
-        projectGroup.setConnectorIds(StringUtil.isBlank(connectorIds) ? Collections.emptyList() : Arrays.asList(connectorIds.split(",")));
-        projectGroup.setType(PROJECT_GROUP);
-        projectGroup.setName(name);
-        projectGroup.setId(id);
+        ProjectGroup projectGroup = manager.getProjectGroup(id);
+        Assert.notNull(projectGroup, "Can not find project group.");
+
+        // TODO
 
         // 修改基本配置
         this.modifyConfigModel(projectGroup, params);

+ 43 - 39
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/ProjectGroupServiceImpl.java

@@ -5,24 +5,26 @@ import org.dbsyncer.biz.MappingService;
 import org.dbsyncer.biz.ProjectGroupService;
 import org.dbsyncer.biz.checker.Checker;
 import org.dbsyncer.biz.vo.MappingVo;
+import org.dbsyncer.biz.vo.ProjectGroupVo;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.logger.LogType;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.ProjectGroup;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
-import org.springframework.util.CollectionUtils;
 
-import java.util.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
- * 项目
+ * 
  *
  * @author xinpeng.Fu
  * @version 1.0.0
@@ -31,8 +33,6 @@ import java.util.stream.Collectors;
 @Service
 public class ProjectGroupServiceImpl extends BaseServiceImpl implements ProjectGroupService {
 
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
     @Autowired
     private ConnectorService connectorService;
 
@@ -65,51 +65,55 @@ public class ProjectGroupServiceImpl extends BaseServiceImpl implements ProjectG
     public String remove(String id) {
         ProjectGroup projectGroup = manager.getProjectGroup(id);
         log(LogType.ConnectorLog.DELETE, projectGroup);
-        Assert.notNull(projectGroup, "该项目组已被删除");
+        Assert.notNull(projectGroup, "该组已被删除");
         manager.removeProjectGroup(id);
-        return "删除项目组成功!";
+        return "删除组成功!";
     }
 
     @Override
-    public ProjectGroup getProjectGroup(String id) {
-        return StringUtil.isNotBlank(id) ? manager.getProjectGroup(id) : null;
-    }
+    public ProjectGroupVo getProjectGroup(String id) {
+        ProjectGroupVo vo = new ProjectGroupVo();
+        if (StringUtil.isBlank(id)) {
+            vo.setConnectors(connectorService.getConnectorAll());
+            vo.setMappings(mappingService.getMappingAll());
+            return vo;
+        }
 
-    @Override
-    public List<ProjectGroup> getProjectGroupAll() {
-        List<ProjectGroup> list = manager.getProjectGroupAll();
-        return list;
-    }
+        ProjectGroup projectGroup = manager.getProjectGroup(id);
+        Assert.notNull(projectGroup, "该分组已被删除");
 
-    @Override
-    public ProjectGroup getProjectGroupDetail(String projectGroupId) {
-        ProjectGroup projectGroup = this.getProjectGroup(projectGroupId);
-        if(null == projectGroup){
-            return null;
-        }
-        // 过滤出已经选择的
+        // 过滤连接器
         List<String> connectorIds = projectGroup.getConnectorIds();
-        if(CollectionUtils.isEmpty(connectorIds)){
-            projectGroup.setConnectors(Collections.emptyList());
-        }else{
+        if (!CollectionUtils.isEmpty(connectorIds)) {
             Set<String> connectorIdSet = new HashSet<>(connectorIds);
             List<Connector> connectors = connectorService.getConnectorAll();
-            projectGroup.setConnectors(connectors.stream()
-                    .filter((connector -> connectorIdSet.contains(connector.getId())))
-                    .collect(Collectors.toList())
-            );
+            if (!CollectionUtils.isEmpty(connectors)) {
+                vo.setConnectors(connectors.stream()
+                        .filter((connector -> connectorIdSet.contains(connector.getId())))
+                        .collect(Collectors.toList())
+                );
+            }
         }
+
+        // 过滤驱动
         List<String> mappingIds = projectGroup.getMappingIds();
-        if(CollectionUtils.isEmpty(mappingIds)){
-            projectGroup.setMappings(Collections.emptyList());
-        }else{
+        if (!CollectionUtils.isEmpty(mappingIds)) {
             Set<String> mappingIdSet = new HashSet<>(mappingIds);
             List<MappingVo> mappings = mappingService.getMappingAll();
-            projectGroup.setMappings(mappings.stream()
-                    .filter((mapping -> mappingIdSet.contains(mapping.getId())))
-                    .collect(Collectors.toList())
-            );
+            if (!CollectionUtils.isEmpty(mappings)) {
+                vo.setMappings(mappings.stream()
+                        .filter((mapping -> mappingIdSet.contains(mapping.getId())))
+                        .collect(Collectors.toList())
+                );
+            }
         }
-        return projectGroup;
+        return vo;
     }
+
+    @Override
+    public List<ProjectGroup> getProjectGroupAll() {
+        List<ProjectGroup> list = manager.getProjectGroupAll();
+        return list;
+    }
+
 }

+ 34 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/ProjectGroupVo.java

@@ -0,0 +1,34 @@
+package org.dbsyncer.biz.vo;
+
+import org.dbsyncer.parser.model.Connector;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2022/7/18 0:25
+ */
+public class ProjectGroupVo {
+
+    private List<Connector> connectors = new ArrayList<>();
+
+    private List<MappingVo> mappings = new ArrayList<>();
+
+    public List<Connector> getConnectors() {
+        return connectors;
+    }
+
+    public void setConnectors(List<Connector> connectors) {
+        this.connectors = connectors;
+    }
+
+    public List<MappingVo> getMappings() {
+        return mappings;
+    }
+
+    public void setMappings(List<MappingVo> mappings) {
+        this.mappings = mappings;
+    }
+}

+ 1 - 1
dbsyncer-manager/src/main/java/org/dbsyncer/manager/config/PreloadCallBack.java

@@ -38,4 +38,4 @@ public class PreloadCallBack implements Callback {
     public Object parseProjectGroup() {
         return parser.parseObject(json, ProjectGroup.class);
     }
-}
+}

+ 3 - 36
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/ProjectGroup.java

@@ -1,9 +1,6 @@
 package org.dbsyncer.parser.model;
 
-import org.dbsyncer.common.util.CollectionUtils;
-
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author xinpeng.Fu
@@ -13,29 +10,19 @@ import java.util.stream.Collectors;
 public class ProjectGroup extends ConfigModel {
 
     /**
-     * 链接列表
+     * 连接器ID列表
      */
     private List<String> connectorIds;
 
-
     /**
-     * 映射id列表
+     * 驱动ID列表
      */
     private List<String> mappingIds;
 
-    private List<Connector> connectors;
-
-    private List<Mapping> mappings;
-
     public List<String> getConnectorIds() {
         return connectorIds;
     }
 
-    public String getConnectorIdStr() {
-        String connectorStr = CollectionUtils.isEmpty(connectorIds) ? "" : connectorIds.stream().collect(Collectors.joining(","));
-        return connectorStr;
-    }
-
     public void setConnectorIds(List<String> connectorIds) {
         this.connectorIds = connectorIds;
     }
@@ -44,27 +31,7 @@ public class ProjectGroup extends ConfigModel {
         return mappingIds;
     }
 
-    public String getMappingIdStr() {
-        String mappingStr = CollectionUtils.isEmpty(mappingIds) ? "" : mappingIds.stream().collect(Collectors.joining(","));
-        return mappingStr;
-    }
     public void setMappingIds(List<String> mappingIds) {
         this.mappingIds = mappingIds;
     }
-
-    public List<Connector> getConnectors() {
-        return connectors;
-    }
-
-    public void setConnectors(List<Connector> connectors) {
-        this.connectors = connectors;
-    }
-
-    public List<Mapping> getMappings() {
-        return mappings;
-    }
-
-    public void setMappings(List<Mapping> mappings) {
-        this.mappings = mappings;
-    }
-}
+}

+ 8 - 30
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/IndexController.java

@@ -1,15 +1,10 @@
 package org.dbsyncer.web.controller.index;
 
-import org.apache.commons.lang3.StringUtils;
-import org.dbsyncer.biz.ConnectorService;
-import org.dbsyncer.biz.MappingService;
 import org.dbsyncer.biz.ProjectGroupService;
-import org.dbsyncer.biz.vo.MappingVo;
+import org.dbsyncer.biz.vo.ProjectGroupVo;
 import org.dbsyncer.biz.vo.RestResult;
 import org.dbsyncer.biz.vo.VersionVo;
 import org.dbsyncer.common.config.AppConfig;
-import org.dbsyncer.parser.model.Connector;
-import org.dbsyncer.parser.model.ProjectGroup;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
@@ -18,47 +13,30 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.UnsupportedEncodingException;
-import java.util.List;
 
 @Controller
 @RequestMapping("/index")
 public class IndexController {
 
     @Autowired
-    private ConnectorService connectorService;
-
-    @Autowired
-    private MappingService mappingService;
+    private ProjectGroupService projectGroupService;
 
     @Autowired
     private AppConfig appConfig;
-    @Autowired
-    private ProjectGroupService projectGroupService;
-
 
     @GetMapping("")
     public String index(HttpServletRequest request, ModelMap model, String projectGroupId) {
-        ProjectGroup projectGroup = projectGroupService.getProjectGroup(projectGroupId);
-        if (StringUtils.isBlank(projectGroupId) || null == projectGroup) {
-            List<Connector> connectors = connectorService.getConnectorAll();
-            List<MappingVo> mappings = mappingService.getMappingAll();
-            model.put("connectors", connectors);
-            model.put("mappings", mappings);
-            model.put("selectedGroup", "");
-        } else {
-            ProjectGroup projectGroupDetail = projectGroupService.getProjectGroupDetail(projectGroupId);
-            model.put("connectors", projectGroupDetail.getConnectors());
-            model.put("mappings", projectGroupDetail.getMappings());
-            model.put("selectedGroup", projectGroupId);
-        }
-        model.put("groups", projectGroupService.getProjectGroupAll());
+        ProjectGroupVo projectGroup = projectGroupService.getProjectGroup(projectGroupId);
+        model.put("connectors", projectGroup.getConnectors());
+        model.put("mappings", projectGroup.getMappings());
+        model.put("projectGroupId", projectGroupId);
+        model.put("projectGroups", projectGroupService.getProjectGroupAll());
         return "index/index.html";
     }
 
     @GetMapping("/version.json")
     @ResponseBody
-    public RestResult version() throws UnsupportedEncodingException {
+    public RestResult version() {
         return RestResult.restSuccess(new VersionVo(appConfig.getName(), appConfig.getCopyright()));
     }
 

+ 12 - 55
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/ProjectGroupController.java

@@ -3,21 +3,21 @@ package org.dbsyncer.web.controller.index;
 import org.dbsyncer.biz.ConnectorService;
 import org.dbsyncer.biz.MappingService;
 import org.dbsyncer.biz.ProjectGroupService;
+import org.dbsyncer.biz.vo.ProjectGroupVo;
 import org.dbsyncer.biz.vo.RestResult;
-import org.dbsyncer.parser.model.ProjectGroup;
 import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
-import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
+
 /**
- * 项目组
+ * 分组控制器
  *
  * @author xinpeng.Fu
  * @date 2022/6/23 14:59
@@ -27,10 +27,13 @@ import java.util.Map;
 public class ProjectGroupController extends BaseController {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+
     @Autowired
     private ConnectorService connectorService;
+
     @Autowired
     private MappingService mappingService;
+
     @Autowired
     private ProjectGroupService projectGroupService;
 
@@ -38,19 +41,16 @@ public class ProjectGroupController extends BaseController {
     public String pageAdd(HttpServletRequest request, ModelMap model) {
         model.put("connectors", connectorService.getConnectorAll());
         model.put("mappings", mappingService.getMappingAll());
-        return "group/addOrEdit";
+        return "group/save";
     }
 
     @GetMapping("/page/edit")
     public String pageEdit(HttpServletRequest request, ModelMap model, String id) {
-        ProjectGroup projectGroup = projectGroupService.getProjectGroup(id);
+        ProjectGroupVo projectGroup = projectGroupService.getProjectGroup(id);
         model.put("projectGroup", projectGroup);
         model.put("connectors", connectorService.getConnectorAll());
         model.put("mappings", mappingService.getMappingAll());
-        model.put("selectedConnectors", projectGroup.getConnectorIdStr());
-        model.put("selectedMappings", projectGroup.getMappingIdStr());
-
-        return "group/addOrEdit";
+        return "group/save";
     }
 
     /**
@@ -71,7 +71,7 @@ public class ProjectGroupController extends BaseController {
             Map<String, String> params = getParams(request);
             return RestResult.restSuccess(projectGroupService.add(params));
         } catch (Exception e) {
-            logger.error("add project group error:", e);
+            logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
         }
     }
@@ -83,7 +83,6 @@ public class ProjectGroupController extends BaseController {
      * mappingIds
      * connectorIds
      *
-     *
      * @param request
      * @return org.dbsyncer.biz.vo.RestResult
      * @author xinpeng.Fu
@@ -96,7 +95,7 @@ public class ProjectGroupController extends BaseController {
             Map<String, String> params = getParams(request);
             return RestResult.restSuccess(projectGroupService.edit(params));
         } catch (Exception e) {
-            logger.error("edit project group error:", e);
+            logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
         }
     }
@@ -121,48 +120,6 @@ public class ProjectGroupController extends BaseController {
         }
     }
 
-    /**
-     * 参数:
-     * id(必)
-     *
-     * @param request
-     * @return org.dbsyncer.biz.vo.RestResult
-     * @author xinpeng.Fu
-     * @date 2022/6/15 16:10
-     **/
-    @GetMapping("/get")
-    @ResponseBody
-    public RestResult get(HttpServletRequest request, @RequestParam(value = "id") String id) {
-        try {
-            ProjectGroup projectGroup = projectGroupService.getProjectGroup(id);
-            Assert.notNull(projectGroup, "该项目组已被删除");
-            return RestResult.restSuccess(projectGroup);
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-    /**
-     * 参数:
-     * id(必)
-     *
-     * @param request
-     * @return org.dbsyncer.biz.vo.RestResult
-     * @author xinpeng.Fu
-     * @date 2022/6/15 16:10
-     **/
-    @GetMapping("/getDetail")
-    @ResponseBody
-    public RestResult getDetail(HttpServletRequest request, @RequestParam(value = "id") String id) {
-        try {
-            return RestResult.restSuccess(projectGroupService.getProjectGroupDetail(id));
-        } catch (Exception e) {
-            logger.error("getDetail error:", e);
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
     @GetMapping("/getAll")
     @ResponseBody
     public RestResult getAll(HttpServletRequest request) {
@@ -174,4 +131,4 @@ public class ProjectGroupController extends BaseController {
         }
     }
 
-}
+}

+ 2 - 2
dbsyncer-web/src/main/resources/public/group/addOrEdit.html → dbsyncer-web/src/main/resources/public/group/save.html

@@ -8,7 +8,7 @@ xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
       <!-- 标题 -->
       <div class="row text-center">
         <div class="page-header">
-          <h3>添加项目组</h3>
+          <h3>添加组</h3>
         </div>
       </div>
 
@@ -30,7 +30,7 @@ xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
         <div class="col-md-12">
           <div class="panel panel-info">
             <div class="panel-heading">
-              <h3 class="panel-title">项目组配置</h3>
+              <h3 class="panel-title">组配置</h3>
             </div>
 
             <div class="panel-body">

+ 1 - 2
dbsyncer-web/src/main/resources/public/index.html

@@ -40,7 +40,6 @@
 <script th:src="@{/plugins/js/bootstrap/html5shiv.min.js}"></script>
 <!-- 上述2个js文件解决IE8以上bootstrap的兼容性问题 -->
 <script th:src="@{/plugins/js/jquery/jquery-1.11.3.min.js}"></script>
-<script th:src="@{/plugins/js/jquery/jquery.cookie.js}"></script>
 <script th:src="@{/plugins/js/bootstrap/bootstrap.min.js}"></script>
 <script th:src="@{/plugins/js/bootstrap-dialog/bootstrap-dialog.min.js}"></script>
 <script th:src="@{/plugins/js/bootstrap-growl/jquery.bootstrap-growl.min.js}"></script>
@@ -57,4 +56,4 @@
 <script th:src="@{/plugins/js/echarts/echarts.min.js}"></script>
 <script th:src="@{/js/common.js}"></script>
 <script th:src="@{/js/index.js}"></script>
-</html>
+</html>

+ 18 - 18
dbsyncer-web/src/main/resources/public/index/index.html

@@ -2,50 +2,50 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:th="http://www.thymeleaf.org" lang="zh-CN">
 
-<!-- Connector Mapping -->
+<!-- ProjectGroup Connector Mapping -->
 <div class="container-fluid">
     <div class="row">
         <form class="form-horizontal" role="form" method="post">
-            <!-- 项目组管理 -->
+            <!-- 组管理 -->
             <div class="col-md-12">
-                <!-- 项目组开始位置 -->
+                <!-- 组开始位置 -->
                 <div class="form-group">
                     <div class="col-md-12">
-                        <button type="button" class="btn btn-primary" id="addGroupBtn">
-                            <span class="fa fa-plus"></span>添加项目组([[${groups?.size()} ?: 0]])
+                        <button type="button" class="btn btn-primary" id="addProjectGroupBtn">
+                            <span class="fa fa-plus"></span>添加分组([[${projectGroups?.size()} ?: 0]])
                         </button>
                     </div>
                 </div>
-                <!-- 显示项目组 -->
-                <div class="row" th:if="${groups?.size() gt 0}">
+                <!-- 显示组 -->
+                <div class="row" th:if="${projectGroups?.size() gt 0}">
                     <div class="col-md-12">
                         <div class="panel panel-default">
                             <div class="panel-body">
                                 <div class="row">
                                     <div class="col-md-4">
-                                        <select id="group" name="group" class="form-control select-control">
+                                        <select id="projectGroup" name="projectGroup"
+                                                class="form-control select-control">
                                             <option value="" th:text="全部" selected/>
-                                            <option th:each="t,s:${groups}" th:value="${t?.id}" th:text="${t?.name}" />
+                                            <option th:each="t,s:${projectGroups}" th:value="${t?.id}"
+                                                    th:text="${t?.name}"/>
                                         </select>
-                                         <input id="selectedGroup" type="hidden" th:value="${selectedGroup}"/>
                                     </div>
                                     <div class="col-md-4">
-                                        <button type="button" class="btn btn-primary" id="editGroupBtn">
-                                            <span class="fa fa-pencil"></span>编辑项目组
+                                        <button type="button" class="btn btn-primary" id="editProjectGroupBtn">
+                                            <span class="fa fa-pencil"></span>修改
                                         </button>
-                                        <button type="button" class="btn btn-primary" id="delGroupBtn">
-                                            <span class="fa fa-times"></span>删除项目组
+                                        <button type="button" class="btn btn-primary" id="removeProjectGroupBtn">
+                                            <span class="fa fa-times"></span>删除
                                         </button>
                                     </div>
-                                    <div class="col-md-4">
-
-                                    </div>
+                                    <div class="col-md-4"></div>
                                 </div>
                             </div>
                         </div>
                     </div>
                 </div>
             </div>
+
             <!-- 连接管理 -->
             <div class="col-md-12">
                 <!-- 连接开始位置 -->
@@ -222,4 +222,4 @@
 </div>
 
 <script th:src="@{/js/index/index.js}"></script>
-</html>
+</html>

+ 47 - 12
dbsyncer-web/src/main/resources/static/css/index/index.css

@@ -1,5 +1,4 @@
 @charset "UTF-8";
-.groupBtn{display: block; margin-bottom: 10px;}
 .connectorList img{width: 65px;height: 65px; border-radius: 20%;}
 .connectorList .well-sign-red{color: #ff0000;}
 .connectorList .well-sign-operation{color: #999999; border-radius: 50%; }
@@ -14,20 +13,56 @@
 .mappingList .jumbotron .well-sign-left{position: absolute;top: -10px;left: 3px;}
 .mappingList .jumbotron .well-sign-right{position: absolute;top: -31px;left: -7px;}
 .mappingList .well { word-wrap: break-word;word-break: normal;overflow:hidden;}
-.mappingList .well img{float:left;padding:8px 2px; border-radius: 20%;}
-.mappingList .well span{float:left;margin:21px 10px;}
-.mappingList .well-sign-green{color: #808040;}
-.mappingList .well-sign-red{color: #ff0000;}
-.mappingList .well-sign-operation{position: absolute; right:12px; color: #999999; border-radius: 50%;}
-.mappingList .well-sign-operation:hover { color: #333333;}
-.mappingList .dropdown {position: absolute; right:0px; top: 0px;}
-.mappingList .dropdown-menu {right: 12px;left: auto; top: 28px;}
-.mappingList .dropdown-menu i{font-size: 20px;}
+.mappingList .well img {
+    float: left;
+    padding: 8px 2px;
+    border-radius: 20%;
+}
+
+.mappingList .well span {
+    float: left;
+    margin: 21px 10px;
+}
+
+.mappingList .well-sign-green {
+    color: #808040;
+}
+
+.mappingList .well-sign-red {
+    color: #ff0000;
+}
+
+.mappingList .well-sign-operation {
+    position: absolute;
+    right: 12px;
+    color: #999999;
+    border-radius: 50%;
+}
+
+.mappingList .well-sign-operation:hover {
+    color: #333333;
+}
+
+.mappingList .dropdown {
+    position: absolute;
+    right: 0px;
+    top: 0px;
+}
+
+.mappingList .dropdown-menu {
+    right: 12px;
+    left: auto;
+    top: 28px;
+}
+
+.mappingList .dropdown-menu i {
+    font-size: 20px;
+}
 
 .dbsyncer_block_increment {
-  background: -webkit-linear-gradient(left, #ffffff, #dffbdc);
+    background: -webkit-linear-gradient(left, #ffffff, #dffbdc);
 }
 
 .dbsyncer_block_full {
-  background: -webkit-linear-gradient(left, #ffffff, #dcf5fb);
+    background: -webkit-linear-gradient(left, #ffffff, #dcf5fb);
 }

+ 6 - 26
dbsyncer-web/src/main/resources/static/js/common.js

@@ -21,8 +21,7 @@ function bootGrowl(data, type) {
 // 跳转主页
 function backIndexPage() {
     // 加载页面
-    var groupID = isBlank($.cookie("groupID")) ? "" : $.cookie("groupID");
-    doLoader("/index?projectGroupId="+ groupID + "&refresh=" + new Date().getTime());
+    doLoader("/index?refresh=" + new Date().getTime());
 }
 
 // 美化SQL
@@ -89,12 +88,12 @@ $.fn.serializeJson = function () {
 // 全局加载页面
 function doLoader(url){
     // 加载页面
-    $initContainer.load($basePath + url, function (response,status,xhr) {
+    $initContainer.load($basePath + url, function (response, status, xhr) {
         if (status != 'success') {
             bootGrowl(response);
         }
+        $.loadingT(false);
     });
-    $.loadingT(false);
 }
 
 // 异常请求
@@ -154,23 +153,7 @@ function doGetWithoutLoading(url, params, action) {
  *
  */
 function isBlank(str) {
-    return str === undefined || str === null || str === false || str.length === 0 || str.replaceAll(' ', '').length === 0;
-}
-
-/**
- * 移除数组中的空元素
- *
- * @param args 原数组
- *
- * @return Array
- *
-*/
-function filterEmptyElements(args) {
-    if ($.isEmptyObject(args)) {
-        return [];
-    }
-    args = args.filter(e => !isBlank(e));
-    return args;
+    return str === undefined || str === null || str === false || str.length === 0 || str.replace(' ', '').length === 0;
 }
 
 /**
@@ -178,13 +161,10 @@ function filterEmptyElements(args) {
  *
  * @param str 带切分字符
  * @param delimiter 分隔符
- *
  * @return Array
- *
  */
 function splitStrByDelimiter(str, delimiter) {
-    if (isBlank(str)) {
-        return;
+    if (!isBlank(str)) {
+        return str.split(delimiter);
     }
-    return str.split(delimiter);
 }

+ 2 - 2
dbsyncer-web/src/main/resources/static/js/group/addOrEdit.js

@@ -6,7 +6,7 @@ function submit(data) {
     if (data["id"]) {
         doPoster("/projectGroup/edit", data, function (data) {
             if (data.success == true) {
-                bootGrowl("修改项目组成功!", "success");
+                bootGrowl("修改组成功!", "success");
                 backIndexPage();
             } else {
                 bootGrowl(data.resultValue, "danger");
@@ -15,7 +15,7 @@ function submit(data) {
     } else {
         doPoster("/projectGroup/add", data, function (data) {
             if (data.success == true) {
-                bootGrowl("新增项目组成功!", "success");
+                bootGrowl("新增组成功!", "success");
                 backIndexPage();
             } else {
                 bootGrowl(data.resultValue, "danger");

+ 32 - 52
dbsyncer-web/src/main/resources/static/js/index/index.js

@@ -1,33 +1,29 @@
-// 添加项目
-function bindAddGroup() {
-    $("#addGroupBtn").click(function () {
+// 添加
+function bindAddProjectGroup() {
+    $("#addProjectGroupBtn").click(function () {
         doLoader("/projectGroup/page/add");
     });
 }
-// 编辑项目组
-function bindEditGroup() {
-    $("#editGroupBtn").click(function () {
-        var $id = $('#group').val();
-        if (isBlank($id)) {
-            bootGrowl("请选择有效项目组", "danger");
-            return false;
+
+// 修改分组
+function bindEditProjectGroup($projectGroupSelect) {
+    $("#editProjectGroupBtn").click(function () {
+        var $id = $projectGroupSelect.selectpicker('val');
+        if (!isBlank($id)) {
+            doLoader('/projectGroup/page/edit?id=' + $id);
+            return;
         }
-        doGetter('/projectGroup/get', {id: $id}, function (data) {
-            if (data.success) {
-                doLoader('/projectGroup/page/edit?id=' + $id);
-            } else {
-                bootGrowl(data.resultValue, 'danger');
-            }
-        });
+        bootGrowl("请选择有效分组", "danger");
     });
 }
-// 删除项目组
-function bindRemoveGroup() {
-    $("#delGroupBtn").click(function () {
-        var $id = $('#group').val();
+
+// 删除分组
+function bindRemoveProjectGroup($projectGroupSelect) {
+    $("#removeProjectGroupBtn").click(function () {
+        var $id = $projectGroupSelect.selectpicker('val');
         if (isBlank($id)) {
-            bootGrowl("请选择有效项目组", "danger");
-            return false;
+            bootGrowl("请选择组", "danger");
+            return;
         }
         BootstrapDialog.show({
             title: "警告",
@@ -45,7 +41,6 @@ function bindRemoveGroup() {
                         } else {
                             bootGrowl(data.resultValue, "danger");
                         }
-                        $.cookie("groupID", '');
                     });
                     dialog.close();
                 }
@@ -58,23 +53,16 @@ function bindRemoveGroup() {
         });
     });
 }
-// 项目组筛选
-function bindGroupChange() {
-    var $group = $('#group');
+
+// 给分组下拉绑定事件
+function bindProjectGroupSelect($projectGroupSelect) {
     // 绑定选择事件
-    $group.on('change, changed.bs.select', function () {
-        var groupID = $(this).val();
-        $.cookie("groupID", groupID);
-        searchByGroup(groupID);
+    $projectGroupSelect.on('change, changed.bs.select', function () {
+        $.loadingT(true);
+        doLoader("/index?projectGroupId=" + $(this).val());
     });
 }
 
-// 根据项目组查询
-function searchByGroup(groupID) {
-    $.loadingT(true);
-    doLoader("/index?projectGroupId=" + groupID);
-}
-
 // 添加连接
 function bindAddConnector() {
     // 绑定添加连接按钮点击事件
@@ -192,21 +180,13 @@ function doPost(url) {
 }
 
 $(function () {
-    $(".select-control").selectpicker({
-        "style":'dbsyncer_btn-info',
-        "title":"全部",
-        "actionsBox":true,
-        "liveSearch":true,
-        "noneResultsText":"没有找到 {0}",
-        "selectedTextFormat":"count > 10"
-    });
-    // 初始化group
-    $('#group').selectpicker('val', $('#selectedGroup').val());
-
-    bindAddGroup();
-    bindEditGroup();
-    bindRemoveGroup();
-    bindGroupChange();
+    // 初始化select插件
+    initSelectIndex($(".select-control"), 1);
+    bindAddProjectGroup();
+    var $projectGroupSelect = $("#projectGroup");
+    bindEditProjectGroup($projectGroupSelect);
+    bindRemoveProjectGroup($projectGroupSelect);
+    bindProjectGroupSelect($projectGroupSelect);
 
     bindAddConnector();
     bindEditConnector();

+ 0 - 117
dbsyncer-web/src/main/resources/static/plugins/js/jquery/jquery.cookie.js

@@ -1,117 +0,0 @@
-/*!
- * jQuery Cookie Plugin v1.4.1
- * https://github.com/carhartl/jquery-cookie
- *
- * Copyright 2013 Klaus Hartl
- * Released under the MIT license
- */
-(function (factory) {
-	if (typeof define === 'function' && define.amd) {
-		// AMD
-		define(['jquery'], factory);
-	} else if (typeof exports === 'object') {
-		// CommonJS
-		factory(require('jquery'));
-	} else {
-		// Browser globals
-		factory(jQuery);
-	}
-}(function ($) {
-
-	var pluses = /\+/g;
-
-	function encode(s) {
-		return config.raw ? s : encodeURIComponent(s);
-	}
-
-	function decode(s) {
-		return config.raw ? s : decodeURIComponent(s);
-	}
-
-	function stringifyCookieValue(value) {
-		return encode(config.json ? JSON.stringify(value) : String(value));
-	}
-
-	function parseCookieValue(s) {
-		if (s.indexOf('"') === 0) {
-			// This is a quoted cookie as according to RFC2068, unescape...
-			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
-		}
-
-		try {
-			// Replace server-side written pluses with spaces.
-			// If we can't decode the cookie, ignore it, it's unusable.
-			// If we can't parse the cookie, ignore it, it's unusable.
-			s = decodeURIComponent(s.replace(pluses, ' '));
-			return config.json ? JSON.parse(s) : s;
-		} catch(e) {}
-	}
-
-	function read(s, converter) {
-		var value = config.raw ? s : parseCookieValue(s);
-		return $.isFunction(converter) ? converter(value) : value;
-	}
-
-	var config = $.cookie = function (key, value, options) {
-
-		// Write
-
-		if (value !== undefined && !$.isFunction(value)) {
-			options = $.extend({}, config.defaults, options);
-
-			if (typeof options.expires === 'number') {
-				var days = options.expires, t = options.expires = new Date();
-				t.setTime(+t + days * 864e+5);
-			}
-
-			return (document.cookie = [
-				encode(key), '=', stringifyCookieValue(value),
-				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
-				options.path    ? '; path=' + options.path : '',
-				options.domain  ? '; domain=' + options.domain : '',
-				options.secure  ? '; secure' : ''
-			].join(''));
-		}
-
-		// Read
-
-		var result = key ? undefined : {};
-
-		// To prevent the for loop in the first place assign an empty array
-		// in case there are no cookies at all. Also prevents odd result when
-		// calling $.cookie().
-		var cookies = document.cookie ? document.cookie.split('; ') : [];
-
-		for (var i = 0, l = cookies.length; i < l; i++) {
-			var parts = cookies[i].split('=');
-			var name = decode(parts.shift());
-			var cookie = parts.join('=');
-
-			if (key && key === name) {
-				// If second argument (value) is a function it's a converter...
-				result = read(cookie, value);
-				break;
-			}
-
-			// Prevent storing a cookie that we couldn't decode.
-			if (!key && (cookie = read(cookie)) !== undefined) {
-				result[name] = cookie;
-			}
-		}
-
-		return result;
-	};
-
-	config.defaults = {};
-
-	$.removeCookie = function (key, options) {
-		if ($.cookie(key) === undefined) {
-			return false;
-		}
-
-		// Must not alter options, thus extending a fresh object...
-		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
-		return !$.cookie(key);
-	};
-
-}));

+ 1 - 3
dbsyncer-web/src/main/resources/static/plugins/js/loading-plus/loading-plus.js

@@ -15,7 +15,6 @@ $.loadingT = {
 		var content = '<i class="fa fa-spin fa-3x fa-refresh"></i>';
 		var $loadingT = $(".loadingT");
 		$loadingT.html("<div class='loading-indicator' unselectable='on' onselectstart='return false;'>"+title+content+"</div>");
-		// $loadingT.css({ "height":$(document.body).height()+'px' });
 		var $indicato = $(".loading-indicator");
 		$indicato.css({ "margin-top":($(window).height() / 2) -($indicato.height() / 2) });
 	}
@@ -28,7 +27,6 @@ jQuery.extend({
 		if(a){ $(".loadingT").fadeIn(300);}else{$(".loadingT").fadeOut(300);}
 	},
 	resetIndicato:function(){
-		// $(".loadingT").css({ "height":$(document.body).height()+'px' });
 		var $indicato = $(".loading-indicator");
 		$indicato.css({ "margin-top":($(window).height() / 2) -($indicato.height() / 2) });
 	}
@@ -36,4 +34,4 @@ jQuery.extend({
 //兼容浏览器缩放
 $(window).resize(function() {
 	$.resetIndicato();
-});
+});