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

SbloodyS pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 043060b058 [Improvement-18666] Support field sorting on workflow 
definition list (#18658)
043060b058 is described below

commit 043060b0587842ab2d7815048a6bc8534dad7ab3
Author: chovygo <[email protected]>
AuthorDate: Thu Oct 8 09:31:55 2026 +0800

    [Improvement-18666] Support field sorting on workflow definition list 
(#18658)
---
 .../controller/WorkflowDefinitionController.java   | 10 ++-
 .../api/service/WorkflowDefinitionService.java     |  4 +-
 .../impl/WorkflowDefinitionServiceImpl.java        |  6 +-
 .../WorkflowDefinitionControllerTest.java          |  5 +-
 .../api/service/WorkflowDefinitionServiceTest.java | 11 +++-
 .../dao/mapper/WorkflowDefinitionMapper.java       |  4 +-
 .../dao/repository/WorkflowDefinitionDao.java      |  4 +-
 .../repository/impl/WorkflowDefinitionDaoImpl.java |  5 +-
 .../dao/mapper/WorkflowDefinitionMapper.xml        | 24 ++++++-
 .../dao/mapper/WorkflowDefinitionMapperTest.java   | 73 ++++++++++++++++++++--
 .../service/modules/workflow-definition/types.ts   |  2 +
 .../views/projects/workflow/definition/index.tsx   |  9 +++
 .../projects/workflow/definition/use-table.ts      | 21 ++++++-
 13 files changed, 154 insertions(+), 24 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionController.java
index 38685d6bbd..a6d880b392 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionController.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionController.java
@@ -479,7 +479,9 @@ public class WorkflowDefinitionController extends 
BaseController {
             @Parameter(name = "userId", description = "USER_ID", required = 
false, schema = @Schema(implementation = int.class, example = "100")),
             @Parameter(name = "pageNo", description = "PAGE_NO", required = 
true, schema = @Schema(implementation = int.class, example = "1")),
             @Parameter(name = "pageSize", description = "PAGE_SIZE", required 
= true, schema = @Schema(implementation = int.class, example = "10")),
-            @Parameter(name = "otherParamsJson", description = 
"OTHER_PARAMS_JSON", required = false, schema = @Schema(implementation = 
String.class))
+            @Parameter(name = "otherParamsJson", description = 
"OTHER_PARAMS_JSON", required = false, schema = @Schema(implementation = 
String.class)),
+            @Parameter(name = "sortField", description = "SORT_FIELD", 
required = false, schema = @Schema(implementation = String.class, example = 
"updateTime")),
+            @Parameter(name = "sortOrder", description = "SORT_ORDER", 
required = false, schema = @Schema(implementation = String.class, example = 
"desc"))
     })
     @GetMapping()
     @ResponseStatus(HttpStatus.OK)
@@ -491,13 +493,15 @@ public class WorkflowDefinitionController extends 
BaseController {
                                                                                
   @RequestParam(value = "otherParamsJson", required = false) String 
otherParamsJson,
                                                                                
   @RequestParam(value = "userId", required = false, defaultValue = "0") 
Integer userId,
                                                                                
   @RequestParam("pageNo") Integer pageNo,
-                                                                               
   @RequestParam("pageSize") Integer pageSize) {
+                                                                               
   @RequestParam("pageSize") Integer pageSize,
+                                                                               
   @RequestParam(value = "sortField", required = false) String sortField,
+                                                                               
   @RequestParam(value = "sortOrder", required = false) String sortOrder) {
 
         checkPageParams(pageNo, pageSize);
         searchVal = ParameterUtils.handleEscapes(searchVal);
 
         PageInfo<WorkflowDefinition> pageInfo = 
workflowDefinitionService.queryWorkflowDefinitionListPaging(
-                loginUser, projectCode, searchVal, otherParamsJson, userId, 
pageNo, pageSize);
+                loginUser, projectCode, searchVal, otherParamsJson, userId, 
pageNo, pageSize, sortField, sortOrder);
         if (pageInfo != null && pageInfo.getTotalList() != null) {
             pageInfo.setTotalList(pageInfo.getTotalList().stream()
                     .map(SensitivePropertyUtils::mask)
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionService.java
index b71075ec41..c44bd69b84 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionService.java
@@ -74,7 +74,9 @@ public interface WorkflowDefinitionService {
                                                                    String 
otherParamsJson,
                                                                    Integer 
userId,
                                                                    Integer 
pageNo,
-                                                                   Integer 
pageSize);
+                                                                   Integer 
pageSize,
+                                                                   String 
sortField,
+                                                                   String 
sortOrder);
 
     /**
      * query detail of workflow definition
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
index 730152ff13..771e47ccdb 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/WorkflowDefinitionServiceImpl.java
@@ -506,14 +506,16 @@ public class WorkflowDefinitionServiceImpl extends 
BaseServiceImpl implements Wo
                                                                           
String otherParamsJson,
                                                                           
Integer userId,
                                                                           
Integer pageNo,
-                                                                          
Integer pageSize) {
+                                                                          
Integer pageSize,
+                                                                          
String sortField,
+                                                                          
String sortOrder) {
 
         // check user access for project
         projectService.checkProjectAndAuthThrowException(loginUser, 
projectCode, WORKFLOW_DEFINITION);
 
         PageListingResult<WorkflowDefinition> 
workflowDefinitionPageListingResult =
                 workflowDefinitionDao.listingWorkflowDefinition(
-                        pageNo, pageSize, searchVal, userId, projectCode);
+                        pageNo, pageSize, searchVal, userId, projectCode, 
sortField, sortOrder);
         List<WorkflowDefinition> workflowDefinitions = 
workflowDefinitionPageListingResult.getRecords();
 
         List<Long> workflowDefinitionCodes =
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionControllerTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionControllerTest.java
index 470d1cf571..c8db31efa1 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionControllerTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkflowDefinitionControllerTest.java
@@ -310,10 +310,11 @@ public class WorkflowDefinitionControllerTest {
 
         Mockito.when(
                 
processDefinitionService.queryWorkflowDefinitionListPaging(user, projectCode, 
searchVal, "", userId,
-                        pageNo, pageSize))
+                        pageNo, pageSize, null, null))
                 .thenReturn(pageInfo);
         Result<PageInfo<WorkflowDefinition>> response = 
workflowDefinitionController
-                .queryWorkflowDefinitionListPaging(user, projectCode, 
searchVal, "", userId, pageNo, pageSize);
+                .queryWorkflowDefinitionListPaging(user, projectCode, 
searchVal, "", userId, pageNo, pageSize,
+                        null, null);
 
         Assertions.assertTrue(response != null && response.isSuccess());
         assertMaskedAndOriginalUnchanged(workflowDefinition.getGlobalParams(),
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionServiceTest.java
index c5af336eff..0dcc07f315 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionServiceTest.java
+++ 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/WorkflowDefinitionServiceTest.java
@@ -336,7 +336,8 @@ public class WorkflowDefinitionServiceTest extends 
BaseServiceTestTool {
         try {
             doThrow(new 
ServiceException(Status.PROJECT_NOT_EXIST)).when(projectService)
                     .checkProjectAndAuthThrowException(user, projectCode, 
WORKFLOW_DEFINITION);
-            workflowDefinitionService.queryWorkflowDefinitionListPaging(user, 
projectCode, "", "", 1, 5, 0);
+            workflowDefinitionService.queryWorkflowDefinitionListPaging(user, 
projectCode, "", "", 1, 5, 0, null,
+                    null);
         } catch (ServiceException serviceException) {
             Assertions.assertEquals(Status.PROJECT_NOT_EXIST.getCode(), 
serviceException.getCode());
         }
@@ -363,7 +364,9 @@ public class WorkflowDefinitionServiceTest extends 
BaseServiceTestTool {
                 eq(10),
                 eq(""),
                 eq(1),
-                eq(projectCode))).thenReturn(pageListingResult);
+                eq(projectCode),
+                any(),
+                any())).thenReturn(pageListingResult);
         String user1 = "user1";
         String user2 = "user2";
         
when(userDao.queryUserWithWorkflowDefinitionCode(processDefinitionCodes))
@@ -391,7 +394,9 @@ public class WorkflowDefinitionServiceTest extends 
BaseServiceTestTool {
                 "",
                 1,
                 0,
-                10);
+                10,
+                null,
+                null);
         Assertions.assertNotNull(pageInfo);
         WorkflowDefinition pd1 = pageInfo.getTotalList().stream()
                 .filter(pd -> pd.getCode() == 
processDefinitionCode1).findFirst().orElse(null);
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.java
index 6fa7e6e50f..0eda15ff18 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.java
@@ -101,7 +101,9 @@ public interface WorkflowDefinitionMapper extends 
BaseMapper<WorkflowDefinition>
     IPage<WorkflowDefinition> queryDefineListPaging(IPage<WorkflowDefinition> 
page,
                                                     @Param("searchVal") String 
searchVal,
                                                     @Param("userId") int 
userId,
-                                                    @Param("projectCode") long 
projectCode);
+                                                    @Param("projectCode") long 
projectCode,
+                                                    @Param("sortField") String 
sortField,
+                                                    @Param("sortOrder") String 
sortOrder);
 
     /**
      * Filter workflow definitions
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/WorkflowDefinitionDao.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/WorkflowDefinitionDao.java
index d202471a24..eacac975ac 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/WorkflowDefinitionDao.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/WorkflowDefinitionDao.java
@@ -42,7 +42,9 @@ public interface WorkflowDefinitionDao extends 
IDao<WorkflowDefinition> {
                                                                     int 
pageSize,
                                                                     @Nullable 
String searchVal,
                                                                     int userId,
-                                                                    long 
projectCode);
+                                                                    long 
projectCode,
+                                                                    @Nullable 
String sortField,
+                                                                    @Nullable 
String sortOrder);
 
     Optional<WorkflowDefinition> queryByCode(long code);
 
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowDefinitionDaoImpl.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowDefinitionDaoImpl.java
index b21a49ed59..558351da3a 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowDefinitionDaoImpl.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/repository/impl/WorkflowDefinitionDaoImpl.java
@@ -52,10 +52,11 @@ public class WorkflowDefinitionDaoImpl extends 
BaseDao<WorkflowDefinition, Workf
     @Override
     public PageListingResult<WorkflowDefinition> listingWorkflowDefinition(int 
pageNumber, int pageSize,
                                                                            
String searchVal,
-                                                                           int 
userId, long projectCode) {
+                                                                           int 
userId, long projectCode,
+                                                                           
String sortField, String sortOrder) {
         Page<WorkflowDefinition> page = new Page<>(pageNumber, pageSize);
         IPage<WorkflowDefinition> processDefinitions =
-                mybatisMapper.queryDefineListPaging(page, searchVal, userId, 
projectCode);
+                mybatisMapper.queryDefineListPaging(page, searchVal, userId, 
projectCode, sortField, sortOrder);
 
         return PageListingResult.<WorkflowDefinition>builder()
                 .totalCount(processDefinitions.getTotal())
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.xml
index ceec6371e6..0be72e9601 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapper.xml
@@ -79,7 +79,29 @@
                 name like concat('%', #{searchVal}, '%') OR description like 
concat('%', #{searchVal}, '%')
                 )
         </if>
-        order by update_time desc, id asc
+        order by
+        <choose>
+            <when test='sortField != null and "name".equals(sortField)'>
+                <choose>
+                    <when test='sortOrder != null and 
"asc".equals(sortOrder)'>name asc</when>
+                    <otherwise>name desc</otherwise>
+                </choose>
+            </when>
+            <when test='sortField != null and "createTime".equals(sortField)'>
+                <choose>
+                    <when test='sortOrder != null and 
"asc".equals(sortOrder)'>create_time asc</when>
+                    <otherwise>create_time desc</otherwise>
+                </choose>
+            </when>
+            <when test='sortField != null and "updateTime".equals(sortField)'>
+                <choose>
+                    <when test='sortOrder != null and 
"asc".equals(sortOrder)'>update_time asc</when>
+                    <otherwise>update_time desc</otherwise>
+                </choose>
+            </when>
+            <otherwise>update_time desc</otherwise>
+        </choose>
+        , id asc
     </select>
     <select id="filterWorkflowDefinition"
             
parameterType="org.apache.dolphinscheduler.dao.entity.WorkflowDefinition"
diff --git 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapperTest.java
 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapperTest.java
index ee34e15c6e..0f6c13c378 100644
--- 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapperTest.java
+++ 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/WorkflowDefinitionMapperTest.java
@@ -26,9 +26,11 @@ import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.entity.WorkflowDefinition;
 import org.apache.dolphinscheduler.dao.model.WorkflowDefinitionCountDto;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -236,15 +238,74 @@ public class WorkflowDefinitionMapperTest extends 
BaseDaoTest {
     }
 
     /**
-     * test page
+     * Insert three definitions whose name, createTime and updateTime each 
yield a
+     * different, verifiable ordering, then assert the returned row order for 
every
+     * supported sortField/sortOrder combination, the default (no-sort) path, 
and the
+     * invalid-field fallback path. Exercises the ORDER BY whitelist in
+     * {@code queryDefineListPaging} against a real H2 mapper.
      */
     @Test
     public void testQueryDefineListPaging() {
-        insertOne("def 1");
-        Page<WorkflowDefinition> page = new Page(1, 3);
-        IPage<WorkflowDefinition> processDefinitionIPage =
-                workflowDefinitionMapper.queryDefineListPaging(page, "def", 
101, 1010L);
-        Assertions.assertNotEquals(0, processDefinitionIPage.getTotal());
+        // Fixed absolute instants so the create/update orderings are distinct 
and
+        // independent of the test machine's timezone. wf-gamma is updated 
last on
+        // purpose so update_time order differs from create_time order.
+        // wf-gamma: create base+0, update base+300s (update newest)
+        // wf-alpha: create base+60s, update base+60s
+        // wf-beta: create base+120s, update base+120s
+        long base = 1_700_000_000_000L;
+        insertWithTimes("wf-gamma", base, base + 300_000L);
+        insertWithTimes("wf-alpha", base + 60_000L, base + 60_000L);
+        insertWithTimes("wf-beta", base + 120_000L, base + 120_000L);
+
+        // default (no sort) -> update_time desc, id asc
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging(null, null)));
+        // name asc / desc
+        Assertions.assertEquals(Arrays.asList("wf-alpha", "wf-beta", 
"wf-gamma"),
+                definitionNames(queryPaging("name", "asc")));
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging("name", "desc")));
+        // createTime asc / desc
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-alpha", 
"wf-beta"),
+                definitionNames(queryPaging("createTime", "asc")));
+        Assertions.assertEquals(Arrays.asList("wf-beta", "wf-alpha", 
"wf-gamma"),
+                definitionNames(queryPaging("createTime", "desc")));
+        // updateTime asc / desc
+        Assertions.assertEquals(Arrays.asList("wf-alpha", "wf-beta", 
"wf-gamma"),
+                definitionNames(queryPaging("updateTime", "asc")));
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging("updateTime", "desc")));
+        // invalid sortField/sortOrder -> fallback to default (update_time 
desc, id asc)
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging("foo", "bar")));
+        // invalid sortField with a valid sortOrder=asc must still yield the
+        // complete default (update_time desc, id asc), not update_time asc
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging("foo", "asc")));
+        // sortField without sortOrder -> default direction desc
+        Assertions.assertEquals(Arrays.asList("wf-gamma", "wf-beta", 
"wf-alpha"),
+                definitionNames(queryPaging("name", null)));
+    }
+
+    private IPage<WorkflowDefinition> queryPaging(String sortField, String 
sortOrder) {
+        return workflowDefinitionMapper.queryDefineListPaging(
+                new Page<>(1, 10), "", 101, 1010L, sortField, sortOrder);
+    }
+
+    private List<String> definitionNames(IPage<WorkflowDefinition> page) {
+        return 
page.getRecords().stream().map(WorkflowDefinition::getName).collect(Collectors.toList());
+    }
+
+    private WorkflowDefinition insertWithTimes(String name, long 
createTimeMillis, long updateTimeMillis) {
+        WorkflowDefinition workflowDefinition = new WorkflowDefinition();
+        workflowDefinition.setCode(atomicLong.getAndIncrement());
+        workflowDefinition.setName(name);
+        workflowDefinition.setProjectCode(1010L);
+        workflowDefinition.setUserId(101);
+        workflowDefinition.setCreateTime(new Date(createTimeMillis));
+        workflowDefinition.setUpdateTime(new Date(updateTimeMillis));
+        workflowDefinitionMapper.insert(workflowDefinition);
+        return workflowDefinition;
     }
 
     /**
diff --git 
a/dolphinscheduler-ui/src/service/modules/workflow-definition/types.ts 
b/dolphinscheduler-ui/src/service/modules/workflow-definition/types.ts
index e67065a3a7..3beee360a0 100644
--- a/dolphinscheduler-ui/src/service/modules/workflow-definition/types.ts
+++ b/dolphinscheduler-ui/src/service/modules/workflow-definition/types.ts
@@ -51,6 +51,8 @@ interface PageReq {
 interface ListReq extends PageReq {
   searchVal?: string
   userId?: number
+  sortField?: string
+  sortOrder?: string
 }
 
 interface WorkflowDefinitionReq {
diff --git 
a/dolphinscheduler-ui/src/views/projects/workflow/definition/index.tsx 
b/dolphinscheduler-ui/src/views/projects/workflow/definition/index.tsx
index 34605f519c..43bc8d12f8 100644
--- a/dolphinscheduler-ui/src/views/projects/workflow/definition/index.tsx
+++ b/dolphinscheduler-ui/src/views/projects/workflow/definition/index.tsx
@@ -70,6 +70,12 @@ export default defineComponent({
       })
     }
 
+    const handleSorterChange = (sorter: any) => {
+      variables.sorter = sorter
+      variables.page = 1
+      requestData()
+    }
+
     const handleUpdateList = () => {
       requestData()
     }
@@ -129,6 +135,7 @@ export default defineComponent({
       handleSearch,
       onClearSearch,
       handleUpdateList,
+      handleSorterChange,
       createDefinition,
       createDefinitionDynamic,
       handleChangePageSize,
@@ -185,6 +192,8 @@ export default defineComponent({
         <Card title={t('project.workflow.workflow_definition')}>
           <NSpace vertical>
             <NDataTable
+              remote
+              onUpdateSorter={this.handleSorterChange}
               loading={loadingRef}
               rowKey={(row) => row.code}
               columns={this.columns}
diff --git 
a/dolphinscheduler-ui/src/views/projects/workflow/definition/use-table.ts 
b/dolphinscheduler-ui/src/views/projects/workflow/definition/use-table.ts
index 17d9ca94d7..5aacf4b194 100644
--- a/dolphinscheduler-ui/src/views/projects/workflow/definition/use-table.ts
+++ b/dolphinscheduler-ui/src/views/projects/workflow/definition/use-table.ts
@@ -41,7 +41,11 @@ import {
 } from '@/common/column-width-config'
 import type { IDefinitionParam } from './types'
 import type { Router } from 'vue-router'
-import type { TableColumns, RowKey } from 
'naive-ui/es/data-table/src/interface'
+import type {
+  TableColumns,
+  RowKey,
+  SortState
+} from 'naive-ui/es/data-table/src/interface'
 import { useDependencies } from 
'../../components/dependencies/use-dependencies'
 
 export function useTable() {
@@ -60,6 +64,7 @@ export function useTable() {
     page: ref(1),
     pageSize: ref(10),
     searchVal: ref(),
+    sorter: ref<SortState | null>(null),
     totalPage: ref(1),
     totalCount: ref(0),
     timingType: ref('create'),
@@ -96,6 +101,7 @@ export function useTable() {
       {
         title: t('project.workflow.workflow_name'),
         key: 'name',
+        sorter: 'default',
         className: 'workflow-name',
         ...COLUMN_WIDTH_CONFIG['name'],
         titleColSpan: 3,
@@ -238,11 +244,13 @@ export function useTable() {
       {
         title: t('project.workflow.create_time'),
         key: 'createTime',
+        sorter: 'default',
         ...COLUMN_WIDTH_CONFIG['time']
       },
       {
         title: t('project.workflow.update_time'),
         key: 'updateTime',
+        sorter: 'default',
         ...COLUMN_WIDTH_CONFIG['time']
       },
       {
@@ -507,8 +515,17 @@ export function useTable() {
     if (variables.loadingRef) return
     variables.loadingRef = true
     // Always release loading lock, even when request fails.
+    const sorter = variables.sorter
+    const sortField =
+      sorter && sorter.order ? String(sorter.columnKey) : undefined
+    const sortOrder =
+      sorter && sorter.order === 'ascend'
+        ? 'asc'
+        : sorter && sorter.order === 'descend'
+        ? 'desc'
+        : undefined
     const queryStatePromise = queryListPaging(
-      { ...params },
+      { ...params, sortField, sortOrder },
       variables.projectCode
     )
       .then((res: any) => {

Reply via email to