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

lvshaokang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev by this push:
     new 5e9298db5 [Feature] the team related front-end improve (#1792)
5e9298db5 is described below

commit 5e9298db5d4c6547e25fee4ca824bcda73bbe38d
Author: benjobs <[email protected]>
AuthorDate: Tue Oct 11 13:59:30 2022 +0800

    [Feature] the team related front-end improve (#1792)
    
    * [Feature] the team related front-end improve
---
 build.sh                                           |  11 +-
 .../streampark/common/conf/ConfigConst.scala       |  29 ++----
 .../src/assembly/bin/streampark.sh                 |  11 +-
 .../src/assembly/script/data/mysql-data.sql        |   6 +-
 .../src/assembly/script/data/pgsql-data.sql        |   6 +-
 .../src/assembly/script/schema/mysql-schema.sql    |   7 +-
 .../src/assembly/script/schema/pgsql-schema.sql    |  24 +++--
 .../src/assembly/script/upgrade/mysql/1.2.4.sql    |   7 ++
 .../console/StreamParkConsoleBootstrap.java        |  12 +--
 .../console/base/domain/ResponseCode.java          |   5 +-
 .../console/base/exception/AlertException.java     |   8 +-
 .../{ApiException.java => ApiAlertException.java}  |  18 ++--
 .../{ApiException.java => ApiDetailException.java} |  23 +++--
 .../base/exception/ApplicationException.java       |   8 +-
 .../base/exception/IllegalFileTypeException.java   |   2 +-
 .../console/base/exception/InternalException.java  |   2 -
 .../base/handler/GlobalExceptionHandler.java       |  17 ++-
 .../core/controller/ApplicationController.java     |   7 --
 .../streampark/console/core/entity/FlinkEnv.java   |   6 +-
 .../console/core/service/CommonService.java        |   3 +
 .../core/service/impl/AppBuildPipeServiceImpl.java |   2 +-
 .../core/service/impl/ApplicationServiceImpl.java  |  10 +-
 .../core/service/impl/CommonServiceImpl.java       |  17 ++-
 .../core/service/impl/FlinkClusterServiceImpl.java |   2 +-
 .../system/controller/AccessTokenController.java   |  11 +-
 ...MemberController.java => MemberController.java} |  31 +++---
 .../system/controller/PassportController.java      |   8 ++
 .../console/system/controller/UserController.java  |  56 ++++++++++
 .../system/entity/{TeamMember.java => Member.java} |   4 +-
 .../streampark/console/system/entity/User.java     |  14 +--
 .../{TeamMemberMapper.java => MemberMapper.java}   |   6 +-
 .../{TeamMemberService.java => MemberService.java} |  19 ++--
 .../console/system/service/UserService.java        |   5 +
 .../service/impl/AccessTokenServiceImpl.java       |   4 +-
 ...mberServiceImpl.java => MemberServiceImpl.java} |  95 +++++++++--------
 .../system/service/impl/RoleServiceImpl.java       |   6 +-
 .../system/service/impl/TeamServiceImpl.java       |   1 +
 .../system/service/impl/UserServiceImpl.java       |  64 +++++++++---
 .../src/main/resources/application.yml             |   2 +
 .../src/main/resources/db/data-h2.sql              |  20 ++--
 .../src/main/resources/db/schema-h2.sql            |   5 +-
 .../{TeamMemberMapper.xml => MemberMapper.xml}     |  34 +++---
 .../main/resources/mapper/system/MenuMapper.xml    |   6 +-
 .../main/resources/mapper/system/RoleMapper.xml    |   4 +-
 .../main/resources/mapper/system/TeamMapper.xml    |   6 +-
 .../main/resources/mapper/system/UserMapper.xml    |   1 +
 .../streampark-console-webapp/src/api/index.js     |   4 +-
 .../streampark-console-webapp/src/api/user.js      |   8 ++
 .../src/components/GlobalFooter/GlobalFooter.vue   |   2 +-
 .../src/components/global.less                     |   2 -
 .../src/components/tools/UserMenu.vue              |  93 +++++++++++++----
 .../streampark-console-webapp/src/store/getters.js |   1 +
 .../src/store/modules/user.js                      |  55 ++++++++--
 .../streampark-console-webapp/src/utils/request.js |  16 ++-
 .../src/views/flink/app/Add.vue                    |   3 -
 .../src/views/flink/app/View.vue                   |  12 +--
 .../src/views/flink/project/Add.vue                |   3 -
 .../src/views/flink/project/View.vue               |   7 +-
 .../src/views/system/member/Member.vue             |   3 -
 .../src/views/system/member/MemberAdd.vue          |   7 +-
 .../src/views/system/member/MemberEdit.vue         |   3 -
 .../src/views/user/SignIn.vue                      | 114 ++++++++++++++++++---
 62 files changed, 637 insertions(+), 341 deletions(-)

