From 9376d6fd5f70208c0dff5311371168e772bbd2e2 Mon Sep 17 00:00:00 2001
From: Charles7c <charles7c@126.com>
Date: Thu, 20 Apr 2023 22:59:30 +0800
Subject: [PATCH 1/2] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E5=90=AF?=
 =?UTF-8?q?=E5=8A=A8=E7=A8=8B=E5=BA=8F=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../charles7c/cnadmin/ContiNewAdminApplication.java | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/ContiNewAdminApplication.java b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/ContiNewAdminApplication.java
index d56e7ab5..765f5ddf 100644
--- a/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/ContiNewAdminApplication.java
+++ b/continew-admin-webapi/src/main/java/top/charles7c/cnadmin/ContiNewAdminApplication.java
@@ -34,6 +34,9 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.URLUtil;
+import cn.hutool.extra.spring.SpringUtil;
 
 import top.charles7c.cnadmin.common.config.properties.ContiNewAdminProperties;
 
@@ -73,10 +76,16 @@ public class ContiNewAdminApplication implements ApplicationRunner {
     @Override
     public void run(ApplicationArguments args) throws Exception {
         String hostAddress = InetAddress.getLocalHost().getHostAddress();
+        Integer port = serverProperties.getPort();
+        String contextPath = serverProperties.getServlet().getContextPath();
+        String baseUrl = URLUtil.normalize(String.format("%s:%s%s", hostAddress, port, contextPath));
         log.info("------------------------------------------------------");
         log.info("{} backend service started successfully.", properties.getName());
-        log.info("后端 API 地址:http://{}:{}", hostAddress, serverProperties.getPort());
-        log.info("后端 API 文档:http://{}:{}/doc.html", hostAddress, serverProperties.getPort());
+        log.info("后端 API 地址:{}", baseUrl);
+        Boolean docEnabled = Convert.toBool(SpringUtil.getProperty("springdoc.swagger-ui.enabled"));
+        if (Boolean.TRUE.equals(docEnabled)) {
+            log.info("后端 API 文档:{}/doc.html", baseUrl);
+        }
         log.info("------------------------------------------------------");
     }
 }

From 39b0b9a48ec6117dab6a8688371ade023687b769 Mon Sep 17 00:00:00 2001
From: Charles7c <charles7c@126.com>
Date: Wed, 28 Jun 2023 22:49:58 +0800
Subject: [PATCH 2/2] =?UTF-8?q?style:=20=E8=A7=A3=E5=86=B3=E5=90=AF?=
 =?UTF-8?q?=E5=8A=A8=E6=97=B6=E9=83=A8=E5=88=86=E8=A1=8C=E5=88=86=E9=9A=94?=
 =?UTF-8?q?=E7=AC=A6=E6=8A=A5=20warning=20=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

来自 @woodlxl(小鹿)
---
 continew-admin-ui/components.d.ts             | 150 ++++++++--------
 continew-admin-ui/package.json                |   1 +
 .../src/components/footer/index.vue           |  22 ++-
 .../src/components/navbar/index.vue           |   5 +-
 .../src/components/right-toolbar/index.vue    |  10 +-
 continew-admin-ui/src/hooks/axios.d.ts        |   4 +-
 .../router/routes/modules/arco-design/list.ts |   3 +-
 .../modules/arco-design/visualization.ts      |  10 +-
 continew-admin-ui/src/utils/avatar.ts         |   5 +-
 .../arco-design/list/search-table/index.vue   |   4 +-
 .../src/views/login/components/login-form.vue |   7 +-
 continew-admin-ui/src/views/login/index.vue   |   2 +-
 .../src/views/login/locale/en-US.ts           |   6 +-
 .../src/views/login/locale/zh-CN.ts           |   6 +-
 .../src/views/monitor/log/login/index.vue     |   8 +-
 .../src/views/monitor/log/operation/index.vue |   8 +-
 .../src/views/monitor/log/system/index.vue    |  74 ++++++--
 .../src/views/monitor/online/index.vue        |  36 ++--
 .../src/views/system/dept/index.vue           |  25 +--
 .../src/views/system/menu/index.vue           |  12 +-
 .../src/views/system/role/index.vue           |  75 +++++---
 .../user/center/components/basic-info.vue     |  15 +-
 .../user/center/components/operation-log.vue  |   4 +-
 .../security-settings/update-email.vue        | 160 +++++++++++++-----
 .../security-settings/update-phone.vue        |  12 +-
 .../security-settings/update-pwd.vue          | 110 +++++++++---
 .../views/system/user/center/locale/en-US.ts  |  84 ++++++---
 .../views/system/user/center/locale/zh-CN.ts  |  66 +++++---
 .../src/views/system/user/index.vue           |  37 +++-
 29 files changed, 659 insertions(+), 302 deletions(-)

diff --git a/continew-admin-ui/components.d.ts b/continew-admin-ui/components.d.ts
index 74f6e6fd..d692d1fe 100644
--- a/continew-admin-ui/components.d.ts
+++ b/continew-admin-ui/components.d.ts
@@ -1,84 +1,84 @@
 // generated by unplugin-vue-components
 // We suggest you to commit this file into source control
 // Read more: https://github.com/vuejs/core/pull/3399
-import '@vue/runtime-core'
+import '@vue/runtime-core';
 
