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

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


The following commit(s) were added to refs/heads/resource by this push:
     new ec78386e0 minor improvement
ec78386e0 is described below

commit ec78386e06e37b4b566cd82f3343eb992d7aa955
Author: benjobs <[email protected]>
AuthorDate: Mon Jul 17 08:05:19 2023 +0800

    minor improvement
---
 .../core/controller/ApplicationController.java     |  8 ++-
 .../core/controller/ResourceController.java        |  9 ++++
 .../console/core/service/ApplicationService.java   |  3 --
 .../console/core/service/ResourceService.java      |  4 ++
 .../core/service/impl/ApplicationServiceImpl.java  | 21 --------
 .../core/service/impl/ResourceServiceImpl.java     | 32 ++++++++++++
 .../core/service/ApplicationServiceTest.java       | 29 ----------
 .../console/core/service/ResourceServiceTest.java  | 61 ++++++++++++++++++++++
 .../src/api/flink/resource/index.ts                | 13 +++++
 .../src/views/flink/resource/View.vue              | 39 +++++++-------
 .../views/flink/resource/components/Resource.vue   |  6 ++-
 .../flink/resource/components/ResourceDrawer.vue   | 49 ++++++++---------
 .../src/views/flink/resource/useResourceRender.tsx |  7 ++-
 13 files changed, 172 insertions(+), 109 deletions(-)

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 12486ef8a..374542b4e 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
@@ -32,10 +32,6 @@ import 
org.apache.streampark.console.core.entity.ApplicationBackUp;
 import org.apache.streampark.console.core.entity.ApplicationLog;
 import org.apache.streampark.console.core.enums.AppExistsState;
 import org.apache.streampark.console.core.enums.PermissionType;
-import org.apache.streampark.console.core.service.AppBuildPipeService;
-import org.apache.streampark.console.core.service.ApplicationBackUpService;
-import org.apache.streampark.console.core.service.ApplicationLogService;
-import org.apache.streampark.console.core.service.ApplicationService;
 import org.apache.streampark.flink.packer.pipeline.PipelineStatus;
 
 import org.apache.shiro.authz.annotation.RequiresPermissions;