diff --git a/build.sh b/build.sh
index c96329905..79eab3a37 100755
--- a/build.sh
+++ b/build.sh
@@ -110,11 +110,12 @@ PRG_DIR=`dirname "$PRG"`
 
 print_logo() {
   printf '\n'
-  printf '      %s    _____ __                            ____             __  
     %s\n'          $PRIMARY $RESET
-  printf '      %s   / ___// /_________  ____ _____ ___  / __ \____ ______/ 
/__     %s\n'          $PRIMARY $RESET
-  printf '      %s   \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ /_/ / __ `/ ___/ 
//_/     %s\n'          $PRIMARY $RESET
-  printf '      %s  ___/ / /_/ /  /  __/ /_/ / / / / / / ____/ /_/ / /  / ,<   
     %s\n'          $PRIMARY $RESET
-  printf '      %s /____/\__/_/   \___/\__,_/_/ /_/ /_/_/    \__,_/_/  /_/|_|  
     %s\n\n'        $PRIMARY $RESET
+  printf '      %s    _____ __                                             __  
     %s\n'          $PRIMARY $RESET
+  printf '      %s   / ___// /_________  ____ _____ ___  ____  ____ ______/ 
/__     %s\n'          $PRIMARY $RESET
+  printf '      %s   \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ __ \  __ `/ ___/ 
//_/     %s\n'          $PRIMARY $RESET
+  printf '      %s  ___/ / /_/ /  /  __/ /_/ / / / / / / /_/ / /_/ / /  / ,<   
     %s\n'          $PRIMARY $RESET
+  printf '      %s /____/\__/_/   \___/\__,_/_/ /_/ /_/ ____/\__,_/_/  /_/|_|  
     %s\n'          $PRIMARY $RESET
+  printf '      %s                                   /_/                       
     %s\n\n'        $PRIMARY $RESET
   printf '      %s   Version:  1.2.4 %s\n'                                     
                    $BLUE   $RESET
   printf '      %s   WebSite:  https://streampark.apache.org%s\n'              
                     $BLUE   $RESET
   printf '      %s   GitHub :  http://github.com/apache/streampark%s\n\n'      
                    $BLUE   $RESET
diff --git 
a/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigConst.scala
 
b/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigConst.scala
index 6233eef31..a0f575ee2 100644
--- 
a/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigConst.scala
+++ 
b/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigConst.scala
@@ -153,8 +153,6 @@ object ConfigConst {
 
   val KEY_JDBC_DRIVER = "driverClassName"
 
-  val KEY_JDBC_DATABASE = "database"
-
   val KEY_JDBC_URL = "jdbcUrl"
 
   val KEY_JDBC_USER = "username"
@@ -163,12 +161,8 @@ object ConfigConst {
 
   val KEY_JDBC_INSERT_BATCH = "batch.size"
 
-  val KEY_JDBC_INSERT_BATCH_DELAYTIME = "batch.delayTime"
-
   val DEFAULT_JDBC_INSERT_BATCH = 1
 
-  val DEFAULT_JDBC_INSERT_BATCH_DELAYTIME = 1000L
-
   val MONGO_PREFIX = "mongodb."
 
   /**
@@ -206,25 +200,20 @@ object ConfigConst {
 
   val KEY_FLINK_TM_PROCESS_MEMORY = "taskmanager.memory.process.size"
 
-  val KEY_FLINK_TOTAL_MEMORY = "jobmanager.memory.flink.size"
-
-  val KEY_FLINK_JVM_HEAP_MEMORY = "jobmanager.memory.heap.size"
-
-  val KEY_FLINK_JVM_OFF_HEAP_MEMORY = "jobmanager.memory.off-heap.size"
-
   val STREAMPARK_FLINKSQL_CLIENT_CLASS = 
"org.apache.streampark.flink.cli.SqlClient"
 
   def printLogo(info: String): Unit = {
     // scalastyle:off println
     println("\n")
-    println("       _____ __                            ____             __    
       ")
-    println("      / ___// /_________  ____ _____ ___  / __ \\____ ______/ /__ 
       ")
-    println("      \\__ \\/ __/ ___/ _ \\/ __ `/ __ `__ \\/ /_/ / __ `/ ___/ 
//_/     ")
-    println("     ___/ / /_/ /  /  __/ /_/ / / / / / / ____/ /_/ / /  / ,<     
       ")
-    println("    /____/\\__/_/   \\___/\\__,_/_/ /_/ /_/_/    \\__,_/_/  
/_/|_|   \n\n")
-    println("    Version:  1.2.4                                               
       ")
-    println("    WebSite:  https://streampark.apache.org                       
       ")
-    println("    GitHub :  https://github.com/apache/streampark                
       ")
+    println("        _____ __                                             __   
    ")
+    println("       / ___// /_________  ____ _____ ___  ____  ____ ______/ /__ 
    ")
+    println("       \\__ \\/ __/ ___/ _ \\/ __ `/ __ `__ \\/ __ \\  __ `/ ___/ 
//_/")
+    println("      ___/ / /_/ /  /  __/ /_/ / / / / / / /_/ / /_/ / /  / ,<    
    ")
+    println("     /____/\\__/_/   \\___/\\__,_/_/ /_/ /_/ ____/\\__,_/_/  
/_/|_|   ")
+    println("                                       /_/                        
\n\n")
+    println("    Version:  1.2.4                                               
    ")
+    println("    WebSite:  https://streampark.apache.org                       
    ")
+    println("    GitHub :  https://github.com/apache/streampark                
    ")
     println(s"    Info   :  $info                                 ")
     println(s"    Time   :  ${LocalDateTime.now}              \n\n")
     // scalastyle:on println
diff --git 
a/streampark-console/streampark-console-service/src/assembly/bin/streampark.sh 
b/streampark-console/streampark-console-service/src/assembly/bin/streampark.sh
index 046fd579f..d8d2806b2 100755
--- 
a/streampark-console/streampark-console-service/src/assembly/bin/streampark.sh
+++ 
b/streampark-console/streampark-console-service/src/assembly/bin/streampark.sh
@@ -253,11 +253,12 @@ fi
 
 print_logo() {
   printf '\n'
-  printf '      %s    _____ __                            ____             __  
     %s\n'          $PRIMARY $RESET
-  printf '      %s   / ___// /_________  ____ _____ ___  / __ \____ ______/ 
/__     %s\n'          $PRIMARY $RESET
-  printf '      %s   \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ /_/ / __ `/ ___/ 
//_/     %s\n'          $PRIMARY $RESET
-  printf '      %s  ___/ / /_/ /  /  __/ /_/ / / / / / / ____/ /_/ / /  / ,<   
     %s\n'          $PRIMARY $RESET
-  printf '      %s /____/\__/_/   \___/\__,_/_/ /_/ /_/_/    \__,_/_/  /_/|_|  
     %s\n\n'        $PRIMARY $RESET
+  printf '      %s    _____ __                                             __  
     %s\n'          $PRIMARY $RESET
+  printf '      %s   / ___// /_________  ____ _____ ___  ____  ____ ______/ 
/__     %s\n'          $PRIMARY $RESET
+  printf '      %s   \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ __ \  __ `/ ___/ 
//_/     %s\n'          $PRIMARY $RESET
+  printf '      %s  ___/ / /_/ /  /  __/ /_/ / / / / / / /_/ / /_/ / /  / ,<   
     %s\n'          $PRIMARY $RESET
+  printf '      %s /____/\__/_/   \___/\__,_/_/ /_/ /_/ ____/\__,_/_/  /_/|_|  
     %s\n'          $PRIMARY $RESET
+  printf '      %s                                   /_/                       
     %s\n\n'        $PRIMARY $RESET
   printf '      %s   Version:  1.2.4 %s\n'                                     
                    $BLUE   $RESET
   printf '      %s   WebSite:  https://streampark.apache.org%s\n'              
                     $BLUE   $RESET
   printf '      %s   GitHub :  http://github.com/apache/streampark%s\n\n'      
                    $BLUE   $RESET
diff --git 
a/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
 
b/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
index 30c16a36a..9829c036c 100644
--- 
a/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
+++ 
b/streampark-console/streampark-console-service/src/assembly/script/data/mysql-data.sql
@@ -157,11 +157,11 @@ insert into `t_setting` values (15, 
'docker.register.namespace', null, 'Namespac
 -- ----------------------------
 -- Records of t_user
 -- ----------------------------
-insert into `t_user` values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
'1', now(), now(),null,0,null,null );
+insert into `t_user` values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
null, '1', now(), now(),null,0,null,null);
 
 -- ----------------------------
--- Records of t_user_role
+-- Records of t_member
 -- ----------------------------
-insert into `t_user_role` values (100000, 100000, 100000, 100001, now(), 
now());
+insert into `t_member` values (100000, 100000, 100000, 100001, now(), now());
 
 set foreign_key_checks = 1;
diff --git 
a/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
 
b/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
index 88ba165ee..6560bd8db 100644
--- 
a/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
+++ 
b/streampark-console/streampark-console-service/src/assembly/script/data/pgsql-data.sql
@@ -154,9 +154,9 @@ insert into "public"."t_setting" values (15, 
'docker.register.namespace', null,
 -- ----------------------------
 -- Records of t_user
 -- ----------------------------
-insert into "public"."t_user" values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
'1', now(), now(), null, 0, null, null);
+insert into "public"."t_user" values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
null, '1', now(), now(), null, 0, null, null);
 
 -- ----------------------------
--- Records of t_user_role
+-- Records of t_member
 -- ----------------------------
-insert into "public"."t_user_role" values (100000, 100000, 100000, 100001, 
now(), now());
+insert into "public"."t_member" values (100000, 100000, 100000, 100001, now(), 
now());
diff --git 
a/streampark-console/streampark-console-service/src/assembly/script/schema/mysql-schema.sql
 
b/streampark-console/streampark-console-service/src/assembly/script/schema/mysql-schema.sql
index 8cab0867e..7b9f134b2 100644
--- 
a/streampark-console/streampark-console-service/src/assembly/script/schema/mysql-schema.sql
+++ 
b/streampark-console/streampark-console-service/src/assembly/script/schema/mysql-schema.sql
@@ -375,6 +375,7 @@ create table `t_user` (
   `password` varchar(128) collate utf8mb4_general_ci not null comment 
'password',
   `email` varchar(128) collate utf8mb4_general_ci default null comment 'email',
   `user_type` int  not null comment 'user type 1:admin 2:user',
+  `team_id` bigint default null comment 'latest team id',
   `status` char(1) collate utf8mb4_general_ci not null comment 'status 
0:locked 1:active',
   `create_time` datetime not null default current_timestamp comment 'create 
time',
   `modify_time` datetime not null default current_timestamp on update 
current_timestamp comment 'modify time',
@@ -388,10 +389,10 @@ create table `t_user` (
 
 
 -- ----------------------------
--- Table structure for t_user_role
+-- Table structure for t_member
 -- ----------------------------
-drop table if exists `t_user_role`;
-create table `t_user_role` (
+drop table if exists `t_member`;
+create table `t_member` (
   `id` bigint not null auto_increment,
   `team_id` bigint not null comment 'team id',
   `user_id` bigint not null comment 'user id',
diff --git 
a/streampark-console/streampark-console-service/src/assembly/script/schema/pgsql-schema.sql
 
b/streampark-console/streampark-console-service/src/assembly/script/schema/pgsql-schema.sql
index e13ec3687..e121df21e 100644
--- 
a/streampark-console/streampark-console-service/src/assembly/script/schema/pgsql-schema.sql
+++ 
b/streampark-console/streampark-console-service/src/assembly/script/schema/pgsql-schema.sql
@@ -20,7 +20,7 @@
 -- ----------------------------
 
 drop table if exists "public"."t_user";
-drop table if exists "public"."t_user_role";
+drop table if exists "public"."t_member";
 drop table if exists "public"."t_setting";
 drop table if exists "public"."t_role";
 drop table if exists "public"."t_role_menu";
@@ -47,7 +47,7 @@ drop table if exists "public"."t_team";
 -- drop sequence if exists
 -- ----------------------------
 drop sequence if exists "public"."streampark_t_user_id_seq";
-drop sequence if exists "public"."streampark_t_user_role_id_seq";
+drop sequence if exists "public"."streampark_t_member_id_seq";
 drop sequence if exists "public"."streampark_t_role_id_seq";
 drop sequence if exists "public"."streampark_t_role_menu_id_seq";
 drop sequence if exists "public"."streampark_t_menu_id_seq";
@@ -675,6 +675,7 @@ create table "public"."t_user" (
   "password" varchar(128) collate "pg_catalog"."default" not null,
   "email" varchar(128) collate "pg_catalog"."default",
   "user_type" int4,
+  "team_id" int8,
   "status" int2,
   "create_time" timestamp(6) not null default timezone('UTC-8'::text, 
(now())::timestamp(0) without time zone),
   "modify_time" timestamp(6) not null default timezone('UTC-8'::text, 
(now())::timestamp(0) without time zone),
@@ -691,6 +692,7 @@ comment on column "public"."t_user"."salt" is 'salt';
 comment on column "public"."t_user"."password" is 'password';
 comment on column "public"."t_user"."email" is 'email';
 comment on column "public"."t_user"."user_type" is 'user type 1:admin 2:user';
+comment on column "public"."t_user"."team_id" is 'latest team id';
 comment on column "public"."t_user"."status" is 'status 0:locked 1:active';
 comment on column "public"."t_user"."create_time" is 'creation time';
 comment on column "public"."t_user"."modify_time" is 'change time';
@@ -705,13 +707,13 @@ create index "un_username" on "public"."t_user" using 
btree (
 
 
 -- ----------------------------
--- table structure for t_user_role
+-- table structure for t_member
 -- ----------------------------
-create sequence "public"."streampark_t_user_role_id_seq"
+create sequence "public"."streampark_t_member_id_seq"
     increment 1 start 10000 cache 1 minvalue 10000 maxvalue 
9223372036854775807;
 
-create table "public"."t_user_role" (
-  "id" int8 not null default 
nextval('streampark_t_user_role_id_seq'::regclass),
+create table "public"."t_member" (
+  "id" int8 not null default nextval('streampark_t_member_id_seq'::regclass),
   "team_id" int8,
   "user_id" int8,
   "role_id" int8,
@@ -719,11 +721,11 @@ create table "public"."t_user_role" (
   "modify_time" timestamp(6) not null default timezone('UTC-8'::text, 
(now())::timestamp(0) without time zone)
 )
 ;
-comment on column "public"."t_user_role"."team_id" is 'team id';
-comment on column "public"."t_user_role"."user_id" is 'user id';
-comment on column "public"."t_user_role"."role_id" is 'role id';
-alter table "public"."t_user_role" add constraint "t_user_role_pkey" primary 
key ("id");
-create index "un_user_role_inx" on "public"."t_user_role" using btree (
+comment on column "public"."t_member"."team_id" is 'team id';
+comment on column "public"."t_member"."user_id" is 'user id';
+comment on column "public"."t_member"."role_id" is 'role id';
+alter table "public"."t_member" add constraint "t_member_pkey" primary key 
("id");
+create index "un_user_role_inx" on "public"."t_member" using btree (
   "team_id" "pg_catalog"."int8_ops" asc nulls last,
   "user_id" "pg_catalog"."int8_ops" asc nulls last,
   "role_id" "pg_catalog"."int8_ops" asc nulls last
diff --git 
a/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
 
b/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
index 5eb853c54..ffe62ece1 100644
--- 
a/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
+++ 
b/streampark-console/streampark-console-service/src/assembly/script/upgrade/mysql/1.2.4.sql
@@ -149,4 +149,11 @@ alter table `t_user`
 modify `username` varchar(255) collate utf8mb4_general_ci not null comment 
'user name',
 add unique key `un_username` (`username`) using btree;
 
+-- add team_id for t_user;
+alter table `t_user` add column `team_id` bigint default null comment 'latest 
team id' after `user_type`;
+
+-- alter t_role_user to t_member
+alter table t_user_role rename t_member;
+
 set foreign_key_checks = 1;
+
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/StreamParkConsoleBootstrap.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/StreamParkConsoleBootstrap.java
index 5b23c4b97..849833f54 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/StreamParkConsoleBootstrap.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/StreamParkConsoleBootstrap.java
@@ -31,12 +31,12 @@ import java.io.File;
 /**
  * <pre>
  *
- *      _____ __                            ____             __
- *     / ___// /_________  ____ _____ ___  / __ \____ ______/ /__
- *     \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ /_/ / __ `/ ___/ //_/
- *    ___/ / /_/ /  /  __/ /_/ / / / / / / ____/ /_/ / /  / ,<
- *   /____/\__/_/   \___/\__,_/_/ /_/ /_/_/    \__,_/_/  /_/|_|
- *
+ *      _____ __                                             __
+ *     / ___// /_________  ____ _____ ___  ____  ____ ______/ /__
+ *     \__ \/ __/ ___/ _ \/ __ `/ __ `__ \/ __ \  __ `/ ___/ //_/
+ *    ___/ / /_/ /  /  __/ /_/ / / / / / / /_/ / /_/ / /  / ,<
+ *   /____/\__/_/   \___/\__,_/_/ /_/ /_/ ____/\__,_/_/  /_/|_|
+ *                                     /_/
  *
  *   WebSite:  https://streampark.apache.org
  *   GitHub :  https://github.com/apache/streampark
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
index b18e23b55..cc3b0385d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/domain/ResponseCode.java
@@ -23,6 +23,9 @@ public interface ResponseCode {
 
     Long CODE_FAIL = 500L;
 
-    Long CODE_API_FAIL = 501L;
+    Long CODE_FORBIDDEN = 403L;
 
+    Long CODE_FAIL_ALERT = 501L;
+
+    Long CODE_FAIL_DETAIL = 502L;
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AlertException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AlertException.java
index 5e807d649..4a761a58f 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AlertException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/AlertException.java
@@ -17,11 +17,17 @@
 
 package org.apache.streampark.console.base.exception;
 
-public class AlertException extends ApiException {
+import org.apache.streampark.common.util.ExceptionUtils;
+
+public class AlertException extends ApiAlertException {
     public AlertException(String message) {
         super(message);
     }
 
+    public AlertException(Throwable cause) {
+        super(ExceptionUtils.stringifyException(cause));
+    }
+
     public AlertException(String message, Throwable cause) {
         super(message, cause);
     }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiAlertException.java
similarity index 67%
copy from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
copy to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiAlertException.java
index 82ca05f37..9c7eff6ca 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiAlertException.java
@@ -18,21 +18,25 @@
 package org.apache.streampark.console.base.exception;
 
 /**
- * api business exceptions, as different from internal errors, need to return 
a friendly message
+ * <pre>
+ * An exception message that needs to be notified to front-end,
+ * usually a <strong>simple</strong>, clear</strong> message, e.g:
+ * <p>1. Username already exists</p>
+ * <p>2. No permission, please contact the administrator</p>
+ * ...
+ * </pre>
  */
-public class ApiException extends RuntimeException {
+public class ApiAlertException extends RuntimeException {
 
-    private static final long serialVersionUID = -994962710559017255L;
-
-    public ApiException(String message) {
+    public ApiAlertException(String message) {
         super(message);
     }
 
-    public ApiException(Throwable cause) {
+    public ApiAlertException(Throwable cause) {
         super(cause);
     }
 
-    public ApiException(String message, Throwable cause) {
+    public ApiAlertException(String message, Throwable cause) {
         super(message, cause);
     }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiDetailException.java
similarity index 56%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiDetailException.java
index 82ca05f37..2d2eb168d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApiDetailException.java
@@ -17,23 +17,28 @@
 
 package org.apache.streampark.console.base.exception;
 
+import org.apache.streampark.common.util.ExceptionUtils;
+
 /**
- * api business exceptions, as different from internal errors, need to return 
a friendly message
+ * <pre>
+ * An exception message that needs to be notified to front-end,
+ * is a detailed exception message,such as the stackTrace info,
+ * often accompanied by a large number of exception logs, e.g:
+ * <p>1. Failed to start job, need to display the exception(stackTrace info) 
to front-end</p>
+ * </pre>
  */
-public class ApiException extends RuntimeException {
-
-    private static final long serialVersionUID = -994962710559017255L;
+public class ApiDetailException extends RuntimeException {
 
-    public ApiException(String message) {
+    public ApiDetailException(String message) {
         super(message);
     }
 
-    public ApiException(Throwable cause) {
-        super(cause);
+    public ApiDetailException(Throwable cause) {
+        super(ExceptionUtils.stringifyException(cause));
     }
 
-    public ApiException(String message, Throwable cause) {
-        super(message, cause);
+    public ApiDetailException(String message, Throwable cause) {
+        super(message + ExceptionUtils.stringifyException(cause));
     }
 
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApplicationException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApplicationException.java
index 4be7b1218..c3e22ff8a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApplicationException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/ApplicationException.java
@@ -17,17 +17,13 @@
 
 package org.apache.streampark.console.base.exception;
 
-public class ApplicationException extends ApiException {
+public class ApplicationException extends ApiAlertException {
     public ApplicationException(String message) {
         super(message);
     }
 
     public ApplicationException(Throwable cause) {
-        super(cause);
-    }
-
-    public ApplicationException(String message, Throwable cause) {
-        super(message, cause);
+        super(cause.getMessage());
     }
 }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/IllegalFileTypeException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/IllegalFileTypeException.java
index de8028c84..6bb3fbdf4 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/IllegalFileTypeException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/IllegalFileTypeException.java
@@ -17,7 +17,7 @@
 
 package org.apache.streampark.console.base.exception;
 
-public class IllegalFileTypeException extends ApiException {
+public class IllegalFileTypeException extends ApiAlertException {
     public IllegalFileTypeException(String message) {
         super(message);
     }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/InternalException.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/InternalException.java
index 671e0d5c2..b8f0cfdaa 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/InternalException.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/exception/InternalException.java
@@ -22,8 +22,6 @@ package org.apache.streampark.console.base.exception;
  */
 public class InternalException extends Exception {
 
-    private static final long serialVersionUID = -994962710559017255L;
-
     public InternalException(String message) {
         super(message);
     }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
index 699c27ab2..55bc2158f 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/handler/GlobalExceptionHandler.java
@@ -19,7 +19,8 @@ package org.apache.streampark.console.base.handler;
 
 import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.base.exception.ApiException;
+import org.apache.streampark.console.base.exception.ApiAlertException;
+import org.apache.streampark.console.base.exception.ApiDetailException;
 import org.apache.streampark.console.base.exception.InternalException;
 
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
@@ -69,13 +70,21 @@ public class GlobalExceptionHandler {
         return RestResponse.fail("not supported request method,exception:" + 
e.getMessage(), ResponseCode.CODE_FAIL);
     }
 
-    @ExceptionHandler(value = ApiException.class)
+    @ExceptionHandler(value = ApiAlertException.class)
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
-    public RestResponse handleException(ApiException e) {
+    public RestResponse handleException(ApiAlertException e) {
         log.info("api exception:{}", e.getMessage());
-        return RestResponse.fail("api fail, exception:\n" + e.getMessage(), 
ResponseCode.CODE_API_FAIL);
+        return RestResponse.fail(e.getMessage(), ResponseCode.CODE_FAIL_ALERT);
     }
 
+    @ExceptionHandler(value = ApiDetailException.class)
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+    public RestResponse handleException(ApiDetailException e) {
+        log.info("detail exception:{}", e.getMessage());
+        return RestResponse.fail("exception detail:\n" + e.getMessage(), 
ResponseCode.CODE_FAIL_DETAIL);
+    }
+
+
     /**
      * Unified processing of request parameter verification (entity object 
parameter transfer)
      *
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
index de04b08f6..80bfc725a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ApplicationController.java
@@ -17,7 +17,6 @@
 
 package org.apache.streampark.console.core.controller;
 
-import org.apache.streampark.common.util.AssertUtils;
 import org.apache.streampark.common.util.Utils;
 import org.apache.streampark.common.util.YarnUtils;
 import org.apache.streampark.console.base.domain.ApiDocConstant;
@@ -59,7 +58,6 @@ import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
 import java.net.URI;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -98,7 +96,6 @@ public class ApplicationController {
     @PostMapping("create")
     @RequiresPermissions("app:create")
     public RestResponse create(Application app) throws IOException {
-        AssertUtils.checkArgument(app.getTeamId() != null, "The teamId cannot 
be null");
         boolean saved = applicationService.create(app);
         return RestResponse.success(saved);
     }
@@ -135,11 +132,7 @@ public class ApplicationController {
     @PostMapping("list")
     @RequiresPermissions("app:view")
     public RestResponse list(Application app, RestRequest request) {
-        if (app.getTeamId() == null) {
-            return RestResponse.success(Collections.emptyList());
-        }
         IPage<Application> applicationList = applicationService.page(app, 
request);
-
         List<Application> appRecords = applicationList.getRecords();
         List<Long> appIds = 
appRecords.stream().map(Application::getId).collect(Collectors.toList());
         Map<Long, PipelineStatus> pipeStates = 
appBuildPipeService.listPipelineStatus(appIds);
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkEnv.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkEnv.java
index d0df7b57a..a699fc67e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkEnv.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/FlinkEnv.java
@@ -20,7 +20,7 @@ package org.apache.streampark.console.core.entity;
 import org.apache.streampark.common.domain.FlinkVersion;
 import org.apache.streampark.common.util.DeflaterUtils;
 import org.apache.streampark.common.util.PropertiesUtils;
-import org.apache.streampark.console.base.exception.ApiException;
+import org.apache.streampark.console.base.exception.ApiDetailException;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -64,13 +64,13 @@ public class FlinkEnv implements Serializable {
 
     private transient String streamParkScalaVersion = 
scala.util.Properties.versionNumberString();
 
-    public void doSetFlinkConf() throws ApiException {
+    public void doSetFlinkConf() throws ApiDetailException {
         try {
             File yaml = new 
File(this.flinkHome.concat("/conf/flink-conf.yaml"));
             String flinkConf = FileUtils.readFileToString(yaml);
             this.flinkConf = DeflaterUtils.zipString(flinkConf);
         } catch (Exception e) {
-            throw new ApiException(e);
+            throw new ApiDetailException(e);
         }
     }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/CommonService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/CommonService.java
index 188ee25be..cd57561f5 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/CommonService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/CommonService.java
@@ -24,5 +24,8 @@ public interface CommonService {
 
     User getCurrentUser();
 
+    Long getUserId();
+
     String getSqlClientJar(FlinkEnv flinkEnv);
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
index 06ee06a22..10cb85b7d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/AppBuildPipeServiceImpl.java
@@ -260,7 +260,7 @@ public class AppBuildPipeServiceImpl
 
                 } else {
                     Message message = new Message(
-                        commonService.getCurrentUser().getUserId(),
+                        commonService.getUserId(),
                         app.getId(),
                         app.getJobName().concat(" launch failed"),
                         
ExceptionUtils.stringifyException(snapshot.error().exception()),
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
index d21968e73..febe1e1b3 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ApplicationServiceImpl.java
@@ -461,6 +461,9 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
 
     @Override
     public IPage<Application> page(Application appParam, RestRequest request) {
+        if (appParam.getTeamId() == null) {
+            return null;
+        }
         Page<Application> page = new 
MybatisPager<Application>().getDefaultPage(request);
         if (CommonUtils.notEmpty(appParam.getStateArray())) {
             if (Arrays.stream(appParam.getStateArray()).anyMatch(x -> x == 
FlinkAppState.FINISHED.getValue())) {
@@ -573,7 +576,8 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
     @Override
     @Transactional(rollbackFor = {Exception.class})
     public boolean create(Application appParam) {
-        appParam.setUserId(commonService.getCurrentUser().getUserId());
+        AssertUtils.checkArgument(appParam.getTeamId() != null, "The teamId 
cannot be null");
+        appParam.setUserId(commonService.getUserId());
         appParam.setState(FlinkAppState.ADDED.getValue());
         appParam.setLaunch(LaunchState.NEED_LAUNCH.get());
         appParam.setOptionState(OptionState.NONE.getValue());
@@ -648,7 +652,7 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
         newApp.setModule(oldApp.getModule());
         newApp.setDefaultModeIngress(oldApp.getDefaultModeIngress());
 
-        newApp.setUserId(commonService.getCurrentUser().getUserId());
+        newApp.setUserId(commonService.getUserId());
         newApp.setState(FlinkAppState.ADDED.getValue());
         newApp.setLaunch(LaunchState.NEED_LAUNCH.get());
         newApp.setOptionState(OptionState.NONE.getValue());
@@ -1071,7 +1075,7 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
             }
         }
 
-        Long userId = commonService.getCurrentUser().getUserId();
+        Long userId = commonService.getUserId();
         if (!application.getUserId().equals(userId)) {
             FlinkTrackingTask.addCanceledApp(application.getId(), userId);
         }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/CommonServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/CommonServiceImpl.java
index a60172399..e844af15d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/CommonServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/CommonServiceImpl.java
@@ -17,7 +17,7 @@
 
 package org.apache.streampark.console.core.service.impl;
 
-import org.apache.streampark.console.base.exception.ApiException;
+import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.util.WebUtils;
 import org.apache.streampark.console.core.entity.FlinkEnv;
 import org.apache.streampark.console.core.service.CommonService;
@@ -50,21 +50,30 @@ public class CommonServiceImpl implements CommonService {
         return userService.findByName(username);
     }
 
+    @Override
+    public Long getUserId() {
+        User user = getCurrentUser();
+        if (user != null) {
+            return user.getUserId();
+        }
+        return null;
+    }
+
     @Override
     public String getSqlClientJar(FlinkEnv flinkEnv) {
         if (sqlClientJar == null) {
             File localClient = WebUtils.getAppClientDir();
             if (!localClient.exists()) {
-                throw new ApiException("[StreamPark] " + localClient + " no 
exists. please check.");
+                throw new ApiAlertException("[StreamPark] " + localClient + " 
no exists. please check.");
             }
             List<String> jars =
                 
Arrays.stream(Objects.requireNonNull(localClient.list())).filter(x -> 
x.matches("streampark-flink-sqlclient_" + flinkEnv.getScalaVersion() + 
"-.*\\.jar"))
                     .collect(Collectors.toList());
             if (jars.isEmpty()) {
-                throw new ApiException("[StreamPark] can no found 
streampark-flink-sqlclient jar in " + localClient);
+                throw new ApiAlertException("[StreamPark] can no found 
streampark-flink-sqlclient jar in " + localClient);
             }
             if (jars.size() > 1) {
-                throw new ApiException("[StreamPark] found multiple 
streampark-flink-sqlclient jar in " + localClient);
+                throw new ApiAlertException("[StreamPark] found multiple 
streampark-flink-sqlclient jar in " + localClient);
             }
             sqlClientJar = jars.get(0);
         }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
index 648f7c4d3..ab7626eba 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/FlinkClusterServiceImpl.java
@@ -120,7 +120,7 @@ public class FlinkClusterServiceImpl extends 
ServiceImpl<FlinkClusterMapper, Fli
                 return result;
             }
         }
-        flinkCluster.setUserId(commonService.getCurrentUser().getUserId());
+        flinkCluster.setUserId(commonService.getUserId());
         flinkCluster.setCreateTime(new Date());
         // remote mode directly set STARTED
         if (ExecutionMode.REMOTE.equals(flinkCluster.getExecutionModeEnum())) {
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
index 2df3a5a1b..840edc6eb 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/AccessTokenController.java
@@ -24,7 +24,6 @@ import 
org.apache.streampark.console.base.exception.InternalException;
 import org.apache.streampark.console.core.enums.AccessTokenState;
 import org.apache.streampark.console.core.service.CommonService;
 import org.apache.streampark.console.system.entity.AccessToken;
-import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.service.AccessTokenService;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -60,10 +59,10 @@ public class AccessTokenController {
 
     @PostMapping(value = "check")
     public RestResponse checkToken() {
-        User user = commonService.getCurrentUser();
+        Long userId = commonService.getUserId();
         RestResponse restResponse = RestResponse.success();
-        if (user != null) {
-            AccessToken accessToken = 
accessTokenService.getByUserId(user.getUserId());
+        if (userId != null) {
+            AccessToken accessToken = accessTokenService.getByUserId(userId);
             if (accessToken == null) {
                 restResponse.data(AccessTokenState.NULL.get());
             } else if 
(AccessToken.STATUS_DISABLE.equals(accessToken.getFinalStatus())) {
@@ -117,11 +116,9 @@ public class AccessTokenController {
         String resultCURL = null;
         CURLBuilder curlBuilder = new CURLBuilder(baseUrl + path);
 
-        User user = commonService.getCurrentUser();
-
         curlBuilder
             .addHeader("Content-Type", "application/x-www-form-urlencoded; 
charset=UTF-8")
-            .addHeader("Authorization", 
accessTokenService.getByUserId(user.getUserId()).getToken());
+            .addHeader("Authorization", 
accessTokenService.getByUserId(commonService.getUserId()).getToken());
 
         if ("/flink/app/start".equalsIgnoreCase(path)) {
             resultCURL = curlBuilder
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamMemberController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
similarity index 68%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamMemberController.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
index c870bf49f..505709cc7 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/TeamMemberController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/MemberController.java
@@ -19,9 +19,9 @@ package org.apache.streampark.console.system.controller;
 
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
+import org.apache.streampark.console.system.entity.Member;
 import org.apache.streampark.console.system.entity.Team;
-import org.apache.streampark.console.system.entity.TeamMember;
-import org.apache.streampark.console.system.service.TeamMemberService;
+import org.apache.streampark.console.system.service.MemberService;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import lombok.extern.slf4j.Slf4j;
@@ -43,48 +43,47 @@ import java.util.List;
 @Validated
 @RestController
 @RequestMapping("member")
-public class TeamMemberController {
+public class MemberController {
 
     @Autowired
-    private TeamMemberService teamMemberService;
+    private MemberService memberService;
 
     @PostMapping("list")
-    public RestResponse memberList(RestRequest restRequest, TeamMember 
teamMember) {
-        IPage<TeamMember> userList = teamMemberService.findUsers(teamMember, 
restRequest);
+    public RestResponse memberList(RestRequest restRequest, Member member) {
+        IPage<Member> userList = memberService.findUsers(member, restRequest);
         return RestResponse.success(userList);
     }
 
     @PostMapping("teams")
     public RestResponse listTeams(Long userId) {
-        List<Team> teamList = teamMemberService.findUserTeams(userId);
+        List<Team> teamList = memberService.findUserTeams(userId);
         return RestResponse.success(teamList);
     }
 
     @PostMapping("check/user")
-    public RestResponse checkTeamUser(@NotBlank(message = "{required}") Long 
teamId,
-                                      @NotBlank(message = "{required}") String 
userName) {
-        TeamMember result = 
this.teamMemberService.findByTeamAndUserName(teamId, userName);
+    public RestResponse check(@NotBlank(message = "{required}")Long teamId, 
String userName) {
+        Member result = this.memberService.findByUserName(teamId, userName);
         return RestResponse.success(result == null);
     }
 
     @PostMapping("post")
     @RequiresPermissions("member:add")
-    public RestResponse addUserTeamRole(@Valid TeamMember teamMember) {
-        this.teamMemberService.createTeamMember(teamMember);
+    public RestResponse create(@Valid Member member) {
+        this.memberService.createMember(member);
         return RestResponse.success();
     }
 
     @DeleteMapping("delete")
     @RequiresPermissions("member:delete")
-    public RestResponse deleteUserTeamRole(TeamMember teamMember) {
-        this.teamMemberService.deleteTeamMember(teamMember);
+    public RestResponse delete(Member member) {
+        this.memberService.deleteMember(member);
         return RestResponse.success();
     }
 
     @PutMapping("update")
     @RequiresPermissions("member:update")
-    public RestResponse updateUserTeamRole(TeamMember teamMember) {
-        this.teamMemberService.updateTeamMember(teamMember);
+    public RestResponse update(Member member) {
+        this.memberService.updateMember(member);
         return RestResponse.success();
     }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
index 850db34b2..405a91d3a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/PassportController.java
@@ -18,6 +18,7 @@
 package org.apache.streampark.console.system.controller;
 
 import org.apache.streampark.common.util.DateUtils;
+import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.properties.ShiroProperties;
 import org.apache.streampark.console.base.util.ShaHashUtils;
@@ -81,6 +82,13 @@ public class PassportController {
             return RestResponse.success().put("code", 1);
         }
 
+        userService.fillInTeam(user);
+
+        //no team.
+        if (user.getTeamId() == null) {
+            return RestResponse.success().data(user.getUserId()).put("code", 
ResponseCode.CODE_FORBIDDEN);
+        }
+
         password = ShaHashUtils.encrypt(user.getSalt(), password);
 
         this.userService.updateLoginTime(username);
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
index 5edf1e3ed..46a5183fc 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/UserController.java
@@ -17,11 +17,16 @@
 
 package org.apache.streampark.console.system.controller;
 
+import org.apache.streampark.console.base.domain.ResponseCode;
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.domain.RestResponse;
 import org.apache.streampark.console.base.util.ShaHashUtils;
 import org.apache.streampark.console.core.enums.UserType;
+import org.apache.streampark.console.core.service.CommonService;
+import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
+import org.apache.streampark.console.system.service.RoleService;
+import org.apache.streampark.console.system.service.TeamService;
 import org.apache.streampark.console.system.service.UserService;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -42,7 +47,10 @@ import 
org.springframework.web.bind.annotation.RestController;
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @Slf4j
 @Validated
@@ -53,6 +61,15 @@ public class UserController {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private TeamService teamService;
+
+    @Autowired
+    private RoleService roleService;
+
+    @Autowired
+    private CommonService commonService;
+
     @PostMapping("detail")
     public User detail(@NotBlank(message = "{required}") @PathVariable String 
username) {
         return this.userService.findByName(username);
@@ -149,4 +166,43 @@ public class UserController {
         return RestResponse.success(UserType.values());
     }
 
+    @PostMapping("initTeam")
+    public RestResponse initTeam(Long teamId, Long userId) {
+        Team team = teamService.getById(teamId);
+        if (team == null) {
+            return RestResponse.fail("teamId is invalid", 
ResponseCode.CODE_FAIL_ALERT);
+        }
+        userService.setLatestTeam(teamId, userId);
+        return RestResponse.success();
+    }
+
+    @PostMapping("setTeam")
+    public RestResponse setTeam(Long teamId) {
+        Team team = teamService.getById(teamId);
+        if (team == null) {
+            return RestResponse.fail("teamId is invalid", 
ResponseCode.CODE_FAIL_ALERT);
+        }
+
+        User user = commonService.getCurrentUser();
+
+        //1) set latest team
+        userService.setLatestTeam(teamId, user.getUserId());
+
+        //2) get latest userInfo
+        user.setPassword("******");
+        user.setSalt("******");
+
+        Map<String, Object> infoMap = new HashMap<>(8);
+        infoMap.put("user", user);
+
+        String username = user.getUsername();
+        Set<String> roles = this.roleService.getUserRoleName(username);
+        infoMap.put("roles", roles);
+
+        Set<String> permissions = this.userService.getPermissions(username);
+        infoMap.put("permissions", permissions);
+
+        return new RestResponse().data(infoMap);
+    }
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/TeamMember.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Member.java
similarity index 95%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/TeamMember.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Member.java
index 6c185546f..b7e6d5ea5 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/TeamMember.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/Member.java
@@ -25,9 +25,9 @@ import lombok.Data;
 import java.io.Serializable;
 import java.util.Date;
 
-@TableName("t_user_role")
+@TableName("t_member")
 @Data
-public class TeamMember implements Serializable {
+public class Member implements Serializable {
 
     private static final long serialVersionUID = -3166012934498268403L;
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/User.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/User.java
index 4e0047602..6f7f0769f 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/User.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/entity/User.java
@@ -98,16 +98,8 @@ public class User implements Serializable {
     private String nickName;
 
     /**
-     * shiro-redis v3.1.0 must have getAuthCacheKey() or getId() function # 
Principal id field name.
-     * The field which you can get unique id to identify this principal. # For 
example, if you use UserInfo as
-     * Principal class, the id field maybe userId, userName, email, etc. # 
Remember to add getter to
-     * this id field. For example, getUserId(), getUserName(), getEmail(), 
etc. # Default value is
-     * authCacheKey or id, that means your principal object has a method 
called "getAuthCacheKey()" or
-     * "getId()"
-     *
-     * @return userId as Principal id field name
+     * The last set teamId
      */
-    public Long getAuthCacheKey() {
-        return userId;
-    }
+    private Long teamId;
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/TeamMemberMapper.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MemberMapper.java
similarity index 85%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/TeamMemberMapper.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MemberMapper.java
index 6c2bd7ed3..dad1c7dc7 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/TeamMemberMapper.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/mapper/MemberMapper.java
@@ -17,14 +17,14 @@
 
 package org.apache.streampark.console.system.mapper;
 
-import org.apache.streampark.console.system.entity.TeamMember;
+import org.apache.streampark.console.system.entity.Member;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 
-public interface TeamMemberMapper extends BaseMapper<TeamMember> {
+public interface MemberMapper extends BaseMapper<Member> {
 
     /**
      * delete role by user id
@@ -42,6 +42,6 @@ public interface TeamMemberMapper extends 
BaseMapper<TeamMember> {
      */
     Boolean deleteByRoleId(@Param("roleId") Long roleId);
 
-    IPage<TeamMember> findUsers(Page<TeamMember> page, @Param("teamMember") 
TeamMember teamMember);
+    IPage<Member> findUsers(Page<Member> page, @Param("member") Member member);
 
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/TeamMemberService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MemberService.java
similarity index 69%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/TeamMemberService.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MemberService.java
index c4f057f31..3178f7376 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/TeamMemberService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/MemberService.java
@@ -18,31 +18,32 @@
 package org.apache.streampark.console.system.service;
 
 import org.apache.streampark.console.base.domain.RestRequest;
+import org.apache.streampark.console.system.entity.Member;
 import org.apache.streampark.console.system.entity.Team;
-import org.apache.streampark.console.system.entity.TeamMember;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
 
-public interface TeamMemberService extends IService<TeamMember> {
+public interface MemberService extends IService<Member> {
 
-    void deleteUserRolesByRoleId(String[] roleIds);
+    void deleteByRoleIds(String[] roleIds);
 
-    void deleteUserRolesByUserId(String[] userIds);
+    void deleteByUserIds(String[] userIds);
 
-    IPage<TeamMember> findUsers(TeamMember teamMember, RestRequest request);
+    IPage<Member> findUsers(Member member, RestRequest request);
 
     List<Team> findUserTeams(Long userId);
 
-    TeamMember findByTeamAndUserName(Long teamId, String userName);
+    Member findByUserName(Long teamId, String userName);
 
     List<Long> findUserIdsByRoleId(Long roleId);
 
-    void createTeamMember(TeamMember teamMember);
+    void createMember(Member member);
 
-    void deleteTeamMember(TeamMember teamMember);
+    void deleteMember(Member member);
+
+    void updateMember(Member member);
 
-    void updateTeamMember(TeamMember teamMember);
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
index 61942b221..100a47e20 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/UserService.java
@@ -106,4 +106,9 @@ public interface UserService extends IService<User> {
     Set<String> getPermissions(String username);
 
     List<User> getNoTokenUser();
+
+    void setLatestTeam(Long teamId, Long userId);
+
+    void fillInTeam(User user);
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
index dd81629de..503cb3c5d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/AccessTokenServiceImpl.java
@@ -106,11 +106,11 @@ public class AccessTokenServiceImpl extends 
ServiceImpl<AccessTokenMapper, Acces
     public RestResponse toggleToken(Long tokenId) {
         AccessToken tokenInfo = baseMapper.getById(tokenId);
         if (Objects.isNull(tokenInfo)) {
-            return RestResponse.fail("accessToken could not be found!", 
ResponseCode.CODE_API_FAIL);
+            return RestResponse.fail("accessToken could not be found!", 
ResponseCode.CODE_FAIL_ALERT);
         }
 
         if (User.STATUS_LOCK.equals(tokenInfo.getUserStatus())) {
-            return RestResponse.fail("user status is locked, could not operate 
this accessToken!", ResponseCode.CODE_API_FAIL);
+            return RestResponse.fail("user status is locked, could not operate 
this accessToken!", ResponseCode.CODE_FAIL_ALERT);
         }
 
         Integer status = 
tokenInfo.getStatus().equals(AccessToken.STATUS_ENABLE) ? 
AccessToken.STATUS_DISABLE : AccessToken.STATUS_ENABLE;
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamMemberServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
similarity index 54%
rename from 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamMemberServiceImpl.java
rename to 
streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
index 7ef26efef..8c8be1580 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamMemberServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/MemberServiceImpl.java
@@ -19,12 +19,13 @@ package org.apache.streampark.console.system.service.impl;
 
 import org.apache.streampark.common.util.AssertUtils;
 import org.apache.streampark.console.base.domain.RestRequest;
+import org.apache.streampark.console.core.service.CommonService;
+import org.apache.streampark.console.system.entity.Member;
 import org.apache.streampark.console.system.entity.Team;
-import org.apache.streampark.console.system.entity.TeamMember;
 import org.apache.streampark.console.system.entity.User;
-import org.apache.streampark.console.system.mapper.TeamMemberMapper;
+import org.apache.streampark.console.system.mapper.MemberMapper;
+import org.apache.streampark.console.system.service.MemberService;
 import org.apache.streampark.console.system.service.RoleService;
-import org.apache.streampark.console.system.service.TeamMemberService;
 import org.apache.streampark.console.system.service.TeamService;
 import org.apache.streampark.console.system.service.UserService;
 
@@ -45,8 +46,8 @@ import java.util.stream.Collectors;
 
 @Service
 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true, 
rollbackFor = Exception.class)
-public class TeamMemberServiceImpl extends ServiceImpl<TeamMemberMapper, 
TeamMember>
-    implements TeamMemberService {
+public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member>
+    implements MemberService {
 
     @Autowired
     private UserService userService;
@@ -57,25 +58,28 @@ public class TeamMemberServiceImpl extends 
ServiceImpl<TeamMemberMapper, TeamMem
     @Autowired
     private TeamService teamService;
 
+    @Autowired
+    private CommonService commonService;
+
     @Override
     @Transactional
-    public void deleteUserRolesByRoleId(String[] roleIds) {
+    public void deleteByRoleIds(String[] roleIds) {
         Arrays.stream(roleIds).forEach(id -> 
baseMapper.deleteByRoleId(Long.valueOf(id)));
     }
 
     @Override
     @Transactional
-    public void deleteUserRolesByUserId(String[] userIds) {
+    public void deleteByUserIds(String[] userIds) {
         Arrays.stream(userIds).forEach(id -> 
baseMapper.deleteByUserId(Long.valueOf(id)));
     }
 
     @Override
-    public IPage<TeamMember> findUsers(TeamMember teamMember, RestRequest 
request) {
-        AssertUtils.isTrue(teamMember.getTeamId() != null, "The team id is 
required.");
-        Page<TeamMember> page = new Page<>();
+    public IPage<Member> findUsers(Member member, RestRequest request) {
+        AssertUtils.isTrue(member.getTeamId() != null, "The team id is 
required.");
+        Page<Member> page = new Page<>();
         page.setCurrent(request.getPageNum());
         page.setSize(request.getPageSize());
-        return baseMapper.findUsers(page, teamMember);
+        return baseMapper.findUsers(page, member);
     }
 
     @Override
@@ -84,62 +88,63 @@ public class TeamMemberServiceImpl extends 
ServiceImpl<TeamMemberMapper, TeamMem
     }
 
     @Override
-    public TeamMember findByTeamAndUserName(Long teamId, String userName) {
+    public Member findByUserName(Long teamId, String userName) {
         User user = userService.findByName(userName);
         if (user == null) {
             return null;
         }
-        return findByTeamAndUserId(teamId, user.getUserId());
+        return findByUserId(teamId, user.getUserId());
     }
 
-    private TeamMember findByTeamAndUserId(Long teamId, Long userId) {
+    private Member findByUserId(Long teamId, Long userId) {
+        AssertUtils.isTrue(teamId != null, "The team id is required.");
         return baseMapper.selectOne(
-            new LambdaQueryWrapper<TeamMember>().eq(TeamMember::getTeamId, 
teamId)
-                .eq(TeamMember::getUserId, userId));
+            new LambdaQueryWrapper<Member>().eq(Member::getTeamId, teamId)
+                .eq(Member::getUserId, userId));
     }
 
     @Override
     public List<Long> findUserIdsByRoleId(Long roleId) {
-        List<TeamMember> list =
+        List<Member> list =
             baseMapper.selectList(
-                new LambdaQueryWrapper<TeamMember>().eq(TeamMember::getRoleId, 
roleId));
+                new LambdaQueryWrapper<Member>().eq(Member::getRoleId, 
roleId));
         return list.stream()
-            .map(TeamMember::getUserId)
+            .map(Member::getUserId)
             .collect(Collectors.toList());
     }
 
     @Override
-    public void createTeamMember(TeamMember teamMember) {
-        User user = 
Optional.ofNullable(userService.findByName(teamMember.getUserName()))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
username [%s] not found", teamMember.getUserName())));
-        Optional.ofNullable(roleService.getById(teamMember.getRoleId()))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
roleId [%s] not found", teamMember.getRoleId())));
-        Team team = 
Optional.ofNullable(teamService.getById(teamMember.getTeamId()))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
teamId [%s] not found", teamMember.getTeamId())));
-        AssertUtils.isTrue(findByTeamAndUserId(teamMember.getTeamId(), 
user.getUserId()) == null,
-            String.format("The user [%s] has been added the team [%s], please 
don't add it again.", teamMember.getUserName(), team.getTeamName()));
-
-        teamMember.setId(null);
-        teamMember.setUserId(user.getUserId());
-        teamMember.setCreateTime(new Date());
-        teamMember.setModifyTime(team.getCreateTime());
-        this.save(teamMember);
+    public void createMember(Member member) {
+        User user = 
Optional.ofNullable(userService.findByName(member.getUserName()))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
username [%s] not found", member.getUserName())));
+        Optional.ofNullable(roleService.getById(member.getRoleId()))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
roleId [%s] not found", member.getRoleId())));
+        Team team = 
Optional.ofNullable(teamService.getById(member.getTeamId()))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
teamId [%s] not found", member.getTeamId())));
+        AssertUtils.isTrue(findByUserId(member.getTeamId(), user.getUserId()) 
== null,
+            String.format("The user [%s] has been added the team [%s], please 
don't add it again.", member.getUserName(), team.getTeamName()));
+
+        member.setId(null);
+        member.setUserId(user.getUserId());
+        member.setCreateTime(new Date());
+        member.setModifyTime(team.getCreateTime());
+        this.save(member);
     }
 
     @Override
-    public void deleteTeamMember(TeamMember teamMember) {
-        this.removeById(teamMember);
+    public void deleteMember(Member member) {
+        this.removeById(member);
     }
 
     @Override
-    public void updateTeamMember(TeamMember teamMember) {
-        TeamMember oldTeamMember = 
Optional.ofNullable(this.getById(teamMember.getId()))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
mapping [id=%s] not found", teamMember.getId())));
-        
AssertUtils.isTrue(oldTeamMember.getTeamId().equals(teamMember.getTeamId()), 
"Team id cannot be changed.");
-        
AssertUtils.isTrue(oldTeamMember.getUserId().equals(teamMember.getUserId()), 
"User id cannot be changed.");
-        Optional.ofNullable(roleService.getById(teamMember.getRoleId()))
-            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
roleId [%s] not found", teamMember.getRoleId())));
-        oldTeamMember.setRoleId(teamMember.getRoleId());
-        updateById(oldTeamMember);
+    public void updateMember(Member member) {
+        Member oldMember = Optional.ofNullable(this.getById(member.getId()))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
mapping [id=%s] not found", member.getId())));
+        AssertUtils.isTrue(oldMember.getTeamId().equals(member.getTeamId()), 
"Team id cannot be changed.");
+        AssertUtils.isTrue(oldMember.getUserId().equals(member.getUserId()), 
"User id cannot be changed.");
+        Optional.ofNullable(roleService.getById(member.getRoleId()))
+            .orElseThrow(() -> new IllegalArgumentException(String.format("The 
roleId [%s] not found", member.getRoleId())));
+        oldMember.setRoleId(member.getRoleId());
+        updateById(oldMember);
     }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
index 5b9df32b7..912002a46 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/RoleServiceImpl.java
@@ -24,9 +24,9 @@ import org.apache.streampark.console.system.entity.Role;
 import org.apache.streampark.console.system.entity.RoleMenu;
 import org.apache.streampark.console.system.mapper.RoleMapper;
 import org.apache.streampark.console.system.mapper.RoleMenuMapper;
+import org.apache.streampark.console.system.service.MemberService;
 import org.apache.streampark.console.system.service.RoleMenuServie;
 import org.apache.streampark.console.system.service.RoleService;
-import org.apache.streampark.console.system.service.TeamMemberService;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -56,7 +56,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, 
Role> implements Ro
     private RoleMenuMapper roleMenuMapper;
 
     @Autowired
-    private TeamMemberService teamMemberService;
+    private MemberService memberService;
 
     @Autowired
     private RoleMenuServie roleMenuService;
@@ -98,7 +98,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, 
Role> implements Ro
     public void deleteRole(Long roleId) {
         Role role = Optional.ofNullable(this.getById(roleId))
             .orElseThrow(() -> new 
IllegalArgumentException(String.format("Role id [%s] not found", roleId)));
-        List<Long> userIdsByRoleId = 
teamMemberService.findUserIdsByRoleId(roleId);
+        List<Long> userIdsByRoleId = memberService.findUserIdsByRoleId(roleId);
         AssertUtils.isTrue(userIdsByRoleId == null || 
userIdsByRoleId.isEmpty(),
             String.format("There are some users are bound to role %s , please 
unbind it first.", role.getRoleName()));
         this.removeById(roleId);
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
index 46ccc8c94..c69593e5e 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/TeamServiceImpl.java
@@ -99,4 +99,5 @@ public class TeamServiceImpl extends ServiceImpl<TeamMapper, 
Team> implements Te
         }
         return baseMapper.findUserTeams(userId);
     }
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
index 1aa814edf..7a2613e69 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/impl/UserServiceImpl.java
@@ -19,14 +19,17 @@ package org.apache.streampark.console.system.service.impl;
 
 import org.apache.streampark.common.util.AssertUtils;
 import org.apache.streampark.console.base.domain.RestRequest;
+import org.apache.streampark.console.base.exception.ApiAlertException;
 import org.apache.streampark.console.base.util.ShaHashUtils;
+import org.apache.streampark.console.core.service.CommonService;
+import org.apache.streampark.console.system.entity.Member;
 import org.apache.streampark.console.system.entity.Menu;
-import org.apache.streampark.console.system.entity.TeamMember;
+import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.mapper.UserMapper;
+import org.apache.streampark.console.system.service.MemberService;
 import org.apache.streampark.console.system.service.MenuService;
-import org.apache.streampark.console.system.service.RoleService;
-import org.apache.streampark.console.system.service.TeamMemberService;
+import org.apache.streampark.console.system.service.TeamService;
 import org.apache.streampark.console.system.service.UserService;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,6 +37,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -52,13 +56,16 @@ import java.util.stream.Collectors;
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements 
UserService {
 
     @Autowired
-    private TeamMemberService teamMemberService;
+    private MemberService memberService;
 
     @Autowired
-    private RoleService roleService;
+    private MenuService menuService;
 
     @Autowired
-    private MenuService menuService;
+    private CommonService commonService;
+
+    @Autowired
+    private TeamService teamService;
 
     @Override
     public User findByName(String username) {
@@ -81,7 +88,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, 
User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateLoginTime(String username) throws Exception {
+    public void updateLoginTime(String username) {
         User user = new User();
         user.setLastLoginTime(new Date());
         this.baseMapper.update(user, new 
LambdaQueryWrapper<User>().eq(User::getUsername, username));
@@ -89,7 +96,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, 
User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createUser(User user) throws Exception {
+    public void createUser(User user) {
         user.setCreateTime(new Date());
         user.setAvatar(User.DEFAULT_AVATAR);
         String salt = ShaHashUtils.getRandomSalt();
@@ -101,7 +108,7 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateUser(User user) throws Exception {
+    public void updateUser(User user) {
         user.setPassword(null);
         user.setModifyTime(new Date());
         updateById(user);
@@ -109,21 +116,21 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void deleteUsers(String[] userIds) throws Exception {
+    public void deleteUsers(String[] userIds) {
         List<String> list = Arrays.asList(userIds);
         removeByIds(list);
-        this.teamMemberService.deleteUserRolesByUserId(userIds);
+        this.memberService.deleteByUserIds(userIds);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateProfile(User user) throws Exception {
+    public void updateProfile(User user) {
         updateById(user);
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updateAvatar(String username, String avatar) throws Exception {
+    public void updateAvatar(String username, String avatar) {
         User user = new User();
         user.setAvatar(avatar);
         this.baseMapper.update(user, new 
LambdaQueryWrapper<User>().eq(User::getUsername, username));
@@ -131,7 +138,7 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void updatePassword(String username, String password) throws 
Exception {
+    public void updatePassword(String username, String password) {
         User user = new User();
         String salt = ShaHashUtils.getRandomSalt();
         password = ShaHashUtils.encrypt(salt, password);
@@ -142,7 +149,7 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void resetPassword(String[] usernames) throws Exception {
+    public void resetPassword(String[] usernames) {
         for (String username : usernames) {
             User user = new User();
             String salt = ShaHashUtils.getRandomSalt();
@@ -177,12 +184,35 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
         return users;
     }
 
+    @Override
+    public void setLatestTeam(Long teamId, Long userId) {
+        User user = getById(userId);
+        AssertUtils.checkArgument(user != null);
+        user.setTeamId(teamId);
+        this.baseMapper.updateById(user);
+    }
+
+    @Override
+    public void fillInTeam(User user) {
+        if (user.getTeamId() == null) {
+            List<Team> teams = memberService.findUserTeams(user.getUserId());
+            if (CollectionUtils.isEmpty(teams)) {
+                throw new ApiAlertException("The current user not belong to 
any team, please contact the administrator!");
+            } else if (teams.size() == 1) {
+                Team team = teams.get(0);
+                user.setTeamId(team.getId());
+                this.baseMapper.updateById(user);
+            }
+        }
+    }
+
     private void setUserRoles(User user, String[] roles) {
         Arrays.stream(roles).forEach(roleId -> {
-            TeamMember ur = new TeamMember();
+            Member ur = new Member();
             ur.setUserId(user.getUserId());
             ur.setRoleId(Long.valueOf(roleId));
-            this.teamMemberService.save(ur);
+            this.memberService.save(ur);
         });
     }
+
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/application.yml
 
b/streampark-console/streampark-console-service/src/main/resources/application.yml
index 0aaed6ed0..425e4b528 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/application.yml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/application.yml
@@ -114,7 +114,9 @@ streampark:
     anonUrl: >
       /passport/**,
       /systemName,
+      /member/teams,
       /user/check/**,
+      /user/initTeam,
       /websocket/**,
       /metrics/**,
       /index.html,
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
 
b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
index 94c3dbdcd..98e8585f7 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
+++ 
b/streampark-console/streampark-console-service/src/main/resources/db/data-h2.sql
@@ -48,7 +48,7 @@ insert into `t_flink_sql` values (100000, 100000, 
'eNqlUUtPhDAQvu+vmFs1AYIHT5s94
 insert into `t_menu` values (100000, 0, 'System', '/system', 'PageView', null, 
'desktop', '0', 1, 1, now(), now());
 insert into `t_menu` values (100001, 100000, 'User Management', 
'/system/user', 'system/user/User', 'user:view', 'user', '0', 1, 1, now(), 
now());
 insert into `t_menu` values (100002, 100000, 'Role Management', 
'/system/role', 'system/role/Role', 'role:view', 'smile', '0', 1, 2, now(), 
now());
-insert into `t_menu` values (100003, 100000, 'Router Management', 
'/system/menu', 'system/menu/Menu', 'menu:view', 'bars', '0', 1, 3, now(), 
now());
+insert into `t_menu` values (100003, 100000, 'Menu Management', 
'/system/menu', 'system/menu/Menu', 'menu:view', 'bars', '0', 1, 3, now(), 
now());
 insert into `t_menu` values (100004, 100001, 'add', null, null, 'user:add', 
null, '1', 1, null, now(), now());
 insert into `t_menu` values (100005, 100001, 'update', null, null, 
'user:update', null, '1', 1, null, now(), now());
 insert into `t_menu` values (100006, 100001, 'delete', null, null, 
'user:delete', null, '1', 1, null, now(), now());
@@ -151,15 +151,15 @@ insert into `t_setting` values (15, 
'docker.register.namespace', null, 'Namespac
 -- ----------------------------
 -- Records of t_user
 -- ----------------------------
-insert into `t_user` values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
'1', now(), now(),null,'0',null,null );
-insert into `t_user` values (100001, 'test_user1', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
'1', now(), now(),null,'0',null,null );
-insert into `t_user` values (100002, 'test_user2', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
'1', now(), now(),null,'0',null,null );
-insert into `t_user` values (100003, 'test_user3', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
'1', now(), now(),null,'0',null,null );
+insert into `t_user` values (100000, 'admin', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 1, 
null, '1', now(), now(),null,'0',null,null);
+insert into `t_user` values (100001, 'test_user1', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
null, '1', now(), now(),null,'0',null,null);
+insert into `t_user` values (100002, 'test_user2', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
null, '1', now(), now(),null,'0',null,null);
+insert into `t_user` values (100003, 'test_user3', '', 
'rh8b1ojwog777yrg0daesf04gk', 
'2513f3748847298ea324dffbf67fe68681dd92315bda830065facd8efe08f54f', null, 2, 
null, '1', now(), now(),null,'0',null,null);
 
 -- ----------------------------
--- Records of t_user_role
+-- Records of t_member
 -- ----------------------------
-insert into `t_user_role` values (100000, 100000, 100001, 100001, now(), 
now()); -- test_user1 is the developer of the default team
-insert into `t_user_role` values (100001, 100001, 100001, 100001, now(), 
now()); -- test_user1 is the developer of the test_team1 team
-insert into `t_user_role` values (100002, 100000, 100002, 100001, now(), 
now()); -- test_user2 is the developer of the test_team1 team
-insert into `t_user_role` values (100003, 100001, 100003, 100001, now(), 
now()); -- test_user3 is the developer of the test_team1 team
+insert into `t_member` values (100000, 100000, 100001, 100001, now(), now()); 
-- test_user1 is the developer of the default team
+insert into `t_member` values (100001, 100001, 100001, 100001, now(), now()); 
-- test_user1 is the developer of the test_team1 team
+insert into `t_member` values (100002, 100000, 100002, 100001, now(), now()); 
-- test_user2 is the developer of the test_team1 team
+insert into `t_member` values (100003, 100001, 100003, 100001, now(), now()); 
-- test_user3 is the developer of the test_team1 team
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
 
b/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
index ebaad6fd2..47da039a7 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
+++ 
b/streampark-console/streampark-console-service/src/main/resources/db/schema-h2.sql
@@ -329,6 +329,7 @@ create table if not exists `t_user` (
   `password` varchar(128)  not null comment 'password',
   `email` varchar(128)  default null comment 'email',
   `user_type` int  not null comment 'user type 1:admin 2:user',
+  `team_id` bigint default null comment 'latest team id',
   `status` char(1)  not null comment 'status 0:locked 1:active',
   `create_time` datetime not null default current_timestamp comment 'create 
time',
   `modify_time` datetime not null default current_timestamp on update 
current_timestamp comment 'modify time',
@@ -341,9 +342,9 @@ create table if not exists `t_user` (
 );
 
 -- ----------------------------
--- Table structure for t_user_role
+-- Table structure for t_member
 -- ----------------------------
-create table if not exists `t_user_role` (
+create table if not exists `t_member` (
   `id` bigint generated by default as identity not null,
   `team_id` bigint not null comment 'team id',
   `user_id` bigint not null comment 'user id',
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMemberMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MemberMapper.xml
similarity index 64%
rename from 
streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMemberMapper.xml
rename to 
streampark-console/streampark-console-service/src/main/resources/mapper/system/MemberMapper.xml
index 62219d39d..f5eb27b34 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMemberMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MemberMapper.xml
@@ -18,9 +18,9 @@
 
 -->
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd";>
-<mapper 
namespace="org.apache.streampark.console.system.mapper.TeamMemberMapper">
+<mapper namespace="org.apache.streampark.console.system.mapper.MemberMapper">
 
-    <resultMap id="BaseResultMap" 
type="org.apache.streampark.console.system.entity.TeamMember">
+    <resultMap id="BaseResultMap" 
type="org.apache.streampark.console.system.entity.Member">
         <id column="id" jdbcType="BIGINT" property="id"/>
         <result column="team_id" jdbcType="BIGINT" property="teamId"/>
         <result column="user_id" jdbcType="BIGINT" property="userId"/>
@@ -31,42 +31,42 @@
 
     <delete id="deleteByUserId">
         delete
-        from t_user_role
+        from t_member
         where user_id = #{userId}
     </delete>
 
     <delete id="deleteByRoleId">
         delete
-        from t_user_role
+        from t_member
         where role_id = #{roleId}
     </delete>
 
-    <select id="findUsers" resultType="teamMember" parameterType="teamMember">
+    <select id="findUsers" resultType="member" parameterType="member">
         select tur.*,
         u.username,
         r.role_name
-        from t_user_role tur
+        from t_member tur
         join t_user u
         on u.user_id = tur.user_id
         join t_role r
         on r.role_id = tur.role_id
         <where>
-            tur.team_id = ${teamMember.teamId}
-            <if test="teamMember.userName != null and teamMember.userName != 
''">
-                and u.username like '%${teamMember.userName}%'
+            tur.team_id = ${member.teamId}
+            <if test="member.userName != null and member.userName != ''">
+                and u.username like '%${member.userName}%'
             </if>
-            <if test="teamMember.roleName != null and teamMember.roleName != 
''">
-                and r.role_name = '${teamMember.roleName}'
+            <if test="member.roleName != null and member.roleName != ''">
+                and r.role_name = '${member.roleName}'
             </if>
-            <if test="teamMember.createTimeFrom != null and 
teamMember.createTimeFrom !=''">
-                and tur.create_time &gt; #{teamMember.createTimeFrom}
+            <if test="member.createTimeFrom != null and member.createTimeFrom 
!=''">
+                and tur.create_time &gt; #{member.createTimeFrom}
             </if>
-            <if test="teamMember.createTimeTo!= null and 
teamMember.createTimeTo !=''">
-                and tur.create_time &lt; #{teamMember.createTimeTo}
+            <if test="member.createTimeTo!= null and member.createTimeTo !=''">
+                and tur.create_time &lt; #{member.createTimeTo}
             </if>
         </where>
-        <if test="teamMember.sortField != null and teamMember.sortField != ''">
-            order by ${teamMember.sortField} ${teamMember.sortOrder}
+        <if test="member.sortField != null and member.sortField != ''">
+            order by ${member.sortField} ${member.sortOrder}
         </if>
     </select>
 
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
index 0577c259f..aff92c820 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/MenuMapper.xml
@@ -38,7 +38,7 @@
     <select id="findUserPermissions" resultMap="menu">
         select distinct m.perms
         from t_role r
-        left join t_user_role ur on (r.role_id = ur.role_id)
+        left join t_member ur on (r.role_id = ur.role_id)
         left join t_user u on (u.user_id = ur.user_id)
         left join t_role_menu rm on (rm.role_id = r.role_id)
         left join t_menu m on (m.menu_id = rm.menu_id)
@@ -55,7 +55,7 @@
               (select distinct rm.menu_id
                from t_role_menu rm
                         left join t_role r on (rm.role_id = r.role_id)
-                        left join t_user_role ur on (ur.role_id = r.role_id)
+                        left join t_member ur on (ur.role_id = r.role_id)
                         left join t_user u on (u.user_id = ur.user_id)
                where u.username = #{userName})
         order by m.order_num
@@ -63,7 +63,7 @@
 
     <select id="findUserIdsByMenuId" parameterType="string" 
resultType="string">
         select user_id
-        from t_user_role
+        from t_member
         where role_id in
               (select rm.role_id from t_role_menu rm where rm.menu_id = 
#{menuId})
     </select>
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/RoleMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/RoleMapper.xml
index 61ddbc09a..e291b8065 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/RoleMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/RoleMapper.xml
@@ -31,8 +31,8 @@
     <select id="findUserRole" resultMap="roleMap">
         select r.*
         from t_role r
-        left join t_user_role ur on r.role_id = ur.role_id
-        left join t_user u on u.user_id = ur.user_id
+        left join t_member m on r.role_id = m.role_id
+        left join t_user u on u.user_id = m.user_id
         where u.username = #{userName}
     </select>
 
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMapper.xml
index b455e75d5..f7af5214b 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/TeamMapper.xml
@@ -47,8 +47,8 @@
 
     <select id="findUserTeams" resultType="team" parameterType="team">
         select t.* from t_team t
-        join t_user_role ur
-        on t.id = ur.team_id
-        where ur.user_id = #{userId}
+        join t_member m
+        on t.id = m.team_id
+        where m.user_id = #{userId}
     </select>
 </mapper>
diff --git 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/UserMapper.xml
 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/UserMapper.xml
index b4310e298..85d3141a6 100644
--- 
a/streampark-console/streampark-console-service/src/main/resources/mapper/system/UserMapper.xml
+++ 
b/streampark-console/streampark-console-service/src/main/resources/mapper/system/UserMapper.xml
@@ -33,6 +33,7 @@
         <result column="sex" jdbcType="CHAR" property="sex"/>
         <result column="avatar" jdbcType="VARCHAR" property="avatar"/>
         <result column="description" jdbcType="VARCHAR" 
property="description"/>
+        <result column="team_id" jdbcType="BIGINT" property="teamId"/>
     </resultMap>
 
     <select id="findUserDetail" resultType="user" parameterType="user">
diff --git a/streampark-console/streampark-console-webapp/src/api/index.js 
b/streampark-console/streampark-console-webapp/src/api/index.js
index 0b287095b..e5fc5467c 100644
--- a/streampark-console/streampark-console-webapp/src/api/index.js
+++ b/streampark-console/streampark-console-webapp/src/api/index.js
@@ -167,7 +167,9 @@ export default {
     POST: '/user/post',
     DELETE: '/user/delete',
     CHECK_NAME: '/user/check/name',
-    CHECK_PASSWORD: '/user/check/password'
+    CHECK_PASSWORD: '/user/check/password',
+    SET_TEAM: '/user/setTeam',
+    INIT_TEAM: '/user/initTeam'
   },
   Token: {
     LIST: '/token/list',
diff --git a/streampark-console/streampark-console-webapp/src/api/user.js 
b/streampark-console/streampark-console-webapp/src/api/user.js
index 14b61bc48..e22c65739 100644
--- a/streampark-console/streampark-console-webapp/src/api/user.js
+++ b/streampark-console/streampark-console-webapp/src/api/user.js
@@ -61,3 +61,11 @@ export function deleteUser (queryParam) {
 export function types() {
   return http.post(api.User.TYPES, {})
 }
+
+export function setTeam(queryParam) {
+  return http.post(api.User.SET_TEAM, queryParam)
+}
+
+export function initTeam(queryParam) {
+  return http.post(api.User.INIT_TEAM, queryParam)
+}
diff --git 
a/streampark-console/streampark-console-webapp/src/components/GlobalFooter/GlobalFooter.vue
 
b/streampark-console/streampark-console-webapp/src/components/GlobalFooter/GlobalFooter.vue
index 3564e92c7..981268a45 100644
--- 
a/streampark-console/streampark-console-webapp/src/components/GlobalFooter/GlobalFooter.vue
+++ 
b/streampark-console/streampark-console-webapp/src/components/GlobalFooter/GlobalFooter.vue
@@ -27,7 +27,7 @@
       </a>
     </div>
     <div class="copyright">
-      Copyright<a-icon type="copyright" /> 2019~{{ year }} <span>Apache 
StreamPark </span>
+      Copyright <a-icon type="copyright" /> 2019 ~ {{ year }} <span>Apache 
StreamPark </span>
     </div>
   </div>
 </template>
diff --git 
a/streampark-console/streampark-console-webapp/src/components/global.less 
b/streampark-console/streampark-console-webapp/src/components/global.less
index 22b0afab4..dabe31253 100644
--- a/streampark-console/streampark-console-webapp/src/components/global.less
+++ b/streampark-console/streampark-console-webapp/src/components/global.less
@@ -157,7 +157,6 @@ body {
 
   .header {
     height: 64px;
-    padding: 0 12px 0 0;
     box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
     position: relative;
   }
@@ -349,7 +348,6 @@ body {
     margin: 24px 24px 0px;
     height: 100%;
     height: 64px;
-    padding: 0 12px 0 0;
   }
 
   // footer
diff --git 
a/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
 
b/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
index 7a412ae79..0c9151dad 100644
--- 
a/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
+++ 
b/streampark-console/streampark-console-webapp/src/components/tools/UserMenu.vue
@@ -65,19 +65,19 @@
         <img 
src="https://img.shields.io/github/forks/streamxhub/streampark.svg?sanitize=true";
 class="shields">
       </a>
 
-      <notice class="action"/>
-
       <a> Team : </a>
 
       <a-select
         mode="single"
         :allow-clear="false"
-        style="width: 200px"
+        style="min-width: 100px; margin-right: 10px"
         @change="handleChangeTeam"
-        v-decorator="['teamId']">
+        class="team-select"
+        v-model="teamId">
         <a-select-option
           v-for="t in teamList"
-          :key="t.id">
+          :value="t.id"
+          :key="`team_`.concat(t.id)">
           {{ t.teamName }}
         </a-select-option>
       </a-select>
@@ -105,6 +105,9 @@
           </a-menu-item>
         </a-menu>
       </a-dropdown>
+
+      <notice class="action"/>
+
     </div>
 
     <a-modal
@@ -120,7 +123,7 @@
       </template>
       <a-form
         @submit="handleChangeOk"
-        :form="formPassword">
+        :form="form">
         <a-form-item
           label="User Name"
           :label-col="{lg: {span: 7}, sm: {span: 7}}"
@@ -173,7 +176,6 @@
         </a-button>
       </template>
     </a-modal>
-
   </div>
 </template>
 
@@ -187,6 +189,7 @@ import {teams} from '@/api/member'
 import themeUtil from '@/utils/themeUtil'
 import storage from '@/utils/storage'
 import {TEAM_ID, USER_INFO, USER_NAME} from '@/store/mutation-types'
+import {message} from 'ant-design-vue'
 
 export default {
   name: 'UserMenu',
@@ -198,11 +201,11 @@ export default {
   data() {
     return {
       passwordVisible: false,
-      formPassword: null,
+      form: null,
       confirmDirty: false,
       themeDark: false,
-      form: this.$form.createForm(this),
-      teamList: []
+      teamList: [],
+      teamId: null
     }
   },
 
@@ -216,16 +219,17 @@ export default {
   },
 
   beforeMount() {
-    this.formPassword = this.$form.createForm(this)
+    this.form = this.$form.createForm(this)
   },
 
   mounted() {
     this.handleChangeTheme(true)
+    this.handlePrepareTeam()
     this.fetchTeams()
   },
 
   methods: {
-    ...mapActions(['SignOut','ChangeTheme']),
+    ...mapActions(['SignOut','ChangeTheme', 'SetTeam']),
     handleLogout () {
       const that = this
       this.$confirm({
@@ -249,7 +253,7 @@ export default {
     },
 
     handleChangeOk() {
-      this.formPassword.validateFields((err, values) => {
+      this.form.validateFields((err, values) => {
         if (!err) {
           this.handleChangeCancel()
           password({
@@ -274,7 +278,7 @@ export default {
     handleChangeCancel () {
         this.passwordVisible = false
         setTimeout(() => {
-          this.formPassword.resetFields()
+          this.form.resetFields()
         }, 1000)
     },
 
@@ -299,8 +303,7 @@ export default {
     },
 
     compareToFirstPassword(rule, value, callback) {
-      const form = this.formPassword
-      if (value && value !== form.getFieldValue('password')) {
+      if (value && value !== this.form.getFieldValue('password')) {
         callback('Two passwords that you enter is inconsistent!')
       } else {
         callback()
@@ -308,15 +311,50 @@ export default {
     },
 
     validateToNextPassword(rule, value, callback) {
-      const form = this.formPassword
       if (value && this.confirmDirty) {
-        form.validateFields(['confirm'], { force: true })
+        this.form.validateFields(['confirm'], { force: true })
       }
       callback()
     },
 
+    handlePrepareTeam() {
+      const teamId = storage.get(TEAM_ID) || []
+      this.teamId = teamId
+    },
+
     handleChangeTeam(teamId) {
-      storage.set(TEAM_ID, teamId)
+      this.SetTeam({
+        teamId: teamId
+      }).then(() => {
+        //refresh...
+        this.handleRefreshPage()
+      }).catch((err) => message.error(err))
+    },
+
+    handleRefreshPage() {
+      const defaultPage = '/flink/app'
+      const pages = [
+        '/system/user',
+        '/system/role',
+        '/system/menu',
+        '/system/token',
+        '/system/team',
+        '/system/member',
+        '/flink/project',
+        '/flink/app'
+      ]
+      const skipPages = [
+        '/flink/notebook/view',
+        '/flink/setting'
+      ]
+      const currPath = location.href.replace(/(.*)#/,'')
+      if (!skipPages.includes(currPath)) {
+        if (pages.includes(currPath)) {
+          window.location.reload()
+        } else {
+          this.$router.push({path: defaultPage})
+        }
+      }
     },
 
     fetchTeams() {
@@ -370,4 +408,21 @@ export default {
   }
 }
 
+.team-select {
+  .ant-select-selection__rendered {
+    position: relative;
+    display: block;
+    margin: 0px 6px;
+    line-height: 22px;
+  }
+  .ant-select-selection--single {
+    height: unset;
+  }
+  .ant-select-arrow {
+    right: 5px;
+    margin-top: -6px;
+    font-size: 8px;
+  }
+}
+
 </style>
diff --git a/streampark-console/streampark-console-webapp/src/store/getters.js 
b/streampark-console/streampark-console-webapp/src/store/getters.js
index 09bd15d5e..010cf99db 100644
--- a/streampark-console/streampark-console-webapp/src/store/getters.js
+++ b/streampark-console/streampark-console-webapp/src/store/getters.js
@@ -30,6 +30,7 @@ const getters = {
   userName: state => state.user.userName,
   welcome: state => state.user.welcome,
   userInfo: state => state.user.info,
+  teamId: state => state.teamId,
   routers: state => state.user.routers,
   multiTab: state => state.app.multiTab,
   applicationId: state => state.application.appId,
diff --git 
a/streampark-console/streampark-console-webapp/src/store/modules/user.js 
b/streampark-console/streampark-console-webapp/src/store/modules/user.js
index 94433ea93..b97a33eda 100644
--- a/streampark-console/streampark-console-webapp/src/store/modules/user.js
+++ b/streampark-console/streampark-console-webapp/src/store/modules/user.js
@@ -16,7 +16,8 @@
  */
 
 import { signin, signout } from '@/api/passport'
-import {TOKEN, EXPIRE, PERMISSIONS, ROLES, USER_INFO, USER_NAME, USER_ROUTER, 
INVALID} from '@/store/mutation-types'
+import { setTeam, initTeam } from '@/api/user'
+import {TOKEN, EXPIRE, PERMISSIONS, ROLES, USER_INFO, USER_NAME, USER_ROUTER, 
INVALID, TEAM_ID} from '@/store/mutation-types'
 import storage from '@/utils/storage'
 import { getRouter } from '@/api/menu'
 
@@ -25,6 +26,7 @@ const user = {
     expire: storage.get(EXPIRE),
     token: storage.get(TOKEN),
     info: storage.get(USER_INFO),
+    teamId: storage.get(TEAM_ID),
     roles: storage.get(ROLES),
     permissions: storage.get(PERMISSIONS),
     routers: storage.get(USER_ROUTER),
@@ -42,6 +44,10 @@ const user = {
       storage.set(TOKEN, token)
       state.token = token
     },
+    SET_TEAM: (state, teamId) => {
+      storage.set(TEAM_ID, teamId)
+      state.teamId = teamId
+    },
     SET_ROLES: (state, roles) => {
       storage.set(ROLES, roles)
       state.roles = roles
@@ -67,12 +73,14 @@ const user = {
       state.roles = null
       state.permissions = null
       state.name = null
+      state.teamId = null
       state.welcome = null
       state.avatar = null
       storage.rm(USER_INFO)
       storage.rm(USER_NAME)
       storage.rm(USER_ROUTER)
       storage.rm(TOKEN)
+      storage.rm(TEAM_ID)
       storage.rm(ROLES)
       storage.rm(PERMISSIONS)
       storage.rm(EXPIRE)
@@ -84,21 +92,29 @@ const user = {
     SignIn ({ commit }, userInfo) {
       return new Promise((resolve, reject) => {
         signin(userInfo).then(response => {
-          const respData = response.data
-          if (respData != null && respData.token) {
-            commit('SET_EXPIRE', respData.expire)
-            commit('SET_TOKEN', respData.token)
-            commit('SET_ROLES', respData.roles)
-            commit('SET_PERMISSIONS', respData.permissions)
-            commit('SET_INFO', respData.user)
+          if (response.code == 403 || response.code == 1 || response.code == 
0) {
+            reject(response)
+          } else {
+            const respData = response.data
+            if (respData != null && respData.token) {
+              commit('SET_EXPIRE', respData.expire)
+              commit('SET_TOKEN', respData.token)
+              commit('SET_ROLES', respData.roles)
+              commit('SET_PERMISSIONS', respData.permissions)
+              commit('SET_INFO', respData.user)
+            }
+            if (respData.user.teamId != null) {
+              commit('SET_TEAM', respData.user['teamId'])
+            }
+            storage.rm(INVALID)
+            resolve(response)
           }
-          storage.rm(INVALID)
-          resolve(response)
         }).catch(error => {
           reject(error)
         })
       })
     },
+
     GetRouter ({ commit }, data) {
       return new Promise((resolve, reject) => {
         getRouter({}).then(resp => {
@@ -120,6 +136,25 @@ const user = {
           resolve()
         })
       })
+    },
+
+    SetTeam({commit}, data) {
+      return new Promise((resolve, reject) => {
+        if (data.userId != null) {
+          initTeam(data).then(() => resolve()).catch(error => reject(error))
+        } else {
+          setTeam(data).then(resp => {
+            const respData = resp.data
+            commit('SET_TEAM', data.teamId)
+            commit('SET_ROLES', respData.roles)
+            commit('SET_PERMISSIONS', respData.permissions)
+            commit('SET_INFO', respData.user)
+            resolve()
+          }).catch(error => {
+            reject(error)
+          })
+        }
+      })
     }
 
   }
diff --git a/streampark-console/streampark-console-webapp/src/utils/request.js 
b/streampark-console/streampark-console-webapp/src/utils/request.js
index 657b47eb2..3bb159f7b 100644
--- a/streampark-console/streampark-console-webapp/src/utils/request.js
+++ b/streampark-console/streampark-console-webapp/src/utils/request.js
@@ -18,7 +18,7 @@
 import axios from 'axios'
 import $qs from 'qs'
 import notification from 'ant-design-vue/es/notification'
-import {INVALID, TOKEN} from '@/store/mutation-types'
+import {INVALID, TEAM_ID, TOKEN} from '@/store/mutation-types'
 import storage from '@/utils/storage'
 import store from '@/store'
 import moment from 'moment'
@@ -76,6 +76,10 @@ http.interceptors.request.use(config => {
         delete data.sortOrder
       }
     }
+    const teamId = storage.get(TEAM_ID)
+    if (teamId) {
+      data['teamId'] = teamId
+    }
     if (config.method === 'get') {
       // filter undefined params
       data = Object.fromEntries(Object.entries(data).filter(([_,value]) => 
value !== undefined))
@@ -100,16 +104,24 @@ http.interceptors.response.use((response) => {
 }, error => {
   if (error.response) {
     if (error.response.data.code == 501) {
+      Swal.fire({
+        icon: 'error',
+        title: 'Oops...',
+        text: error.response.data.message,
+        footer: '<a href="https://streampark.apache.org/";>View the official 
documentation?</a>'
+      })
+    } else if (error.response.data.code == 502) {
       let width = document.documentElement.clientWidth || 
document.body.clientWidth
       if (width > 1200) {
         width = 1080
       }
       width *= 0.96
       Swal.fire({
-        title: 'Operation Failed',
         icon: 'error',
+        title: 'Oops...',
         width: width,
         html: '<pre class="propException">' + error.response.data.message + 
'</pre>',
+        footer: '<a 
href="https://github.com/apache/incubator-streampark/issues/new/choose";>report 
issue ?</a>',
         focusConfirm: false
       })
     } else {
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue 
b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
index 9d538d045..109125fec 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/Add.vue
@@ -1467,7 +1467,6 @@
   import configOptions from './Option'
   import SvgIcon from '@/components/SvgIcon'
   import { sysHadoopConf } from '@api/config'
-  import {TEAM_ID} from '@/store/mutation-types'
 
   import {
     uploadJars as histUploadJars,
@@ -2311,7 +2310,6 @@
         }
         const params = {
           jobType: 1,
-          teamId: storage.get(TEAM_ID),
           executionMode: values.executionMode,
           versionId: values.versionId,
           projectId: values.project || null,
@@ -2416,7 +2414,6 @@
 
         const params = {
           jobType: 2,
-          teamId: storage.get(TEAM_ID),
           executionMode: values.executionMode,
           versionId: values.versionId,
           flinkSql: this.controller.flinkSql.value,
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue 
b/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
index 83e1afe80..a0c9e0285 100644
--- a/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
+++ b/streampark-console/streampark-console-webapp/src/views/flink/app/View.vue
@@ -1143,8 +1143,6 @@ import {Terminal} from 'xterm'
 import 'xterm/css/xterm.css'
 import SvgIcon from '@/components/SvgIcon'
 import {list as listUser} from '@/api/user'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 export default {
   components: {Ellipsis, State, SvgIcon},
@@ -2009,10 +2007,7 @@ export default {
       const params = Object.assign(this.queryParams, {})
       params.pageSize = 999999999
       params.pageNum = 1
-      list({
-        ...params,
-        teamId: storage.get(TEAM_ID)
-      }).then((resp) => {
+      list(params).then((resp) => {
           const dataSource = resp.data.records
           dataSource.forEach(record => {
             if (record.tags !== null && record.tags !== undefined && 
record.tags !== '') {
@@ -2046,10 +2041,7 @@ export default {
         params.pageSize = this.pagination.defaultPageSize
         params.pageNum = this.pagination.defaultCurrent
       }
-      list({
-        ...params,
-        teamId: storage.get(TEAM_ID)
-      }).then((resp) => {
+      list(params).then((resp) => {
         this.loading = false
         const pagination = {...this.pagination}
         pagination.total = parseInt(resp.data.total)
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/project/Add.vue 
b/streampark-console/streampark-console-webapp/src/views/flink/project/Add.vue
index df5d9c50e..13c5e97eb 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/project/Add.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/project/Add.vue
@@ -184,8 +184,6 @@
 <script>
 
 import { create,branches,gitcheck,exists } from '@api/project'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 export default {
   name: 'BaseForm',
@@ -267,7 +265,6 @@ export default {
               } else {
                 create({
                   name: values.name,
-                  teamId: storage.get(TEAM_ID),
                   url: values.url,
                   repository: values.repository,
                   type: values.type,
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue 
b/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
index f6f64b79b..026521057 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/project/View.vue
@@ -253,8 +253,6 @@ import { Terminal } from 'xterm'
 import 'xterm/css/xterm.css'
 
 import SvgIcon from '@/components/SvgIcon'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 export default {
   components: { Ellipsis, SvgIcon },
@@ -433,10 +431,7 @@ export default {
         // params.pageSize = this.pagination.defaultPageSize
         // params.pageNum = this.pagination.current
       }
-      list({
-        ...params,
-        teamId: storage.get(TEAM_ID)
-      }).then((resp) => {
+      list(params).then((resp) => {
         const pagination = { ...this.pagination }
         pagination.total = parseInt(resp.data.total)
         this.dataSource = resp.data.records
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/member/Member.vue
 
b/streampark-console/streampark-console-webapp/src/views/system/member/Member.vue
index 61a3f7f2b..e4a76a6e7 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/member/Member.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/member/Member.vue
@@ -149,8 +149,6 @@ import SvgIcon from '@/components/SvgIcon'
 
 import {list, remove} from '@/api/member'
 import {list as getRole} from '@/api/role'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 const formItemLayout = {
   labelCol: { span: 4 },
@@ -346,7 +344,6 @@ export default {
 
       list({
         ...params,
-        teamId: storage.get(TEAM_ID),
         roleName: this.roleName
       }).then((resp) => {
         const pagination = {...this.pagination}
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/member/MemberAdd.vue
 
b/streampark-console/streampark-console-webapp/src/views/system/member/MemberAdd.vue
index 5c3d6c70e..baf8375c6 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/member/MemberAdd.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/member/MemberAdd.vue
@@ -77,8 +77,6 @@
 import {post} from '@/api/member'
 import {list as getRole} from '@/api/role'
 import {checkUserName} from '@/api/user'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 const formItemLayout = {
   labelCol: {span: 4},
@@ -119,10 +117,7 @@ export default {
       this.form.validateFields((err, member) => {
         if (!err && this.validateStatus === 'success') {
           this.loading = true
-          post({
-            ...member,
-            teamId: storage.get(TEAM_ID)
-          }).then((r) => {
+          post(member).then((r) => {
             if (r.status === 'success') {
               this.reset()
               this.$emit('success')
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/member/MemberEdit.vue
 
b/streampark-console/streampark-console-webapp/src/views/system/member/MemberEdit.vue
index b6867aa49..b196401e1 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/member/MemberEdit.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/member/MemberEdit.vue
@@ -72,8 +72,6 @@
 <script>
 import {update} from '@/api/member'
 import {list as getRole} from '@/api/role'
-import storage from '@/utils/storage'
-import {TEAM_ID} from '@/store/mutation-types'
 
 const formItemLayout = {
   labelCol: {span: 4},
@@ -127,7 +125,6 @@ export default {
           const member = this.form.getFieldsValue()
           member.id = this.memberId
           member.userId = this.userId
-          member.teamId = storage.get(TEAM_ID)
           update(member).then((r) => {
             if (r.status === 'success') {
               this.loading = false
diff --git 
a/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue 
b/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
index 90ae281eb..e0f2d141a 100644
--- a/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
+++ b/streampark-console/streampark-console-webapp/src/views/user/SignIn.vue
@@ -116,12 +116,58 @@
       hover-mode="grab"
       :click-effect="true"
       click-mode="push"/>
+
+    <a-modal
+      v-model="teamVisible"
+      on-ok="handleTeamOk">
+      <template
+        slot="title">
+        <a-icon
+          slot="icon"
+          type="setting"
+          style="color: green"/>
+        Select Team
+      </template>
+
+      <a-form
+        :form="teamForm"
+        @submit="handleTeamOk">
+        <a-form-item
+          label="Please select a team">
+          <a-select
+            v-decorator="['teamId',{ rules: [{ required: true } ]}]">
+            <a-select-option
+              v-for="t in teamList"
+              :value="t.id"
+              :key="`sign_team_`.concat(t.id)">
+              {{ t.teamName }}
+            </a-select-option>
+          </a-select>
+        </a-form-item>
+      </a-form>
+
+      <template slot="footer">
+        <a-button
+          key="back"
+          @click="handleTeamCancel">
+          Cancel
+        </a-button>
+        <a-button
+          key="submit"
+          type="primary"
+          @click="handleTeamOk">
+          Submit
+        </a-button>
+      </template>
+    </a-modal>
+
   </div>
 </template>
 
 <script type="application/ecmascript">
 import {mapActions} from 'vuex'
 import {mixinDevice} from '@/utils/mixin'
+import {teams} from '@/api/member'
 
 export default {
   mixins: [mixinDevice],
@@ -129,10 +175,16 @@ export default {
     return {
       loginBtn: false,
       form: this.$form.createForm(this),
+      teamForm: this.$form.createForm(this),
       state: {
         time: 60,
         loginBtn: false
       },
+      loginInfo: {},
+      teamList: [],
+      teamId: null,
+      userId: null,
+      teamVisible: false,
       year: new Date().getFullYear()
     }
   },
@@ -147,9 +199,11 @@ export default {
   },
 
   methods: {
-    ...mapActions(['SignIn']),
-    handleSubmit(e) {
-      e.preventDefault()
+
+    ...mapActions(['SignIn', 'SetTeam']),
+
+    handleSubmit() {
+      arguments[0] && arguments[0].preventDefault()
       const {
         form: { validateFields },
         state,
@@ -161,25 +215,57 @@ export default {
         if (!err) {
           const loginParams = {...values}
           SignIn(loginParams)
-            .then(resp => {
-              if (resp.code != null) {
-                const message = 'SignIn failed,' + (resp.code === 0 ? ' 
authentication error' : ' current User is locked.')
-                this.$message.error(message)
-              } else {
-                this.$router.push({path: '/flink/app'})
+            .then(() => {
+              this.$router.push({path: '/flink/app'})
+            }).catch(resp => {
+              const code = resp.code
+              if (code != null && code != undefined) {
+                if (code == 0 || code == 1) {
+                  const message = 'SignIn failed,' + (resp.code === 0 ? ' 
authentication error' : ' current User is locked.')
+                  this.$message.error(message)
+                } else if (resp.code == 403) {
+                  this.loginInfo = values
+                  this.teamVisible = true
+                  this.userId = resp.data
+                  teams({
+                    userId: this.userId
+                  }).then((r) => {
+                    this.teamList = r.data
+                  })
+                } else {
+                  console.log(resp)
+                }
               }
-            })
-            .catch(err => console.log(err))
-            .finally(() => {
+          }).finally(() => {
               state.loginBtn = false
-            })
+          })
         } else {
           setTimeout(() => {
             state.loginBtn = false
           }, 600)
         }
       })
-    }
+    },
+
+    handleTeamOk(e) {
+      e.preventDefault()
+      const {teamForm: { validateFields }} = this
+      validateFields(['teamId'], {force: true}, (err, values) => {
+        if (!err) {
+          this.SetTeam({
+            teamId: values.teamId,
+            userId: this.userId
+          }).then((resp) => {
+            this.handleSubmit()
+          })
+        }
+      })
+    },
+
+    handleTeamCancel() {
+      this.teamVisible = false
+    },
+
   }
 }
 </script>

Reply via email to