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

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

commit 1acd2a87f910f8d758a5a8a60f3c101eb3242cef
Author: benjobs <[email protected]>
AuthorDate: Sat Jul 1 14:44:55 2023 +0800

    sso login improvement
---
 .../system/authentication/ShiroService.java        |   7 +-
 .../system/controller/PassportController.java      |  64 ++++++-------
 .../console/system/controller/SsoController.java   |  51 ++--------
 .../console/system/service/PassportService.java    |  21 +++++
 .../console/system/service/UserService.java        |   2 +
 .../system/service/impl/UserServiceImpl.java       |  39 ++++++++
 .../src/api/flink/resource/index.ts                |   1 -
 .../src/api/system/passport.ts                     |  56 +++++++++++
 .../src/api/system/user.ts                         |  43 +--------
 .../src/locales/lang/en/setting/yarnQueue.ts       |   3 +-
 .../src/locales/lang/en/system/user.ts             |   5 +-
 .../src/locales/lang/zh-CN/setting/yarnQueue.ts    |   3 +-
 .../src/locales/lang/zh-CN/system/user.ts          |   4 +-
 .../src/router/guard/ssoGuard.ts                   |   2 +-
 .../src/store/modules/lock.ts                      |   4 +-
 .../src/store/modules/user.ts                      |   6 +-
 .../src/views/base/login/LoginForm.vue             |  23 ++++-
 .../src/views/flink/app/EditStreamPark.vue         |   6 +-
 .../components/AppView/StopApplicationModal.vue    |   4 +-
 .../flink/app/hooks/useCreateAndEditSchema.ts      |   5 +-
 .../src/views/flink/app/hooks/useCreateSchema.ts   |   8 +-
 .../src/views/flink/app/hooks/useFlinkRender.tsx   |  71 +++++++-------
 .../src/views/flink/app/utils/index.ts             |  13 ++-
 .../src/views/flink/resource/View.vue              |  35 +++----
 .../views/flink/resource/components/Resource.vue   |  38 ++++----
 .../flink/resource/components/ResourceDrawer.vue   |  37 ++++----
 .../src/views/flink/resource/useResourceRender.tsx |  55 +++++------
 .../src/views/setting/FlinkHome/index.vue          |  12 +--
 .../views/system/user/components/UserDrawer.vue    | 105 ++++++++++++---------
 .../src/views/system/user/user.data.ts             |   4 +-
 30 files changed, 371 insertions(+), 356 deletions(-)

diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroService.java
index 2abe1bbac..e55126d30 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/authentication/ShiroService.java
@@ -44,7 +44,7 @@ public class ShiroService {
 
   @PostConstruct
   public void init() {
-    AbstractShiroFilter shiroFilter = null;
+    AbstractShiroFilter shiroFilter;
     try {
       shiroFilter = shiroFilterFactoryBean.getObject();
     } catch (Exception e) {
@@ -86,9 +86,8 @@ public class ShiroService {
       
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
       filterChainDefinitionMap.forEach(
           (key, value) -> {
-            String url = key;
-            String chainDefinition = value.trim();
-            filterChainManager.createChain(url, chainDefinition);
+              String chainDefinition = value.trim();
+            filterChainManager.createChain(key, chainDefinition);
           });
     }
   }
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 bfb5f819c..a19cf7bc8 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
@@ -17,24 +17,19 @@
 
 package org.apache.streampark.console.system.controller;
 
-import org.apache.streampark.common.util.DateUtils;
-import org.apache.streampark.console.base.domain.ResponseCode;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.streampark.console.base.domain.RestResponse;
-import org.apache.streampark.console.base.properties.ShiroProperties;
-import org.apache.streampark.console.base.util.WebUtils;
-import org.apache.streampark.console.system.authentication.JWTToken;
-import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.security.Authenticator;
 import org.apache.streampark.console.system.service.UserService;
 
-import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -42,10 +37,12 @@ import 
org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.constraints.NotBlank;
 
-import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 @Tag(name = "PASSPORT_TAG")
+@Slf4j
 @Validated
 @RestController
 @RequestMapping("passport")
@@ -53,10 +50,28 @@ public class PassportController {
 
   @Autowired private UserService userService;
 
-  @Autowired private ShiroProperties properties;
-
   @Autowired private Authenticator authenticator;
 
+    @Value("${sso.enable:#{false}}")
+    private Boolean ssoEnable;
+
+    @Value("${ldap.enable:#{false}}")
+    private Boolean ldapEnable;
+
+    @Operation(summary = "SigninType")
+    @PostMapping("signtype")
+    public RestResponse type() {
+       List<String> types = new ArrayList<>();
+       types.add("password");
+       if (ssoEnable) {
+           types.add("sso");
+       }
+       if (ldapEnable) {
+           types.add("ldap");
+       }
+       return RestResponse.success(types);
+    }
+
   @Operation(summary = "Signin")
   @PostMapping("signin")
   public RestResponse signin(
@@ -70,33 +85,8 @@ public class PassportController {
     }
 
     User user = authenticator.authenticate(username, password, loginType);
-
-    if (user == null) {
-      return RestResponse.success().put("code", 0);
-    }
-
-    if (User.STATUS_LOCK.equals(user.getStatus())) {
-      return RestResponse.success().put("code", 1);
-    }
-
-    // set team
-    userService.fillInTeam(user);
-
-    // no team.
-    if (user.getLastTeamId() == null) {
-      return RestResponse.success().data(user.getUserId()).put("code", 
ResponseCode.CODE_FORBIDDEN);
-    }
-
-    this.userService.updateLoginTime(username);
-    String token = WebUtils.encryptToken(JWTUtil.sign(user.getUserId(), 
username));
-    LocalDateTime expireTime = 
LocalDateTime.now().plusSeconds(properties.getJwtTimeOut());
-    String expireTimeStr = DateUtils.formatFullTime(expireTime);
-    JWTToken jwtToken = new JWTToken(token, expireTimeStr);
-    String userId = RandomStringUtils.randomAlphanumeric(20);
-    user.setId(userId);
-    Map<String, Object> userInfo =
-        userService.generateFrontendUserInfo(user, user.getLastTeamId(), 
jwtToken);
-    return new RestResponse().data(userInfo);
+    Map<String, Object> userInfo = userService.getLoginUserInfo(user);
+    return RestResponse.success(userInfo);
   }
 
   @Operation(summary = "Signout")
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/SsoController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/SsoController.java
index f40b22376..8dabdfda2 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/SsoController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/controller/SsoController.java
@@ -17,20 +17,13 @@
 
 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.exception.ApiAlertException;
-import org.apache.streampark.console.base.properties.ShiroProperties;
-import org.apache.streampark.console.base.util.WebUtils;
 import org.apache.streampark.console.core.enums.LoginType;
-import org.apache.streampark.console.system.authentication.JWTToken;
-import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.security.Authenticator;
 import org.apache.streampark.console.system.service.UserService;
 
-import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.apache.shiro.subject.Subject;
@@ -45,12 +38,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -60,8 +48,6 @@ import java.util.Map;
 public class SsoController {
   @Autowired private UserService userService;
 
-  @Autowired private ShiroProperties properties;
-
   @Autowired private Authenticator authenticator;
 
   @Value("${pac4j.properties.principalNameAttribute:#{null}}")
@@ -71,7 +57,7 @@ public class SsoController {
   private Boolean ssoEnable;
 
   @GetMapping("signin")
-  public ModelAndView signin(RedirectAttributes attributes) throws Exception {
+  public ModelAndView signin() throws Exception {
     // Redirect to home page with identity
     String url = "/#/?from=sso";
     return new ModelAndView("redirect:" + url);
@@ -79,7 +65,7 @@ public class SsoController {
 
   @GetMapping("token")
   @ResponseBody
-  public RestResponse token(HttpServletRequest request, HttpServletResponse 
response)
+  public RestResponse token()
       throws Exception {
     if (!ssoEnable) {
       throw new ApiAlertException(
@@ -97,38 +83,13 @@ public class SsoController {
     if (principal.getName() == null) {
       log.error(
           "Please configure correct principalNameAttribute from UserProfile: "
-              + principal.toString());
+              + principal);
       throw new ApiAlertException("Please configure the correct Principal Name 
Attribute");
     }
+
     User user = authenticator.authenticate(principal.getName(), null, 
LoginType.SSO.toString());
-    return this.login(user.getUsername(), user);
+    Map<String, Object> userInfo = userService.getLoginUserInfo(user);
+    return RestResponse.success(userInfo);
   }
 
-  private RestResponse login(String username, User user) throws Exception {
-    if (user == null) {
-      return RestResponse.success().put("code", 0);
-    }
-
-    if (User.STATUS_LOCK.equals(user.getStatus())) {
-      return RestResponse.success().put("code", 1);
-    }
-
-    userService.fillInTeam(user);
-
-    // no team.
-    if (user.getLastTeamId() == null) {
-      return RestResponse.success().data(user.getUserId()).put("code", 
ResponseCode.CODE_FORBIDDEN);
-    }
-
-    this.userService.updateLoginTime(username);
-    String token = WebUtils.encryptToken(JWTUtil.sign(user.getUserId(), 
username));
-    LocalDateTime expireTime = 
LocalDateTime.now().plusSeconds(properties.getJwtTimeOut());
-    String expireTimeStr = DateUtils.formatFullTime(expireTime);
-    JWTToken jwtToken = new JWTToken(token, expireTimeStr);
-    String userId = RandomStringUtils.randomAlphanumeric(20);
-    user.setId(userId);
-    Map<String, Object> userInfo =
-        userService.generateFrontendUserInfo(user, user.getLastTeamId(), 
jwtToken);
-    return new RestResponse().data(userInfo);
-  }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/PassportService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/PassportService.java
new file mode 100644
index 000000000..0307de144
--- /dev/null
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/system/service/PassportService.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.streampark.console.system.service;
+
+public interface PassportService {
+}
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 6cd179a87..cb347c621 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
@@ -113,4 +113,6 @@ public interface UserService extends IService<User> {
   Map<String, Object> generateFrontendUserInfo(User user, Long teamId, 
JWTToken token);
 
   void transferResource(Long userId, Long targetUserId);
+
+    Map<String, Object> getLoginUserInfo(User user);
 }
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 afe3d169d..7f25d4e8e 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
@@ -17,14 +17,20 @@
 
 package org.apache.streampark.console.system.service.impl;
 
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.streampark.common.util.DateUtils;
 import org.apache.streampark.common.util.Utils;
+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.exception.ApiAlertException;
+import org.apache.streampark.console.base.properties.ShiroProperties;
 import org.apache.streampark.console.base.util.ShaHashUtils;
+import org.apache.streampark.console.base.util.WebUtils;
 import org.apache.streampark.console.core.service.ApplicationService;
 import org.apache.streampark.console.core.service.ResourceService;
 import org.apache.streampark.console.system.authentication.JWTToken;
+import org.apache.streampark.console.system.authentication.JWTUtil;
 import org.apache.streampark.console.system.entity.Team;
 import org.apache.streampark.console.system.entity.User;
 import org.apache.streampark.console.system.mapper.UserMapper;
@@ -47,6 +53,7 @@ import 
org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Nullable;
 
+import java.time.LocalDateTime;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -68,6 +75,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, 
User> implements Us
 
   @Autowired private ResourceService resourceService;
 
+  @Autowired private ShiroProperties shiroProperties;
+
   @Override
   public User findByName(String username) {
     LambdaQueryWrapper<User> queryWrapper =
@@ -269,4 +278,34 @@ public class UserServiceImpl extends 
ServiceImpl<UserMapper, User> implements Us
     applicationService.changeOwnership(userId, targetUserId);
     resourceService.changeOwnership(userId, targetUserId);
   }
+
+    @Override
+    public Map<String, Object> getLoginUserInfo(User user) {
+
+        if (user == null) {
+            return RestResponse.success().put("code", 0);
+        }
+
+        if (User.STATUS_LOCK.equals(user.getStatus())) {
+            return RestResponse.success().put("code", 1);
+        }
+
+        // set team
+        fillInTeam(user);
+
+        // no team.
+        if (user.getLastTeamId() == null) {
+            return RestResponse.success().data(user.getUserId()).put("code", 
ResponseCode.CODE_FORBIDDEN);
+        }
+
+        updateLoginTime(user.getUsername());
+        String token = WebUtils.encryptToken(JWTUtil.sign(user.getUserId(), 
user.getUsername()));
+        LocalDateTime expireTime = 
LocalDateTime.now().plusSeconds(shiroProperties.getJwtTimeOut());
+        String expireTimeStr = DateUtils.formatFullTime(expireTime);
+        JWTToken jwtToken = new JWTToken(token, expireTimeStr);
+        String userId = RandomStringUtils.randomAlphanumeric(20);
+        user.setId(userId);
+        Map<String, Object> userInfo = generateFrontendUserInfo(user, 
user.getLastTeamId(), jwtToken);
+        return new RestResponse().data(userInfo);
+    }
 }
diff --git 
a/streampark-console/streampark-console-webapp/src/api/flink/resource/index.ts 
b/streampark-console/streampark-console-webapp/src/api/flink/resource/index.ts
index 3fc106fd3..1b279c7a6 100644
--- 
a/streampark-console/streampark-console-webapp/src/api/flink/resource/index.ts
+++ 
b/streampark-console/streampark-console-webapp/src/api/flink/resource/index.ts
@@ -76,4 +76,3 @@ export function fetchResourceDelete(data: 
ResourceDeleteParam): Promise<AxiosRes
 export function fetchTeamResource(data: Recordable): 
Promise<ResourceListRecord[]> {
   return defHttp.post({ url: RESOURCE_API.LIST, data });
 }
-
diff --git 
a/streampark-console/streampark-console-webapp/src/api/system/passport.ts 
b/streampark-console/streampark-console-webapp/src/api/system/passport.ts
new file mode 100644
index 000000000..f6428a286
--- /dev/null
+++ b/streampark-console/streampark-console-webapp/src/api/system/passport.ts
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { AxiosResponse } from 'axios';
+import { defHttp } from '/@/utils/http/axios';
+import { LoginParams, LoginResultModel } from './model/userModel';
+
+import { ErrorMessageMode, Result } from '/#/axios';
+
+enum Api {
+  SIGN_IN = '/passport/signin',
+  SIGN_OUT = '/passport/signout',
+  SIGN_TYPE = '/passport/signtype',
+  SSO_TOKEN = '/sso/token',
+}
+
+/**
+ * @description: user login api
+ * @return {Promise<AxiosResponse<Result<LoginResultModel>>>}
+ */
+export function signin(
+  data: LoginParams,
+  mode: ErrorMessageMode = 'modal',
+): Promise<AxiosResponse<Result<LoginResultModel>>> {
+  return defHttp.post(
+    { url: Api.SIGN_IN, data },
+    { isReturnNativeResponse: true, errorMessageMode: mode },
+  );
+}
+
+export function signout() {
+  return defHttp.post({ url: Api.SIGN_OUT });
+}
+
+export function fetchSignType(): Promise<String[]> {
+  return defHttp.post({ url: Api.SIGN_TYPE });
+}
+
+export function fetchSsoToken(): Promise<LoginResultModel> {
+  return defHttp.get({
+    url: Api.SSO_TOKEN,
+  });
+}
diff --git 
a/streampark-console/streampark-console-webapp/src/api/system/user.ts 
b/streampark-console/streampark-console-webapp/src/api/system/user.ts
index cf2d5df2e..1d94bb8e7 100644
--- a/streampark-console/streampark-console-webapp/src/api/system/user.ts
+++ b/streampark-console/streampark-console-webapp/src/api/system/user.ts
@@ -17,21 +17,13 @@
 import { UserInfo } from '/#/store';
 import { AxiosResponse } from 'axios';
 import { defHttp } from '/@/utils/http/axios';
-import {
-  LoginParams,
-  LoginResultModel,
-  GetUserInfoModel,
-  TeamSetResponse,
-  UserListRecord,
-} from './model/userModel';
+import { GetUserInfoModel, TeamSetResponse, UserListRecord } from 
'./model/userModel';
 
-import { ErrorMessageMode, Result } from '/#/axios';
+import { Result } from '/#/axios';
 import { BasicTableParams } from '../model/baseModel';
 
 enum Api {
   Login = '/passport/signin',
-  Logout = '/passport/signout',
-  GetUserInfo = '/getUserInfo',
   GetPermCode = '/getPermCode',
   UserList = '/user/list',
   NoTokenUsers = '/user/getNoTokenUser',
@@ -44,30 +36,8 @@ enum Api {
   INIT_TEAM = '/user/initTeam',
   APP_OWNERS = '/user/appOwners',
   TransferUserResource = '/user/transferResource',
-  SSO_TOKEN = '/sso/token',
 }
 
-/**
- * @description: user login api
- * @return {Promise<AxiosResponse<Result<LoginResultModel>>>}
- */
-export function loginApi(
-  data: LoginParams,
-  mode: ErrorMessageMode = 'modal',
-): Promise<AxiosResponse<Result<LoginResultModel>>> {
-  return defHttp.post(
-    { url: Api.Login, data },
-    { isReturnNativeResponse: true, errorMessageMode: mode },
-  );
-}
-
-/**
- * @description: getUserInfo
- * @return {Promise<GetUserInfoModel>}
- */
-export function getUserInfo(): Promise<GetUserInfoModel> {
-  return defHttp.get({ url: Api.GetUserInfo }, { errorMessageMode: 'none' });
-}
 /**
  * get user permission code list
  * @returns {Promise<string[]>}
@@ -76,9 +46,6 @@ export function getPermCode(): Promise<string[]> {
   return defHttp.get({ url: Api.GetPermCode });
 }
 
-export function doLogout() {
-  return defHttp.post({ url: Api.Logout });
-}
 /**
  * get user list
  * @param {BasicTableParams} data
@@ -153,9 +120,3 @@ export function transferUserResource(data: {
 }): Promise<TeamSetResponse> {
   return defHttp.put({ url: Api.TransferUserResource, data });
 }
-
-export function fetchSsoToken(): Promise<LoginResultModel> {
-  return defHttp.get({
-    url: Api.SSO_TOKEN,
-  });
-}
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/setting/yarnQueue.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/setting/yarnQueue.ts
index dff659561..0d4fc31ad 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/setting/yarnQueue.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/setting/yarnQueue.ts
@@ -27,7 +27,8 @@ export default {
     yarnQueueLabelExpression: "Please input queue label like {'{queue} or 
{queue}@{lab1,...}'}",
     description: 'Please input the description of the queue.',
   },
-  selectionHint: "Quick-set 'yarn.application.name' and 
'yarn.application.node-label'. Please contact admins to add queue by the 
'Settings' -> 'Yarn Queue' page if no available queues.",
+  selectionHint:
+    "Quick-set 'yarn.application.name' and 'yarn.application.node-label'. 
Please contact admins to add queue by the 'Settings' -> 'Yarn Queue' page if no 
available queues.",
   checkResult: {
     emptyHint: 'Queue label can not be empty.',
     invalidFormatHint: 'Invalid queue label format',
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/system/user.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/system/user.ts
index d056b4300..c94203973 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/en/system/user.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/en/system/user.ts
@@ -44,7 +44,8 @@ export default {
     edit: 'Edit User',
     view: 'View User',
     notice: 'Notice',
-    transferResource: 'Please transfer the resources of the user who needs to 
be disabled to a new user'
+    transferResource:
+      'Please transfer the resources of the user who needs to be disabled to a 
new user',
   },
   roleInfo: 'Role Info',
   modifyTime: 'Not yet modified',
@@ -54,5 +55,5 @@ export default {
   locked: 'locked',
   effective: 'effective',
   resetSucceeded: 'Reset Succeeded',
-  newPasswordTip: "The new password is: ",
+  newPasswordTip: 'The new password is: ',
 };
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/setting/yarnQueue.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/setting/yarnQueue.ts
index 9ecc9186a..d620073aa 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/setting/yarnQueue.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/setting/yarnQueue.ts
@@ -27,7 +27,8 @@ export default {
     yarnQueueLabelExpression: "请输入队列,如 {'{queue} 或 {queue}@{lab1,...}'}",
     description: '请输入描述',
   },
-  selectionHint: "用来快速设置 'yarn.application.name' 与 
'yarn.application.node-label'。如果没有可用队列请联系管理员在 'Settings' -> 'Yarn Queue' 页面中创建",
+  selectionHint:
+    "用来快速设置 'yarn.application.name' 与 
'yarn.application.node-label'。如果没有可用队列请联系管理员在 'Settings' -> 'Yarn Queue' 页面中创建",
   checkResult: {
     emptyHint: '队列标签不能为空',
     invalidFormatHint: '队列标签格式错误',
diff --git 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/user.ts
 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/user.ts
index 5e092dcde..d012e5493 100644
--- 
a/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/user.ts
+++ 
b/streampark-console/streampark-console-webapp/src/locales/lang/zh-CN/system/user.ts
@@ -44,7 +44,7 @@ export default {
     edit: '编辑用户',
     view: '查看用户',
     notice: '提示',
-    transferResource: '请将需要被禁用的用户资源转移到新的用户上'
+    transferResource: '请将需要被禁用的用户资源转移到新的用户上',
   },
   roleInfo: '角色信息',
   modifyTime: '尚未修改',
@@ -54,5 +54,5 @@ export default {
   locked: '锁定',
   effective: '有效',
   resetSucceeded: '重置成功',
-  newPasswordTip: "新的密码为:",
+  newPasswordTip: '新的密码为:',
 };
diff --git 
a/streampark-console/streampark-console-webapp/src/router/guard/ssoGuard.ts 
b/streampark-console/streampark-console-webapp/src/router/guard/ssoGuard.ts
index 92927427b..bb34d2cea 100644
--- a/streampark-console/streampark-console-webapp/src/router/guard/ssoGuard.ts
+++ b/streampark-console/streampark-console-webapp/src/router/guard/ssoGuard.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 import type { Router } from 'vue-router';
-import { fetchSsoToken } from '/@/api/system/user';
+import { fetchSsoToken } from '/@/api/system/passport';
 import { APP_TEAMID_KEY_ } from '/@/enums/cacheEnum';
 import { PageEnum } from '/@/enums/pageEnum';
 import { useUserStoreWithOut } from '/@/store/modules/user';
diff --git 
a/streampark-console/streampark-console-webapp/src/store/modules/lock.ts 
b/streampark-console/streampark-console-webapp/src/store/modules/lock.ts
index 2a428d6c9..008f9dea2 100644
--- a/streampark-console/streampark-console-webapp/src/store/modules/lock.ts
+++ b/streampark-console/streampark-console-webapp/src/store/modules/lock.ts
@@ -21,7 +21,7 @@ import { defineStore } from 'pinia';
 import { LOCK_INFO_KEY } from '/@/enums/cacheEnum';
 import { Persistent } from '/@/utils/cache/persistent';
 import { useUserStore } from './user';
-import { loginApi } from '/@/api/system/user';
+import { signin } from '/@/api/system/passport';
 
 interface LockState {
   lockInfo: Nullable<LockInfo>;
@@ -57,7 +57,7 @@ export const useLockStore = defineStore({
         try {
           const username = userStore.getUserInfo?.username;
           const loginType = userStore.getUserInfo?.loginType;
-          const { data } = await loginApi(
+          const { data } = await signin(
             {
               username,
               password: password!,
diff --git 
a/streampark-console/streampark-console-webapp/src/store/modules/user.ts 
b/streampark-console/streampark-console-webapp/src/store/modules/user.ts
index caf354214..5528a0304 100644
--- a/streampark-console/streampark-console-webapp/src/store/modules/user.ts
+++ b/streampark-console/streampark-console-webapp/src/store/modules/user.ts
@@ -28,7 +28,9 @@ import {
   USER_INFO_KEY,
 } from '/@/enums/cacheEnum';
 import { getAuthCache, setAuthCache } from '/@/utils/auth';
-import { doLogout, fetchInitUserTeam, fetchSetUserTeam } from 
'/@/api/system/user';
+import { signout } from '/@/api/system/passport';
+import { fetchInitUserTeam, fetchSetUserTeam } from '/@/api/system/user';
+
 import { useI18n } from '/@/hooks/web/useI18n';
 import { useMessage } from '/@/hooks/web/useMessage';
 import { router } from '/@/router';
@@ -208,7 +210,7 @@ export const useUserStore = defineStore({
     async logout(goLogin = false) {
       if (this.getToken) {
         try {
-          await doLogout();
+          await signout();
         } catch {
           console.log('Token cancellation failed');
         }
diff --git 
a/streampark-console/streampark-console-webapp/src/views/base/login/LoginForm.vue
 
b/streampark-console/streampark-console-webapp/src/views/base/login/LoginForm.vue
index 2da26b2f4..af62ebe33 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/base/login/LoginForm.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/base/login/LoginForm.vue
@@ -53,6 +53,7 @@
         </template>
       </InputPassword>
     </FormItem>
+
     <FormItem class="enter-x">
       <Button
         type="primary"
@@ -65,19 +66,21 @@
         {{ loginText.buttonText }}
       </Button>
     </FormItem>
+
     <FormItem class="enter-x text-left">
-      <Button :href="SSO_LOGIN_PATH" type="link">
+      <Button :href="SSO_LOGIN_PATH" type="link" v-if="enableSSO">
         {{ t('sys.login.ssoSignIn') }}
       </Button>
-      <Button type="link" class="float-right" @click="changeLoginType">
+      <Button type="link" class="float-right" @click="changeLoginType" 
v-if="enableLDAP">
         {{ loginText.linkText }}
       </Button>
     </FormItem>
+
   </Form>
   <TeamModal v-model:visible="modelVisible" :userId="userId" 
@success="handleTeamSuccess" />
 </template>
 <script lang="ts" setup>
-  import { reactive, ref, unref, computed } from 'vue';
+  import { reactive, ref, unref, computed, onMounted } from 'vue';
   import { UserOutlined, LockOutlined } from '@ant-design/icons-vue';
 
   import { Form, Input, Button } from 'ant-design-vue';
@@ -93,7 +96,7 @@
     LoginTypeEnum,
   } from './useLogin';
   import { useDesign } from '/@/hooks/web/useDesign';
-  import { loginApi } from '/@/api/system/user';
+  import { signin, fetchSignType } from '/@/api/system/passport';
   import { APP_TEAMID_KEY_ } from '/@/enums/cacheEnum';
   import TeamModal from './teamModal.vue';
   import { fetchUserTeam } from '/@/api/system/member';
@@ -120,6 +123,9 @@
   const userId = ref('');
   const modelVisible = ref(false);
   const loginType = ref(LoginTypeEnum.PASSWORD);
+  const enableSSO = ref(false);
+  const enableLDAP = ref(false);
+
   const formData = reactive<LoginForm>({
     account: '',
     password: '',
@@ -149,7 +155,7 @@
   }
 
   async function handleLoginRequest(loginFormValue: LoginForm): 
Promise<Result<LoginResultModel>> {
-    const { data } = await loginApi(
+    const { data } = await signin(
       {
         password: loginFormValue.password,
         username: loginFormValue.account,
@@ -215,6 +221,7 @@
     modelVisible.value = false;
     handleLogin();
   }
+
   function changeLoginType() {
     if (loginType.value === LoginTypeEnum.PASSWORD) {
       loginType.value = LoginTypeEnum.LDAP;
@@ -222,4 +229,10 @@
     }
     loginType.value = LoginTypeEnum.PASSWORD;
   }
+
+  onMounted(async () => {
+    const { data, code} = await fetchSignType();
+    enableSSO.value = data.find((x) => x === 'sso') != undefined;
+    enableLDAP.value = data.find((x) => x === 'ldap') != undefined;
+  }
 </script>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
index fe9b18e4a..63b517f79 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/EditStreamPark.vue
@@ -27,11 +27,7 @@
   import configOptions from './data/option';
   import { fetchMain, fetchUpload, fetchUpdate, fetchGet } from 
'/@/api/flink/app/app';
   import { useRoute } from 'vue-router';
-  import {
-    getAppConfType,
-    handleSubmitParams,
-    handleTeamResource
-  } from './utils';
+  import { getAppConfType, handleSubmitParams, handleTeamResource } from 
'./utils';
   import { fetchFlinkHistory } from '/@/api/flink/app/flinkSql';
   import { decodeByBase64, encryptByBase64 } from '/@/utils/cipher';
   import PomTemplateTab from './components/PodTemplate/PomTemplateTab.vue';
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StopApplicationModal.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StopApplicationModal.vue
index 453b24e3e..8e2fbde87 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StopApplicationModal.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/components/AppView/StopApplicationModal.vue
@@ -23,7 +23,6 @@
 </script>
 
 <script setup lang="ts" name="StopApplicationModal">
-  import { InputNumber } from 'ant-design-vue';
   import { BasicForm, useForm } from '/@/components/Form';
   import { SvgIcon } from '/@/components/Icon';
   import { BasicModal, useModalInner } from '/@/components/Modal';
@@ -91,8 +90,7 @@
   /* submit */
   async function handleSubmit() {
     try {
-      const { stopSavePointed, customSavepoint, drain } =
-        (await validate()) as Recordable;
+      const { stopSavePointed, customSavepoint, drain } = (await validate()) 
as Recordable;
       const stopReq = {
         id: app.id,
         savePointed: stopSavePointed,
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
index 9281adbcc..4cf147ed4 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateAndEditSchema.ts
@@ -54,7 +54,7 @@ import { AppTypeEnum, ClusterStateEnum, ExecModeEnum, 
JobTypeEnum } from '/@/enu
 import { isK8sExecMode } from '../utils';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { fetchCheckHadoop } from '/@/api/flink/setting';
-import { fetchTeamResource } from "/@/api/flink/resource";
+import { fetchTeamResource } from '/@/api/flink/resource';
 const { t } = useI18n();
 export interface HistoryRecord {
   k8sNamespace: Array<string>;
@@ -126,8 +126,7 @@ export const useCreateAndEditSchema = (
         field: 'teamResource',
         label: t('flink.app.teamResource'),
         component: 'Select',
-        render: ({ model }) =>
-          renderStreamParkResource( { model, resources: unref(teamResource) }, 
),
+        render: ({ model }) => renderStreamParkResource({ model, resources: 
unref(teamResource) }),
         ifShow: ({ values }) => {
           if (edit?.appId) {
             return values.jobType == JobTypeEnum.SQL;
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
index a53726311..2b46d3499 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useCreateSchema.ts
@@ -24,10 +24,7 @@ import { fetchMain, fetchName } from '/@/api/flink/app/app';
 import { modules, fetchListConf, fetchListJars } from '/@/api/flink/project';
 import { RuleObject } from 'ant-design-vue/lib/form';
 import { StoreValue } from 'ant-design-vue/lib/form/interface';
-import {
-  renderResourceFrom,
-  renderStreamParkJarApp
-} from './useFlinkRender';
+import { renderResourceFrom, renderStreamParkJarApp } from './useFlinkRender';
 import { filterOption, getAppConfType } from '../utils';
 import { useI18n } from '/@/hooks/web/useI18n';
 const { t } = useI18n();
@@ -126,8 +123,7 @@ export const useCreateSchema = (dependencyRef: Ref) => {
         field: 'uploadJobJar',
         label: t('flink.app.selectJobJar'),
         component: 'Select',
-        render: ({ model }) =>
-          renderStreamParkJarApp( { model, resources: unref(teamResource) }, ),
+        render: ({ model }) => renderStreamParkJarApp({ model, resources: 
unref(teamResource) }),
         ifShow: ({ values }) => values?.jobType !== 'sql' && 
values?.resourceFrom == 'upload',
       },
       {
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
index 1053b33f2..f47835368 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/hooks/useFlinkRender.tsx
@@ -43,7 +43,7 @@ import { CandidateTypeEnum, FailoverStrategyEnum } from 
'/@/enums/flinkEnum';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { fetchYarnQueueList } from '/@/api/flink/setting/yarnQueue';
 import { ApiSelect } from '/@/components/Form';
-import {ResourceTypeEnum} from "/@/views/flink/resource/resource.data";
+import { ResourceTypeEnum } from '/@/views/flink/resource/resource.data';
 
 const { t } = useI18n();
 /* render input dropdown component */
@@ -462,7 +462,7 @@ export const renderSqlHistory = (
             )}
 
             <span style="color: darkgrey">
-                <Icon icon="ant-design:clock-circle-outlined" />
+              <Icon icon="ant-design:clock-circle-outlined" />
               {ver.createTime}
             </span>
           </div>
@@ -529,28 +529,26 @@ export const renderResourceFrom = (model: Recordable) => {
   );
 };
 
-export const renderStreamParkResource = ({ model, resources },) => {
-
+export const renderStreamParkResource = ({ model, resources }) => {
   const renderOptions = () => {
     console.log('resources', resources);
     return (resources || [])
-      .filter((item) => item.resourceType !== ResourceTypeEnum.FLINK_APP )
+      .filter((item) => item.resourceType !== ResourceTypeEnum.FLINK_APP)
       .map((resource) => {
-      return (
-        <Select.Option
-          key={resource.id}
-          label={ resource.resourceType + '-' + resource.resourceName}>
-          <div>
-            <Tag color="green" style=";margin-left: 5px;" size="small">
-              {resource.resourceType}
-            </Tag>
-            <span style="color: darkgrey">
-              {resource.resourceName}
-            </span>
-          </div>
-        </Select.Option>
-      );
-    });
+        return (
+          <Select.Option
+            key={resource.id}
+            label={resource.resourceType + '-' + resource.resourceName}
+          >
+            <div>
+              <Tag color="green" style=";margin-left: 5px;" size="small">
+                {resource.resourceType}
+              </Tag>
+              <span style="color: darkgrey">{resource.resourceName}</span>
+            </div>
+          </Select.Option>
+        );
+      });
   };
 
   return (
@@ -572,34 +570,29 @@ export const renderStreamParkResource = ({ model, 
resources },) => {
   );
 };
 
-export const renderStreamParkJarApp = ({ model, resources },) => {
-
+export const renderStreamParkJarApp = ({ model, resources }) => {
   function handleAppChange(value: SelectValue) {
     const res = resources.filter((item) => item.id == value)[0];
-    model.mainClass = res.mainClass
+    model.mainClass = res.mainClass;
     model.uploadJobJar = res.resourceName;
   }
 
   const renderOptions = () => {
     console.log('resources', resources);
     return (resources || [])
-      .filter((item) => item.resourceType == ResourceTypeEnum.FLINK_APP )
+      .filter((item) => item.resourceType == ResourceTypeEnum.FLINK_APP)
       .map((resource) => {
-      return (
-        <Select.Option
-          key={resource.id}
-          label={resource.resourceName}>
-          <div>
-            <Tag color="green" style=";margin-left: 5px;" size="small">
-              {resource.resourceType}
-            </Tag>
-            <span style="color: darkgrey">
-              {resource.resourceName}
-            </span>
-          </div>
-        </Select.Option>
-      );
-    });
+        return (
+          <Select.Option key={resource.id} label={resource.resourceName}>
+            <div>
+              <Tag color="green" style=";margin-left: 5px;" size="small">
+                {resource.resourceType}
+              </Tag>
+              <span style="color: darkgrey">{resource.resourceName}</span>
+            </div>
+          </Select.Option>
+        );
+      });
   };
 
   return (
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/app/utils/index.ts
 
b/streampark-console/streampark-console-webapp/src/views/flink/app/utils/index.ts
index 8e7eba47b..0af97df9e 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/app/utils/index.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/app/utils/index.ts
@@ -161,7 +161,10 @@ export function handleIsStart(app: Recordable, optionApps: 
Recordable) {
 }
 
 export function handleYarnQueue(values: Recordable) {
-  if (values.executionMode == ExecModeEnum.YARN_APPLICATION || 
values.executionMode == ExecModeEnum.YARN_PER_JOB) {
+  if (
+    values.executionMode == ExecModeEnum.YARN_APPLICATION ||
+    values.executionMode == ExecModeEnum.YARN_PER_JOB
+  ) {
     const queue = values['yarnQueue'];
     if (queue != null && queue !== '' && queue !== undefined) {
       return queue;
@@ -313,8 +316,8 @@ export function isK8sExecMode(mode: number): boolean {
 }
 
 export function handleTeamResource(resource: string) {
-    if (resource != null && resource !== '') {
-      return JSON.parse(resource);
-    }
-    return [];
+  if (resource != null && resource !== '') {
+    return JSON.parse(resource);
+  }
+  return [];
 }
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/View.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/View.vue
index bc5fb08ff..09390c249 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/View.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/View.vue
@@ -47,11 +47,7 @@
           >
             CONNECTOR
           </Tag>
-          <Tag
-            class="bold-tag"
-            color="#79f379"
-            v-if="record.resourceType == ResourceTypeEnum.UDXF"
-          >
+          <Tag class="bold-tag" color="#79f379" v-if="record.resourceType == 
ResourceTypeEnum.UDXF">
             UDXF
           </Tag>
           <Tag
@@ -63,18 +59,10 @@
           </Tag>
         </template>
         <template v-if="column.dataIndex === 'engineType'">
-          <Tag
-            class="bold-tag"
-            color="#e65270"
-            v-if="record.engineType == EngineTypeEnum.FLINK"
-          >
+          <Tag class="bold-tag" color="#e65270" v-if="record.engineType == 
EngineTypeEnum.FLINK">
             FLINK
           </Tag>
-          <Tag
-            class="bold-tag"
-            color="#f5be07"
-            v-if="record.engineType == EngineTypeEnum.SPARK"
-          >
+          <Tag class="bold-tag" color="#f5be07" v-if="record.engineType == 
EngineTypeEnum.SPARK">
             SPARK
           </Tag>
         </template>
@@ -102,7 +90,11 @@
         </template>
       </template>
     </BasicTable>
-    <ResourceDrawer :teamResource="teamResource" @register="registerDrawer" 
@success="handleSuccess" />
+    <ResourceDrawer
+      :teamResource="teamResource"
+      @register="registerDrawer"
+      @success="handleSuccess"
+    />
   </div>
 </template>
 <script lang="ts">
@@ -112,7 +104,7 @@
 </script>
 
 <script lang="ts" setup>
-import {defineComponent, onMounted, ref} from 'vue';
+  import { defineComponent, onMounted, ref } from 'vue';
   import { BasicTable, useTable, TableAction, SorterResult } from 
'/@/components/Table';
   import ResourceDrawer from './components/ResourceDrawer.vue';
   import { useDrawer } from '/@/components/Drawer';
@@ -121,12 +113,8 @@ import {defineComponent, onMounted, ref} from 'vue';
   import { useI18n } from '/@/hooks/web/useI18n';
   import Icon from '/@/components/Icon';
   import { useRouter } from 'vue-router';
-  import {
-    fetchResourceDelete,
-    fetchResourceList,
-    fetchTeamResource
-  } from "/@/api/flink/resource";
-  import { EngineTypeEnum, ResourceTypeEnum } from 
"/@/views/flink/resource/resource.data";
+  import { fetchResourceDelete, fetchResourceList, fetchTeamResource } from 
'/@/api/flink/resource';
+  import { EngineTypeEnum, ResourceTypeEnum } from 
'/@/views/flink/resource/resource.data';
   import { Tag } from 'ant-design-vue';
 
   const teamResource = ref<Array<any>>([]);
@@ -216,5 +204,4 @@ import {defineComponent, onMounted, ref} from 'vue';
   onMounted(async () => {
     updateTeamResource();
   });
-
 </script>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/components/Resource.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/components/Resource.vue
index 5e14f3b2c..d9fa91b9f 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/components/Resource.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/components/Resource.vue
@@ -28,7 +28,7 @@
   import { getMonacoOptions } from '/@/views/flink/app/data';
   import { Icon } from '/@/components/Icon';
   import { useMonaco } from '/@/hooks/web/useMonaco';
-  import { Tabs, Alert, Tag, Space, Form } from 'ant-design-vue';
+  import { Tabs, Alert, Tag, Space } from 'ant-design-vue';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { fetchUpload } from '/@/api/flink/app/app';
   import UploadJobJar from '/@/views/flink/app/components/UploadJobJar.vue';
@@ -142,7 +142,7 @@
       const formData = new FormData();
       formData.append('file', data.file);
       await fetchUpload(formData);
-      dependency.jar = {}
+      dependency.jar = {};
       dependency.jar[data.file.name] = data.file.name;
       handleUpdateDependency();
     } catch (error) {
@@ -179,12 +179,12 @@
     dependency.pom = {};
     dependency.jar = {};
     if (dataSource.pom === undefined) {
-      setContent(defaultValue)
+      setContent(defaultValue);
     }
     dataSource.pom?.map((pomRecord: DependencyType) => {
       const id = getId(pomRecord);
       dependency.pom[id] = pomRecord;
-      setContent(toPomString(pomRecord))
+      setContent(toPomString(pomRecord));
     });
     dataSource.jar?.map((fileName: string) => {
       dependency.jar[fileName] = fileName;
@@ -215,21 +215,6 @@
   });
 </script>
 
-<style lang="less">
-  @import url('/@/views/flink/app/styles/Add.less');
-  .apply-pom {
-    z-index: 99;
-    position: absolute;
-    bottom: 20px;
-    float: right;
-    right: 20px;
-    cursor: pointer;
-    height: 26px;
-    padding: 0 12px;
-    font-size: 12px;
-  }
-</style>
-
 <template>
   <template v-if="props.formModel.resourceType == 'FLINK_APP'">
     <UploadJobJar :custom-request="handleCustomDepsRequest" 
v-model:loading="loading" />
@@ -269,3 +254,18 @@
     </Alert>
   </div>
 </template>
+
+<style lang="less">
+  @import url('/@/views/flink/app/styles/Add.less');
+  .apply-pom {
+    z-index: 99;
+    position: absolute;
+    bottom: 20px;
+    float: right;
+    right: 20px;
+    cursor: pointer;
+    height: 26px;
+    padding: 0 12px;
+    font-size: 12px;
+  }
+</style>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/components/ResourceDrawer.vue
 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/components/ResourceDrawer.vue
index 8f2d33339..2d217d3fe 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/components/ResourceDrawer.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/components/ResourceDrawer.vue
@@ -28,11 +28,7 @@
     </template>
     <BasicForm @register="registerForm" :schemas="getResourceFormSchema">
       <template #resource="{ model, field }">
-        <Resource
-          ref="resourceRef"
-          v-model:value="model[field]"
-          :form-model="model"
-        />
+        <Resource ref="resourceRef" v-model:value="model[field]" 
:form-model="model" />
       </template>
     </BasicForm>
   </BasicDrawer>
@@ -44,19 +40,19 @@
 </script>
 
 <script lang="ts" setup>
-  import { ref, h, computed, unref } from 'vue';
+  import { ref, computed, unref } from 'vue';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
   import { Icon } from '/@/components/Icon';
   import { useI18n } from '/@/hooks/web/useI18n';
   import Resource from '/@/views/flink/resource/components/Resource.vue';
-  import { fetchAddResource, fetchUpdateResource } from 
"/@/api/flink/resource";
-  import { EngineTypeEnum } from "/@/views/flink/resource/resource.data";
+  import { fetchAddResource, fetchUpdateResource } from 
'/@/api/flink/resource';
+  import { EngineTypeEnum } from '/@/views/flink/resource/resource.data';
   import {
     renderResourceType,
-    renderStreamParkResourceGroup
-  } from "/@/views/flink/resource/useResourceRender";
-  import { useMessage } from "/@/hooks/web/useMessage";
+    renderStreamParkResourceGroup,
+  } from '/@/views/flink/resource/useResourceRender';
+  import { useMessage } from '/@/hooks/web/useMessage';
 
   const emit = defineEmits(['success', 'register']);
 
@@ -80,9 +76,10 @@
         field: 'resourceType',
         label: t('flink.resource.resourceType'),
         component: 'Select',
-        render: ({ model }) =>
-          renderResourceType( { model, }, ),
-        rules: [{ required: true, message: 
t('flink.resource.form.resourceTypeIsRequiredMessage') }],
+        render: ({ model }) => renderResourceType({ model }),
+        rules: [
+          { required: true, message: 
t('flink.resource.form.resourceTypeIsRequiredMessage') },
+        ],
       },
       {
         field: 'engineType',
@@ -111,7 +108,7 @@
         label: t('flink.resource.resourceGroup'),
         component: 'Select',
         render: ({ model }) =>
-          renderStreamParkResourceGroup( { model, resources: 
unref(props.teamResource) }, ),
+          renderStreamParkResourceGroup({ model, resources: 
unref(props.teamResource) }),
         ifShow: ({ values }) => values?.resourceType == 'GROUP',
       },
       {
@@ -148,7 +145,7 @@
     wrapperCol: { lg: { span: 16, offset: 0 }, sm: { span: 17, offset: 0 } },
   });
 
-  const [registerDrawer, { setDrawerProps, changeLoading, closeDrawer }] = 
useDrawerInner(
+  const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(
     async (data: Recordable) => {
       unref(resourceRef)?.setDefaultValue({});
       resetFields();
@@ -159,12 +156,11 @@
         setFieldsValue(data.record);
 
         if (data.record?.resourceType == 'GROUP') {
-          setFieldsValue({ resourceGroup: JSON.parse(data.record.resource || 
'[]')} );
+          setFieldsValue({ resourceGroup: JSON.parse(data.record.resource || 
'[]') });
         } else {
-          setFieldsValue({ dependency: data.record.resource});
+          setFieldsValue({ dependency: data.record.resource });
           unref(resourceRef)?.setDefaultValue(JSON.parse(data.record.resource 
|| '{}'));
         }
-
       }
     },
   );
@@ -177,7 +173,7 @@
   async function handleSubmit() {
     try {
       const values = await validate();
-      let resourceJson: string = '';
+      let resourceJson = '';
 
       if (values.resourceType == 'GROUP') {
         resourceJson = JSON.stringify(values.resourceGroup);
@@ -228,7 +224,6 @@
       setDrawerProps({ confirmLoading: false });
     }
   }
-
 </script>
 
 <style lang="less">
diff --git 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/useResourceRender.tsx
 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/useResourceRender.tsx
index 86664de7e..57b2c077b 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/flink/resource/useResourceRender.tsx
+++ 
b/streampark-console/streampark-console-webapp/src/views/flink/resource/useResourceRender.tsx
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {Select, Tag} from 'ant-design-vue';
+import { Select, Tag } from 'ant-design-vue';
 import { useI18n } from '/@/hooks/web/useI18n';
-import { ResourceTypeEnum } from "/@/views/flink/resource/resource.data";
+import { ResourceTypeEnum } from '/@/views/flink/resource/resource.data';
 import flinkAppSvg from '/@/assets/icons/flink2.svg';
 import connectorSvg from '/@/assets/icons/connector.svg';
 import udxfSvg from '/@/assets/icons/fx.svg';
@@ -26,8 +26,7 @@ import groupSvg from '/@/assets/icons/group.svg';
 const { t } = useI18n();
 
 /* render resource type label */
-export const renderResourceType = ({ model },) => {
-
+export const renderResourceType = ({ model }) => {
   const renderOptions = () => {
     const options = [
       { label: 'Flink App', value: ResourceTypeEnum.FLINK_APP, src: 
flinkAppSvg },
@@ -36,27 +35,16 @@ export const renderResourceType = ({ model },) => {
       { label: 'Normal Jar', value: ResourceTypeEnum.NORMAL_JAR, src: 
normalJarSvg },
       { label: 'Group', value: ResourceTypeEnum.GROUP, src: groupSvg },
     ];
-    return options
-      .map(( {label,value, src} ) => {
-        return (
-          <Select.Option
-            key={ value }
-            label={ label }
-            >
-            <div>
-              <img
-                src={ src }
-                style="display: inline-block; width: 20px; height: 20px"
-              ></img>
-              <span
-                style="vertical-align: middle; margin-left: 5px;"
-              >
-                { label }
-              </span>
-            </div>
-          </Select.Option>
-        );
-      });
+    return options.map(({ label, value, src }) => {
+      return (
+        <Select.Option key={value} label={label}>
+          <div>
+            <img src={src} style="display: inline-block; width: 20px; height: 
20px"></img>
+            <span style="vertical-align: middle; margin-left: 
5px;">{label}</span>
+          </div>
+        </Select.Option>
+      );
+    });
   };
 
   return (
@@ -73,25 +61,26 @@ export const renderResourceType = ({ model },) => {
   );
 };
 
-export const renderStreamParkResourceGroup = ({ model, resources },) => {
-
+export const renderStreamParkResourceGroup = ({ model, resources }) => {
   const renderOptions = () => {
     console.log('resources', resources);
     return (resources || [])
-      .filter((item) => item.resourceType !== ResourceTypeEnum.FLINK_APP
-        && item.resourceType !== ResourceTypeEnum.GROUP)
+      .filter(
+        (item) =>
+          item.resourceType !== ResourceTypeEnum.FLINK_APP &&
+          item.resourceType !== ResourceTypeEnum.GROUP,
+      )
       .map((resource) => {
         return (
           <Select.Option
             key={resource.id}
-            label={ resource.resourceType + '-' + resource.resourceName}>
+            label={resource.resourceType + '-' + resource.resourceName}
+          >
             <div>
               <Tag color="green" style=";margin-left: 5px;" size="small">
                 {resource.resourceType}
               </Tag>
-              <span style="color: darkgrey">
-              {resource.resourceName}
-            </span>
+              <span style="color: darkgrey">{resource.resourceName}</span>
             </div>
           </Select.Option>
         );
diff --git 
a/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/index.vue
 
b/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/index.vue
index 04f33fe34..6715dd307 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/index.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/setting/FlinkHome/index.vue
@@ -25,20 +25,14 @@
   import { onMounted, ref } from 'vue';
   import { useModal } from '/@/components/Modal';
   import { SvgIcon } from '/@/components/Icon';
-  import {
-    List,
-    Switch,
-    Card,
-    Popconfirm,
-    Tooltip
-  } from 'ant-design-vue';
+  import { List, Switch, Card, Popconfirm, Tooltip } from 'ant-design-vue';
   import {
     CheckOutlined,
     CloseOutlined,
     DeleteOutlined,
     EyeOutlined,
     EditOutlined,
-    PlusOutlined
+    PlusOutlined,
   } from '@ant-design/icons-vue';
   import { FlinkEnvModal, FlinkEnvDrawer } from './components';
   import {
@@ -46,7 +40,7 @@
     fetchDefaultSet,
     fetchFlinkEnv,
     fetchFlinkEnvRemove,
-    fetchFlinkInfo
+    fetchFlinkInfo,
   } from '/@/api/flink/setting/flinkEnv';
   import { FlinkEnv } from '/@/api/flink/setting/types/flinkEnv.type';
   import { useMessage } from '/@/hooks/web/useMessage';
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/user/components/UserDrawer.vue
 
b/streampark-console/streampark-console-webapp/src/views/system/user/components/UserDrawer.vue
index 564e0d211..66395d510 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/user/components/UserDrawer.vue
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/user/components/UserDrawer.vue
@@ -34,13 +34,13 @@
     :ok-text="t('common.okText')"
     centered
     @ok="handleTransfer"
-    @cancel="transferModalVisible=false"
+    @cancel="transferModalVisible = false"
   >
     <template #title>
       <Icon icon="ant-design:swap-outlined" />
       {{ t('system.user.form.notice') }}
     </template>
-    <BasicForm @register="transferForm" class="!mt-30px !ml-36px"/>
+    <BasicForm @register="transferForm" class="!mt-30px !ml-36px" />
   </Modal>
 </template>
 <script lang="ts">
@@ -49,10 +49,10 @@
   import { formSchema } from '../user.data';
   import { FormTypeEnum } from '/@/enums/formEnum';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  import {addUser, getUserList, transferUserResource, updateUser} from 
'/@/api/system/user';
+  import { addUser, getUserList, transferUserResource, updateUser } from 
'/@/api/system/user';
   import Icon from '/@/components/Icon';
   import { useI18n } from '/@/hooks/web/useI18n';
-  import { useUserStoreWithOut } from "/@/store/modules/user";
+  import { useUserStoreWithOut } from '/@/store/modules/user';
   import { Modal } from 'ant-design-vue';
 
   export default defineComponent({
@@ -78,7 +78,7 @@
 
       const [registerDrawer, { setDrawerProps, closeDrawer }] = 
useDrawerInner(async (data) => {
         formType.value = data.formType;
-        userInfo.value = data.record || {}
+        userInfo.value = data.record || {};
         resetFields();
         clearValidate();
         updateSchema(formSchema(unref(formType)));
@@ -94,36 +94,41 @@
         }
       });
 
-      const [transferForm, { resetFields: resetTransferFields, validate: 
transferValidate }] = useForm({
-        layout: 'vertical',
-        showActionButtonGroup: false,
-        baseColProps: { lg: 22, md: 22 },
-        schemas: [
-          {
-            field: 'userId',
-            label: t('system.user.form.transferResource'),
-            component: 'ApiSelect',
-            componentProps: {
-              api: async () =>  {
-                let {records} = await getUserList({ page: 1, pageSize: 999999, 
teamId: userStore.getTeamId || '' })
-                return records.filter( user => user.userId !== 
userInfo.value.userId )
+      const [transferForm, { resetFields: resetTransferFields, validate: 
transferValidate }] =
+        useForm({
+          layout: 'vertical',
+          showActionButtonGroup: false,
+          baseColProps: { lg: 22, md: 22 },
+          schemas: [
+            {
+              field: 'userId',
+              label: t('system.user.form.transferResource'),
+              component: 'ApiSelect',
+              componentProps: {
+                api: async () => {
+                  let { records } = await getUserList({
+                    page: 1,
+                    pageSize: 999999,
+                    teamId: userStore.getTeamId || '',
+                  });
+                  return records.filter((user) => user.userId !== 
userInfo.value.userId);
+                },
+                labelField: 'username',
+                valueField: 'userId',
+                showSearch: false,
+                optionFilterGroup: 'username',
+                placeholder: t('system.member.userNameRequire'),
               },
-              labelField: 'username',
-              valueField: 'userId',
-              showSearch: false,
-              optionFilterGroup: 'username',
-              placeholder: t('system.member.userNameRequire'),
+              rules: [
+                {
+                  required: true,
+                  message: t('system.member.userNameRequire'),
+                  trigger: 'blur',
+                },
+              ],
             },
-            rules: [
-              {
-                required: true,
-                message: t('system.member.userNameRequire'),
-                trigger: 'blur',
-              },
-            ],
-          }
-        ],
-      });
+          ],
+        });
 
       const getTitle = computed(() => {
         return {
@@ -138,13 +143,13 @@
           const values = await validate();
           setDrawerProps({ confirmLoading: true });
           if (unref(formType) === FormTypeEnum.Edit) {
-            const res: { needTransferResource: Boolean } = await 
updateUser(values)
+            const res: { needTransferResource: Boolean } = await 
updateUser(values);
             if (res?.needTransferResource) {
-              transferModalVisible.value = true
-              nextTick(resetTransferFields)
-              return
+              transferModalVisible.value = true;
+              nextTick(resetTransferFields);
+              return;
             }
-          }else{
+          } else {
             await addUser(values);
           }
           closeDrawer();
@@ -157,18 +162,32 @@
       async function handleTransfer() {
         try {
           const values = await transferValidate();
-          transferModalLoading.value = true
-          await transferUserResource({ userId:userInfo.value.userId, 
targetUserId: values.userId })
+          transferModalLoading.value = true;
+          await transferUserResource({
+            userId: userInfo.value.userId,
+            targetUserId: values.userId,
+          });
           emit('success');
-          transferModalVisible.value = false
+          transferModalVisible.value = false;
         } catch (e) {
           console.error(e);
         } finally {
-          transferModalLoading.value = false
+          transferModalLoading.value = false;
         }
       }
 
-      return { t, registerDrawer, registerForm, transferForm, 
transferModalLoading, transferModalVisible, getTitle, handleSubmit, 
handleTransfer, closeDrawer };
+      return {
+        t,
+        registerDrawer,
+        registerForm,
+        transferForm,
+        transferModalLoading,
+        transferModalVisible,
+        getTitle,
+        handleSubmit,
+        handleTransfer,
+        closeDrawer,
+      };
     },
   });
 </script>
diff --git 
a/streampark-console/streampark-console-webapp/src/views/system/user/user.data.ts
 
b/streampark-console/streampark-console-webapp/src/views/system/user/user.data.ts
index 57ab342b1..b01884559 100644
--- 
a/streampark-console/streampark-console-webapp/src/views/system/user/user.data.ts
+++ 
b/streampark-console/streampark-console-webapp/src/views/system/user/user.data.ts
@@ -151,10 +151,10 @@ export const formSchema = (formType: string): 
FormSchema[] => {
       component: 'Select',
       componentProps: {
         disabled: isView,
-        options:  [
+        options: [
           { label: t('ADMIN'), value: UserTypeEnum.ADMIN },
           { label: t('USER'), value: UserTypeEnum.USER },
-        ]
+        ],
       },
       rules: [{ required: true }],
     },

Reply via email to