-export {}
+export {};
 
 declare module '@vue/runtime-core' {
   export interface GlobalComponents {
-    AAffix: typeof import('@arco-design/web-vue')['Affix']
-    AAlert: typeof import('@arco-design/web-vue')['Alert']
-    AAvatar: typeof import('@arco-design/web-vue')['Avatar']
-    ABadge: typeof import('@arco-design/web-vue')['Badge']
-    ABreadcrumb: typeof import('@arco-design/web-vue')['Breadcrumb']
-    ABreadcrumbItem: typeof import('@arco-design/web-vue')['BreadcrumbItem']
-    AButton: typeof import('@arco-design/web-vue')['Button']
-    AButtonGroup: typeof import('@arco-design/web-vue')['ButtonGroup']
-    ACard: typeof import('@arco-design/web-vue')['Card']
-    ACardMeta: typeof import('@arco-design/web-vue')['CardMeta']
-    ACarousel: typeof import('@arco-design/web-vue')['Carousel']
-    ACarouselItem: typeof import('@arco-design/web-vue')['CarouselItem']
-    ACheckbox: typeof import('@arco-design/web-vue')['Checkbox']
-    ACol: typeof import('@arco-design/web-vue')['Col']
-    AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider']
-    ADescriptions: typeof import('@arco-design/web-vue')['Descriptions']
-    ADescriptionsItem: typeof import('@arco-design/web-vue')['DescriptionsItem']
-    ADivider: typeof import('@arco-design/web-vue')['Divider']
-    ADoption: typeof import('@arco-design/web-vue')['Doption']
-    ADrawer: typeof import('@arco-design/web-vue')['Drawer']
-    ADropdown: typeof import('@arco-design/web-vue')['Dropdown']
-    AForm: typeof import('@arco-design/web-vue')['Form']
-    AFormItem: typeof import('@arco-design/web-vue')['FormItem']
-    AGrid: typeof import('@arco-design/web-vue')['Grid']
-    AGridItem: typeof import('@arco-design/web-vue')['GridItem']
-    AInput: typeof import('@arco-design/web-vue')['Input']
-    AInputNumber: typeof import('@arco-design/web-vue')['InputNumber']
-    AInputPassword: typeof import('@arco-design/web-vue')['InputPassword']
-    AInputSearch: typeof import('@arco-design/web-vue')['InputSearch']
-    ALayout: typeof import('@arco-design/web-vue')['Layout']
-    ALayoutContent: typeof import('@arco-design/web-vue')['LayoutContent']
-    ALayoutFooter: typeof import('@arco-design/web-vue')['LayoutFooter']
-    ALayoutSider: typeof import('@arco-design/web-vue')['LayoutSider']
-    ALink: typeof import('@arco-design/web-vue')['Link']
-    AList: typeof import('@arco-design/web-vue')['List']
-    AListItem: typeof import('@arco-design/web-vue')['ListItem']
-    AListItemMeta: typeof import('@arco-design/web-vue')['ListItemMeta']
-    AMenu: typeof import('@arco-design/web-vue')['Menu']
-    AMenuItem: typeof import('@arco-design/web-vue')['MenuItem']
-    AModal: typeof import('@arco-design/web-vue')['Modal']
-    AOption: typeof import('@arco-design/web-vue')['Option']
-    APopconfirm: typeof import('@arco-design/web-vue')['Popconfirm']
-    APopover: typeof import('@arco-design/web-vue')['Popover']
-    ARadio: typeof import('@arco-design/web-vue')['Radio']
-    ARadioGroup: typeof import('@arco-design/web-vue')['RadioGroup']
-    ARangePicker: typeof import('@arco-design/web-vue')['RangePicker']
-    AResult: typeof import('@arco-design/web-vue')['Result']
-    ARow: typeof import('@arco-design/web-vue')['Row']
-    ASelect: typeof import('@arco-design/web-vue')['Select']
-    ASkeleton: typeof import('@arco-design/web-vue')['Skeleton']
-    ASkeletonLine: typeof import('@arco-design/web-vue')['SkeletonLine']
-    ASpace: typeof import('@arco-design/web-vue')['Space']
-    ASpin: typeof import('@arco-design/web-vue')['Spin']
-    AStatistic: typeof import('@arco-design/web-vue')['Statistic']
-    AStep: typeof import('@arco-design/web-vue')['Step']
-    ASteps: typeof import('@arco-design/web-vue')['Steps']
-    ASubMenu: typeof import('@arco-design/web-vue')['SubMenu']
-    ASwitch: typeof import('@arco-design/web-vue')['Switch']
-    ATable: typeof import('@arco-design/web-vue')['Table']
-    ATableColumn: typeof import('@arco-design/web-vue')['TableColumn']
-    ATabPane: typeof import('@arco-design/web-vue')['TabPane']
-    ATabs: typeof import('@arco-design/web-vue')['Tabs']
-    ATag: typeof import('@arco-design/web-vue')['Tag']
-    ATextarea: typeof import('@arco-design/web-vue')['Textarea']
-    ATooltip: typeof import('@arco-design/web-vue')['Tooltip']
-    ATree: typeof import('@arco-design/web-vue')['Tree']
-    ATreeSelect: typeof import('@arco-design/web-vue')['TreeSelect']
-    ATypographyParagraph: typeof import('@arco-design/web-vue')['TypographyParagraph']
-    ATypographyText: typeof import('@arco-design/web-vue')['TypographyText']
-    ATypographyTitle: typeof import('@arco-design/web-vue')['TypographyTitle']
-    AUpload: typeof import('@arco-design/web-vue')['Upload']
-    RouterLink: typeof import('vue-router')['RouterLink']
-    RouterView: typeof import('vue-router')['RouterView']
+    AAffix: typeof import('@arco-design/web-vue')['Affix'];
+    AAlert: typeof import('@arco-design/web-vue')['Alert'];
+    AAvatar: typeof import('@arco-design/web-vue')['Avatar'];
+    ABadge: typeof import('@arco-design/web-vue')['Badge'];
+    ABreadcrumb: typeof import('@arco-design/web-vue')['Breadcrumb'];
+    ABreadcrumbItem: typeof import('@arco-design/web-vue')['BreadcrumbItem'];
+    AButton: typeof import('@arco-design/web-vue')['Button'];
+    AButtonGroup: typeof import('@arco-design/web-vue')['ButtonGroup'];
+    ACard: typeof import('@arco-design/web-vue')['Card'];
+    ACardMeta: typeof import('@arco-design/web-vue')['CardMeta'];
+    ACarousel: typeof import('@arco-design/web-vue')['Carousel'];
+    ACarouselItem: typeof import('@arco-design/web-vue')['CarouselItem'];
+    ACheckbox: typeof import('@arco-design/web-vue')['Checkbox'];
+    ACol: typeof import('@arco-design/web-vue')['Col'];
+    AConfigProvider: typeof import('@arco-design/web-vue')['ConfigProvider'];
+    ADescriptions: typeof import('@arco-design/web-vue')['Descriptions'];
+    ADescriptionsItem: typeof import('@arco-design/web-vue')['DescriptionsItem'];
+    ADivider: typeof import('@arco-design/web-vue')['Divider'];
+    ADoption: typeof import('@arco-design/web-vue')['Doption'];
+    ADrawer: typeof import('@arco-design/web-vue')['Drawer'];
+    ADropdown: typeof import('@arco-design/web-vue')['Dropdown'];
+    AForm: typeof import('@arco-design/web-vue')['Form'];
+    AFormItem: typeof import('@arco-design/web-vue')['FormItem'];
+    AGrid: typeof import('@arco-design/web-vue')['Grid'];
+    AGridItem: typeof import('@arco-design/web-vue')['GridItem'];
+    AInput: typeof import('@arco-design/web-vue')['Input'];
+    AInputNumber: typeof import('@arco-design/web-vue')['InputNumber'];
+    AInputPassword: typeof import('@arco-design/web-vue')['InputPassword'];
+    AInputSearch: typeof import('@arco-design/web-vue')['InputSearch'];
+    ALayout: typeof import('@arco-design/web-vue')['Layout'];
+    ALayoutContent: typeof import('@arco-design/web-vue')['LayoutContent'];
+    ALayoutFooter: typeof import('@arco-design/web-vue')['LayoutFooter'];
+    ALayoutSider: typeof import('@arco-design/web-vue')['LayoutSider'];
+    ALink: typeof import('@arco-design/web-vue')['Link'];
+    AList: typeof import('@arco-design/web-vue')['List'];
+    AListItem: typeof import('@arco-design/web-vue')['ListItem'];
+    AListItemMeta: typeof import('@arco-design/web-vue')['ListItemMeta'];
+    AMenu: typeof import('@arco-design/web-vue')['Menu'];
+    AMenuItem: typeof import('@arco-design/web-vue')['MenuItem'];
+    AModal: typeof import('@arco-design/web-vue')['Modal'];
+    AOption: typeof import('@arco-design/web-vue')['Option'];
+    APopconfirm: typeof import('@arco-design/web-vue')['Popconfirm'];
+    APopover: typeof import('@arco-design/web-vue')['Popover'];
+    ARadio: typeof import('@arco-design/web-vue')['Radio'];
+    ARadioGroup: typeof import('@arco-design/web-vue')['RadioGroup'];
+    ARangePicker: typeof import('@arco-design/web-vue')['RangePicker'];
+    AResult: typeof import('@arco-design/web-vue')['Result'];
+    ARow: typeof import('@arco-design/web-vue')['Row'];
+    ASelect: typeof import('@arco-design/web-vue')['Select'];
+    ASkeleton: typeof import('@arco-design/web-vue')['Skeleton'];
+    ASkeletonLine: typeof import('@arco-design/web-vue')['SkeletonLine'];
+    ASpace: typeof import('@arco-design/web-vue')['Space'];
+    ASpin: typeof import('@arco-design/web-vue')['Spin'];
+    AStatistic: typeof import('@arco-design/web-vue')['Statistic'];
+    AStep: typeof import('@arco-design/web-vue')['Step'];
+    ASteps: typeof import('@arco-design/web-vue')['Steps'];
+    ASubMenu: typeof import('@arco-design/web-vue')['SubMenu'];
+    ASwitch: typeof import('@arco-design/web-vue')['Switch'];
+    ATable: typeof import('@arco-design/web-vue')['Table'];
+    ATableColumn: typeof import('@arco-design/web-vue')['TableColumn'];
+    ATabPane: typeof import('@arco-design/web-vue')['TabPane'];
+    ATabs: typeof import('@arco-design/web-vue')['Tabs'];
+    ATag: typeof import('@arco-design/web-vue')['Tag'];
+    ATextarea: typeof import('@arco-design/web-vue')['Textarea'];
+    ATooltip: typeof import('@arco-design/web-vue')['Tooltip'];
+    ATree: typeof import('@arco-design/web-vue')['Tree'];
+    ATreeSelect: typeof import('@arco-design/web-vue')['TreeSelect'];
+    ATypographyParagraph: typeof import('@arco-design/web-vue')['TypographyParagraph'];
+    ATypographyText: typeof import('@arco-design/web-vue')['TypographyText'];
+    ATypographyTitle: typeof import('@arco-design/web-vue')['TypographyTitle'];
+    AUpload: typeof import('@arco-design/web-vue')['Upload'];
+    RouterLink: typeof import('vue-router')['RouterLink'];
+    RouterView: typeof import('vue-router')['RouterView'];
   }
 }
diff --git a/continew-admin-ui/package.json b/continew-admin-ui/package.json
index af7cf67e..67cfbf48 100644
--- a/continew-admin-ui/package.json
+++ b/continew-admin-ui/package.json
@@ -11,6 +11,7 @@
     "report": "cross-env REPORT=true npm run build",
     "preview": "npm run build && vite preview --host",
     "type:check": "vue-tsc --noEmit --skipLibCheck",
+    "lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix",
     "lint-staged": "npx lint-staged"
   },
   "lint-staged": {
diff --git a/continew-admin-ui/src/components/footer/index.vue b/continew-admin-ui/src/components/footer/index.vue
index ace0adfe..b8859a0b 100644
--- a/continew-admin-ui/src/components/footer/index.vue
+++ b/continew-admin-ui/src/components/footer/index.vue
@@ -1,12 +1,26 @@
 <template>
   <a-layout-footer class="footer">
     {{ `Copyright © 2022-${new Date().getFullYear()}` }}&nbsp;
-    <a href="https://blog.charles7c.top/about/me" target="_blank" rel="noopenner noreferrer">Charles7c</a>
+    <a
+      href="https://blog.charles7c.top/about/me"
+      target="_blank"
+      rel="noopenner noreferrer"
+      >Charles7c</a
+    >
     <span>&nbsp;⋅&nbsp;</span>
-    <a href="https://github.com/Charles7c/continew-admin" target="_blank" rel="noopenner noreferrer">{{ $t('title') }}</a>&nbsp;
-    v1.0.0
+    <a
+      href="https://github.com/Charles7c/continew-admin"
+      target="_blank"
+      rel="noopenner noreferrer"
+      >{{ $t('title') }}</a
+    >&nbsp; v1.0.0
     <span>&nbsp;⋅&nbsp;</span>
-    <a href="https://beian.miit.gov.cn" target="_blank" rel="noopenner noreferrer">津ICP备2022005864号-2</a>
+    <a
+      href="https://beian.miit.gov.cn"
+      target="_blank"
+      rel="noopenner noreferrer"
+      >津ICP备2022005864号-2</a
+    >
   </a-layout-footer>
 </template>
 
diff --git a/continew-admin-ui/src/components/navbar/index.vue b/continew-admin-ui/src/components/navbar/index.vue
index 8bd34433..c6395220 100644
--- a/continew-admin-ui/src/components/navbar/index.vue
+++ b/continew-admin-ui/src/components/navbar/index.vue
@@ -160,7 +160,10 @@
             :size="32"
             :style="{ marginRight: '8px', cursor: 'pointer' }"
           >
-            <img alt="avatar" :src="getAvatar(loginStore.avatar, loginStore.gender)" />
+            <img
+              alt="avatar"
+              :src="getAvatar(loginStore.avatar, loginStore.gender)"
+            />
           </a-avatar>
           <template #content>
             <a-doption>
diff --git a/continew-admin-ui/src/components/right-toolbar/index.vue b/continew-admin-ui/src/components/right-toolbar/index.vue
index 7f077d1a..0a850cb4 100644
--- a/continew-admin-ui/src/components/right-toolbar/index.vue
+++ b/continew-admin-ui/src/components/right-toolbar/index.vue
@@ -2,10 +2,14 @@
   <div class="header-operation-right">
     <a-button-group>
       <a-tooltip :content="showQuery ? '隐藏搜索栏' : '显示搜索栏'">
-        <a-button @click="toggleSearch"><template #icon><icon-search /></template></a-button>
+        <a-button @click="toggleSearch"
+          ><template #icon><icon-search /></template
+        ></a-button>
       </a-tooltip>
       <a-tooltip content="刷新">
-        <a-button @click="handleRefresh"><template #icon><icon-refresh /></template></a-button>
+        <a-button @click="handleRefresh"
+          ><template #icon><icon-refresh /></template
+        ></a-button>
       </a-tooltip>
     </a-button-group>
   </div>
@@ -42,4 +46,4 @@
   };
 </script>
 
-<style scoped lang="less"></style>
\ No newline at end of file
+<style scoped lang="less"></style>
diff --git a/continew-admin-ui/src/hooks/axios.d.ts b/continew-admin-ui/src/hooks/axios.d.ts
index 64e4b08a..ea19f56c 100644
--- a/continew-admin-ui/src/hooks/axios.d.ts
+++ b/continew-admin-ui/src/hooks/axios.d.ts
@@ -1,6 +1,6 @@
 import axios, { Axios, AxiosResponse, AxiosRequestConfig } from 'axios';
 
