Browse Source

[Fix-8836][UI Next][V1.0.0-Alpha] Rectify this issue about creating a file or directory with a wrong path. (#8892)

* fix this issue

* fix this issue

* fix code style

* fix code style
calvin 3 years ago
parent
commit
c7e80e42d7

+ 22 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ResourcesController.java

@@ -748,4 +748,26 @@ public class ResourcesController extends BaseController {
         Map<String, Object> result = resourceService.authorizedUDFFunction(loginUser, userId);
         return returnDataList(result);
     }
+
+    /**
+     * query resource by resource id
+     *
+     * @param loginUser login user
+     * @param id resource id
+     * @return resource
+     */
+    @ApiOperation(value = "queryResourceById", notes = "QUERY_BY_RESOURCE_NAME")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "RESOURCE_ID", required = true, dataType = "Int", example = "10")
+    })
+    @GetMapping(value = "/{id}/query")
+    @ResponseStatus(HttpStatus.OK)
+    @ApiException(RESOURCE_NOT_EXIST)
+    @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+    public Result queryResourceById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+        @PathVariable(value = "id", required = true) Integer id
+    ) {
+
+        return resourceService.queryResourceById(id);
+    }
 }

+ 7 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java

@@ -231,4 +231,11 @@ public interface ResourcesService {
      */
     Map<String, Object> authorizedFile(User loginUser, Integer userId);
 
+    /**
+     * get resource by id
+     * @param resourceId resource id
+     * @return resource
+     */
+    Result<Object> queryResourceById(Integer resourceId);
+
 }

+ 18 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ResourcesServiceImpl.java

@@ -815,6 +815,24 @@ public class ResourcesServiceImpl extends BaseServiceImpl implements ResourcesSe
         return result;
     }
 
+    /**
+     * get resource by id
+     * @param id        resource id
+     * @return resource
+     */
+    @Override
+    public Result<Object> queryResourceById(Integer id) {
+        Result<Object> result = new Result<>();
+        Resource resource = resourcesMapper.selectById(id);
+        if (resource == null) {
+            putMsg(result, Status.RESOURCE_NOT_EXIST);
+            return result;
+        }
+        putMsg(result, Status.SUCCESS);
+        result.setData(resource);
+        return result;
+    }
+
     /**
      * view resource file online
      *

+ 1 - 1
dolphinscheduler-ui-next/src/layouts/content/components/timezone/index.module.scss

@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
- .icon {
+.icon {
   margin: 0 12px;
 }
 

+ 7 - 0
dolphinscheduler-ui-next/src/service/modules/resources/index.ts

@@ -55,6 +55,13 @@ export function queryResourceById(
   })
 }
 
+export function queryCurrentResourceById(id: number): any {
+  return axios({
+    url: `/resources/${id}/query`,
+    method: 'get'
+  })
+}
+
 export function createResource(
   data: CreateReq & FileNameReq & NameReq & ResourceTypeReq
 ): any {

+ 2 - 1
dolphinscheduler-ui-next/src/service/modules/resources/types.ts

@@ -137,5 +137,6 @@ export {
   ResourceIdReq,
   UdfFuncReq,
   ResourceListRes,
-  ResourceViewRes
+  ResourceViewRes,
+  ResourceFile
 }

+ 18 - 1
dolphinscheduler-ui-next/src/views/resource/file/index.tsx

@@ -45,6 +45,9 @@ import ResourceRenameModal from './rename'
 import { IRenameFile } from './types'
 import type { Router } from 'vue-router'
 import styles from './index.module.scss'
+import { useFileStore } from '@/store/file/file'
+import { queryCurrentResourceById } from '@/service/modules/resources'
+import { ResourceFile } from '@/service/modules/resources/types'
 
 export default defineComponent({
   name: 'File',
@@ -142,6 +145,7 @@ export default defineComponent({
         serachRef.value
       )
     }
+    const fileStore = useFileStore()
 
     onMounted(() => {
       resourceListRef.value = getResourceListState(fileId.value)
@@ -150,7 +154,20 @@ export default defineComponent({
     watch(
       () => router.currentRoute.value.params.id,
       // @ts-ignore
-      () => reload()
+      () => {
+        reload()
+        const currFileId = Number(router.currentRoute.value.params.id) || -1
+
+        if (currFileId === -1) {
+          fileStore.setCurrentDir('/')
+        } else {
+          queryCurrentResourceById(currFileId).then((res: ResourceFile) => {
+            if (res.fullName) {
+              fileStore.setCurrentDir(res.fullName)
+            }
+          })
+        }
+      }
     )
 
     return {