From 482e411f061a6306c0ff5c013ce1de73304f7f03 Mon Sep 17 00:00:00 2001
From: xingyu <xingyu4j@vip.qq.com>
Date: Tue, 25 Apr 2023 18:24:09 +0800
Subject: [PATCH] feat: add success text

---
 src/components/Excel/src/ExportExcelModal.vue            | 2 +-
 src/layouts/default/header/components/lock/LockModal.vue | 2 +-
 src/locales/lang/en/common.ts                            | 1 +
 src/locales/lang/zh-CN/common.ts                         | 1 +
 src/views/base/profile/PasswordModal.vue                 | 7 ++++++-
 src/views/bpm/group/GroupModal.vue                       | 9 +++++++--
 src/views/bpm/model/ModelModal.vue                       | 9 +++++++--
 src/views/infra/config/ConfigModal.vue                   | 9 +++++++--
 .../infra/dataSourceConfig/DataSourceConfigModal.vue     | 9 +++++++--
 src/views/infra/fileConfig/FileConfigModal.vue           | 9 +++++++--
 src/views/infra/job/JobModal.vue                         | 9 +++++++--
 src/views/infra/redis/components/RedisModal.vue          | 2 +-
 src/views/mp/account/AccountModal.vue                    | 9 +++++++--
 src/views/mp/message/MessageModal.vue                    | 7 ++++++-
 src/views/mp/tag/TagModal.vue                            | 9 +++++++--
 src/views/mp/user/MpUserModal.vue                        | 7 ++++++-
 src/views/pay/app/AppModal.vue                           | 9 +++++++--
 src/views/pay/merchant/MerchantModal.vue                 | 9 +++++++--
 src/views/system/area/AreaModal.vue                      | 2 +-
 src/views/system/dept/DeptModal.vue                      | 9 +++++++--
 src/views/system/dict/DictDataModal.vue                  | 9 +++++++--
 src/views/system/dict/DictTypeModal.vue                  | 9 +++++++--
 src/views/system/errorCode/ErrorCodeModal.vue            | 9 +++++++--
 src/views/system/mail/account/AccountModal.vue           | 9 +++++++--
 src/views/system/mail/template/TemplateModal.vue         | 9 +++++++--
 src/views/system/menu/MenuModal.vue                      | 9 +++++++--
 src/views/system/notice/NoticeModal.vue                  | 9 +++++++--
 src/views/system/notify/template/TemplateModal.vue       | 9 +++++++--
 src/views/system/oauth2/client/ClientModal.vue           | 9 +++++++--
 src/views/system/post/PostModal.vue                      | 9 +++++++--
 src/views/system/role/RoleMenuModal.vue                  | 7 ++++++-
 src/views/system/role/RoleModal.vue                      | 9 +++++++--
 src/views/system/role/RoleScopeModal.vue                 | 7 ++++++-
 src/views/system/sensitiveWord/SensitiveWordModal.vue    | 9 +++++++--
 src/views/system/sms/channel/SmsChannelModal.vue         | 9 +++++++--
 src/views/system/sms/template/SmsTemplateModal.vue       | 9 +++++++--
 src/views/system/tenant/TenantModal.vue                  | 9 +++++++--
 src/views/system/tenantPackage/TenantPackageModal.vue    | 5 ++++-
 src/views/system/user/ResetPwdModal.vue                  | 7 ++++++-
 src/views/system/user/UserModal.vue                      | 9 +++++++--
 src/views/system/user/UserRoleModal.vue                  | 7 ++++++-
 41 files changed, 241 insertions(+), 66 deletions(-)

diff --git a/src/components/Excel/src/ExportExcelModal.vue b/src/components/Excel/src/ExportExcelModal.vue
index 3023fb48..ace790ba 100644
--- a/src/components/Excel/src/ExportExcelModal.vue
+++ b/src/components/Excel/src/ExportExcelModal.vue
@@ -9,8 +9,8 @@ import { BasicModal, useModalInner } from '@/components/Modal'
 import { BasicForm, FormSchema, useForm } from '@/components/Form'
 import { useI18n } from '@/hooks/web/useI18n'
 