-declare module "axios" {
+declare module 'axios' {
   interface AxiosResponse<T = any> {
     success: boolean; // 是否成功
     code: number; // 状态码
@@ -9,4 +9,4 @@ declare module "axios" {
     data: T; // 返回数据
   }
   export function create(config?: AxiosRequestConfig): AxiosInstance;
-}
\ No newline at end of file
+}
diff --git a/continew-admin-ui/src/router/routes/modules/arco-design/list.ts b/continew-admin-ui/src/router/routes/modules/arco-design/list.ts
index 62fe03b4..a4d4e9dc 100644
--- a/continew-admin-ui/src/router/routes/modules/arco-design/list.ts
+++ b/continew-admin-ui/src/router/routes/modules/arco-design/list.ts
@@ -15,7 +15,8 @@ const LIST: AppRouteRecordRaw = {
     {
       path: 'search-table', // The midline path complies with SEO specifications
       name: 'SearchTable',
-      component: () => import('@/views/arco-design/list/search-table/index.vue'),
+      component: () =>
+        import('@/views/arco-design/list/search-table/index.vue'),
       meta: {
         locale: 'menu.list.searchTable',
         requiresAuth: true,
diff --git a/continew-admin-ui/src/router/routes/modules/arco-design/visualization.ts b/continew-admin-ui/src/router/routes/modules/arco-design/visualization.ts
index 98bfc86c..f15ea42a 100644
--- a/continew-admin-ui/src/router/routes/modules/arco-design/visualization.ts
+++ b/continew-admin-ui/src/router/routes/modules/arco-design/visualization.ts
@@ -15,7 +15,8 @@ const VISUALIZATION: AppRouteRecordRaw = {
     {
       path: 'data-analysis',
       name: 'DataAnalysis',
-      component: () => import('@/views/arco-design/visualization/data-analysis/index.vue'),
+      component: () =>
+        import('@/views/arco-design/visualization/data-analysis/index.vue'),
       meta: {
         locale: 'menu.visualization.dataAnalysis',
         requiresAuth: true,
@@ -26,7 +27,9 @@ const VISUALIZATION: AppRouteRecordRaw = {
       path: 'multi-dimension-data-analysis',
       name: 'MultiDimensionDataAnalysis',
       component: () =>
-        import('@/views/arco-design/visualization/multi-dimension-data-analysis/index.vue'),
+        import(
+          '@/views/arco-design/visualization/multi-dimension-data-analysis/index.vue'
+        ),
       meta: {
         locale: 'menu.visualization.multiDimensionDataAnalysis',
         requiresAuth: true,
@@ -36,7 +39,8 @@ const VISUALIZATION: AppRouteRecordRaw = {
     {
       path: 'monitor',
       name: 'Monitor',
-      component: () => import('@/views/arco-design/visualization/monitor/index.vue'),
+      component: () =>
+        import('@/views/arco-design/visualization/monitor/index.vue'),
       meta: {
         locale: 'menu.dashboard.monitor',
         requiresAuth: true,
diff --git a/continew-admin-ui/src/utils/avatar.ts b/continew-admin-ui/src/utils/avatar.ts
index 25401e00..5f0e609c 100644
--- a/continew-admin-ui/src/utils/avatar.ts
+++ b/continew-admin-ui/src/utils/avatar.ts
@@ -2,7 +2,10 @@ import Unknown from '../assets/images/avatar/unknown.png';
 import Male from '../assets/images/avatar/male.png';
 import Female from '../assets/images/avatar/female.png';
 
-export default function getAvatar(avatar: string | undefined, gender: number | undefined) {
+export default function getAvatar(
+  avatar: string | undefined,
+  gender: number | undefined
+) {
   if (avatar) {
     const baseUrl = import.meta.env.VITE_API_BASE_URL;
     return `${baseUrl}/avatar/${avatar}`;
diff --git a/continew-admin-ui/src/views/arco-design/list/search-table/index.vue b/continew-admin-ui/src/views/arco-design/list/search-table/index.vue
index 70bed540..e2321957 100644
--- a/continew-admin-ui/src/views/arco-design/list/search-table/index.vue
+++ b/continew-admin-ui/src/views/arco-design/list/search-table/index.vue
@@ -167,7 +167,9 @@
                     <div>
                       <a-checkbox
                         v-model="item.checked"
-                        @change="handleChange($event, item as TableColumnData, index)"
+                        @change="
+                          handleChange($event, item as TableColumnData, index)
+                        "
                       >
                       </a-checkbox>
                     </div>
diff --git a/continew-admin-ui/src/views/login/components/login-form.vue b/continew-admin-ui/src/views/login/components/login-form.vue
index ddeaac50..8778a144 100644
--- a/continew-admin-ui/src/views/login/components/login-form.vue
+++ b/continew-admin-ui/src/views/login/components/login-form.vue
@@ -55,12 +55,7 @@
             {{ $t('login.form.rememberMe') }}
           </a-checkbox>
         </div>
-        <a-button
-          :loading="loading"
-          type="primary"
-          long
-          html-type="submit"
-        >
+        <a-button :loading="loading" type="primary" long html-type="submit">
           {{ $t('login.form.login') }}
         </a-button>
       </a-space>
diff --git a/continew-admin-ui/src/views/login/index.vue b/continew-admin-ui/src/views/login/index.vue
index e4b1e1cf..cd69a3d1 100644
--- a/continew-admin-ui/src/views/login/index.vue
+++ b/continew-admin-ui/src/views/login/index.vue
@@ -69,4 +69,4 @@
       }
     }
   }
-</style>
\ No newline at end of file
+</style>
diff --git a/continew-admin-ui/src/views/login/locale/en-US.ts b/continew-admin-ui/src/views/login/locale/en-US.ts
index ce472c28..539b837c 100644
--- a/continew-admin-ui/src/views/login/locale/en-US.ts
+++ b/continew-admin-ui/src/views/login/locale/en-US.ts
@@ -1,6 +1,7 @@
 export default {
   'login.form.title': 'Login to ContiNew Admin',
-  'login.form.subTitle': 'Continue to build the latest popular technology stack in the background management framework',
+  'login.form.subTitle':
+    'Continue to build the latest popular technology stack in the background management framework',
 
   'login.form.placeholder.username': 'Please enter username',
   'login.form.placeholder.password': 'Please enter password',
@@ -27,5 +28,6 @@ export default {
   'login.banner.subSlogan2':
     'Rich basic functions, low threshold to use, enterprise rapid development scaffolding',
   'login.banner.slogan3': 'The code is standard and open source and free',
-  'login.banner.subSlogan3': 'The backend code is fully compliant with the Alibaba coding specification, and the frontend code is strictly ESLint checked',
+  'login.banner.subSlogan3':
+    'The backend code is fully compliant with the Alibaba coding specification, and the frontend code is strictly ESLint checked',
 };
diff --git a/continew-admin-ui/src/views/login/locale/zh-CN.ts b/continew-admin-ui/src/views/login/locale/zh-CN.ts
index 2e38fbc5..84b140c1 100644
--- a/continew-admin-ui/src/views/login/locale/zh-CN.ts
+++ b/continew-admin-ui/src/views/login/locale/zh-CN.ts
@@ -21,9 +21,11 @@ export default {
   'login.form.logout.success': '退出成功',
 
   'login.banner.slogan1': '中后台管理框架',
-  'login.banner.subSlogan1': 'Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化',
+  'login.banner.subSlogan1':
+    'Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化',
   'login.banner.slogan2': '内置了常见问题的解决方案',
   'login.banner.subSlogan2': '基础功能丰富,使用门槛低,企业级快速开发脚手架',
   'login.banner.slogan3': '代码规范且开源免费',
-  'login.banner.subSlogan3': '后端代码完全遵循阿里巴巴编码规范,前端代码使用严格的 ESLint 检查',
+  'login.banner.subSlogan3':
+    '后端代码完全遵循阿里巴巴编码规范,前端代码使用严格的 ESLint 检查',
 };
diff --git a/continew-admin-ui/src/views/monitor/log/login/index.vue b/continew-admin-ui/src/views/monitor/log/login/index.vue
index bad79736..0d4108cb 100644
--- a/continew-admin-ui/src/views/monitor/log/login/index.vue
+++ b/continew-admin-ui/src/views/monitor/log/login/index.vue
@@ -61,7 +61,9 @@
           <a-table-column title="登录行为" data-index="description" />
           <a-table-column title="登录状态" align="center">
             <template #cell="{ record }">
-              <a-tag v-if="record.status === 1" color="green"><span class="circle pass" />成功</a-tag>
+              <a-tag v-if="record.status === 1" color="green"
+                ><span class="circle pass" />成功</a-tag
+              >
               <a-tooltip v-else :content="record.errorMsg">
                 <a-tag color="red" style="cursor: pointer">
                   <span class="circle fail" />失败
@@ -88,7 +90,9 @@
   } from '@/api/monitor/log';
 
   const { proxy } = getCurrentInstance() as any;
-  const { SuccessFailureStatusEnum } = proxy.useDict('SuccessFailureStatusEnum');
+  const { SuccessFailureStatusEnum } = proxy.useDict(
+    'SuccessFailureStatusEnum'
+  );
 
   const loginLogList = ref<LoginLogRecord[]>([]);
   const total = ref(0);
diff --git a/continew-admin-ui/src/views/monitor/log/operation/index.vue b/continew-admin-ui/src/views/monitor/log/operation/index.vue
index 05ded3ac..3986b0d0 100644
--- a/continew-admin-ui/src/views/monitor/log/operation/index.vue
+++ b/continew-admin-ui/src/views/monitor/log/operation/index.vue
@@ -72,7 +72,9 @@
           <a-table-column title="所属模块" data-index="module" />
           <a-table-column title="操作状态" align="center">
             <template #cell="{ record }">
-              <a-tag v-if="record.status === 1" color="green"><span class="circle pass" />成功</a-tag>
+              <a-tag v-if="record.status === 1" color="green"
+                ><span class="circle pass" />成功</a-tag
+              >
               <a-tooltip v-else :content="record.errorMsg">
                 <a-tag color="red" style="cursor: pointer">
                   <span class="circle fail" />失败
@@ -98,7 +100,9 @@
   } from '@/api/monitor/log';
 
   const { proxy } = getCurrentInstance() as any;
-  const { SuccessFailureStatusEnum } = proxy.useDict('SuccessFailureStatusEnum');
+  const { SuccessFailureStatusEnum } = proxy.useDict(
+    'SuccessFailureStatusEnum'
+  );
 
   const operationLogList = ref<OperationLogRecord[]>([]);
   const total = ref(0);
diff --git a/continew-admin-ui/src/views/monitor/log/system/index.vue b/continew-admin-ui/src/views/monitor/log/system/index.vue
index b8724af7..17be3a2c 100644
--- a/continew-admin-ui/src/views/monitor/log/system/index.vue
+++ b/continew-admin-ui/src/views/monitor/log/system/index.vue
@@ -50,15 +50,27 @@
           </a-table-column>
           <a-table-column title="状态码" align="center">
             <template #cell="{ record }">
-              <a-tag v-if="record.statusCode >= 400" color="red">{{ record.statusCode }}</a-tag>
-              <a-tag v-else-if="record.statusCode === 200" color="green">{{ record.statusCode }}</a-tag>
+              <a-tag v-if="record.statusCode >= 400" color="red">{{
+                record.statusCode
+              }}</a-tag>
+              <a-tag v-else-if="record.statusCode === 200" color="green">{{
+                record.statusCode
+              }}</a-tag>
               <a-tag v-else color="orange">{{ record.statusCode }}</a-tag>
             </template>
           </a-table-column>
-          <a-table-column title="请求方式" align="center" data-index="requestMethod" />
+          <a-table-column
+            title="请求方式"
+            align="center"
+            data-index="requestMethod"
+          />
           <a-table-column title="请求 URI">
             <template #cell="{ record }">
-              <span :title="decodeURIComponent(record.requestUrl)">{{ record.requestUrl.match(/(\w+):\/\/([^/:]+)(:\d*)?([^#|\?|\n]*)(\?.*)?/)[4] }}</span>
+              <span :title="decodeURIComponent(record.requestUrl)">{{
+                record.requestUrl.match(
+                  /(\w+):\/\/([^/:]+)(:\d*)?([^#|\?|\n]*)(\?.*)?/
+                )[4]
+              }}</span>
             </template>
           </a-table-column>
           <a-table-column title="客户端 IP" data-index="clientIp" />
@@ -66,18 +78,33 @@
           <a-table-column title="浏览器" data-index="browser" />
           <a-table-column title="请求耗时">
             <template #cell="{ record }">
-              <a-tag v-if="record.elapsedTime > 500" color="red">{{ record.elapsedTime }} ms</a-tag>
-              <a-tag v-else-if="record.elapsedTime > 200" color="orange">{{ record.elapsedTime }} ms</a-tag>
+              <a-tag v-if="record.elapsedTime > 500" color="red"
+                >{{ record.elapsedTime }} ms</a-tag
+              >
+              <a-tag v-else-if="record.elapsedTime > 200" color="orange"
+                >{{ record.elapsedTime }} ms</a-tag
+              >
               <a-tag v-else color="green">{{ record.elapsedTime }} ms</a-tag>
             </template>
           </a-table-column>
           <a-table-column title="创建时间" data-index="createTime" />
           <a-table-column title="操作" align="center">
             <template #cell="{ record }">
-              <a-button type="text" size="small" title="查看详情" @click="toDetail(record.id)">
+              <a-button
+                type="text"
+                size="small"
+                title="查看详情"
+                @click="toDetail(record.id)"
+              >
                 <template #icon><icon-eye /></template>详情
               </a-button>
-              <a-button v-if="record.exceptionDetail" type="text" size="small" title="查看异常详情" @click="toExceptionDetail(record)">
+              <a-button
+                v-if="record.exceptionDetail"
+                type="text"
+                size="small"
+                title="查看异常详情"
+                @click="toExceptionDetail(record)"
+              >
                 <template #icon><icon-bug /></template>异常
               </a-button>
             </template>
@@ -126,7 +153,9 @@
                 <a-tag v-else-if="systemLog.elapsedTime > 200" color="orange">
                   {{ systemLog.elapsedTime }} ms
                 </a-tag>
-                <a-tag v-else color="green">{{ systemLog.elapsedTime }} ms</a-tag>
+                <a-tag v-else color="green"
+                  >{{ systemLog.elapsedTime }} ms</a-tag
+                >
               </span>
             </a-descriptions-item>
             <a-descriptions-item label="创建时间">
@@ -136,14 +165,23 @@
               <span v-else>{{ systemLog.createTime }}</span>
             </a-descriptions-item>
           </a-descriptions>
-          <a-descriptions title="协议信息" :column="2" bordered style="margin-top: 25px">
+          <a-descriptions
+            title="协议信息"
+            :column="2"
+            bordered
+            style="margin-top: 25px"
+          >
             <a-descriptions-item label="状态码">
               <a-skeleton v-if="loading" :animation="true">
                 <a-skeleton-line :rows="1" />
               </a-skeleton>
               <span v-else>
-                <a-tag v-if="systemLog.statusCode >= 400" color="red">{{ systemLog.statusCode }}</a-tag>
-                <a-tag v-else-if="systemLog.statusCode === 200" color="green">{{ systemLog.statusCode }}</a-tag>
+                <a-tag v-if="systemLog.statusCode >= 400" color="red">{{
+                  systemLog.statusCode
+                }}</a-tag>
+                <a-tag v-else-if="systemLog.statusCode === 200" color="green">{{
+                  systemLog.statusCode
+                }}</a-tag>
                 <a-tag v-else color="orange">{{ systemLog.statusCode }}</a-tag>
               </span>
             </a-descriptions-item>
@@ -168,7 +206,8 @@
                   v-if="systemLog.responseBody"
                   :path="'res'"
                   :data="JSON.parse(systemLog.responseBody)"
-                  :show-length="true" />
+                  :show-length="true"
+                />
                 <span v-else>无</span>
               </a-space>
             </a-descriptions-item>
@@ -181,7 +220,8 @@
                   v-if="systemLog.responseHeaders"
                   :path="'res'"
                   :data="JSON.parse(systemLog.responseHeaders)"
-                  :show-length="true" />
+                  :show-length="true"
+                />
                 <span v-else>无</span>
               </a-space>
             </a-descriptions-item>
@@ -194,7 +234,8 @@
                   v-if="systemLog.requestBody"
                   :path="'res'"
                   :data="JSON.parse(systemLog.requestBody)"
-                  :show-length="true" />
+                  :show-length="true"
+                />
                 <span v-else>无</span>
               </a-space>
             </a-descriptions-item>
@@ -206,7 +247,8 @@
                 <VueJsonPretty
                   v-if="systemLog.requestHeaders"
                   :data="JSON.parse(systemLog.requestHeaders)"
-                  :show-length="true" />
+                  :show-length="true"
+                />
                 <span v-else>无</span>
               </a-space>
             </a-descriptions-item>
diff --git a/continew-admin-ui/src/views/monitor/online/index.vue b/continew-admin-ui/src/views/monitor/online/index.vue
index 310c4a2f..36e6caab 100644
--- a/continew-admin-ui/src/views/monitor/online/index.vue
+++ b/continew-admin-ui/src/views/monitor/online/index.vue
@@ -12,7 +12,7 @@
                 v-model="queryParams.nickname"
                 placeholder="输入用户昵称搜索"
                 allow-clear
-                style="width: 150px;"
+                style="width: 150px"
                 @press-enter="handleQuery"
               />
             </a-form-item>
@@ -59,22 +59,34 @@
           </a-table-column>
           <a-table-column title="用户昵称">
             <template #cell="{ record }">
-              {{ record.nickname }}({{record.username}})
+              {{ record.nickname }}({{ record.username }})
             </template>
           </a-table-column>
           <a-table-column title="登录 IP" data-index="clientIp" />
           <a-table-column title="登录地点" data-index="location" />
           <a-table-column title="浏览器" data-index="browser" />
           <a-table-column title="登录时间" data-index="loginTime" />
-          <a-table-column v-if="checkPermission(['monitor:online:user:delete'])" title="操作" align="center">
+          <a-table-column
+            v-if="checkPermission(['monitor:online:user:delete'])"
+            title="操作"
+            align="center"
+          >
             <template #cell="{ record }">
-              <a-popconfirm content="确定要强退该用户吗?" type="warning" @ok="handleKickout(record.token)">
+              <a-popconfirm
+                content="确定要强退该用户吗?"
+                type="warning"
+                @ok="handleKickout(record.token)"
+              >
                 <a-button
                   v-permission="['monitor:online:user:delete']"
                   type="text"
                   size="small"
                   :disabled="currentToken === record.token"
-                  :title="currentToken === record.token ? '不能强退当前登录用户' : '强退'"
+                  :title="
+                    currentToken === record.token
+                      ? '不能强退当前登录用户'
+                      : '强退'
+                  "
                 >
                   <template #icon><icon-delete /></template>强退
                 </a-button>
@@ -124,12 +136,14 @@
    */
   const getList = (params: OnlineUserParam = { ...queryParams.value }) => {
     loading.value = true;
-    listOnlineUser(params).then((res) => {
-      onlineUserList.value = res.data.list;
-      total.value = res.data.total;
-    }).finally(() => {
-      loading.value = false;
-    });
+    listOnlineUser(params)
+      .then((res) => {
+        onlineUserList.value = res.data.list;
+        total.value = res.data.total;
+      })
+      .finally(() => {
+        loading.value = false;
+      });
   };
   getList();
 
diff --git a/continew-admin-ui/src/views/system/dept/index.vue b/continew-admin-ui/src/views/system/dept/index.vue
index b59de1d5..61675951 100644
--- a/continew-admin-ui/src/views/system/dept/index.vue
+++ b/continew-admin-ui/src/views/system/dept/index.vue
@@ -113,23 +113,19 @@
         <template #columns>
           <a-table-column title="部门名称">
             <template #cell="{ record }">
-              <a-link @click="toDetail(record.id)">{{
-                record.name
-              }}</a-link>
+              <a-link @click="toDetail(record.id)">{{ record.name }}</a-link>
             </template>
           </a-table-column>
-          <a-table-column
-            title="部门排序"
-            align="center"
-            data-index="sort"
-          />
+          <a-table-column title="部门排序" align="center" data-index="sort" />
           <a-table-column title="状态" align="center" data-index="status">
             <template #cell="{ record }">
               <a-switch
                 v-model="record.status"
                 :checked-value="1"
                 :unchecked-value="2"
-                :disabled="record.disabled || !checkPermission(['system:dept:update'])"
+                :disabled="
+                  record.disabled || !checkPermission(['system:dept:update'])
+                "
                 @change="handleChangeStatus(record)"
               />
             </template>
@@ -188,7 +184,11 @@
         @cancel="handleCancel"
       >
         <a-form ref="formRef" :model="form" :rules="rules" size="large">
-          <a-form-item label="上级部门" field="parentId" :disabled="form.disabled">
+          <a-form-item
+            label="上级部门"
+            field="parentId"
+            :disabled="form.disabled"
+          >
             <a-tree-select
               v-model="form.parentId"
               :data="treeData"
@@ -527,7 +527,10 @@
       }
     } else if (record.children) {
       record.children.forEach((r) => {
-        rowKeys.splice(rowKeys.findIndex((key: number | undefined) => key === r.id), 1);
+        rowKeys.splice(
+          rowKeys.findIndex((key: number | undefined) => key === r.id),
+          1
+        );
         proxy.$refs.tableRef.select(r.id, false);
         if (r.children) {
           handleSelect(rowKeys, rowKey, r);
diff --git a/continew-admin-ui/src/views/system/menu/index.vue b/continew-admin-ui/src/views/system/menu/index.vue
index 41831974..14fac848 100644
--- a/continew-admin-ui/src/views/system/menu/index.vue
+++ b/continew-admin-ui/src/views/system/menu/index.vue
@@ -307,21 +307,13 @@
               <a-radio :value="false">否</a-radio>
             </a-radio-group>
           </a-form-item>
-          <a-form-item
-            v-if="form.type === 2"
-            label="是否缓存"
-            field="isCache"
-          >
+          <a-form-item v-if="form.type === 2" label="是否缓存" field="isCache">
             <a-radio-group v-model="form.isCache" type="button">
               <a-radio :value="true">是</a-radio>
               <a-radio :value="false">否</a-radio>
             </a-radio-group>
           </a-form-item>
-          <a-form-item
-            v-if="form.type !== 3"
-            label="是否隐藏"
-            field="isHidden"
-          >
+          <a-form-item v-if="form.type !== 3" label="是否隐藏" field="isHidden">
             <a-radio-group v-model="form.isHidden" type="button">
               <a-radio :value="true">是</a-radio>
               <a-radio :value="false">否</a-radio>
diff --git a/continew-admin-ui/src/views/system/role/index.vue b/continew-admin-ui/src/views/system/role/index.vue
index 48db00fa..15a3de18 100644
--- a/continew-admin-ui/src/views/system/role/index.vue
+++ b/continew-admin-ui/src/views/system/role/index.vue
@@ -118,33 +118,31 @@
           <a-table-column title="ID" data-index="id" />
           <a-table-column title="角色名称" data-index="name" :width="130">
             <template #cell="{ record }">
-              <a-link @click="toDetail(record.id)">{{
-                record.name
-              }}</a-link>
+              <a-link @click="toDetail(record.id)">{{ record.name }}</a-link>
             </template>
           </a-table-column>
           <a-table-column title="角色编码" data-index="code" />
           <a-table-column title="数据权限" :width="130">
             <template #cell="{ record }">
               <span v-if="record.dataScope === 1">全部数据权限</span>
-              <span v-else-if="record.dataScope === 2">本部门及以下数据权限</span>
+              <span v-else-if="record.dataScope === 2"
+                >本部门及以下数据权限</span
+              >
               <span v-else-if="record.dataScope === 3">本部门数据权限</span>
               <span v-else-if="record.dataScope === 4">仅本人数据权限</span>
               <span v-else>自定义数据权限</span>
             </template>
           </a-table-column>
-          <a-table-column
-            title="角色排序"
-            align="center"
-            data-index="sort"
-          />
+          <a-table-column title="角色排序" align="center" data-index="sort" />
           <a-table-column title="状态" align="center" data-index="status">
             <template #cell="{ record }">
               <a-switch
                 v-model="record.status"
                 :checked-value="1"
                 :unchecked-value="2"
-                :disabled="record.disabled || !checkPermission(['system:role:update'])"
+                :disabled="
+                  record.disabled || !checkPermission(['system:role:update'])
+                "
                 @change="handleChangeStatus(record)"
               />
             </template>
@@ -204,7 +202,11 @@
         @cancel="handleCancel"
       >
         <a-form ref="formRef" :model="form" :rules="rules" size="large">
-          <a-alert v-if="!form.disabled" type="warning" style="margin-bottom: 15px;">
+          <a-alert
+            v-if="!form.disabled"
+            type="warning"
+            style="margin-bottom: 15px"
+          >
             变更角色编码、功能权限或数据权限后,关联在线用户会自动下线!
           </a-alert>
           <fieldset>
@@ -212,7 +214,11 @@
             <a-form-item label="角色名称" field="name">
               <a-input v-model="form.name" placeholder="请输入角色名称" />
             </a-form-item>
-            <a-form-item label="角色编码" field="code" :disabled="form.disabled">
+            <a-form-item
+              label="角色编码"
+              field="code"
+              :disabled="form.disabled"
+            >
               <a-input v-model="form.code" placeholder="请输入角色编码" />
             </a-form-item>
             <a-form-item label="角色排序" field="sort">
@@ -239,8 +245,16 @@
             <legend>功能权限</legend>
             <a-form-item label="功能权限" :disabled="form.disabled">
               <a-space style="margin-top: 2px">
-                <a-checkbox v-model="menuExpandAll" @change="handleExpandAll('menu')">展开/折叠</a-checkbox>
-                <a-checkbox v-model="menuCheckAll" @change="handleCheckAll('menu')">全选/全不选</a-checkbox>
+                <a-checkbox
+                  v-model="menuExpandAll"
+                  @change="handleExpandAll('menu')"
+                  >展开/折叠</a-checkbox
+                >
+                <a-checkbox
+                  v-model="menuCheckAll"
+                  @change="handleCheckAll('menu')"
+                  >全选/全不选</a-checkbox
+                >
                 <a-checkbox v-model="menuCheckStrictly">父子联动</a-checkbox>
               </a-space>
               <template #extra>
@@ -259,17 +273,33 @@
           </fieldset>
           <fieldset>
             <legend>数据权限</legend>
-            <a-form-item label="数据权限" field="dataScope" :disabled="form.disabled">
+            <a-form-item
+              label="数据权限"
+              field="dataScope"
+              :disabled="form.disabled"
+            >
               <a-select
                 v-model="form.dataScope"
                 :options="DataScopeEnum"
                 placeholder="请选择数据权限"
               />
             </a-form-item>
-            <a-form-item v-if="form.dataScope === 5" label="权限范围" :disabled="form.disabled">
+            <a-form-item
+              v-if="form.dataScope === 5"
+              label="权限范围"
+              :disabled="form.disabled"
+            >
               <a-space style="margin-top: 2px">
-                <a-checkbox v-model="deptExpandAll" @change="handleExpandAll('dept')">展开/折叠</a-checkbox>
-                <a-checkbox v-model="deptCheckAll" @change="handleCheckAll('dept')">全选/全不选</a-checkbox>
+                <a-checkbox
+                  v-model="deptExpandAll"
+                  @change="handleExpandAll('dept')"
+                  >展开/折叠</a-checkbox
+                >
+                <a-checkbox
+                  v-model="deptCheckAll"
+                  @change="handleCheckAll('dept')"
+                  >全选/全不选</a-checkbox
+                >
                 <a-checkbox v-model="deptCheckStrictly">父子联动</a-checkbox>
               </a-space>
               <template #extra>
@@ -328,7 +358,9 @@
               </a-skeleton>
               <span v-else>
                 <span v-if="role.dataScope === 1">全部数据权限</span>
-                <span v-else-if="role.dataScope === 2">本部门及以下数据权限</span>
+                <span v-else-if="role.dataScope === 2"
+                  >本部门及以下数据权限</span
+                >
                 <span v-else-if="role.dataScope === 3">本部门数据权限</span>
                 <span v-else-if="role.dataScope === 4">仅本人数据权限</span>
                 <span v-else>自定义数据权限</span>
@@ -468,14 +500,15 @@
         { required: true, message: '请输入角色名称' },
         {
           match: /^[\u4e00-\u9fa5a-zA-Z0-9_-]{1,20}$/,
-          message: '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线'
+          message:
+            '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线',
         },
       ],
       code: [
         { required: true, message: '请输入角色编码' },
         {
           match: /^[a-zA-Z][a-zA-Z0-9_]{1,15}$/,
-          message: '长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头'
+          message: '长度为 2 到 16 位,可以包含字母、数字,下划线,以字母开头',
         },
       ],
       dataScope: [{ required: true, message: '请选择数据权限' }],
diff --git a/continew-admin-ui/src/views/system/user/center/components/basic-info.vue b/continew-admin-ui/src/views/system/user/center/components/basic-info.vue
index 46685ce9..433a2782 100644
--- a/continew-admin-ui/src/views/system/user/center/components/basic-info.vue
+++ b/continew-admin-ui/src/views/system/user/center/components/basic-info.vue
@@ -8,21 +8,30 @@
     size="large"
     class="form"
   >
-    <a-form-item :label="$t('userCenter.basicInfo.form.label.username')" disabled>
+    <a-form-item
+      :label="$t('userCenter.basicInfo.form.label.username')"
+      disabled
+    >
       <a-input
         v-model="form.username"
         :placeholder="$t('userCenter.basicInfo.form.placeholder.username')"
         max-length="16"
       />
     </a-form-item>
-    <a-form-item :label="$t('userCenter.basicInfo.form.label.nickname')" field="nickname">
+    <a-form-item
+      :label="$t('userCenter.basicInfo.form.label.nickname')"
+      field="nickname"
+    >
       <a-input
         v-model="form.nickname"
         :placeholder="$t('userCenter.basicInfo.form.placeholder.nickname')"
         max-length="20"
       />
     </a-form-item>
-    <a-form-item :label="$t('userCenter.basicInfo.form.label.gender')" field="gender">
+    <a-form-item
+      :label="$t('userCenter.basicInfo.form.label.gender')"
+      field="gender"
+    >
       <a-radio-group v-model="form.gender">
         <a-radio :value="1">男</a-radio>
         <a-radio :value="2">女</a-radio>
diff --git a/continew-admin-ui/src/views/system/user/center/components/operation-log.vue b/continew-admin-ui/src/views/system/user/center/components/operation-log.vue
index ec678ca7..af3475e8 100644
--- a/continew-admin-ui/src/views/system/user/center/components/operation-log.vue
+++ b/continew-admin-ui/src/views/system/user/center/components/operation-log.vue
@@ -29,7 +29,9 @@
         <a-table-column title="所属模块" data-index="module" />
         <a-table-column title="操作状态" align="center">
           <template #cell="{ record }">
-            <a-tag v-if="record.status === 1" color="green"><span class="circle pass" />成功</a-tag>
+            <a-tag v-if="record.status === 1" color="green"
+              ><span class="circle pass" />成功</a-tag
+            >
             <a-tooltip v-else :content="record.errorMsg">
               <a-tag color="red" style="cursor: pointer">
                 <span class="circle fail" />失败
diff --git a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue
index 2431844e..e5b8f9a0 100644
--- a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue
+++ b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-email.vue
@@ -8,14 +8,25 @@
     <template #description>
       <div class="content">
         <a-typography-paragraph v-if="loginStore.email">
-          {{ $t('userCenter.securitySettings.updateEmail.placeholder.success.email') }}:{{ loginStore.email }}
+          {{
+            $t(
+              'userCenter.securitySettings.updateEmail.placeholder.success.email'
+            )
+          }}:{{ loginStore.email }}
         </a-typography-paragraph>
         <a-typography-paragraph v-else class="tip">
-          {{ $t('userCenter.securitySettings.updateEmail.placeholder.error.email') }}
+          {{
+            $t(
+              'userCenter.securitySettings.updateEmail.placeholder.error.email'
+            )
+          }}
         </a-typography-paragraph>
       </div>
       <div class="operation">
-        <a-link :title="$t('userCenter.securitySettings.button.update')" @click="toUpdate">
+        <a-link
+          :title="$t('userCenter.securitySettings.button.update')"
+          @click="toUpdate"
+        >
           {{ $t('userCenter.securitySettings.button.update') }}
         </a-link>
       </div>
@@ -30,17 +41,35 @@
     @cancel="handleCancel"
   >
     <a-form ref="formRef" :model="form" :rules="rules" size="large">
-      <a-form-item :label="$t('userCenter.securitySettings.updateEmail.form.label.newEmail')" field="newEmail">
+      <a-form-item
+        :label="
+          $t('userCenter.securitySettings.updateEmail.form.label.newEmail')
+        "
+        field="newEmail"
+      >
         <a-input
           v-model="form.newEmail"
-          :placeholder="$t('userCenter.securitySettings.updateEmail.form.placeholder.newEmail')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updateEmail.form.placeholder.newEmail'
+            )
+          "
           allow-clear
         />
       </a-form-item>
-      <a-form-item :label="$t('userCenter.securitySettings.updateEmail.form.label.captcha')" field="captcha">
+      <a-form-item
+        :label="
+          $t('userCenter.securitySettings.updateEmail.form.label.captcha')
+        "
+        field="captcha"
+      >
         <a-input
           v-model="form.captcha"
-          :placeholder="$t('userCenter.securitySettings.updateEmail.form.placeholder.captcha')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updateEmail.form.placeholder.captcha'
+            )
+          "
           max-length="6"
           allow-clear
           style="width: 80%"
@@ -55,10 +84,21 @@
           {{ captchaBtnName }}
         </a-button>
       </a-form-item>
-      <a-form-item :label="$t('userCenter.securitySettings.updateEmail.form.label.currentPassword')" field="currentPassword">
+      <a-form-item
+        :label="
+          $t(
+            'userCenter.securitySettings.updateEmail.form.label.currentPassword'
+          )
+        "
+        field="currentPassword"
+      >
         <a-input-password
           v-model="form.currentPassword"
-          :placeholder="$t('userCenter.securitySettings.updateEmail.form.placeholder.currentPassword')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updateEmail.form.placeholder.currentPassword'
+            )
+          "
           max-length="32"
           allow-clear
         />
@@ -85,7 +125,9 @@
   const captchaLoading = ref(false);
   const captchaDisable = ref(false);
   const visible = ref(false);
-  const captchaBtnNameKey = ref('userCenter.securitySettings.updateEmail.form.sendCaptcha');
+  const captchaBtnNameKey = ref(
+    'userCenter.securitySettings.updateEmail.form.sendCaptcha'
+  );
   const captchaBtnName = computed(() => t(captchaBtnNameKey.value));
 
   // 表单数据
@@ -98,24 +140,48 @@
   const rules = computed((): Record<string, FieldRule[]> => {
     return {
       newEmail: [
-        { required: true, message: t('userCenter.securitySettings.updateEmail.form.error.required.newEmail') },
-        { type: 'email', message: t('userCenter.securitySettings.updateEmail.form.error.match.newEmail') },
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updateEmail.form.error.required.newEmail'
+          ),
+        },
+        {
+          type: 'email',
+          message: t(
+            'userCenter.securitySettings.updateEmail.form.error.match.newEmail'
+          ),
+        },
         {
           validator: (value, callback) => {
             if (value === loginStore.email) {
-              callback(t('userCenter.securitySettings.updateEmail.form.error.validator.newEmail'))
+              callback(
+                t(
+                  'userCenter.securitySettings.updateEmail.form.error.validator.newEmail'
+                )
+              );
             } else {
-              callback()
+              callback();
             }
-          }
-        }
+          },
+        },
       ],
       captcha: [
-        { required: true, message: t('userCenter.securitySettings.updateEmail.form.error.required.captcha') }
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updateEmail.form.error.required.captcha'
+          ),
+        },
       ],
       currentPassword: [
-        { required: true, message: t('userCenter.securitySettings.updateEmail.form.error.required.currentPassword') }
-      ]
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updateEmail.form.error.required.currentPassword'
+          ),
+        },
+      ],
     };
   });
 
@@ -125,9 +191,10 @@
   const resetCaptcha = () => {
     window.clearInterval(captchaTimer.value);
     captchaTime.value = 60;
-    captchaBtnNameKey.value = 'userCenter.securitySettings.updateEmail.form.sendCaptcha';
+    captchaBtnNameKey.value =
+      'userCenter.securitySettings.updateEmail.form.sendCaptcha';
     captchaDisable.value = false;
-  }
+  };
 
   /**
    * 发送验证码
@@ -137,28 +204,37 @@
     proxy.$refs.formRef.validateField('newEmail', (valid: any) => {
       if (!valid) {
         captchaLoading.value = true;
-        captchaBtnNameKey.value = 'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha';
+        captchaBtnNameKey.value =
+          'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha';
         getMailCaptcha({
-          email: form.newEmail
-        }).then((res) => {
-          captchaLoading.value = false;
-          captchaDisable.value = true;
-          captchaBtnNameKey.value = `${t('userCenter.securitySettings.updateEmail.form.reSendCaptcha')}(${captchaTime.value -= 1}s)`;
-          captchaTimer.value = window.setInterval(() => {
-            captchaTime.value -= 1;
-            captchaBtnNameKey.value = `${t('userCenter.securitySettings.updateEmail.form.reSendCaptcha')}(${captchaTime.value}s)`;
-            if (captchaTime.value < 0) {
-              window.clearInterval(captchaTimer.value);
-              captchaTime.value = 60;
-              captchaBtnNameKey.value = t('userCenter.securitySettings.updateEmail.form.reSendCaptcha');
-              captchaDisable.value = false;
-            }
-          }, 1000);
-          proxy.$message.success(res.msg);
-        }).catch(() => {
-          resetCaptcha();
-          captchaLoading.value = false;
-        });
+          email: form.newEmail,
+        })
+          .then((res) => {
+            captchaLoading.value = false;
+            captchaDisable.value = true;
+            captchaBtnNameKey.value = `${t(
+              'userCenter.securitySettings.updateEmail.form.reSendCaptcha'
+            )}(${(captchaTime.value -= 1)}s)`;
+            captchaTimer.value = window.setInterval(() => {
+              captchaTime.value -= 1;
+              captchaBtnNameKey.value = `${t(
+                'userCenter.securitySettings.updateEmail.form.reSendCaptcha'
+              )}(${captchaTime.value}s)`;
+              if (captchaTime.value < 0) {
+                window.clearInterval(captchaTimer.value);
+                captchaTime.value = 60;
+                captchaBtnNameKey.value = t(
+                  'userCenter.securitySettings.updateEmail.form.reSendCaptcha'
+                );
+                captchaDisable.value = false;
+              }
+            }, 1000);
+            proxy.$message.success(res.msg);
+          })
+          .catch(() => {
+            resetCaptcha();
+            captchaLoading.value = false;
+          });
       }
     });
   };
diff --git a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-phone.vue b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-phone.vue
index 29f54ff2..59178d52 100644
--- a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-phone.vue
+++ b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-phone.vue
@@ -8,10 +8,18 @@
     <template #description>
       <div class="content">
         <a-typography-paragraph v-if="loginStore.phone">
-          {{ $t('userCenter.securitySettings.updatePhone.placeholder.success.phone') }}:{{ loginStore.phone }}
+          {{
+            $t(
+              'userCenter.securitySettings.updatePhone.placeholder.success.phone'
+            )
+          }}:{{ loginStore.phone }}
         </a-typography-paragraph>
         <a-typography-paragraph v-else class="tip">
-          {{ $t('userCenter.securitySettings.updatePhone.placeholder.error.phone') }}
+          {{
+            $t(
+              'userCenter.securitySettings.updatePhone.placeholder.error.phone'
+            )
+          }}
         </a-typography-paragraph>
       </div>
       <div class="operation">
diff --git a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-pwd.vue b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-pwd.vue
index 890c8a5b..433cbd1b 100644
--- a/continew-admin-ui/src/views/system/user/center/components/security-settings/update-pwd.vue
+++ b/continew-admin-ui/src/views/system/user/center/components/security-settings/update-pwd.vue
@@ -8,14 +8,25 @@
     <template #description>
       <div class="content">
         <a-typography-paragraph v-if="loginStore.pwdResetTime">
-          {{ $t('userCenter.securitySettings.updatePwd.placeholder.success.password') }}
+          {{
+            $t(
+              'userCenter.securitySettings.updatePwd.placeholder.success.password'
+            )
+          }}
         </a-typography-paragraph>
         <a-typography-paragraph v-else class="tip">
-          {{ $t('userCenter.securitySettings.updatePwd.placeholder.error.password') }}
+          {{
+            $t(
+              'userCenter.securitySettings.updatePwd.placeholder.error.password'
+            )
+          }}
         </a-typography-paragraph>
       </div>
       <div class="operation">
-        <a-link :title="$t('userCenter.securitySettings.button.update')" @click="toUpdate">
+        <a-link
+          :title="$t('userCenter.securitySettings.button.update')"
+          @click="toUpdate"
+        >
           {{ $t('userCenter.securitySettings.button.update') }}
         </a-link>
       </div>
@@ -30,26 +41,53 @@
     @cancel="handleCancel"
   >
     <a-form ref="formRef" :model="form" :rules="rules" size="large">
-      <a-form-item :label="$t('userCenter.securitySettings.updatePwd.form.label.oldPassword')" field="oldPassword">
+      <a-form-item
+        :label="
+          $t('userCenter.securitySettings.updatePwd.form.label.oldPassword')
+        "
+        field="oldPassword"
+      >
         <a-input-password
           v-model="form.oldPassword"
-          :placeholder="$t('userCenter.securitySettings.updatePwd.form.placeholder.oldPassword')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword'
+            )
+          "
           max-length="32"
           allow-clear
         />
       </a-form-item>
-      <a-form-item :label="$t('userCenter.securitySettings.updatePwd.form.label.newPassword')" field="newPassword">
+      <a-form-item
+        :label="
+          $t('userCenter.securitySettings.updatePwd.form.label.newPassword')
+        "
+        field="newPassword"
+      >
         <a-input-password
           v-model="form.newPassword"
-          :placeholder="$t('userCenter.securitySettings.updatePwd.form.placeholder.newPassword')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updatePwd.form.placeholder.newPassword'
+            )
+          "
           max-length="32"
           allow-clear
         />
       </a-form-item>
-      <a-form-item :label="$t('userCenter.securitySettings.updatePwd.form.label.rePassword')" field="rePassword">
+      <a-form-item
+        :label="
+          $t('userCenter.securitySettings.updatePwd.form.label.rePassword')
+        "
+        field="rePassword"
+      >
         <a-input-password
           v-model="form.rePassword"
-          :placeholder="$t('userCenter.securitySettings.updatePwd.form.placeholder.rePassword')"
+          :placeholder="
+            $t(
+              'userCenter.securitySettings.updatePwd.form.placeholder.rePassword'
+            )
+          "
           max-length="32"
           allow-clear
         />
@@ -81,31 +119,61 @@
   // 表单验证规则
   const rules = computed((): Record<string, FieldRule[]> => {
     return {
-      oldPassword: [{ required: true, message: t('userCenter.securitySettings.updatePwd.form.error.required.oldPassword') }],
+      oldPassword: [
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updatePwd.form.error.required.oldPassword'
+          ),
+        },
+      ],
       newPassword: [
-        { required: true, message: t('userCenter.securitySettings.updatePwd.form.error.required.newPassword') },
-        { match: /^(?=.*\d)(?=.*[a-z]).{6,32}$/, message: t('userCenter.securitySettings.updatePwd.form.error.match.newPassword') },
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updatePwd.form.error.required.newPassword'
+          ),
+        },
+        {
+          match: /^(?=.*\d)(?=.*[a-z]).{6,32}$/,
+          message: t(
+            'userCenter.securitySettings.updatePwd.form.error.match.newPassword'
+          ),
+        },
         {
           validator: (value, callback) => {
             if (value === form.oldPassword) {
-              callback(t('userCenter.securitySettings.updatePwd.form.error.validator.newPassword'))
+              callback(
+                t(
+                  'userCenter.securitySettings.updatePwd.form.error.validator.newPassword'
+                )
+              );
             } else {
-              callback()
+              callback();
             }
-          }
-        }
+          },
+        },
       ],
       rePassword: [
-        { required: true, message: t('userCenter.securitySettings.updatePwd.form.error.required.rePassword') },
+        {
+          required: true,
+          message: t(
+            'userCenter.securitySettings.updatePwd.form.error.required.rePassword'
+          ),
+        },
         {
           validator: (value, callback) => {
             if (value !== form.newPassword) {
-              callback(t('userCenter.securitySettings.updatePwd.form.error.validator.rePassword'))
+              callback(
+                t(
+                  'userCenter.securitySettings.updatePwd.form.error.validator.rePassword'
+                )
+              );
             } else {
-              callback()
+              callback();
             }
-          }
-        }
+          },
+        },
       ],
     };
   });
diff --git a/continew-admin-ui/src/views/system/user/center/locale/en-US.ts b/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
index 0ed53611..47677a7c 100644
--- a/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
+++ b/continew-admin-ui/src/views/system/user/center/locale/en-US.ts
@@ -25,9 +25,11 @@ export default {
   'userCenter.basicInfo.form.placeholder.nickname': 'Please enter nickname',
 
   'userCenter.basicInfo.form.error.required.username': 'Please enter username',
-  'userCenter.basicInfo.form.error.match.username': 'Username are 4 to 16 characters long and can contain letters, numbers, underscores, and start with a letter',
+  'userCenter.basicInfo.form.error.match.username':
+    'Username are 4 to 16 characters long and can contain letters, numbers, underscores, and start with a letter',
   'userCenter.basicInfo.form.error.required.nickname': 'Please enter nickname',
-  'userCenter.basicInfo.form.error.match.nickname': 'Nickname are 1 to 20 digits long and can contain Chinese, letters, numbers, underscores, dashes',
+  'userCenter.basicInfo.form.error.match.nickname':
+    'Nickname are 1 to 20 digits long and can contain Chinese, letters, numbers, underscores, dashes',
 
   'userCenter.basicInfo.form.save': 'Save',
   'userCenter.basicInfo.form.save.success': 'Save success',
@@ -36,55 +38,81 @@ export default {
   // security-settings
   // update-pwd
   'userCenter.securitySettings.updatePwd.label.password': 'Login Password',
-  'userCenter.securitySettings.updatePwd.placeholder.success.password': 'Has been set',
+  'userCenter.securitySettings.updatePwd.placeholder.success.password':
+    'Has been set',
   'userCenter.securitySettings.updatePwd.placeholder.error.password':
     'You have not set a password yet. The password must contain at least six letters, digits, and special characters except Spaces.',
 
   'userCenter.securitySettings.updatePwd.modal.title': 'Update login password',
-  'userCenter.securitySettings.updatePwd.form.label.oldPassword': 'Old password',
-  'userCenter.securitySettings.updatePwd.form.label.newPassword': 'New password',
-  'userCenter.securitySettings.updatePwd.form.label.rePassword': 'Confirm password',
+  'userCenter.securitySettings.updatePwd.form.label.oldPassword':
+    'Old password',
+  'userCenter.securitySettings.updatePwd.form.label.newPassword':
+    'New password',
+  'userCenter.securitySettings.updatePwd.form.label.rePassword':
+    'Confirm password',
 
-  'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword': 'Please enter old password',
-  'userCenter.securitySettings.updatePwd.form.placeholder.newPassword': 'Password contains 6 to 32 digits and letters',
-  'userCenter.securitySettings.updatePwd.form.placeholder.rePassword': 'Please enter new password again',
+  'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword':
+    'Please enter old password',
+  'userCenter.securitySettings.updatePwd.form.placeholder.newPassword':
+    'Password contains 6 to 32 digits and letters',
+  'userCenter.securitySettings.updatePwd.form.placeholder.rePassword':
+    'Please enter new password again',
 
-  'userCenter.securitySettings.updatePwd.form.error.required.oldPassword': 'Please enter old password',
-  'userCenter.securitySettings.updatePwd.form.error.required.newPassword': 'Please enter new password',
-  'userCenter.securitySettings.updatePwd.form.error.match.newPassword': 'Password contains 6 to 32 digits and letters',
-  'userCenter.securitySettings.updatePwd.form.error.validator.newPassword': 'New password cannot be the same as the old password',
-  'userCenter.securitySettings.updatePwd.form.error.required.rePassword': 'Please enter new password again',
-  'userCenter.securitySettings.updatePwd.form.error.validator.rePassword': 'Two passwords are different',
+  'userCenter.securitySettings.updatePwd.form.error.required.oldPassword':
+    'Please enter old password',
+  'userCenter.securitySettings.updatePwd.form.error.required.newPassword':
+    'Please enter new password',
+  'userCenter.securitySettings.updatePwd.form.error.match.newPassword':
+    'Password contains 6 to 32 digits and letters',
+  'userCenter.securitySettings.updatePwd.form.error.validator.newPassword':
+    'New password cannot be the same as the old password',
+  'userCenter.securitySettings.updatePwd.form.error.required.rePassword':
+    'Please enter new password again',
+  'userCenter.securitySettings.updatePwd.form.error.validator.rePassword':
+    'Two passwords are different',
 
   // update-phone
   'userCenter.securitySettings.updatePhone.label.phone': 'Phone',
-  'userCenter.securitySettings.updatePhone.placeholder.success.phone': 'Has been bound',
+  'userCenter.securitySettings.updatePhone.placeholder.success.phone':
+    'Has been bound',
   'userCenter.securitySettings.updatePhone.placeholder.error.phone':
     'You have not set a phone yet. The phone binding can be used to retrieve passwords and receive notifications and SMS login.',
 
   // update-email
   'userCenter.securitySettings.updateEmail.label.email': 'Email',
-  'userCenter.securitySettings.updateEmail.placeholder.success.email': 'Has been bound',
+  'userCenter.securitySettings.updateEmail.placeholder.success.email':
+    'Has been bound',
   'userCenter.securitySettings.updateEmail.placeholder.error.email':
     'You have not set a mailbox yet. The mailbox binding can be used to retrieve passwords and receive notifications.',
 
   'userCenter.securitySettings.updateEmail.modal.title': 'Update email',
   'userCenter.securitySettings.updateEmail.form.label.newEmail': 'New email',
   'userCenter.securitySettings.updateEmail.form.label.captcha': 'Captcha',
-  'userCenter.securitySettings.updateEmail.form.label.currentPassword': 'Current password',
+  'userCenter.securitySettings.updateEmail.form.label.currentPassword':
+    'Current password',
   'userCenter.securitySettings.updateEmail.form.sendCaptcha': 'Send captcha',
-  'userCenter.securitySettings.updateEmail.form.reSendCaptcha': 'Resend captcha',
-  'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha': 'Sending...',
+  'userCenter.securitySettings.updateEmail.form.reSendCaptcha':
+    'Resend captcha',
+  'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha':
+    'Sending...',
 
-  'userCenter.securitySettings.updateEmail.form.placeholder.newEmail': 'Please enter new email',
-  'userCenter.securitySettings.updateEmail.form.placeholder.captcha': 'Please enter email captcha',
-  'userCenter.securitySettings.updateEmail.form.placeholder.currentPassword': 'Please enter current password',
+  'userCenter.securitySettings.updateEmail.form.placeholder.newEmail':
+    'Please enter new email',
+  'userCenter.securitySettings.updateEmail.form.placeholder.captcha':
+    'Please enter email captcha',
+  'userCenter.securitySettings.updateEmail.form.placeholder.currentPassword':
+    'Please enter current password',
 
-  'userCenter.securitySettings.updateEmail.form.error.required.newEmail': 'Please enter new email',
-  'userCenter.securitySettings.updateEmail.form.error.match.newEmail': 'Please enter the correct email',
-  'userCenter.securitySettings.updateEmail.form.error.validator.newEmail': 'New email cannot be the same as the old email',
-  'userCenter.securitySettings.updateEmail.form.error.required.captcha': 'Please enter email captcha',
-  'userCenter.securitySettings.updateEmail.form.error.required.currentPassword': 'Please enter current password',
+  'userCenter.securitySettings.updateEmail.form.error.required.newEmail':
+    'Please enter new email',
+  'userCenter.securitySettings.updateEmail.form.error.match.newEmail':
+    'Please enter the correct email',
+  'userCenter.securitySettings.updateEmail.form.error.validator.newEmail':
+    'New email cannot be the same as the old email',
+  'userCenter.securitySettings.updateEmail.form.error.required.captcha':
+    'Please enter email captcha',
+  'userCenter.securitySettings.updateEmail.form.error.required.currentPassword':
+    'Please enter current password',
 
   'userCenter.securitySettings.button.update': 'Update',
 };
diff --git a/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts b/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
index 592b19e4..bdb71407 100644
--- a/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
+++ b/continew-admin-ui/src/views/system/user/center/locale/zh-CN.ts
@@ -25,9 +25,11 @@ export default {
   'userCenter.basicInfo.form.placeholder.nickname': '请输入昵称',
 
   'userCenter.basicInfo.form.error.required.username': '请输入用户名',
-  'userCenter.basicInfo.form.error.match.username': '长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头',
+  'userCenter.basicInfo.form.error.match.username':
+    '长度为 4 到 16 位,可以包含字母、数字,下划线,以字母开头',
   'userCenter.basicInfo.form.error.required.nickname': '请输入昵称',
-  'userCenter.basicInfo.form.error.match.nickname': '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线',
+  'userCenter.basicInfo.form.error.match.nickname':
+    '长度为 1 到 20 位,可以包含中文、字母、数字、下划线,短横线',
 
   'userCenter.basicInfo.form.save': '保存',
   'userCenter.basicInfo.form.save.success': '保存成功',
@@ -36,7 +38,8 @@ export default {
   // security-settings
   // update-pwd
   'userCenter.securitySettings.updatePwd.label.password': '登录密码',
-  'userCenter.securitySettings.updatePwd.placeholder.success.password': '已设置',
+  'userCenter.securitySettings.updatePwd.placeholder.success.password':
+    '已设置',
   'userCenter.securitySettings.updatePwd.placeholder.error.password':
     '您暂未设置密码,密码至少6位字符,支持数字、字母和除空格外的特殊字符。',
 
@@ -45,16 +48,25 @@ export default {
   'userCenter.securitySettings.updatePwd.form.label.newPassword': '新密码',
   'userCenter.securitySettings.updatePwd.form.label.rePassword': '确认新密码',
 
-  'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword': '请输入当前密码',
-  'userCenter.securitySettings.updatePwd.form.placeholder.newPassword': '长度为 6 到 32 位,同时包含字母和数字',
-  'userCenter.securitySettings.updatePwd.form.placeholder.rePassword': '请再次输入新密码',
+  'userCenter.securitySettings.updatePwd.form.placeholder.oldPassword':
+    '请输入当前密码',
+  'userCenter.securitySettings.updatePwd.form.placeholder.newPassword':
+    '长度为 6 到 32 位,同时包含字母和数字',
+  'userCenter.securitySettings.updatePwd.form.placeholder.rePassword':
+    '请再次输入新密码',
 
-  'userCenter.securitySettings.updatePwd.form.error.required.oldPassword': '请输入当前密码',
-  'userCenter.securitySettings.updatePwd.form.error.required.newPassword': '请输入新密码',
-  'userCenter.securitySettings.updatePwd.form.error.match.newPassword': '长度为 6 到 32 位,同时包含字母和数字',
-  'userCenter.securitySettings.updatePwd.form.error.validator.newPassword': '新密码不能与当前密码相同',
-  'userCenter.securitySettings.updatePwd.form.error.required.rePassword': '请再次输入新密码',
-  'userCenter.securitySettings.updatePwd.form.error.validator.rePassword': '两次输入的密码不一致',
+  'userCenter.securitySettings.updatePwd.form.error.required.oldPassword':
+    '请输入当前密码',
+  'userCenter.securitySettings.updatePwd.form.error.required.newPassword':
+    '请输入新密码',
+  'userCenter.securitySettings.updatePwd.form.error.match.newPassword':
+    '长度为 6 到 32 位,同时包含字母和数字',
+  'userCenter.securitySettings.updatePwd.form.error.validator.newPassword':
+    '新密码不能与当前密码相同',
+  'userCenter.securitySettings.updatePwd.form.error.required.rePassword':
+    '请再次输入新密码',
+  'userCenter.securitySettings.updatePwd.form.error.validator.rePassword':
+    '两次输入的密码不一致',
 
   // update-phone
   'userCenter.securitySettings.updatePhone.label.phone': '安全手机',
@@ -71,20 +83,30 @@ export default {
   'userCenter.securitySettings.updateEmail.modal.title': '修改邮箱',
   'userCenter.securitySettings.updateEmail.form.label.newEmail': '新邮箱',
   'userCenter.securitySettings.updateEmail.form.label.captcha': '验证码',
-  'userCenter.securitySettings.updateEmail.form.label.currentPassword': '当前密码',
+  'userCenter.securitySettings.updateEmail.form.label.currentPassword':
+    '当前密码',
   'userCenter.securitySettings.updateEmail.form.sendCaptcha': '发送验证码',
   'userCenter.securitySettings.updateEmail.form.reSendCaptcha': '重新发送',
-  'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha': '发送中...',
+  'userCenter.securitySettings.updateEmail.form.loading.sendCaptcha':
+    '发送中...',
 
-  'userCenter.securitySettings.updateEmail.form.placeholder.newEmail': '请输入新邮箱',
-  'userCenter.securitySettings.updateEmail.form.placeholder.captcha': '请输入邮箱验证码',
-  'userCenter.securitySettings.updateEmail.form.placeholder.currentPassword': '请输入当前密码',
+  'userCenter.securitySettings.updateEmail.form.placeholder.newEmail':
+    '请输入新邮箱',
+  'userCenter.securitySettings.updateEmail.form.placeholder.captcha':
+    '请输入邮箱验证码',
+  'userCenter.securitySettings.updateEmail.form.placeholder.currentPassword':
+    '请输入当前密码',
 
-  'userCenter.securitySettings.updateEmail.form.error.required.newEmail': '请输入新邮箱',
-  'userCenter.securitySettings.updateEmail.form.error.match.newEmail': '请输入正确的邮箱',
-  'userCenter.securitySettings.updateEmail.form.error.validator.newEmail': '新邮箱不能与当前邮箱相同',
-  'userCenter.securitySettings.updateEmail.form.error.required.captcha': '请输入邮箱验证码',
-  'userCenter.securitySettings.updateEmail.form.error.required.currentPassword': '请输入当前密码',
+  'userCenter.securitySettings.updateEmail.form.error.required.newEmail':
+    '请输入新邮箱',
+  'userCenter.securitySettings.updateEmail.form.error.match.newEmail':
+    '请输入正确的邮箱',
+  'userCenter.securitySettings.updateEmail.form.error.validator.newEmail':
+    '新邮箱不能与当前邮箱相同',
+  'userCenter.securitySettings.updateEmail.form.error.required.captcha':
+    '请输入邮箱验证码',
+  'userCenter.securitySettings.updateEmail.form.error.required.currentPassword':
+    '请输入当前密码',
 
   'userCenter.securitySettings.button.update': '修改',
 };
diff --git a/continew-admin-ui/src/views/system/user/index.vue b/continew-admin-ui/src/views/system/user/index.vue
index 6740bca2..dd6f2f70 100644
--- a/continew-admin-ui/src/views/system/user/index.vue
+++ b/continew-admin-ui/src/views/system/user/index.vue
@@ -3,7 +3,14 @@
     <Breadcrumb :items="['menu.system', 'menu.system.user.list']" />
     <a-card class="general-card" :title="$t('menu.system.user.list')">
       <a-row>
-        <a-col :xs="9" :sm="6" :md="5" :lg="4" :xl="4" style="margin-right: 10px">
+        <a-col
+          :xs="9"
+          :sm="6"
+          :md="5"
+          :lg="4"
+          :xl="4"
+          style="margin-right: 10px"
+        >
           <a-input-search
             v-model="deptName"
             placeholder="输入部门名称搜索"
@@ -157,13 +164,16 @@
               <a-table-column title="头像" align="center">
                 <template #cell="{ record }">
                   <a-avatar>
-                    <img :src="getAvatar(record.avatar, record.gender)" alt="头像" />
+                    <img
+                      :src="getAvatar(record.avatar, record.gender)"
+                      alt="头像"
+                    />
                   </a-avatar>
                 </template>
               </a-table-column>
               <a-table-column title="联系方式" :width="170">
                 <template #cell="{ record }">
-                  {{ record.email }}<br v-if="record.email && record.phone">
+                  {{ record.email }}<br v-if="record.email && record.phone" />
                   {{ record.phone }}
                 </template>
               </a-table-column>
@@ -173,7 +183,10 @@
                     v-model="record.status"
                     :checked-value="1"
                     :unchecked-value="2"
-                    :disabled="record.disabled || !checkPermission(['system:user:update'])"
+                    :disabled="
+                      record.disabled ||
+                      !checkPermission(['system:user:update'])
+                    "
                     @change="handleChangeStatus(record)"
                   />
                 </template>
@@ -186,7 +199,7 @@
               </a-table-column>
               <a-table-column title="创建人/创建时间" :width="175">
                 <template #cell="{ record }">
-                  {{ record.createUserString }}<br>
+                  {{ record.createUserString }}<br />
                   {{ record.createTime }}
                 </template>
               </a-table-column>
@@ -240,7 +253,9 @@
                       size="small"
                       title="重置密码"
                     >
-                      <template #icon><svg-icon icon-class="privacy" /></template>
+                      <template #icon
+                        ><svg-icon icon-class="privacy"
+                      /></template>
                     </a-button>
                   </a-popconfirm>
                   <a-button
@@ -251,7 +266,9 @@
                     :disabled="record.disabled"
                     @click="toUpdateRole(record.id)"
                   >
-                    <template #icon><svg-icon icon-class="reference" /></template>
+                    <template #icon
+                      ><svg-icon icon-class="reference"
+                    /></template>
                   </a-button>
                 </template>
               </a-table-column>
@@ -325,7 +342,11 @@
               style="width: 431px"
             />
           </a-form-item>
-          <a-form-item label="所属角色" field="roleIds" :disabled="form.disabled">
+          <a-form-item
+            label="所属角色"
+            field="roleIds"
+            :disabled="form.disabled"
+          >
             <a-select
               v-model="form.roleIds"
               :options="roleOptions"