From dd3c92172ec14ae5cfe5609fb9e409a71baac9ef Mon Sep 17 00:00:00 2001 From: Chuck1sn Date: Mon, 19 May 2025 11:01:18 +0800 Subject: [PATCH] fix dayjs --- .../mjga/dto/urp/UserRolePermissionDto.java | 1 - .../mvc/JacksonAnnotationMvcTest.java | 34 +++++++++---------- frontend/package-lock.json | 7 ++++ frontend/package.json | 5 ++- frontend/src/utils/dateUtil.ts | 11 ++++++ frontend/src/views/DepartmentView.vue | 2 +- frontend/src/views/PermissionView.vue | 2 +- frontend/src/views/PositionView.vue | 2 +- frontend/src/views/RoleView.vue | 2 +- frontend/src/views/SchedulerView.vue | 22 ++++++------ frontend/src/views/UserView.vue | 9 ++--- 11 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 frontend/src/utils/dateUtil.ts diff --git a/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java b/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java index 11f8aa6..0d648b9 100644 --- a/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java +++ b/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java @@ -23,7 +23,6 @@ public class UserRolePermissionDto { private Boolean enable; @Builder.Default private List roles = new LinkedList<>(); - @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private OffsetDateTime createTime; public Set getPermissions() { diff --git a/backend/src/test/java/com/zl/mjga/integration/mvc/JacksonAnnotationMvcTest.java b/backend/src/test/java/com/zl/mjga/integration/mvc/JacksonAnnotationMvcTest.java index 8532db4..6a70ff3 100644 --- a/backend/src/test/java/com/zl/mjga/integration/mvc/JacksonAnnotationMvcTest.java +++ b/backend/src/test/java/com/zl/mjga/integration/mvc/JacksonAnnotationMvcTest.java @@ -58,21 +58,21 @@ public class JacksonAnnotationMvcTest { .andExpect(jsonPath("$.data[0].password").doesNotExist()); } - @Test - @WithMockUser - void dateFieldWithFormatAnnotation_whenResponseIncludeField_fieldShouldBeExpectDataFormat() - throws Exception { - OffsetDateTime stubCreateDateTime = - OffsetDateTime.of(2023, 12, 2, 1, 1, 1, 0, OffsetDateTime.now().getOffset()); - UserRolePermissionDto stubUserRolePermissionDto = new UserRolePermissionDto(); - stubUserRolePermissionDto.setCreateTime(stubCreateDateTime); - when(identityAccessService.pageQueryUser(any(PageRequestDto.class), any(UserQueryDto.class))) - .thenReturn(new PageResponseDto<>(1, List.of(stubUserRolePermissionDto))); - mockMvc - .perform( - get(String.format("/iam/users?page=1&size=5&username=%s", "7bF3mcNVTj6P6v2")) - .contentType(MediaType.APPLICATION_FORM_URLENCODED)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.data[0].createTime").value("2023-12-02 01:01:01")); - } +// @Test +// @WithMockUser +// void dateFieldWithFormatAnnotation_whenResponseIncludeField_fieldShouldBeExpectDataFormat() +// throws Exception { +// OffsetDateTime stubCreateDateTime = +// OffsetDateTime.of(2023, 12, 2, 1, 1, 1, 0, OffsetDateTime.now().getOffset()); +// UserRolePermissionDto stubUserRolePermissionDto = new UserRolePermissionDto(); +// stubUserRolePermissionDto.setCreateTime(stubCreateDateTime); +// when(identityAccessService.pageQueryUser(any(PageRequestDto.class), any(UserQueryDto.class))) +// .thenReturn(new PageResponseDto<>(1, List.of(stubUserRolePermissionDto))); +// mockMvc +// .perform( +// get(String.format("/iam/users?page=1&size=5&username=%s", "7bF3mcNVTj6P6v2")) +// .contentType(MediaType.APPLICATION_FORM_URLENCODED)) +// .andExpect(status().isOk()) +// .andExpect(jsonPath("$.data[0].createTime").value("2023-12-02 01:01:01")); +// } } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 60806df..95a221b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,7 @@ "@tailwindcss/vite": "^4.0.14", "@vueuse/core": "^13.0.0", "apexcharts": "^3.46.0", + "dayjs": "^1.11.13", "flowbite": "^3.1.2", "openapi-fetch": "^0.13.5", "pinia": "^3.0.1", @@ -3200,6 +3201,12 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "http://mirrors.tencent.com/npm/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", diff --git a/frontend/package.json b/frontend/package.json index a4c27a7..36b74b6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,6 +21,7 @@ "@tailwindcss/vite": "^4.0.14", "@vueuse/core": "^13.0.0", "apexcharts": "^3.46.0", + "dayjs": "^1.11.13", "flowbite": "^3.1.2", "openapi-fetch": "^0.13.5", "pinia": "^3.0.1", @@ -50,6 +51,8 @@ "vue-tsc": "^2.2.8" }, "msw": { - "workerDirectory": ["public"] + "workerDirectory": [ + "public" + ] } } diff --git a/frontend/src/utils/dateUtil.ts b/frontend/src/utils/dateUtil.ts new file mode 100644 index 0000000..7e93251 --- /dev/null +++ b/frontend/src/utils/dateUtil.ts @@ -0,0 +1,11 @@ +import dayjs from "dayjs"; +import localizedFormat from "dayjs/plugin/localizedFormat"; +import timezone from "dayjs/plugin/timezone"; +import "dayjs/locale/zh-cn"; + +dayjs.extend(localizedFormat); +dayjs.locale("zh-cn"); +dayjs.extend(timezone); +dayjs.tz.setDefault("Asia/Shanghai"); + +export default dayjs; diff --git a/frontend/src/views/DepartmentView.vue b/frontend/src/views/DepartmentView.vue index d8768dd..52151f4 100644 --- a/frontend/src/views/DepartmentView.vue +++ b/frontend/src/views/DepartmentView.vue @@ -5,7 +5,7 @@

部门管理

-
+
diff --git a/frontend/src/views/PermissionView.vue b/frontend/src/views/PermissionView.vue index 37e93df..a6bb86d 100644 --- a/frontend/src/views/PermissionView.vue +++ b/frontend/src/views/PermissionView.vue @@ -5,7 +5,7 @@

权限管理

- +
diff --git a/frontend/src/views/PositionView.vue b/frontend/src/views/PositionView.vue index 26e39f5..6ff0d18 100644 --- a/frontend/src/views/PositionView.vue +++ b/frontend/src/views/PositionView.vue @@ -5,7 +5,7 @@

岗位管理

- +
diff --git a/frontend/src/views/RoleView.vue b/frontend/src/views/RoleView.vue index 33848c5..24eeb36 100644 --- a/frontend/src/views/RoleView.vue +++ b/frontend/src/views/RoleView.vue @@ -5,7 +5,7 @@

角色管理

- +
diff --git a/frontend/src/views/SchedulerView.vue b/frontend/src/views/SchedulerView.vue index 7a6392d..dcb0970 100644 --- a/frontend/src/views/SchedulerView.vue +++ b/frontend/src/views/SchedulerView.vue @@ -5,7 +5,7 @@

任务管理

- +
@@ -59,22 +59,21 @@
- {{ + {{ `${job.name}:${job.group}` }} {{ `${job.triggerName}:${job.triggerGroup}` }} - {{ new - Date(job.startTime!).toLocaleString() }} + {{ + dayjs(job.startTime!).format("llll") }} - {{ job.endTime ? new - Date(job.endTime).toLocaleString() : undefined }} - {{ job.nextFireTime ? new - Date(job.nextFireTime).toLocaleString() : undefined}} - {{ job.previousFireTime && + {{ job.endTime ? + dayjs(job.endTime).format("llll") : undefined }} + {{ job.nextFireTime ? + dayjs(job.nextFireTime).format("llll") : undefined}} + {{ job.previousFireTime && job.previousFireTime - > 0 ? new - Date(job.previousFireTime).toLocaleString() : + > 0 ? dayjs(job.previousFireTime).format("llll") : undefined }} @@ -138,6 +137,7 @@ import { useJobControl } from "@/composables/job/useJobControl"; import { useJobsPaginationQuery } from "@/composables/job/useJobQuery"; import { useJobUpdate } from "@/composables/job/useJobUpdate"; import useAlertStore from "@/composables/store/useAlertStore"; +import dayjs from "@/utils/dateUtil"; import { Modal, type ModalInterface, initFlowbite } from "flowbite"; import { nextTick, onMounted, ref } from "vue"; import type { components } from "../api/types/schema"; diff --git a/frontend/src/views/UserView.vue b/frontend/src/views/UserView.vue index d3b74c3..1971701 100644 --- a/frontend/src/views/UserView.vue +++ b/frontend/src/views/UserView.vue @@ -5,7 +5,7 @@

用户管理

- +
@@ -72,7 +72,7 @@ {{ user.username }} - {{ user.createTime }} + {{ dayjs(user.createTime).format("llll") }}
@@ -145,20 +145,21 @@