Browse Source

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

* fix this issue

* fix this issue
calvin 3 years ago
parent
commit
e4dcf3d2e0

+ 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
 }

+ 22 - 22
dolphinscheduler-ui-next/src/views/projects/workflow/definition/components/use-modal.ts

@@ -37,8 +37,8 @@ import {
 import { parseTime } from '@/utils/common'
 
 export function useModal(
-  state: any,
-  ctx: SetupContext<('update:show' | 'update:row' | 'updateList')[]>
+    state: any,
+    ctx: SetupContext<('update:show' | 'update:row' | 'updateList')[]>
 ) {
   const { t } = useI18n()
   const router: Router = useRouter()
@@ -87,12 +87,12 @@ export function useModal(
       state.startForm.processDefinitionCode = code
       if (state.startForm.startEndTime) {
         const start = format(
-          new Date(state.startForm.startEndTime[0]),
-          'yyyy-MM-dd hh:mm:ss'
+            new Date(state.startForm.startEndTime[0]),
+            'yyyy-MM-dd hh:mm:ss'
         )
         const end = format(
-          new Date(state.startForm.startEndTime[1]),
-          'yyyy-MM-dd hh:mm:ss'
+            new Date(state.startForm.startEndTime[1]),
+            'yyyy-MM-dd hh:mm:ss'
         )
         state.startForm.scheduleTime = `${start},${end}`
       }
@@ -104,8 +104,8 @@ export function useModal(
         }
       }
       state.startForm.startParams = !_.isEmpty(startParams)
-        ? JSON.stringify(startParams)
-        : ''
+          ? JSON.stringify(startParams)
+          : ''
 
       await startProcessInstance(state.startForm, variables.projectCode)
       window.$message.success(t('project.workflow.success'))
@@ -157,12 +157,12 @@ export function useModal(
 
   const getTimingData = () => {
     const start = format(
-      parseTime(state.timingForm.startEndTime[0]),
-      'yyyy-MM-dd hh:mm:ss'
+        parseTime(state.timingForm.startEndTime[0]),
+        'yyyy-MM-dd hh:mm:ss'
     )
     const end = format(
-      parseTime(state.timingForm.startEndTime[1]),
-      'yyyy-MM-dd hh:mm:ss'
+        parseTime(state.timingForm.startEndTime[1]),
+        'yyyy-MM-dd hh:mm:ss'
     )
 
     const data = {
@@ -176,9 +176,9 @@ export function useModal(
       warningType: state.timingForm.warningType,
       processInstancePriority: state.timingForm.processInstancePriority,
       warningGroupId:
-        state.timingForm.warningGroupId === ''
-          ? 0
-          : state.timingForm.warningGroupId,
+          state.timingForm.warningGroupId === ''
+              ? 0
+              : state.timingForm.warningGroupId,
       workerGroup: state.timingForm.workerGroup,
       environmentCode: state.timingForm.environmentCode
     }
@@ -215,9 +215,9 @@ export function useModal(
 
   const getStartParamsList = (code: number) => {
     queryProcessDefinitionByCode(code, variables.projectCode).then(
-      (res: any) => {
-        variables.startParamsList = res.processDefinition.globalParamList
-      }
+        (res: any) => {
+          variables.startParamsList = res.processDefinition.globalParamList
+        }
     )
   }
 
@@ -227,12 +227,12 @@ export function useModal(
         const projectCode = Number(router.currentRoute.value.params.projectCode)
 
         const start = format(
-          new Date(state.timingForm.startEndTime[0]),
-          'yyyy-MM-dd hh:mm:ss'
+            new Date(state.timingForm.startEndTime[0]),
+            'yyyy-MM-dd hh:mm:ss'
         )
         const end = format(
-          new Date(state.timingForm.startEndTime[1]),
-          'yyyy-MM-dd hh:mm:ss'
+            new Date(state.timingForm.startEndTime[1]),
+            'yyyy-MM-dd hh:mm:ss'
         )
 
         const schedule = JSON.stringify({

+ 3 - 3
dolphinscheduler-ui-next/src/views/resource/file/folder/use-folder.ts

@@ -28,9 +28,9 @@ export function useFolder(state: any) {
   const fileStore = useFileStore()
 
   const handleCreateFolder = async (
-    emit: IEmit,
-    hideModal: () => void,
-    resetForm: () => void
+      emit: IEmit,
+      hideModal: () => void,
+      resetForm: () => void
   ) => {
     await state.folderFormRef.validate()
 

+ 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 {