From 36ebc24aebb69ed7ea2b6d113d56ab1218ad1a36 Mon Sep 17 00:00:00 2001
From: Ryan Wang <i@ryanc.cc>
Date: Thu, 28 Dec 2023 17:13:38 +0800
Subject: [PATCH] chore: use lodash-es instead of lodash (#5125)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

#### What type of PR is this?

/area console
/kind improvement
/milestone 2.12.x

#### What this PR does / why we need it:

优化 Lodash 依赖,使用 lodash-es 代替 lodash 库。

#### Which issue(s) this PR fixes:

Fixes #5124

#### Special notes for your reviewer:

CI 通过即可。

#### Does this PR introduce a user-facing change?

```release-note
None
```
---
 .../composables/use-content-cache.ts          |  2 +-
 .../composables/use-setting-form.ts           |  3 +-
 .../contents/attachments/AttachmentList.vue   |  2 +-
 .../AttachmentGroupEditingModal.vue           |  2 +-
 .../AttachmentPolicyEditingModal.vue          |  2 +-
 .../comments/components/CommentListItem.vue   |  2 +-
 .../components/ReplyCreationModal.vue         |  2 +-
 .../comments/components/ReplyListItem.vue     |  2 +-
 .../contents/pages/DeletedSinglePageList.vue  |  2 +-
 .../contents/pages/SinglePageEditor.vue       |  2 +-
 .../pages/components/SinglePageListItem.vue   |  2 +-
 .../components/SinglePageSettingModal.vue     |  2 +-
 .../contents/posts/DeletedPostList.vue        |  2 +-
 .../modules/contents/posts/PostEditor.vue     |  2 +-
 .../components/CategoryEditingModal.vue       |  2 +-
 .../contents/posts/categories/utils/index.ts  |  2 +-
 .../posts/components/PostSettingModal.vue     |  2 +-
 .../posts/tags/components/TagEditingModal.vue |  2 +-
 .../modules/dashboard/Dashboard.vue           |  2 +-
 .../modules/interface/menus/Menus.vue         |  2 +-
 .../menus/components/MenuEditingModal.vue     |  2 +-
 .../menus/components/MenuItemEditingModal.vue |  2 +-
 .../modules/interface/menus/utils/index.ts    |  2 +-
 .../interface/themes/layouts/ThemeLayout.vue  |  2 +-
 .../modules/system/plugins/PluginDetail.vue   |  2 +-
 .../system/plugins/composables/use-plugin.ts  |  2 +-
 .../roles/components/RoleEditingModal.vue     |  2 +-
 .../users/components/UserCreationModal.vue    |  2 +-
 .../users/components/UserEditingModal.vue     |  2 +-
 .../components/UserPasswordChangeModal.vue    |  2 +-
 console/package.json                          | 12 +--
 console/pnpm-lock.yaml                        | 82 +++++--------------
 .../src/components/form/AnnotationsForm.vue   |  2 +-
 .../composables/use-route-menu-generator.ts   |  2 +-
 console/src/utils/permission.ts               |  2 +-
 .../components/PasswordChangeModal.vue        |  2 +-
 .../components/ProfileEditingModal.vue        |  2 +-
 .../profile/tabs/NotificationPreferences.vue  |  2 +-
 38 files changed, 57 insertions(+), 110 deletions(-)

diff --git a/console/console-src/composables/use-content-cache.ts b/console/console-src/composables/use-content-cache.ts
index 0f4d17d61..158afea8a 100644
--- a/console/console-src/composables/use-content-cache.ts
+++ b/console/console-src/composables/use-content-cache.ts
@@ -6,7 +6,7 @@ export interface ContentCache {
   content?: string;
   version: number;
 }
-import debounce from "lodash.debounce";
+import { debounce } from "lodash-es";
 import { useI18n } from "vue-i18n";
 
 interface useContentCacheReturn {
diff --git a/console/console-src/composables/use-setting-form.ts b/console/console-src/composables/use-setting-form.ts
index 94c3c6e92..9e5e4c9e2 100644
--- a/console/console-src/composables/use-setting-form.ts
+++ b/console/console-src/composables/use-setting-form.ts
@@ -5,8 +5,7 @@ import { ref } from "vue";
 import { apiClient } from "@/utils/api-client";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
-import merge from "lodash.merge";
+import { cloneDeep, merge } from "lodash-es";
 import type { ConfigMap, Setting, SettingForm } from "@halo-dev/api-client";
 import type { FormKitSchemaCondition, FormKitSchemaNode } from "@formkit/core";
 import { Toast } from "@halo-dev/components";
diff --git a/console/console-src/modules/contents/attachments/AttachmentList.vue b/console/console-src/modules/contents/attachments/AttachmentList.vue
index 226e1e45e..54153f31f 100644
--- a/console/console-src/modules/contents/attachments/AttachmentList.vue
+++ b/console/console-src/modules/contents/attachments/AttachmentList.vue
@@ -30,7 +30,7 @@ import type { Attachment, Group } from "@halo-dev/api-client";
 import { useFetchAttachmentPolicy } from "./composables/use-attachment-policy";
 import { useAttachmentControl } from "./composables/use-attachment";
 import { apiClient } from "@/utils/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { isImage } from "@/utils/image";
 import { useRouteQuery } from "@vueuse/router";
 import { useFetchAttachmentGroup } from "./composables/use-attachment-group";
diff --git a/console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue
index 883dbce0b..e41b10095 100644
--- a/console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue
+++ b/console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue
@@ -3,7 +3,7 @@ import { Toast, VButton, VModal, VSpace } from "@halo-dev/components";
 import SubmitButton from "@/components/button/SubmitButton.vue";
 import type { Group } from "@halo-dev/api-client";
 import { computed, ref, watch } from "vue";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
diff --git a/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue
index 9cf73da93..30ef48324 100644
--- a/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue
+++ b/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue
@@ -2,7 +2,7 @@
 import { Toast, VButton, VModal, VSpace } from "@halo-dev/components";
 import SubmitButton from "@/components/button/SubmitButton.vue";
 import type { Policy, PolicyTemplate } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { computed, ref, toRaw, watch, watchEffect } from "vue";
 import { useSettingForm } from "@console/composables/use-setting-form";
 import { apiClient } from "@/utils/api-client";
diff --git a/console/console-src/modules/contents/comments/components/CommentListItem.vue b/console/console-src/modules/contents/comments/components/CommentListItem.vue
index 7dfddd3a5..073b03a6f 100644
--- a/console/console-src/modules/contents/comments/components/CommentListItem.vue
+++ b/console/console-src/modules/contents/comments/components/CommentListItem.vue
@@ -27,7 +27,7 @@ import { formatDatetime } from "@/utils/date";
 import { computed, provide, ref, onMounted, type Ref } from "vue";
 import ReplyListItem from "./ReplyListItem.vue";
 import { apiClient } from "@/utils/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { usePermission } from "@/utils/permission";
 import { useQuery, useQueryClient } from "@tanstack/vue-query";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/contents/comments/components/ReplyCreationModal.vue b/console/console-src/modules/contents/comments/components/ReplyCreationModal.vue
index a5ab85944..d20b84bef 100644
--- a/console/console-src/modules/contents/comments/components/ReplyCreationModal.vue
+++ b/console/console-src/modules/contents/comments/components/ReplyCreationModal.vue
@@ -18,7 +18,7 @@ import { Picker } from "emoji-mart";
 import i18n from "@emoji-mart/data/i18n/zh.json";
 import { computed, nextTick, ref, watch, watchEffect } from "vue";
 import { reset } from "@formkit/core";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { setFocus } from "@/formkit/utils/focus";
 import { apiClient } from "@/utils/api-client";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/contents/comments/components/ReplyListItem.vue b/console/console-src/modules/contents/comments/components/ReplyListItem.vue
index 03d08ff08..d7ace1755 100644
--- a/console/console-src/modules/contents/comments/components/ReplyListItem.vue
+++ b/console/console-src/modules/contents/comments/components/ReplyListItem.vue
@@ -14,7 +14,7 @@ import type { ListedReply } from "@halo-dev/api-client";
 import { formatDatetime } from "@/utils/date";
 import { apiClient } from "@/utils/api-client";
 import { computed, inject, type Ref } from "vue";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { useI18n } from "vue-i18n";
 import { useQueryClient } from "@tanstack/vue-query";
 
diff --git a/console/console-src/modules/contents/pages/DeletedSinglePageList.vue b/console/console-src/modules/contents/pages/DeletedSinglePageList.vue
index ec37d3d16..b7490a661 100644
--- a/console/console-src/modules/contents/pages/DeletedSinglePageList.vue
+++ b/console/console-src/modules/contents/pages/DeletedSinglePageList.vue
@@ -21,7 +21,7 @@ import { ref, watch } from "vue";
 import type { ListedSinglePage, SinglePage } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
 import { formatDatetime } from "@/utils/date";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { usePermission } from "@/utils/permission";
 import { useQuery } from "@tanstack/vue-query";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/contents/pages/SinglePageEditor.vue b/console/console-src/modules/contents/pages/SinglePageEditor.vue
index ddfec1d7a..1d2d7cccb 100644
--- a/console/console-src/modules/contents/pages/SinglePageEditor.vue
+++ b/console/console-src/modules/contents/pages/SinglePageEditor.vue
@@ -24,7 +24,7 @@ import {
 } from "vue";
 import { apiClient } from "@/utils/api-client";
 import { useRouteQuery } from "@vueuse/router";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { useRouter } from "vue-router";
 import { randomUUID } from "@/utils/id";
 import { useContentCache } from "@console/composables/use-content-cache";
diff --git a/console/console-src/modules/contents/pages/components/SinglePageListItem.vue b/console/console-src/modules/contents/pages/components/SinglePageListItem.vue
index 60be79293..a15f82879 100644
--- a/console/console-src/modules/contents/pages/components/SinglePageListItem.vue
+++ b/console/console-src/modules/contents/pages/components/SinglePageListItem.vue
@@ -17,7 +17,7 @@ import type { ListedSinglePage, SinglePage } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
 import { formatDatetime } from "@/utils/date";
 import { RouterLink } from "vue-router";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { usePermission } from "@/utils/permission";
 import { singlePageLabels } from "@/constants/labels";
 import { useMutation, useQueryClient } from "@tanstack/vue-query";
diff --git a/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue b/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue
index a1f2bd040..972162b6f 100644
--- a/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue
+++ b/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue
@@ -8,7 +8,7 @@ import {
 } from "@halo-dev/components";
 import { computed, nextTick, ref, watchEffect } from "vue";
 import type { SinglePage } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme";
 import { singlePageLabels } from "@/constants/labels";
diff --git a/console/console-src/modules/contents/posts/DeletedPostList.vue b/console/console-src/modules/contents/posts/DeletedPostList.vue
index 6837127c6..3df872d77 100644
--- a/console/console-src/modules/contents/posts/DeletedPostList.vue
+++ b/console/console-src/modules/contents/posts/DeletedPostList.vue
@@ -23,7 +23,7 @@ import type { ListedPost, Post } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
 import { formatDatetime } from "@/utils/date";
 import { usePermission } from "@/utils/permission";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { useQuery } from "@tanstack/vue-query";
 import { useI18n } from "vue-i18n";
 import ContributorList from "../_components/ContributorList.vue";
diff --git a/console/console-src/modules/contents/posts/PostEditor.vue b/console/console-src/modules/contents/posts/PostEditor.vue
index 33cdc71cd..8c970d53c 100644
--- a/console/console-src/modules/contents/posts/PostEditor.vue
+++ b/console/console-src/modules/contents/posts/PostEditor.vue
@@ -22,7 +22,7 @@ import {
   toRef,
   type ComputedRef,
 } from "vue";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import { useRouteQuery } from "@vueuse/router";
 import { useRouter } from "vue-router";
diff --git a/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue b/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue
index cec6a5167..206422443 100644
--- a/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue
+++ b/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue
@@ -17,7 +17,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue";
 import type { Category } from "@halo-dev/api-client";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
 import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme";
diff --git a/console/console-src/modules/contents/posts/categories/utils/index.ts b/console/console-src/modules/contents/posts/categories/utils/index.ts
index 0169e97e4..dc5863d1f 100644
--- a/console/console-src/modules/contents/posts/categories/utils/index.ts
+++ b/console/console-src/modules/contents/posts/categories/utils/index.ts
@@ -1,5 +1,5 @@
 import type { Category, CategorySpec } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 
 export interface CategoryTreeSpec extends Omit<CategorySpec, "children"> {
   children: CategoryTree[];
diff --git a/console/console-src/modules/contents/posts/components/PostSettingModal.vue b/console/console-src/modules/contents/posts/components/PostSettingModal.vue
index 1af6215cb..e64985e1b 100644
--- a/console/console-src/modules/contents/posts/components/PostSettingModal.vue
+++ b/console/console-src/modules/contents/posts/components/PostSettingModal.vue
@@ -8,7 +8,7 @@ import {
 } from "@halo-dev/components";
 import { computed, nextTick, ref, watchEffect } from "vue";
 import type { Post } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme";
 import { postLabels } from "@/constants/labels";
diff --git a/console/console-src/modules/contents/posts/tags/components/TagEditingModal.vue b/console/console-src/modules/contents/posts/tags/components/TagEditingModal.vue
index d406a5ee5..34dac3241 100644
--- a/console/console-src/modules/contents/posts/tags/components/TagEditingModal.vue
+++ b/console/console-src/modules/contents/posts/tags/components/TagEditingModal.vue
@@ -19,7 +19,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue";
 import type { Tag } from "@halo-dev/api-client";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
 import AnnotationsForm from "@/components/form/AnnotationsForm.vue";
diff --git a/console/console-src/modules/dashboard/Dashboard.vue b/console/console-src/modules/dashboard/Dashboard.vue
index 727b48369..dd4b615bd 100644
--- a/console/console-src/modules/dashboard/Dashboard.vue
+++ b/console/console-src/modules/dashboard/Dashboard.vue
@@ -123,7 +123,7 @@ import {
 } from "@halo-dev/components";
 import { onMounted, provide, ref, type Ref } from "vue";
 import { useStorage } from "@vueuse/core";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import type { DashboardStats } from "@halo-dev/api-client";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/interface/menus/Menus.vue b/console/console-src/modules/interface/menus/Menus.vue
index f44df6d48..002e173ca 100644
--- a/console/console-src/modules/interface/menus/Menus.vue
+++ b/console/console-src/modules/interface/menus/Menus.vue
@@ -17,7 +17,7 @@ import MenuList from "./components/MenuList.vue";
 import { computed, ref } from "vue";
 import { apiClient } from "@/utils/api-client";
 import type { Menu, MenuItem } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import type { MenuTreeItem } from "./utils";
 import {
   buildMenuItemsTree,
diff --git a/console/console-src/modules/interface/menus/components/MenuEditingModal.vue b/console/console-src/modules/interface/menus/components/MenuEditingModal.vue
index 75e771081..d9ef0a45f 100644
--- a/console/console-src/modules/interface/menus/components/MenuEditingModal.vue
+++ b/console/console-src/modules/interface/menus/components/MenuEditingModal.vue
@@ -5,7 +5,7 @@ import type { Menu } from "@halo-dev/api-client";
 import { computed, ref, watch } from "vue";
 import { apiClient } from "@/utils/api-client";
 import { reset } from "@formkit/core";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { setFocus } from "@/formkit/utils/focus";
 import { useI18n } from "vue-i18n";
 
diff --git a/console/console-src/modules/interface/menus/components/MenuItemEditingModal.vue b/console/console-src/modules/interface/menus/components/MenuItemEditingModal.vue
index 64729efe0..7d6bf2486 100644
--- a/console/console-src/modules/interface/menus/components/MenuItemEditingModal.vue
+++ b/console/console-src/modules/interface/menus/components/MenuItemEditingModal.vue
@@ -5,7 +5,7 @@ import { computed, nextTick, ref, watch } from "vue";
 import type { Menu, MenuItem, Ref } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
 import { reset } from "@formkit/core";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { setFocus } from "@/formkit/utils/focus";
 import AnnotationsForm from "@/components/form/AnnotationsForm.vue";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/interface/menus/utils/index.ts b/console/console-src/modules/interface/menus/utils/index.ts
index 1d59e9681..01b963dca 100644
--- a/console/console-src/modules/interface/menus/utils/index.ts
+++ b/console/console-src/modules/interface/menus/utils/index.ts
@@ -1,5 +1,5 @@
 import type { MenuItem, MenuItemSpec } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 
 export interface MenuTreeItemSpec extends Omit<MenuItemSpec, "children"> {
   children: MenuTreeItem[];
diff --git a/console/console-src/modules/interface/themes/layouts/ThemeLayout.vue b/console/console-src/modules/interface/themes/layouts/ThemeLayout.vue
index fd5c1bc29..d4417bfdb 100644
--- a/console/console-src/modules/interface/themes/layouts/ThemeLayout.vue
+++ b/console/console-src/modules/interface/themes/layouts/ThemeLayout.vue
@@ -5,7 +5,7 @@ import { provide, ref } from "vue";
 import { useRoute, useRouter } from "vue-router";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 
 // hooks
 import { useThemeLifeCycle } from "../composables/use-theme";
diff --git a/console/console-src/modules/system/plugins/PluginDetail.vue b/console/console-src/modules/system/plugins/PluginDetail.vue
index 5d18cb0e5..459ac02c2 100644
--- a/console/console-src/modules/system/plugins/PluginDetail.vue
+++ b/console/console-src/modules/system/plugins/PluginDetail.vue
@@ -5,7 +5,7 @@ import { useRoute } from "vue-router";
 import { apiClient } from "@/utils/api-client";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 
 // components
 import { VCard, VPageHeader, VTabbar, VAvatar } from "@halo-dev/components";
diff --git a/console/console-src/modules/system/plugins/composables/use-plugin.ts b/console/console-src/modules/system/plugins/composables/use-plugin.ts
index 6bb856d09..5ab42f72c 100644
--- a/console/console-src/modules/system/plugins/composables/use-plugin.ts
+++ b/console/console-src/modules/system/plugins/composables/use-plugin.ts
@@ -1,7 +1,7 @@
 import type { ComputedRef, Ref } from "vue";
 import { computed } from "vue";
 import { type Plugin } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { apiClient } from "@/utils/api-client";
 import { Dialog, Toast } from "@halo-dev/components";
 import { useI18n } from "vue-i18n";
diff --git a/console/console-src/modules/system/roles/components/RoleEditingModal.vue b/console/console-src/modules/system/roles/components/RoleEditingModal.vue
index dc8ec6d12..421ffb025 100644
--- a/console/console-src/modules/system/roles/components/RoleEditingModal.vue
+++ b/console/console-src/modules/system/roles/components/RoleEditingModal.vue
@@ -5,7 +5,7 @@ import { computed, watch } from "vue";
 import { rbacAnnotations } from "@/constants/annotations";
 import type { Role } from "@halo-dev/api-client";
 import { useRoleForm, useRoleTemplateSelection } from "@/composables/use-role";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
 import { pluginLabels, roleLabels } from "@/constants/labels";
diff --git a/console/console-src/modules/system/users/components/UserCreationModal.vue b/console/console-src/modules/system/users/components/UserCreationModal.vue
index 1884c4578..c0207465a 100644
--- a/console/console-src/modules/system/users/components/UserCreationModal.vue
+++ b/console/console-src/modules/system/users/components/UserCreationModal.vue
@@ -9,7 +9,7 @@ import { Toast, VButton, VModal, VSpace } from "@halo-dev/components";
 import SubmitButton from "@/components/button/SubmitButton.vue";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 
 // hooks
diff --git a/console/console-src/modules/system/users/components/UserEditingModal.vue b/console/console-src/modules/system/users/components/UserEditingModal.vue
index 79ba52cbf..0727a71ae 100644
--- a/console/console-src/modules/system/users/components/UserEditingModal.vue
+++ b/console/console-src/modules/system/users/components/UserEditingModal.vue
@@ -9,7 +9,7 @@ import { Toast, VButton, VModal, VSpace } from "@halo-dev/components";
 import SubmitButton from "@/components/button/SubmitButton.vue";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 
 // hooks
diff --git a/console/console-src/modules/system/users/components/UserPasswordChangeModal.vue b/console/console-src/modules/system/users/components/UserPasswordChangeModal.vue
index 344581ce5..daeb188f0 100644
--- a/console/console-src/modules/system/users/components/UserPasswordChangeModal.vue
+++ b/console/console-src/modules/system/users/components/UserPasswordChangeModal.vue
@@ -4,7 +4,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue";
 import { ref, watch } from "vue";
 import type { User } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
 
diff --git a/console/package.json b/console/package.json
index c255ff64c..d43dab7d9 100644
--- a/console/package.json
+++ b/console/package.json
@@ -83,11 +83,7 @@
     "floating-vue": "2.0.0-beta.24",
     "fuse.js": "^6.6.2",
     "jsencrypt": "^3.3.2",
-    "lodash.clonedeep": "^4.5.0",
-    "lodash.debounce": "^4.0.8",
-    "lodash.isequal": "^4.5.0",
-    "lodash.merge": "^4.6.2",
-    "lodash.sortby": "^4.7.0",
+    "lodash-es": "^4.17.21",
     "overlayscrollbars": "^2.1.1",
     "overlayscrollbars-vue": "^0.5.1",
     "path-browserify": "^1.0.1",
@@ -114,11 +110,7 @@
     "@tailwindcss/forms": "^0.5.7",
     "@tsconfig/node18": "^2.0.1",
     "@types/jsdom": "^20.0.1",
-    "@types/lodash.clonedeep": "4.5.7",
-    "@types/lodash.debounce": "^4.0.7",
-    "@types/lodash.isequal": "^4.5.6",
-    "@types/lodash.merge": "^4.6.7",
-    "@types/lodash.sortby": "^4.7.9",
+    "@types/lodash-es": "^4.17.12",
     "@types/node": "^18.11.19",
     "@types/qs": "^6.9.7",
     "@types/randomstring": "^1.1.8",
diff --git a/console/pnpm-lock.yaml b/console/pnpm-lock.yaml
index 380bb9b5d..b518a10fa 100644
--- a/console/pnpm-lock.yaml
+++ b/console/pnpm-lock.yaml
@@ -146,21 +146,9 @@ importers:
       jsencrypt:
         specifier: ^3.3.2
         version: 3.3.2
-      lodash.clonedeep:
-        specifier: ^4.5.0
-        version: 4.5.0
-      lodash.debounce:
-        specifier: ^4.0.8
-        version: 4.0.8
-      lodash.isequal:
-        specifier: ^4.5.0
-        version: 4.5.0
-      lodash.merge:
-        specifier: ^4.6.2
-        version: 4.6.2
-      lodash.sortby:
-        specifier: ^4.7.0
-        version: 4.7.0
+      lodash-es:
+        specifier: ^4.17.21
+        version: 4.17.21
       overlayscrollbars:
         specifier: ^2.1.1
         version: 2.1.1
@@ -234,21 +222,9 @@ importers:
       '@types/jsdom':
         specifier: ^20.0.1
         version: 20.0.1
-      '@types/lodash.clonedeep':
-        specifier: 4.5.7
-        version: 4.5.7
-      '@types/lodash.debounce':
-        specifier: ^4.0.7
-        version: 4.0.7
-      '@types/lodash.isequal':
-        specifier: ^4.5.6
-        version: 4.5.6
-      '@types/lodash.merge':
-        specifier: ^4.6.7
-        version: 4.6.7
-      '@types/lodash.sortby':
-        specifier: ^4.7.9
-        version: 4.7.9
+      '@types/lodash-es':
+        specifier: ^4.17.12
+        version: 4.17.12
       '@types/node':
         specifier: ^18.11.19
         version: 18.13.0
@@ -5679,7 +5655,7 @@ packages:
       ts-dedent: 2.2.0
       type-fest: 2.19.0
       vue: 3.3.4
-      vue-component-type-helpers: 1.8.24
+      vue-component-type-helpers: 1.8.27
     transitivePeerDependencies:
       - encoding
       - supports-color
@@ -6371,32 +6347,8 @@ packages:
     resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==}
     dev: true
 
-  /@types/lodash.clonedeep@4.5.7:
-    resolution: {integrity: sha512-ccNqkPptFIXrpVqUECi60/DFxjNKsfoQxSQsgcBJCX/fuX1wgyQieojkcWH/KpE3xzLoWN/2k+ZeGqIN3paSvw==}
-    dependencies:
-      '@types/lodash': 4.14.186
-    dev: true
-
-  /@types/lodash.debounce@4.0.7:
-    resolution: {integrity: sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==}
-    dependencies:
-      '@types/lodash': 4.14.186
-    dev: true
-
-  /@types/lodash.isequal@4.5.6:
-    resolution: {integrity: sha512-Ww4UGSe3DmtvLLJm2F16hDwEQSv7U0Rr8SujLUA2wHI2D2dm8kPu6Et+/y303LfjTIwSBKXB/YTUcAKpem/XEg==}
-    dependencies:
-      '@types/lodash': 4.14.186
-    dev: true
-
-  /@types/lodash.merge@4.6.7:
-    resolution: {integrity: sha512-OwxUJ9E50gw3LnAefSHJPHaBLGEKmQBQ7CZe/xflHkyy/wH2zVyEIAKReHvVrrn7zKdF58p16We9kMfh7v0RRQ==}
-    dependencies:
-      '@types/lodash': 4.14.186
-    dev: true
-
-  /@types/lodash.sortby@4.7.9:
-    resolution: {integrity: sha512-PDmjHnOlndLS59GofH0pnxIs+n9i4CWeXGErSB5JyNFHu2cmvW6mQOaUKjG8EDPkni14IgF8NsRW8bKvFzTm9A==}
+  /@types/lodash-es@4.17.12:
+    resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
     dependencies:
       '@types/lodash': 4.14.186
     dev: true
@@ -12606,16 +12558,17 @@ packages:
       p-locate: 5.0.0
     dev: true
 
+  /lodash-es@4.17.21:
+    resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+    dev: false
+
   /lodash.capitalize@4.2.1:
     resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==}
     dev: true
 
-  /lodash.clonedeep@4.5.0:
-    resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
-    dev: false
-
   /lodash.debounce@4.0.8:
     resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+    dev: true
 
   /lodash.escaperegexp@4.1.2:
     resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==}
@@ -12627,6 +12580,7 @@ packages:
 
   /lodash.isequal@4.5.0:
     resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+    dev: true
 
   /lodash.isplainobject@4.0.6:
     resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
@@ -12638,6 +12592,7 @@ packages:
 
   /lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+    dev: true
 
   /lodash.mergewith@4.6.2:
     resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==}
@@ -12649,6 +12604,7 @@ packages:
 
   /lodash.sortby@4.7.0:
     resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+    dev: true
 
   /lodash.startcase@4.4.0:
     resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
@@ -17256,8 +17212,8 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /vue-component-type-helpers@1.8.24:
-    resolution: {integrity: sha512-lqWs/7fdRXoSBAlbouHBX+LNuaY6gI9xWW34m/ZIz9zVPYHEyw0b2/zaCBwlKx0NtKTeF/6pOpvrxVkh7nhIYg==}
+  /vue-component-type-helpers@1.8.27:
+    resolution: {integrity: sha512-0vOfAtI67UjeO1G6UiX5Kd76CqaQ67wrRZiOe7UAb9Jm6GzlUr/fC7CV90XfwapJRjpCMaZFhv1V0ajWRmE9Dg==}
     dev: true
 
   /vue-component-type-helpers@1.8.4:
diff --git a/console/src/components/form/AnnotationsForm.vue b/console/src/components/form/AnnotationsForm.vue
index b442ffa03..49cb13e4f 100644
--- a/console/src/components/form/AnnotationsForm.vue
+++ b/console/src/components/form/AnnotationsForm.vue
@@ -9,7 +9,7 @@ import {
 import { computed, nextTick, onMounted, ref, watch } from "vue";
 import { apiClient } from "@/utils/api-client";
 import type { AnnotationSetting } from "@halo-dev/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { getValidationMessages } from "@formkit/validation";
 import { useThemeStore } from "@console/stores/theme";
 import { randomUUID } from "@/utils/id";
diff --git a/console/src/composables/use-route-menu-generator.ts b/console/src/composables/use-route-menu-generator.ts
index dbaaa0649..044c433d7 100644
--- a/console/src/composables/use-route-menu-generator.ts
+++ b/console/src/composables/use-route-menu-generator.ts
@@ -1,7 +1,7 @@
 import { useRoleStore } from "@/stores/role";
 import type { MenuGroupType, MenuItemType } from "@halo-dev/console-shared";
 import { onMounted, ref, type Ref } from "vue";
-import sortBy from "lodash.sortby";
+import { sortBy } from "lodash-es";
 import { hasPermission } from "@/utils/permission";
 import {
   useRouter,
diff --git a/console/src/utils/permission.ts b/console/src/utils/permission.ts
index f2a5414c0..0dbd49f55 100644
--- a/console/src/utils/permission.ts
+++ b/console/src/utils/permission.ts
@@ -1,5 +1,5 @@
 import { useRoleStore } from "@/stores/role";
-import isEqual from "lodash.isequal";
+import { isEqual } from "lodash-es";
 
 /**
  * It returns true if the user has all the permissions required to access a resource
diff --git a/console/uc-src/modules/profile/components/PasswordChangeModal.vue b/console/uc-src/modules/profile/components/PasswordChangeModal.vue
index 6d69e9640..c60b262f2 100644
--- a/console/uc-src/modules/profile/components/PasswordChangeModal.vue
+++ b/console/uc-src/modules/profile/components/PasswordChangeModal.vue
@@ -4,7 +4,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue";
 import { ref, watch } from "vue";
 import type { User } from "@halo-dev/api-client";
 import { apiClient } from "@/utils/api-client";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 import { setFocus } from "@/formkit/utils/focus";
 
diff --git a/console/uc-src/modules/profile/components/ProfileEditingModal.vue b/console/uc-src/modules/profile/components/ProfileEditingModal.vue
index 4b1707666..9fbfb8d03 100644
--- a/console/uc-src/modules/profile/components/ProfileEditingModal.vue
+++ b/console/uc-src/modules/profile/components/ProfileEditingModal.vue
@@ -9,7 +9,7 @@ import { Toast, VButton, VModal, VSpace } from "@halo-dev/components";
 import SubmitButton from "@/components/button/SubmitButton.vue";
 
 // libs
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import { reset } from "@formkit/core";
 
 // hooks
diff --git a/console/uc-src/modules/profile/tabs/NotificationPreferences.vue b/console/uc-src/modules/profile/tabs/NotificationPreferences.vue
index e59761c2f..9d9663554 100644
--- a/console/uc-src/modules/profile/tabs/NotificationPreferences.vue
+++ b/console/uc-src/modules/profile/tabs/NotificationPreferences.vue
@@ -6,7 +6,7 @@ import { VLoading, VSwitch } from "@halo-dev/components";
 import type { Ref } from "vue";
 import { computed } from "vue";
 import { inject } from "vue";
-import cloneDeep from "lodash.clonedeep";
+import { cloneDeep } from "lodash-es";
 import type { ReasonTypeNotifierRequest } from "@halo-dev/api-client";
 
 const queryClient = useQueryClient();