-const emit = defineEmits(['success', 'register'])
 const { t } = useI18n()
+const emit = defineEmits(['success', 'register'])
 const schemas: FormSchema[] = [
   {
     field: 'filename',
diff --git a/src/layouts/default/header/components/lock/LockModal.vue b/src/layouts/default/header/components/lock/LockModal.vue
index 6c0ca2b9..1ddac75b 100644
--- a/src/layouts/default/header/components/lock/LockModal.vue
+++ b/src/layouts/default/header/components/lock/LockModal.vue
@@ -22,8 +22,8 @@
 import { computed } from 'vue'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useDesign } from '@/hooks/web/useDesign'
-import { BasicModal, useModalInner } from '@/components/Modal'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { useUserStore } from '@/store/modules/user'
 import { useLockStore } from '@/store/modules/lock'
 import headerImg from '@/assets/images/header.jpg'
diff --git a/src/locales/lang/en/common.ts b/src/locales/lang/en/common.ts
index 8c4ba423..d6ef8707 100644
--- a/src/locales/lang/en/common.ts
+++ b/src/locales/lang/en/common.ts
@@ -6,6 +6,7 @@ export default {
   cancelText: 'Cancel',
   loadingText: 'Loading...',
   saveText: 'Save',
+  saveSuccessText: 'Save success',
   delText: 'Delete',
   delMessage: 'Do you want to delete data?',
   delSuccessText: 'Delete success',
diff --git a/src/locales/lang/zh-CN/common.ts b/src/locales/lang/zh-CN/common.ts
index cfa0109b..44f9b6c0 100644
--- a/src/locales/lang/zh-CN/common.ts
+++ b/src/locales/lang/zh-CN/common.ts
@@ -6,6 +6,7 @@ export default {
   cancelText: '取消',
   loadingText: '加载中...',
   saveText: '保存',
+  saveSuccessText: '保存成功',
   delText: '删除',
   delMessage: '是否要删除数据?',
   delSuccessText: '删除成功',
diff --git a/src/views/base/profile/PasswordModal.vue b/src/views/base/profile/PasswordModal.vue
index 64293fae..a8867b73 100644
--- a/src/views/base/profile/PasswordModal.vue
+++ b/src/views/base/profile/PasswordModal.vue
@@ -5,11 +5,15 @@
 </template>
 <script lang="ts" setup name="PasswordModal">
 import { ref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { passwordSchema } from './data'
 import { updateUserPwdApi } from '@/api/base/profile'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 
 const title = ref('修改密码')
@@ -35,6 +39,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/bpm/group/GroupModal.vue b/src/views/bpm/group/GroupModal.vue
index 819f18f9..4f215d0c 100644
--- a/src/views/bpm/group/GroupModal.vue
+++ b/src/views/bpm/group/GroupModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="BpmGroupModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './group.data'
 import { createUserGroup, getUserGroup, updateUserGroup } from '@/api/bpm/userGroup'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/bpm/model/ModelModal.vue b/src/views/bpm/model/ModelModal.vue
index 7c1fb4b0..65764613 100644
--- a/src/views/bpm/model/ModelModal.vue
+++ b/src/views/bpm/model/ModelModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="BpmModelModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './model.data'
 import { createModel, getModel, updateModel } from '@/api/bpm/model'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/infra/config/ConfigModal.vue b/src/views/infra/config/ConfigModal.vue
index 695436ba..b84ce6cd 100644
--- a/src/views/infra/config/ConfigModal.vue
+++ b/src/views/infra/config/ConfigModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="InfraConfigModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './config.data'
 import { createConfig, getConfig, updateConfig } from '@/api/infra/config'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/infra/dataSourceConfig/DataSourceConfigModal.vue b/src/views/infra/dataSourceConfig/DataSourceConfigModal.vue
index fb8f11c6..df55854e 100644
--- a/src/views/infra/dataSourceConfig/DataSourceConfigModal.vue
+++ b/src/views/infra/dataSourceConfig/DataSourceConfigModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="InfraDataSourceConfigModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './dataSourceConfig.data'
 import { createDataSourceConfig, getDataSourceConfig, updateDataSourceConfig } from '@/api/infra/dataSourceConfig'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/infra/fileConfig/FileConfigModal.vue b/src/views/infra/fileConfig/FileConfigModal.vue
index a4796d2c..c7bf087b 100644
--- a/src/views/infra/fileConfig/FileConfigModal.vue
+++ b/src/views/infra/fileConfig/FileConfigModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="InfraFileConfigModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './ficleConfig.data'
 import { createFileConfig, getFileConfig, updateFileConfig } from '@/api/infra/fileConfig'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/infra/job/JobModal.vue b/src/views/infra/job/JobModal.vue
index 05a4c03d..c2e3b326 100644
--- a/src/views/infra/job/JobModal.vue
+++ b/src/views/infra/job/JobModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="InfraJobModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './job.data'
 import { createJob, getJob, updateJob } from '@/api/infra/job'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/infra/redis/components/RedisModal.vue b/src/views/infra/redis/components/RedisModal.vue
index 719b3579..ee8ff2aa 100644
--- a/src/views/infra/redis/components/RedisModal.vue
+++ b/src/views/infra/redis/components/RedisModal.vue
@@ -20,8 +20,8 @@
 <script lang="ts" setup name="RedisModal">
 import { ref } from 'vue'
 import { List } from 'ant-design-vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from '../redis.data'
 import { deleteKey, getKeyList } from '@/api/infra/redis'
 
diff --git a/src/views/mp/account/AccountModal.vue b/src/views/mp/account/AccountModal.vue
index f2e8a937..e9f03860 100644
--- a/src/views/mp/account/AccountModal.vue
+++ b/src/views/mp/account/AccountModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="MpAccountModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './account.data'
 import { createAccount, getAccount, updateAccount } from '@/api/mp/account'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/mp/message/MessageModal.vue b/src/views/mp/message/MessageModal.vue
index 69845b13..62696a1f 100644
--- a/src/views/mp/message/MessageModal.vue
+++ b/src/views/mp/message/MessageModal.vue
@@ -4,12 +4,16 @@
   </BasicModal>
 </template>
 <script lang="ts" setup name="MpMessageModal">
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './message.data'
 import { sendMessage } from '@/api/mp/message'
 import { ref } from 'vue'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 
 const userId = ref(0)
@@ -37,6 +41,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/mp/tag/TagModal.vue b/src/views/mp/tag/TagModal.vue
index a5e9c0eb..0b8069a2 100644
--- a/src/views/mp/tag/TagModal.vue
+++ b/src/views/mp/tag/TagModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="MpTagModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './tag.data'
 import { createTag, updateTag, getTag } from '@/api/mp/tag'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/mp/user/MpUserModal.vue b/src/views/mp/user/MpUserModal.vue
index c3bc52ba..9264e3d2 100644
--- a/src/views/mp/user/MpUserModal.vue
+++ b/src/views/mp/user/MpUserModal.vue
@@ -4,11 +4,15 @@
   </BasicModal>
 </template>
 <script lang="ts" setup name="MpUserModal">
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './mpuser.data'
 import { getUser, updateUser } from '@/api/mp/mpuser'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 
 const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
@@ -34,6 +38,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/pay/app/AppModal.vue b/src/views/pay/app/AppModal.vue
index abc12d3d..305d7ed9 100644
--- a/src/views/pay/app/AppModal.vue
+++ b/src/views/pay/app/AppModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="PayAppModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './app.data'
 import { createApp, updateApp, getApp } from '@/api/pay/app'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/pay/merchant/MerchantModal.vue b/src/views/pay/merchant/MerchantModal.vue
index 12e6b706..cb68c121 100644
--- a/src/views/pay/merchant/MerchantModal.vue
+++ b/src/views/pay/merchant/MerchantModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="PayMerchantModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './merchant.data'
 import { createMerchant, updateMerchant, getMerchant } from '@/api/pay/merchant'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/area/AreaModal.vue b/src/views/system/area/AreaModal.vue
index c5e38eb9..0fd1d179 100644
--- a/src/views/system/area/AreaModal.vue
+++ b/src/views/system/area/AreaModal.vue
@@ -4,8 +4,8 @@
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemAreaModal">
-import { BasicModal, useModalInner } from '@/components/Modal'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './area.data'
 import { getAreaByIp } from '@/api/system/area'
 
diff --git a/src/views/system/dept/DeptModal.vue b/src/views/system/dept/DeptModal.vue
index 986bd18a..67f43cf2 100644
--- a/src/views/system/dept/DeptModal.vue
+++ b/src/views/system/dept/DeptModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="DeptModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './dept.data'
 import { createDept, getDept, updateDept } from '@/api/system/dept'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/dict/DictDataModal.vue b/src/views/system/dict/DictDataModal.vue
index b337d984..b833d760 100644
--- a/src/views/system/dict/DictDataModal.vue
+++ b/src/views/system/dict/DictDataModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemDictDataModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { dataFormSchema } from './dict.data'
 import { createDictData, getDictData, updateDictData } from '@/api/system/dict/data'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -47,6 +51,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/dict/DictTypeModal.vue b/src/views/system/dict/DictTypeModal.vue
index 4e1b0c25..7efaea3a 100644
--- a/src/views/system/dict/DictTypeModal.vue
+++ b/src/views/system/dict/DictTypeModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemDictTypeModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { typeFormSchema } from './dict.type'
 import { createDictType, getDictType, updateDictType } from '@/api/system/dict/type'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/errorCode/ErrorCodeModal.vue b/src/views/system/errorCode/ErrorCodeModal.vue
index 70d2fd27..7083de01 100644
--- a/src/views/system/errorCode/ErrorCodeModal.vue
+++ b/src/views/system/errorCode/ErrorCodeModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemErrorCodeModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './errorCode.data'
 import { createErrorCode, getErrorCode, updateErrorCode } from '@/api/system/errorCode'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/mail/account/AccountModal.vue b/src/views/system/mail/account/AccountModal.vue
index b8320371..f56ebb97 100644
--- a/src/views/system/mail/account/AccountModal.vue
+++ b/src/views/system/mail/account/AccountModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemMailAccountModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './account.data'
 import { createMailAccount, getMailAccount, updateMailAccount } from '@/api/system/mail/account'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/mail/template/TemplateModal.vue b/src/views/system/mail/template/TemplateModal.vue
index d146890f..0059b284 100644
--- a/src/views/system/mail/template/TemplateModal.vue
+++ b/src/views/system/mail/template/TemplateModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemMailTemplateModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './template.data'
 import { createMailTemplate, getMailTemplate, updateMailTemplate } from '@/api/system/mail/template'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/menu/MenuModal.vue b/src/views/system/menu/MenuModal.vue
index 6a5d2e81..239e55a3 100644
--- a/src/views/system/menu/MenuModal.vue
+++ b/src/views/system/menu/MenuModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemMenuModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './menu.data'
 import { createMenu, getMenu, updateMenu } from '@/api/system/menu'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/notice/NoticeModal.vue b/src/views/system/notice/NoticeModal.vue
index cdba48a3..0a493a80 100644
--- a/src/views/system/notice/NoticeModal.vue
+++ b/src/views/system/notice/NoticeModal.vue
@@ -1,5 +1,5 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm">
       <template #editor="{ model, field }">
         <Tinymce v-model="model[field]" width="100%" />
@@ -10,11 +10,15 @@
 <script lang="ts" setup name="SystemNoticeModal">
 import { ref, unref } from 'vue'
 import { Tinymce } from '@/components/Tinymce'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './notice.data'
 import { createNotice, getNotice, updateNotice } from '@/api/system/notice'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -48,6 +52,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/notify/template/TemplateModal.vue b/src/views/system/notify/template/TemplateModal.vue
index ae604f07..09d165bb 100644
--- a/src/views/system/notify/template/TemplateModal.vue
+++ b/src/views/system/notify/template/TemplateModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="NotifyTemplateModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './template.data'
 import { createNotifyTemplate, getNotifyTemplate, updateNotifyTemplate } from '@/api/system/notify/template'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/oauth2/client/ClientModal.vue b/src/views/system/oauth2/client/ClientModal.vue
index 243aa3ca..381d2236 100644
--- a/src/views/system/oauth2/client/ClientModal.vue
+++ b/src/views/system/oauth2/client/ClientModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemClientModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './client.data'
 import { createOAuth2Client, getOAuth2Client, updateOAuth2Client } from '@/api/system/oauth2/client'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/post/PostModal.vue b/src/views/system/post/PostModal.vue
index ca3b5ad6..98830643 100644
--- a/src/views/system/post/PostModal.vue
+++ b/src/views/system/post/PostModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemPostModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './post.data'
 import { createPost, getPost, updatePost } from '@/api/system/post'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/role/RoleMenuModal.vue b/src/views/system/role/RoleMenuModal.vue
index 42220139..f5042b99 100644
--- a/src/views/system/role/RoleMenuModal.vue
+++ b/src/views/system/role/RoleMenuModal.vue
@@ -17,8 +17,10 @@
 </template>
 <script lang="ts" setup name="SystemRoleMenuModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { menuScopeFormSchema } from './role.data'
 import { getRole } from '@/api/system/role'
 import { BasicTree, TreeItem } from '@/components/Tree'
@@ -26,6 +28,8 @@ import { listSimpleMenus } from '@/api/system/menu'
 import { handleTree } from '@/utils/tree'
 import { assignRoleMenu, listRoleMenus } from '@/api/system/permission'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const treeData = ref<TreeItem[]>([])
 
@@ -62,6 +66,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/role/RoleModal.vue b/src/views/system/role/RoleModal.vue
index d6bb7beb..19843acd 100644
--- a/src/views/system/role/RoleModal.vue
+++ b/src/views/system/role/RoleModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemRoleModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './role.data'
 import { createRole, getRole, updateRole } from '@/api/system/role'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/role/RoleScopeModal.vue b/src/views/system/role/RoleScopeModal.vue
index 79dc447f..dfaee0c1 100644
--- a/src/views/system/role/RoleScopeModal.vue
+++ b/src/views/system/role/RoleScopeModal.vue
@@ -17,8 +17,10 @@
 </template>
 <script lang="ts" setup name="SystemRoleScopeModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { BasicTree, TreeItem } from '@/components/Tree'
 import { dataScopeFormSchema } from './role.data'
 import { getRole } from '@/api/system/role'
@@ -26,6 +28,8 @@ import { listSimpleDept } from '@/api/system/dept'
 import { handleTree } from '@/utils/tree'
 import { assignRoleDataScope } from '@/api/system/permission'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const treeData = ref<TreeItem[]>([])
 
@@ -57,6 +61,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/sensitiveWord/SensitiveWordModal.vue b/src/views/system/sensitiveWord/SensitiveWordModal.vue
index 0953b03b..02412e43 100644
--- a/src/views/system/sensitiveWord/SensitiveWordModal.vue
+++ b/src/views/system/sensitiveWord/SensitiveWordModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemSensitiveWordModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './sensitiveWord.data'
 import { createSensitiveWord, getSensitiveWord, updateSensitiveWord } from '@/api/system/sensitiveWord'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/sms/channel/SmsChannelModal.vue b/src/views/system/sms/channel/SmsChannelModal.vue
index b6cb70d5..8a23684d 100644
--- a/src/views/system/sms/channel/SmsChannelModal.vue
+++ b/src/views/system/sms/channel/SmsChannelModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemSmsChannelModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './smsChannel.data'
 import { createSmsChannel, getSmsChannel, updateSmsChannel } from '@/api/system/sms/smsChannel'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/sms/template/SmsTemplateModal.vue b/src/views/system/sms/template/SmsTemplateModal.vue
index 45fa48d6..303fa236 100644
--- a/src/views/system/sms/template/SmsTemplateModal.vue
+++ b/src/views/system/sms/template/SmsTemplateModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemSmsTemplateModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './smsTemplate.data'
 import { createSmsTemplate, getSmsTemplate, updateSmsTemplate } from '@/api/system/sms/smsTemplate'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/tenant/TenantModal.vue b/src/views/system/tenant/TenantModal.vue
index 8d6c3b60..44e8c5bc 100644
--- a/src/views/system/tenant/TenantModal.vue
+++ b/src/views/system/tenant/TenantModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemTenantModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './tenant.data'
 import { createTenant, getTenant, updateTenant } from '@/api/system/tenant'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/tenantPackage/TenantPackageModal.vue b/src/views/system/tenantPackage/TenantPackageModal.vue
index 156c7c76..134db013 100644
--- a/src/views/system/tenantPackage/TenantPackageModal.vue
+++ b/src/views/system/tenantPackage/TenantPackageModal.vue
@@ -1,5 +1,5 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm">
       <template #menuIds="{ model, field }">
         <BasicTree
@@ -25,6 +25,8 @@ import { createTenantPackage, getTenantPackage, updateTenantPackage } from '@/ap
 import { listSimpleMenus } from '@/api/system/menu'
 import { handleTree } from '@/utils/tree'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 const treeData = ref<TreeItem[]>([])
@@ -66,6 +68,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/user/ResetPwdModal.vue b/src/views/system/user/ResetPwdModal.vue
index a6a4d8cb..ac3b83f8 100644
--- a/src/views/system/user/ResetPwdModal.vue
+++ b/src/views/system/user/ResetPwdModal.vue
@@ -5,11 +5,15 @@
 </template>
 <script lang="ts" setup name="SystemResetPwdModal">
 import { ref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { userPwdFormSchema } from './user.data'
 import { resetUserPwd } from '@/api/system/user'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 
 const userId = ref(0)
@@ -36,6 +40,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/user/UserModal.vue b/src/views/system/user/UserModal.vue
index 5c827858..bd351e88 100644
--- a/src/views/system/user/UserModal.vue
+++ b/src/views/system/user/UserModal.vue
@@ -1,15 +1,19 @@
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? '编辑' : '新增'" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemUserModal">
 import { ref, unref } from 'vue'
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { formSchema } from './user.data'
 import { createUser, getUser, updateUser } from '@/api/system/user'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
@@ -43,6 +47,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }
diff --git a/src/views/system/user/UserRoleModal.vue b/src/views/system/user/UserRoleModal.vue
index dc775c39..ca7dc751 100644
--- a/src/views/system/user/UserRoleModal.vue
+++ b/src/views/system/user/UserRoleModal.vue
@@ -4,12 +4,16 @@
   </BasicModal>
 </template>
 <script lang="ts" setup name="SystemUserRoleModal">
-import { BasicModal, useModalInner } from '@/components/Modal'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useMessage } from '@/hooks/web/useMessage'
 import { BasicForm, useForm } from '@/components/Form'
+import { BasicModal, useModalInner } from '@/components/Modal'
 import { userRoleFormSchema } from './user.data'
 import { getUser } from '@/api/system/user'
 import { assignUserRole, listUserRoles } from '@/api/system/permission'
 
+const { t } = useI18n()
+const { createMessage } = useMessage()
 const emit = defineEmits(['success', 'register'])
 
 const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
@@ -38,6 +42,7 @@ async function handleSubmit() {
     closeModal()
     emit('success')
   } finally {
+    createMessage.success(t('common.saveSuccessText'))
     setModalProps({ confirmLoading: false })
   }
 }