You are viewing a plain text version of this content. The canonical link for it is here.
Posted to submarine-dev@hadoop.apache.org by li...@apache.org on 2019/10/08 12:32:52 UTC

[hadoop-submarine] branch master updated: [SUBMARINE-211] Integrated Submarine workbench team manager web & server

This is an automated email from the ASF dual-hosted git repository.

liuxun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-submarine.git


The following commit(s) were added to refs/heads/master by this push:
     new e17397c  [SUBMARINE-211] Integrated Submarine workbench team manager web & server
e17397c is described below

commit e17397caaef792f930447e7361aeea65550aeac5
Author: Xun Liu <li...@apache.org>
AuthorDate: Wed Oct 2 00:24:09 2019 +0800

    [SUBMARINE-211] Integrated Submarine workbench team manager web & server
    
    ### What is this PR for?
    The submarine team manager is independently developed.
    Integration of front-end pages and back-end services is required.
    
    ### What type of PR is it?
    [Refactoring]
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/SUBMARINE-211
    
    ### How should this be tested?
    * [CI Pass](https://travis-ci.org/liuxunorg/hadoop-submarine/builds/592117183)
    
    ### Screenshots (if appropriate)
    ![team-web-server](https://user-images.githubusercontent.com/3677382/65981603-0ae81300-e4ac-11e9-91f4-cb01fbe527da.gif)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Xun Liu <li...@apache.org>
    
    Closes #30 from liuxunorg/SUBMARINE-211 and squashes the following commits:
    
    7e94bad [Xun Liu] [SUBMARINE-211] Integrated Submarine team manager web & server
---
 .../org/apache/submarine/database/entity/Team.java |   5 +-
 .../submarine/database/service/TeamService.java    |  32 ++--
 .../org/apache/submarine/rest/TeamRestApi.java     |   4 +-
 .../src/components/Dict/SearchSelect.vue           |   4 +-
 .../src/views/account/settings/Team.vue            | 164 ++++++++++-----------
 5 files changed, 95 insertions(+), 114 deletions(-)

diff --git a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/entity/Team.java b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/entity/Team.java
index e76492c..8a8fbea 100644
--- a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/entity/Team.java
+++ b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/entity/Team.java
@@ -22,7 +22,7 @@ public class Team extends BaseEntity {
 
   private String teamName;
 
-  private List<TeamMember> collaborators;
+  private List<TeamMember> collaborators = new ArrayList<>();;
 
   public String getOwner() {
     return owner;
@@ -49,9 +49,6 @@ public class Team extends BaseEntity {
   }
 
   public void addCollaborator(TeamMember memeber) {
-    if (collaborators == null) {
-      collaborators = new ArrayList<>();
-    }
     this.collaborators.add(memeber);
   }
 }
diff --git a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/service/TeamService.java b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/service/TeamService.java
index 5e2692e..a32ac85 100644
--- a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/service/TeamService.java
+++ b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/database/service/TeamService.java
@@ -101,30 +101,30 @@ public class TeamService {
       where.put("teamId", team.getId());
 
       // Take two lists of difference
-      List<TeamMember> old_teamMembers = teamMemberMapper.selectAll(where);
-      List<String> old_teamMembers_member = new ArrayList<>();
-      for (TeamMember old_teamMember : old_teamMembers) {
-        old_teamMembers_member.add(old_teamMember.getMember());
+      List<TeamMember> oldTeamMembers = teamMemberMapper.selectAll(where);
+      List<String> oldMembers = new ArrayList<>();
+      for (TeamMember oldTeamMember : oldTeamMembers) {
+        oldMembers.add(oldTeamMember.getMember());
       }
 
-      List<TeamMember> curr_teamMembers = team.getCollaborators();
-      List<String> curr_teamMembers_member = new ArrayList<>();
-      for (TeamMember curr_teamMember : curr_teamMembers) {
-        curr_teamMembers_member.add(curr_teamMember.getMember());
+      List<TeamMember> newTeamMembers = team.getCollaborators();
+      List<String> newMembers = new ArrayList<>();
+      for (TeamMember newTeamMember : newTeamMembers) {
+        newMembers.add(newTeamMember.getMember());
       }
 
-      for (TeamMember old : old_teamMembers) {
-        if (!curr_teamMembers_member.contains(old.getMember())) {
-          teamMemberMapper.deleteByPrimaryKey(old.getId());
+      for (TeamMember oldTeamMember : oldTeamMembers) {
+        if (!newMembers.contains(oldTeamMember.getMember())) {
+          teamMemberMapper.deleteByPrimaryKey(oldTeamMember.getId());
         }
       }
 
-      for (TeamMember curr : curr_teamMembers) {
-        if (!old_teamMembers_member.contains(curr.getMember())) {
+      for (TeamMember newTeamMember : newTeamMembers) {
+        if (!oldMembers.contains(newTeamMember.getMember())) {
           // TODO(zhulinhao):teamId Send it by the front desk, here there is no assignment
-          curr.setTeamId(team.getId());
-          curr.setTeamName(team.getTeamName());
-          teamMemberMapper.insert(curr);
+          newTeamMember.setTeamId(team.getId());
+          newTeamMember.setTeamName(team.getTeamName());
+          teamMemberMapper.insert(newTeamMember);
         }
       }
 
diff --git a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/rest/TeamRestApi.java b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/rest/TeamRestApi.java
index 2aaa619..75a065c 100644
--- a/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/rest/TeamRestApi.java
+++ b/submarine-workbench/workbench-server/src/main/java/org/apache/submarine/rest/TeamRestApi.java
@@ -121,11 +121,11 @@ public class TeamRestApi {
 
     } catch (Exception e) {
       return new JsonResponse.Builder<>(Response.Status.OK).success(false)
-          .message("update team failed!").build();
+          .message("Update team failed!").build();
     }
 
     return new JsonResponse.Builder<>(Response.Status.OK)
-        .message("update team successfully!").success(true).build();
+        .message("Update team successfully!").success(true).build();
   }
 
   @DELETE
diff --git a/submarine-workbench/workbench-web/src/components/Dict/SearchSelect.vue b/submarine-workbench/workbench-web/src/components/Dict/SearchSelect.vue
index 5ed70ef..b29fc39 100644
--- a/submarine-workbench/workbench-web/src/components/Dict/SearchSelect.vue
+++ b/submarine-workbench/workbench-web/src/components/Dict/SearchSelect.vue
@@ -49,7 +49,7 @@ export default {
     initValue: {
       immediate: true,
       handler (val) {
-        console.log('val = ', val)
+        // console.log('val = ', val)
         if (val && this.initSelectValue.length === 0) {
           for (var i = 0; i < val.length; i++) {
             var option = {}
@@ -104,7 +104,7 @@ export default {
       })
     },
     handleChange (value) {
-      this.$emit('change', this.id, value)
+      this.$emit('change', this.id, value, this.$store.getters.userInfo)
     }
   }
 }
diff --git a/submarine-workbench/workbench-web/src/views/account/settings/Team.vue b/submarine-workbench/workbench-web/src/views/account/settings/Team.vue
index 19d4008..862fcc0 100644
--- a/submarine-workbench/workbench-web/src/views/account/settings/Team.vue
+++ b/submarine-workbench/workbench-web/src/views/account/settings/Team.vue
@@ -80,7 +80,6 @@ import { filterObj } from '@/utils/util'
 import { ListMixin } from '@/mixins/ListMixin'
 import SearchSelect from '@/components/Dict/SearchSelect.vue'
 import { addTeam, editTeam, deleteTeam, duplicateCheck } from '@/api/system'
-import { getAction } from '@/api/manage'
 
 export default {
   name: 'Team',
@@ -89,9 +88,8 @@ export default {
   data () {
     return {
       visible: false,
-      // 查询条件
+      // query Param
       queryParam: {
-        owner: 'test'
       },
       searchSelectValue: '',
       cacheData: [],
@@ -140,53 +138,27 @@ export default {
   },
   created () {
     this.login_user = this.userInfo
+    this.queryParam.owner = this.login_user.name
   },
   methods: {
-    loadData222 (arg) {
-      if (!this.url.list) {
-        console.log('Please set the url.list property!')
-        return
-      }
-      // load first page data
-      if (arg === 1) {
-        this.ipagination.current = 1
-      }
-      var params = this.getQueryParams()
-      this.loading = true
-      getAction(this.url.list, params).then((res) => {
-        this.responseAttributes = Object.assign({}, res.attributes)
-        if (res.success) {
-          res.result.records.forEach((team) => {
-            // console.log('team = ', team)
-            team.collaborators.forEach((member) => {
-              // console.log('member = ', member)
-              member.label = member.member
-              member.key = member.id
-            })
-          })
-          // console.log('res.result.records = ', res.result.records)
-          this.dataSource = res.result.records
-          this.ipagination.total = res.result.total
-        } else {
-          this.$message.warning(res.message)
-        }
-        this.loading = false
-      })
-    },
     getQueryParams () {
       var param = Object.assign({}, this.queryParam, this.isorter)
       param.pageNo = this.ipagination.current
       param.pageSize = this.ipagination.pageSize
       return filterObj(param)
     },
-    changeSearchSelect (id, selected) {
-      console.log('selected', selected)
+    changeSearchSelect (id, selected, userInfo) {
+      // console.log('selected', selected)
       // const changeData = [...this.dataSource]
       const team = this.dataSource.filter(item => item.id === id)[0]
       if (team) {
-        console.log('team', team)
+        // console.log('team', team)
+        if (team.collaborators === null) {
+          team.collaborators = []
+        }
         var deleted = []
         var newAdd = []
+
         // found deleted team member
         team.collaborators.forEach(function (oldMember) {
           var notFoundNum = 0
@@ -214,17 +186,21 @@ export default {
           }
         })
 
-        console.log('deleted', deleted)
-        console.log('newAdd', newAdd)
+        // console.log('deleted', deleted)
+        // console.log('newAdd', newAdd)
         // delete from dataSource
         var newTeam = Object.assign({}, team)
         newTeam.collaborators = []
+
         // add not deleted member
-        team.collaborators.forEach(function (oldMember) {
-          if (deleted.indexOf(oldMember.id) < 0) {
-            newTeam.collaborators = [...newTeam.collaborators, oldMember]
-          }
-        })
+        if (team.collaborators) {
+          team.collaborators.forEach(function (oldMember) {
+            if (deleted.indexOf(oldMember.id) < 0) {
+              newTeam.collaborators = [...newTeam.collaborators, oldMember]
+            }
+          })
+        }
+
         // add new add member
         newAdd.forEach(function (newAddMember) {
           var newMember = {}
@@ -232,9 +208,11 @@ export default {
           newMember.id = newAddMember.key
           newMember.member = newAddMember.label
           newMember.inviter = 0
+          newMember.createBy = userInfo.name
+          newMember.updateBy = userInfo.name
           newTeam.collaborators = [...newTeam.collaborators, newMember]
         })
-        console.log('newTeam', newTeam)
+        // console.log('newTeam', newTeam)
 
         // replace newTeam into dataSource
         this.dataSource.forEach(function (team) {
@@ -286,54 +264,59 @@ export default {
     onSaveMember (id) {
       const newData = [...this.dataSource]
       const target = newData.filter(item => id === item.id)[0]
+      // console.log('target = ', target)
       if (target) {
-        const validate = this.validateTeamName(target.teamName)
-        if (validate === false) {
-          return
-        }
-        if (target.hasOwnProperty('editable')) {
-          // need delete editable Property
-          delete target['editable']
-        }
-        // clean collaborators text and value Property
-        target.collaborators.forEach((member) => {
-          delete member['text']
-          delete member['value']
-        })
+        this.validateTeamName(target, () => {
+          if (target.hasOwnProperty('editable')) {
+            // need delete editable Property
+            delete target['editable']
+          }
+          // clean collaborators text and value Property
+          if (target.collaborators) {
+            target.collaborators.forEach((member) => {
+              delete member['text']
+              delete member['value']
+            })
+          }
 
-        const that = this
-        that.confirmLoading = true
-        // console.log('target = ', target)
-        let obj
-        if (target.id === '0') {
-          obj = addTeam(target)
-        } else {
-          obj = editTeam(target)
-        }
-        obj.then(res => {
-          if (res.success) {
-            // console.log('res = ', res)
-            that.$message.success(res.message)
-            delete target.editable
-            if (target.id === '0') {
-              target.id = res.result.records[0].id
-            }
-            this.dataSource = newData
-            this.cacheData = newData.map(item => ({ ...item }))
-            // console.log('dataSource = ', this.dataSource)
-            this.loadData(1)
+          const that = this
+          that.confirmLoading = true
+          console.log('target = ', target)
+          let obj
+          if (target.id === '0') {
+            target.createBy = this.login_user.name
+            obj = addTeam(target)
           } else {
-            that.$message.warning(res.message)
+            target.updateBy = this.login_user.name
+            obj = editTeam(target)
           }
-        }).finally(() => {
-          that.confirmLoading = false
+          obj.then(res => {
+            if (res.success) {
+              // console.log('res = ', res)
+              that.$message.success(res.message)
+              delete target.editable
+              if (target.id === '0') {
+                target.id = res.result.id
+              }
+              this.dataSource = newData
+              this.cacheData = newData.map(item => ({ ...item }))
+              // console.log('dataSource = ', this.dataSource)
+              this.loadData(1)
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
         })
       }
     },
     onCancelMember (id) {
       const newData = [...this.dataSource]
       const target = newData.filter(item => id === item.id)[0]
-      if (target) {
+      if (target.id === '0') {
+        this.loadData(1)
+      } else {
         Object.assign(target, this.cacheData.filter(item => id === item.id)[0])
         delete target.editable
         this.dataSource = newData
@@ -344,7 +327,7 @@ export default {
       const target = newData.filter(item => id === item.id)[0]
       const that = this
       that.confirmLoading = true
-      deleteTeam(id).then(res => {
+      deleteTeam({ id: id }).then(res => {
         if (res.success) {
           that.$message.success(res.message)
           delete target.editable
@@ -357,24 +340,25 @@ export default {
         that.confirmLoading = false
       })
     },
-    validateTeamName (value) {
+    validateTeamName (team, callback) {
       const that = this
-      if (value === null || value === '') {
+      if (team.teamName === null || team.teamName === '') {
         that.$message.warning('Team name can not empty!')
         return false
       }
       var params = {
         tableName: 'team',
         fieldName: 'team_name',
-        fieldVal: value,
-        dataId: null
+        fieldVal: team.teamName
+      }
+      if (team.id !== '0') {
+        params.dataId = team.id
       }
       duplicateCheck(params).then((res) => {
         if (res.success === false) {
           that.$message.warning('Team name already exist!')
-          return false
         } else {
-          return true
+          callback()
         }
       })
     }