@@ -80,6 +76,8 @@ public class ApplicationController {
 
   @Autowired private AppBuildPipeService appBuildPipeService;
 
+  @Autowired private ResourceService resourceService;
+
   @Operation(summary = "Get application")
   @ApiAccess
   @PostMapping("get")
@@ -397,7 +395,7 @@ public class ApplicationController {
   @PostMapping("upload")
   @RequiresPermissions("app:create")
   public RestResponse upload(MultipartFile file) throws Exception {
-    String uploadPath = applicationService.upload(file);
+    String uploadPath = resourceService.upload(file);
     return RestResponse.success(uploadPath);
   }
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ResourceController.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ResourceController.java
index 27c95b555..932da573d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ResourceController.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/controller/ResourceController.java
@@ -36,6 +36,7 @@ import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 
@@ -87,4 +88,12 @@ public class ResourceController {
     List<Resource> resourceList = resourceService.findByTeamId(teamId);
     return RestResponse.success(resourceList);
   }
+
+  @Operation(summary = "Upload the resource jar")
+  @PostMapping("upload")
+  @RequiresPermissions("resource:add")
+  public RestResponse upload(MultipartFile file) throws Exception {
+    String uploadPath = resourceService.upload(file);
+    return RestResponse.success(uploadPath);
+  }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ApplicationService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ApplicationService.java
index cba588c65..8e51c155f 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ApplicationService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ApplicationService.java
@@ -25,7 +25,6 @@ import 
org.apache.streampark.console.core.enums.AppExistsState;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -75,8 +74,6 @@ public interface ApplicationService extends 
IService<Application> {
 
   Map<String, Serializable> dashboard(Long teamId);
 
-  String upload(MultipartFile file) throws Exception;
-
   /** set the latest to Effective, it will really become the current effective 
*/
   void toEffective(Application application);
 
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ResourceService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ResourceService.java
index d59df4a59..071de717d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ResourceService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ResourceService.java
@@ -22,7 +22,9 @@ import org.apache.streampark.console.core.entity.Resource;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.List;
 
 public interface ResourceService extends IService<Resource> {
@@ -87,4 +89,6 @@ public interface ResourceService extends IService<Resource> {
    * @param targetUserId target user id
    */
   void changeOwnership(Long userId, Long targetUserId);
+
+  String upload(MultipartFile file) throws IOException;
 }
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 886756770..96253c6d7 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
@@ -95,7 +95,6 @@ import 
org.apache.streampark.flink.packer.pipeline.BuildResult;
 import org.apache.streampark.flink.packer.pipeline.ShadedBuildResponse;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.flink.api.common.JobID;
 import org.apache.flink.configuration.CoreOptions;
@@ -119,7 +118,6 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Nonnull;
 import javax.annotation.PostConstruct;
@@ -137,7 +135,6 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.CompletableFuture;
@@ -304,24 +301,6 @@ public class ApplicationServiceImpl extends 
ServiceImpl<ApplicationMapper, Appli
     return map;
   }
 
-  @Override
-  public String upload(MultipartFile file) throws Exception {
-    File temp = WebUtils.getAppTempDir();
-    String fileName = 
FilenameUtils.getName(Objects.requireNonNull(file.getOriginalFilename()));
-    File saveFile = new File(temp, fileName);
-    // delete when exists
-    if (saveFile.exists()) {
-      saveFile.delete();
-    }
-    // save file to temp dir
-    try {
-      file.transferTo(saveFile);
-    } catch (Exception e) {
-      throw new ApiDetailException(e);
-    }
-    return saveFile.getAbsolutePath();
-  }
-
   @Override
   public void toEffective(Application application) {
     // set latest to Effective
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
index f702ad004..cbbd8d552 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ResourceServiceImpl.java
@@ -21,6 +21,7 @@ import org.apache.streampark.common.conf.Workspace;
 import org.apache.streampark.common.fs.FsOperator;
 import org.apache.streampark.console.base.domain.RestRequest;
 import org.apache.streampark.console.base.exception.ApiAlertException;
+import org.apache.streampark.console.base.exception.ApiDetailException;
 import org.apache.streampark.console.base.mybatis.pager.MybatisPager;
 import org.apache.streampark.console.base.util.WebUtils;
 import org.apache.streampark.console.core.bean.Dependency;
@@ -37,6 +38,7 @@ import 
org.apache.streampark.console.core.service.ResourceService;
 
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.shaded.org.apache.commons.codec.digest.DigestUtils;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -48,8 +50,10 @@ import 
org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -199,6 +203,34 @@ public class ResourceServiceImpl extends 
ServiceImpl<ResourceMapper, Resource>
     this.baseMapper.update(null, updateWrapper);
   }
 
+  /**
+   * @param file
+   * @return
+   */
+  @Override
+  public String upload(MultipartFile file) throws IOException {
+    File temp = WebUtils.getAppTempDir();
+
+    String name = file.getOriginalFilename();
+    String suffix = name.substring(name.lastIndexOf("."));
+
+    String sha256Hex = DigestUtils.sha256Hex(file.getInputStream());
+    String fileName = sha256Hex.concat(suffix);
+
+    File saveFile = new File(temp, fileName);
+
+    if (!saveFile.exists()) {
+      // save file to temp dir
+      try {
+        file.transferTo(saveFile);
+      } catch (Exception e) {
+        throw new ApiDetailException(e);
+      }
+    }
+
+    return saveFile.getAbsolutePath();
+  }
+
   private void transferTeamResource(Long teamId, String resourceName) {
     String teamUploads = String.format("%s/%d", 
Workspace.local().APP_UPLOADS(), teamId);
     if (!FsOperator.lfs().exists(teamUploads)) {
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
index aae093e7f..ea5c34560 100644
--- 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ApplicationServiceTest.java
@@ -23,22 +23,13 @@ import 
org.apache.streampark.console.core.entity.Application;
 import org.apache.streampark.console.core.entity.YarnQueue;
 import org.apache.streampark.console.core.service.impl.ApplicationServiceImpl;
 
-import org.apache.hc.core5.http.ContentType;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import org.h2.store.fs.FileUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.io.TempDir;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.mock.web.MockMultipartFile;
-import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.file.Path;
 import java.util.Date;
 
 import static org.assertj.core.api.Assertions.assertThat;
@@ -105,26 +96,6 @@ class ApplicationServiceTest extends SpringTestBase {
     applicationService.start(application, false);
   }
 
-  @Test
-  void testUpload(@TempDir Path tempDir) throws Exception {
-    // specify the file path
-    File fileToStoreUploadFile =
-        new File(tempDir.toFile().getAbsolutePath() + 
"/fileToStoreUploadFile");
-    FileUtils.createFile(fileToStoreUploadFile.getAbsolutePath());
-
-    File fileToUpload = new File(tempDir.toFile().getAbsolutePath() + 
"/fileToUpload.jar");
-    FileUtils.createFile(fileToUpload.getAbsolutePath());
-    assertThat(fileToUpload).exists();
-    MultipartFile mulFile =
-        new MockMultipartFile(
-            "test", // fileName (eg: streampark.jar)
-            fileToUpload.getAbsolutePath(), // originalFilename (eg: path + 
fileName =
-            // /tmp/file/streampark.jar)
-            ContentType.APPLICATION_OCTET_STREAM.toString(),
-            new FileInputStream(fileToStoreUploadFile));
-    applicationService.upload(mulFile);
-  }
-
   @Test
   void testCheckQueueValidationIfNeeded() {
     ApplicationServiceImpl applicationServiceImpl = (ApplicationServiceImpl) 
applicationService;
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ResourceServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ResourceServiceTest.java
new file mode 100644
index 000000000..e6c00ec71
--- /dev/null
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ResourceServiceTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.core.service;
+
+import org.apache.streampark.console.SpringTestBase;
+
+import org.apache.hc.core5.http.ContentType;
+
+import org.h2.store.fs.FileUtils;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.file.Path;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/** org.apache.streampark.console.core.service.ResourceServiceTest. */
+class ResourceServiceTest extends SpringTestBase {
+
+  @Autowired private ResourceService resourceService;
+
+  @Test
+  void testUpload(@TempDir Path tempDir) throws Exception {
+    // specify the file path
+    File fileToStoreUploadFile =
+        new File(tempDir.toFile().getAbsolutePath() + 
"/fileToStoreUploadFile");
+    FileUtils.createFile(fileToStoreUploadFile.getAbsolutePath());
+
+    File fileToUpload = new File(tempDir.toFile().getAbsolutePath() + 
"/fileToUpload.jar");
+    FileUtils.createFile(fileToUpload.getAbsolutePath());
+    assertThat(fileToUpload).exists();
+    MultipartFile mulFile =
+        new MockMultipartFile(
+            "test", // fileName (eg: streampark.jar)
+            fileToUpload.getAbsolutePath(), // originalFilename (eg: path + 
fileName =
+            // /tmp/file/streampark.jar)
+            ContentType.APPLICATION_OCTET_STREAM.toString(),
+            new FileInputStream(fileToStoreUploadFile));
+    resourceService.upload(mulFile);
+  }
+}
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 1b279c7a6..9e6f1601a 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
@@ -23,11 +23,13 @@ import {
   ResourceListRecord,
   ResourceParam,
 } from './model/resourceModel';
+import { ContentTypeEnum } from '/@/enums/httpEnum';
 
 enum RESOURCE_API {
   PAGE = '/resource/page',
   POST = '/resource/add',
   UPDATE = '/resource/update',
+  UPLOAD = '/resource/upload',
   DELETE = '/resource/delete',
   LIST = '/resource/list',
 }
@@ -76,3 +78,14 @@ export function fetchResourceDelete(data: 
ResourceDeleteParam): Promise<AxiosRes
 export function fetchTeamResource(data: Recordable): 
Promise<ResourceListRecord[]> {
   return defHttp.post({ url: RESOURCE_API.LIST, data });
 }
+
+export function fetchUpload(params) {
+  return defHttp.post<string>({
+    url: RESOURCE_API.UPLOAD,
+    params,
+    headers: {
+      'Content-Type': ContentTypeEnum.FORM_DATA,
+    },
+    timeout: 1000 * 60 * 10, // Uploading files timed out for 10 minutes
+  });
+}
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 49a1e7674..bdb7ae75a 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
@@ -28,45 +28,45 @@
         <template v-if="column.dataIndex === 'resourceType'">
           <Tag color="processing" v-if="record.resourceType === 
ResourceTypeEnum.FLINK_APP">
             <template #icon>
-              <img :src=flinkAppSvg class="svg-icon" alt="Flink App"/>
+              <img :src="flinkAppSvg" class="svg-icon" alt="Flink App" />
             </template>
             Flink App
           </Tag>
 
           <Tag color="processing" v-if="record.resourceType === 
ResourceTypeEnum.CONNECTOR">
             <template #icon>
-              <img :src=connectorSvg class="svg-icon" alt="Connector"/>
+              <img :src="connectorSvg" class="svg-icon" alt="Connector" />
             </template>
             Connector
           </Tag>
 
           <Tag color="processing" v-if="record.resourceType === 
ResourceTypeEnum.UDXF">
             <template #icon>
-              <img :src=udxfSvg class="svg-icon" alt="UDXF"/>
+              <img :src="udxfSvg" class="svg-icon" alt="UDXF" />
             </template>
             UDXF
           </Tag>
 
           <Tag color="processing" v-if="record.resourceType === 
ResourceTypeEnum.NORMAL_JAR">
             <template #icon>
-              <img :src=normalJarSvg class="svg-icon" alt="Normal jar"/>
+              <img :src="normalJarSvg" class="svg-icon" alt="Normal jar" />
             </template>
             Normal Jar
           </Tag>
 
           <Tag color="processing" v-if="record.resourceType === 
ResourceTypeEnum.GROUP">
             <template #icon>
-              <img :src=groupSvg class="svg-icon" alt="GROUP"/>
+              <img :src="groupSvg" class="svg-icon" alt="GROUP" />
             </template>
             GROUP
           </Tag>
         </template>
         <template v-if="column.dataIndex === 'engineType'">
           <span v-if="record.engineType === EngineTypeEnum.FLINK">
-            <SvgIcon name="flink"/> Apache Flink
+            <SvgIcon name="flink" /> Apache Flink
           </span>
           <span v-if="record.engineType === EngineTypeEnum.SPARK">
-            <SvgIcon name="spark"/> Apache Spark
+            <SvgIcon name="spark" /> Apache Spark
           </span>
         </template>
         <template v-if="column.dataIndex === 'action'">
@@ -118,11 +118,9 @@
   import { fetchResourceDelete, fetchResourceList, fetchTeamResource } from 
'/@/api/flink/resource';
   import { EngineTypeEnum, ResourceTypeEnum } from 
'/@/views/flink/resource/resource.data';
   import { Tag } from 'ant-design-vue';
-  import SvgIcon from "/@/components/Icon/src/SvgIcon.vue";
-
+  import SvgIcon from '/@/components/Icon/src/SvgIcon.vue';
 
   import flinkAppSvg from '/@/assets/icons/flink2.svg';
-  import sparkSvg from '/@/assets/icons/spark.svg';
   import connectorSvg from '/@/assets/icons/connector.svg';
   import udxfSvg from '/@/assets/icons/fx.svg';
   import normalJarSvg from '/@/assets/icons/jar.svg';
@@ -188,7 +186,7 @@
     });
     if (data.status === 'success') {
       createMessage.success(t('flink.resource.deleteResource') + 
t('flink.resource.success'));
-      reload();
+      await reload();
       updateTeamResource();
     } else {
       createMessage.error(t('flink.resource.deleteResource') + 
t('flink.resource.fail'));
@@ -216,16 +214,15 @@
 </script>
 
 <style lang="less" scoped>
-.svg-icon {
-  display: inline-block;
-  width: 14px;
-  height: 14px;
-
-  .svg-connector {
-    svg path {
-      fill: #fff0f6 !important;
+  .svg-icon {
+    display: inline-block;
+    width: 14px;
+    height: 14px;
+
+    .svg-connector {
+      svg path {
+        fill: #fff0f6 !important;
+      }
     }
   }
-}
-
 </style>
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 7c6db92e2..10b4538d9 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,8 +28,10 @@
   import { Icon } from '/@/components/Icon';
   import { useMonaco } from '/@/hooks/web/useMonaco';
   import { Tabs, Alert, Tag, Space } from 'ant-design-vue';
-  import { fetchUpload } from '/@/api/flink/app/app';
+  import { fetchUpload } from '/@/api/flink/resource';
+
   import UploadJobJar from '/@/views/flink/app/components/UploadJobJar.vue';
+  import { ResourceTypeEnum } from '/@/views/flink/resource/resource.data';
 
   interface DependencyType {
     artifactId: string;
@@ -211,7 +213,7 @@
 </script>
 
 <template>
-  <template v-if="props.formModel.resourceType == 'FLINK_APP'">
+  <template v-if="props.formModel.resourceType === ResourceTypeEnum.FLINK_APP">
     <UploadJobJar :custom-request="handleCustomDepsRequest" 
v-model:loading="loading" />
   </template>
   <template v-else>
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 675bbc9fe..82ea4b1cc 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
@@ -41,13 +41,13 @@
 
 <script lang="ts" setup>
   import { ref, computed, unref } from 'vue';
-  import { BasicForm, FormSchema, useForm } from '/@/components/Form';
+  import { BasicForm, 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 { EngineTypeEnum, ResourceTypeEnum } from 
'/@/views/flink/resource/resource.data';
   import {
     renderEngineType,
     renderResourceType,
@@ -71,15 +71,8 @@
   const resourceId = ref<Nullable<number>>(null);
   const resourceRef = ref();
 
-  const getResourceFormSchema = computed((): FormSchema[] => {
+  const getResourceFormSchema = computed(() => {
     return [
-      {
-        field: 'resourceName',
-        label: t('flink.resource.resourceName'),
-        component: 'Input',
-        componentProps: { placeholder: 
t('flink.resource.resourceNamePlaceholder') },
-        rules: [{ required: true, message: 
t('flink.resource.form.resourceNameIsRequiredMessage') }],
-      },
       {
         field: 'resourceType',
         label: t('flink.resource.resourceType'),
@@ -89,22 +82,30 @@
           { required: true, message: 
t('flink.resource.form.resourceTypeIsRequiredMessage') },
         ],
       },
+      {
+        field: 'resourceName',
+        label: t('flink.resource.resourceName'),
+        component: 'Input',
+        ifShow: ({ values }) => values?.resourceType !== 
ResourceTypeEnum.CONNECTOR,
+        componentProps: { placeholder: 
t('flink.resource.resourceNamePlaceholder') },
+        rules: [
+          { required: true, message: 
t('flink.resource.form.resourceNameIsRequiredMessage') },
+        ],
+      },
       {
         field: 'engineType',
         label: t('flink.resource.engineType'),
         component: 'Select',
         render: ({ model }) => renderEngineType({ model }),
         defaultValue: EngineTypeEnum.FLINK,
-        rules: [
-          { required: true, message: 
t('flink.resource.form.engineTypeIsRequiredMessage') }
-        ],
+        rules: [{ required: true, message: 
t('flink.resource.form.engineTypeIsRequiredMessage') }],
       },
       {
         field: 'resourceName',
         label: t('flink.resource.groupName'),
         component: 'Input',
         componentProps: { placeholder: 
t('flink.resource.groupNamePlaceholder') },
-        ifShow: ({ values }) => values?.resourceType == 'GROUP',
+        ifShow: ({ values }) => values?.resourceType === 
ResourceTypeEnum.GROUP,
         rules: [{ required: true, message: 
t('flink.resource.groupNameIsRequiredMessage') }],
       },
       {
@@ -113,21 +114,21 @@
         component: 'Select',
         render: ({ model }) =>
           renderStreamParkResourceGroup({ model, resources: 
unref(props.teamResource) }),
-        ifShow: ({ values }) => values?.resourceType == 'GROUP',
+        ifShow: ({ values }) => values?.resourceType === 
ResourceTypeEnum.GROUP,
       },
       {
         field: 'dependency',
         label: t('flink.resource.addResource'),
         component: 'Input',
         slot: 'resource',
-        ifShow: ({ values }) => values?.resourceType !== 'GROUP',
+        ifShow: ({ values }) => values?.resourceType !== 
ResourceTypeEnum.GROUP,
       },
       {
         field: 'mainClass',
         label: t('flink.app.mainClass'),
         component: 'Input',
         componentProps: { placeholder: 
t('flink.app.addAppTips.mainClassPlaceholder') },
-        ifShow: ({ values }) => values?.resourceType == 'FLINK_APP',
+        ifShow: ({ values }) => values?.resourceType === 
ResourceTypeEnum.FLINK_APP,
         rules: [{ required: true, message: 
t('flink.app.addAppTips.mainClassIsRequiredMessage') }],
       },
       {
@@ -152,17 +153,17 @@
   const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(
     async (data: Recordable) => {
       unref(resourceRef)?.setDefaultValue({});
-      resetFields();
+      await resetFields();
       setDrawerProps({ confirmLoading: false });
       isUpdate.value = !!data?.isUpdate;
       if (unref(isUpdate)) {
         resourceId.value = data.record.id;
-        setFieldsValue(data.record);
+        await setFieldsValue(data.record);
 
-        if (data.record?.resourceType == 'GROUP') {
-          setFieldsValue({ resourceGroup: JSON.parse(data.record.resource || 
'[]') });
+        if (data.record?.resourceType === ResourceTypeEnum.GROUP) {
+          await setFieldsValue({ resourceGroup: 
JSON.parse(data.record.resource || '[]') });
         } else {
-          setFieldsValue({ dependency: data.record.resource });
+          await setFieldsValue({ dependency: data.record.resource });
           unref(resourceRef)?.setDefaultValue(JSON.parse(data.record.resource 
|| '{}'));
         }
       }
@@ -179,7 +180,7 @@
       const values = await validate();
       let resourceJson = '';
 
-      if (values.resourceType == 'GROUP') {
+      if (values.resourceType == ResourceTypeEnum.GROUP) {
         resourceJson = JSON.stringify(values.resourceGroup);
       } else {
         const resource: { pom?: string; jar?: string } = {};
@@ -221,7 +222,7 @@
         ? fetchUpdateResource({ id: resourceId.value, resource: resourceJson, 
...values })
         : fetchAddResource({ resource: resourceJson, ...values }));
       unref(resourceRef)?.setDefaultValue({});
-      resetFields();
+      await resetFields();
       closeDrawer();
       emit('success', isUpdate.value);
     } finally {
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 67a98d65b..1a35f1b22 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
@@ -16,7 +16,7 @@
  */
 import { Select, Tag } from 'ant-design-vue';
 import { useI18n } from '/@/hooks/web/useI18n';
-import {EngineTypeEnum, ResourceTypeEnum} from 
'/@/views/flink/resource/resource.data';
+import { EngineTypeEnum, ResourceTypeEnum } from 
'/@/views/flink/resource/resource.data';
 
 import flinkAppSvg from '/@/assets/icons/flink2.svg';
 import sparkSvg from '/@/assets/icons/spark.svg';
@@ -70,9 +70,9 @@ export const renderEngineType = ({ model }) => {
       { label: 'Apache Flink', value: EngineTypeEnum.FLINK, disabled: false, 
src: flinkAppSvg },
       { label: 'Apache Spark', value: EngineTypeEnum.SPARK, disabled: true, 
src: sparkSvg },
     ];
-    return options.map(({ label, value,disabled, src }) => {
+    return options.map(({ label, value, disabled, src }) => {
       return (
-        <Select.Option key={value} label={label} disabled={disabled} >
+        <Select.Option key={value} label={label} disabled={disabled}>
           <div>
             <img src={src} style="display: inline-block; width: 20px; height: 
20px"></img>
             <span style="vertical-align: middle; margin-left: 
5px;">{label}</span>
@@ -96,7 +96,6 @@ export const renderEngineType = ({ model }) => {
   );
 };
 
-
 export const renderStreamParkResourceGroup = ({ model, resources }) => {
   const renderOptions = () => {
     console.log('resources', resources);

Reply via email to