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) => {