叶静 пре 1 месец
родитељ
комит
f638bd8b6a
100 измењених фајлова са 2488 додато и 4172 уклоњено
  1. 0 16
      src/components/Chat/i18n/en.ts
  2. 0 16
      src/components/Chat/i18n/zh-cn.ts
  3. 0 18
      src/components/Material/i18n/en.ts
  4. 0 18
      src/components/Material/i18n/zh-cn.ts
  5. 0 10
      src/components/OrgSelector/i18n/en.ts
  6. 0 10
      src/components/OrgSelector/i18n/zh-cn.ts
  7. 0 9
      src/components/QueryTree/i18n/en.ts
  8. 0 9
      src/components/QueryTree/i18n/zh-cn.ts
  9. 0 30
      src/components/Upload/i18n/en.ts
  10. 0 30
      src/components/Upload/i18n/zh-cn.ts
  11. 0 11
      src/components/Verifition/i18n/en.ts
  12. 0 11
      src/components/Verifition/i18n/zh-cn.ts
  13. 1 1
      src/hooks/message.ts
  14. 0 95
      src/i18n/index.ts
  15. 0 239
      src/i18n/lang/en.ts
  16. 0 232
      src/i18n/lang/zh-cn.ts
  17. 0 78
      src/i18n/pages/agent/en.ts
  18. 0 78
      src/i18n/pages/agent/zh-cn.ts
  19. 0 36
      src/i18n/pages/form/en.ts
  20. 0 35
      src/i18n/pages/form/zh-cn.ts
  21. 0 99
      src/i18n/pages/login/en.ts
  22. 0 96
      src/i18n/pages/login/zh-cn.ts
  23. 0 90
      src/i18n/pages/merchant/en.ts
  24. 0 90
      src/i18n/pages/merchant/zh-cn.ts
  25. 13 12
      src/layout/navBars/breadcrumb/user.vue
  26. 959 0
      src/locales/en-US/index.json
  27. 111 0
      src/locales/index.ts
  28. 950 0
      src/locales/zh-CN/index.json
  29. 1 1
      src/main.ts
  30. 3 3
      src/stores/tagsViewRoutes.ts
  31. 321 322
      src/utils/other.ts
  32. 0 24
      src/views/admin/audit/i18n/en.ts
  33. 0 24
      src/views/admin/audit/i18n/zh-cn.ts
  34. 0 45
      src/views/admin/client/i18n/en.ts
  35. 0 43
      src/views/admin/client/i18n/zh-cn.ts
  36. 0 63
      src/views/admin/dict/i18n/en.ts
  37. 0 66
      src/views/admin/dict/i18n/zh-cn.ts
  38. 0 33
      src/views/admin/file/i18n/en.ts
  39. 0 32
      src/views/admin/file/i18n/zh-cn.ts
  40. 0 134
      src/views/admin/i18n/form.vue
  41. 0 24
      src/views/admin/i18n/i18n/en.ts
  42. 0 24
      src/views/admin/i18n/i18n/zh-cn.ts
  43. 0 167
      src/views/admin/i18n/index.vue
  44. 0 22
      src/views/admin/log/i18n/en.ts
  45. 0 22
      src/views/admin/log/i18n/zh-cn.ts
  46. 0 34
      src/views/admin/param/i18n/en.ts
  47. 0 32
      src/views/admin/param/i18n/zh-cn.ts
  48. 0 32
      src/views/admin/social/i18n/en.ts
  49. 0 32
      src/views/admin/social/i18n/zh-cn.ts
  50. 0 17
      src/views/admin/sysArea/i18n/en.ts
  51. 0 17
      src/views/admin/sysArea/i18n/zh-cn.ts
  52. 0 21
      src/views/admin/system/dept/i18n/en.ts
  53. 0 21
      src/views/admin/system/dept/i18n/zh-cn.ts
  54. 0 37
      src/views/admin/system/menu/i18n/en.ts
  55. 0 31
      src/views/admin/system/menu/i18n/zh-cn.ts
  56. 0 28
      src/views/admin/system/post/i18n/en.ts
  57. 0 28
      src/views/admin/system/post/i18n/zh-cn.ts
  58. 0 23
      src/views/admin/system/role/i18n/en.ts
  59. 0 23
      src/views/admin/system/role/i18n/zh-cn.ts
  60. 0 54
      src/views/admin/system/tenant/i18n/en.ts
  61. 0 67
      src/views/admin/system/tenant/i18n/zh-cn.ts
  62. 0 45
      src/views/admin/system/user/i18n/en.ts
  63. 0 45
      src/views/admin/system/user/i18n/zh-cn.ts
  64. 53 48
      src/views/admin/system/user/personal.vue
  65. 0 14
      src/views/admin/token/i18n/en.ts
  66. 0 14
      src/views/admin/token/i18n/zh-cn.ts
  67. 44 21
      src/views/agent/list/agentPaymentConfigDialog.vue
  68. 22 17
      src/views/agent/list/agentPaymentDialog.vue
  69. 10 10
      src/views/agent/list/index.vue
  70. 0 6
      src/views/biz/app/appArticle/i18n/en.ts
  71. 0 6
      src/views/biz/app/appArticle/i18n/zh-cn.ts
  72. 0 15
      src/views/biz/app/approle/i18n/en.ts
  73. 0 15
      src/views/biz/app/approle/i18n/zh-cn.ts
  74. 0 32
      src/views/biz/app/appsocial/i18n/en.ts
  75. 0 32
      src/views/biz/app/appsocial/i18n/zh-cn.ts
  76. 0 25
      src/views/biz/app/appuser/i18n/en.ts
  77. 0 25
      src/views/biz/app/appuser/i18n/zh-cn.ts
  78. 0 24
      src/views/biz/mp/wx-account-fans/i18n/en.ts
  79. 0 26
      src/views/biz/mp/wx-account-fans/i18n/zh-cn.ts
  80. 0 18
      src/views/biz/mp/wx-account-tag/i18n/en.ts
  81. 0 18
      src/views/biz/mp/wx-account-tag/i18n/zh-cn.ts
  82. 0 25
      src/views/biz/mp/wx-account/i18n/en.ts
  83. 0 25
      src/views/biz/mp/wx-account/i18n/zh-cn.ts
  84. 0 64
      src/views/biz/mp/wx-fans-msg/i18n/en.ts
  85. 0 64
      src/views/biz/mp/wx-fans-msg/i18n/zh-cn.ts
  86. 0 36
      src/views/biz/pay/channel/i18n/en.ts
  87. 0 36
      src/views/biz/pay/channel/i18n/zh-cn.ts
  88. 0 28
      src/views/biz/pay/order/i18n/en.ts
  89. 0 28
      src/views/biz/pay/order/i18n/zh-cn.ts
  90. 0 26
      src/views/biz/pay/record/i18n/en.ts
  91. 0 26
      src/views/biz/pay/record/i18n/zh-cn.ts
  92. 0 66
      src/views/biz/pay/refund/i18n/en.ts
  93. 0 66
      src/views/biz/pay/refund/i18n/zh-cn.ts
  94. 0 57
      src/views/biz/pay/trade/i18n/en.ts
  95. 0 57
      src/views/biz/pay/trade/i18n/zh-cn.ts
  96. 0 47
      src/views/flow/i18n/en.ts
  97. 0 47
      src/views/flow/i18n/zh-cn.ts
  98. 0 33
      src/views/gen/create-table/i18n/en.ts
  99. 0 33
      src/views/gen/create-table/i18n/zh-cn.ts
  100. 0 37
      src/views/gen/datasource/i18n/en.ts

+ 0 - 16
src/components/Chat/i18n/en.ts

@@ -1,16 +0,0 @@
-export default {
-	chat: {
-		send: 'Send',
-		inputPlaceholder: 'Type a message...',
-		title: 'AI Assistant',
-		clearChat: 'Clear Chat',
-		webSearchEnabled: 'Web Search Enabled',
-		webSearchDisabled: 'Web Search Disabled',
-		welcome: 'Hello! I am a general AI model. How can I help you?',
-		thinking: 'Thinking...',
-		thinkingCompleted: 'Thinking Completed',
-		thinkingTime: 'Time taken',
-		connectionError: 'Connection lost, please try again',
-		seconds: 'seconds',
-	},
-};

+ 0 - 16
src/components/Chat/i18n/zh-cn.ts

@@ -1,16 +0,0 @@
-export default {
-	chat: {
-		send: '发送',
-		inputPlaceholder: '请输入消息...',
-		title: 'AI 助手',
-		clearChat: '清空会话',
-		webSearchEnabled: '已开启联网搜索',
-		webSearchDisabled: '已关闭联网搜索',
-		welcome: '您好!我是通用大模型,请问有什么可以帮助您?',
-		thinking: '正在思考...',
-		thinkingCompleted: '已完成思考',
-		thinkingTime: '用时',
-		connectionError: '连接已断开,请重试',
-		seconds: '秒',
-	},
-};

+ 0 - 18
src/components/Material/i18n/en.ts

@@ -1,18 +0,0 @@
-export default {
-	material: {
-		uploadFileTip: 'upload',
-		addGroup: 'add group',
-		editGroup: 'edit group',
-		delGroup: 'del group',
-		moveBtn: 'move',
-		preview: 'preview',
-		edit: 'edit',
-		view: 'view',
-		add: 'add',
-		allCheck: 'all check',
-		rename: 'rename',
-		download: 'download',
-		list: 'list',
-		grid: 'grid',
-	},
-};

+ 0 - 18
src/components/Material/i18n/zh-cn.ts

@@ -1,18 +0,0 @@
-export default {
-	material: {
-		uploadFileTip: '上传',
-		addGroup: '新增分组',
-		editGroup: '修改分组',
-		delGroup: '删除分组',
-		moveBtn: '移动',
-		preview: '预览',
-		edit: '修改',
-		view: '查看',
-		add: '添加',
-		allCheck: '全选',
-		rename: '重命名',
-		download: '下载',
-		list: '列表',
-		grid: '平铺',
-	},
-};

+ 0 - 10
src/components/OrgSelector/i18n/en.ts

@@ -1,10 +0,0 @@
-export default {
-    orgSelecotr: {
-        org: 'org',
-        user: 'user',
-        dept: 'dept',
-        role: 'role',
-        select: 'select',
-        search: 'search'
-    },
-};

+ 0 - 10
src/components/OrgSelector/i18n/zh-cn.ts

@@ -1,10 +0,0 @@
-export default {
-	orgSelecotr: {
-		org: '组织',
-		user: '用户',
-		dept: '部门',
-		role: '角色',
-		select: '选择',
-		search: '搜索'
-	},
-};

+ 0 - 9
src/components/QueryTree/i18n/en.ts

@@ -1,9 +0,0 @@
-export default {
-    queryTree: {
-        hideSearch: 'hideSearch',
-        displayTheSearch: 'displayTheSearch',
-        refresh: 'refresh',
-        print: 'print',
-        view: 'view'
-    },
-};

+ 0 - 9
src/components/QueryTree/i18n/zh-cn.ts

@@ -1,9 +0,0 @@
-export default {
-	queryTree: {
-		hideSearch: '隐藏搜索',
-		displayTheSearch: '显示搜索',
-		refresh: '刷新',
-		print: '打印',
-		view: '视图'
-	},
-};

+ 0 - 30
src/components/Upload/i18n/en.ts

@@ -1,30 +0,0 @@
-export default {
-	excel: {
-		downloadTemplate: 'downloading the template',
-		fileFormat: 'only xls, xlsx format files are allowed',
-		operationNotice: 'Drag the file here and',
-		clickUpload: 'click upload',
-		lineNumbers: 'line numbers',
-		misDescription: 'misDescription',
-		validationFailureData: 'validation failure data',
-		pleaseUpload: 'please upload',
-		size: 'size not exceeding',
-		format: 'format',
-		file: 'file',
-		sizeErrorText: 'file size error, max ',
-		typeErrorText: 'file type error, upload ',
-		uploadLimit: 'Upload limit exceeded. Maximum',
-		files: 'files allowed',
-	},
-	uploadTipPrefix: 'Please upload',
-	sizeLimitTip: 'size less than',
-	formatTip: 'format is',
-	fileSuffix: 'files',
-	invalidFormatError: 'Incorrect file format, please upload {fileType} format pictures!',
-	invalidFilenameError: 'Incorrect file name, cannot contain commas!',
-	sizeLimitError: 'Upload image size cannot exceed {fileSize} MB!',
-	uploading: 'Uploading image, please wait...',
-	limitExceedError: 'Number of uploaded files cannot exceed {limit}!',
-	uploadFailRetry: 'Upload failed, please try again',
-	uploadFail: 'Image upload failed, please try again',
-};

+ 0 - 30
src/components/Upload/i18n/zh-cn.ts

@@ -1,30 +0,0 @@
-export default {
-	excel: {
-		downloadTemplate: '下载模板',
-		fileFormat: '仅允许导入xls、xlsx格式文件。',
-		operationNotice: '将文件拖到此处,或',
-		clickUpload: '点击上传',
-		lineNumbers: '行号',
-		misDescription: '错误描述',
-		validationFailureData: '校验失败数据',
-		pleaseUpload: '请上传',
-		size: '大小不超过',
-		format: '格式为',
-		file: '的文件',
-		sizeErrorText: '文件大小不超过',
-		typeErrorText: '文件类型错误,请上传 ',
-		uploadLimit: '上传文件数量超出限制,最多允许上传',
-		files: '个文件',
-	},
-	uploadTipPrefix: '请上传',
-	sizeLimitTip: '大小不超过',
-	formatTip: '格式为',
-	fileSuffix: '的文件',
-	invalidFormatError: '文件格式不正确,请上传{fileType}图片格式文件!',
-	invalidFilenameError: '文件名不正确,不能包含英文逗号!',
-	sizeLimitError: '上传头像图片大小不能超过 {fileSize} MB!',
-	uploading: '正在上传图片,请稍候...',
-	limitExceedError: '上传文件数量不能超过 {limit} 个!',
-	uploadFailRetry: '上传失败,请重试',
-	uploadFail: '上传图片失败,请重试',
-};

+ 0 - 11
src/components/Verifition/i18n/en.ts

@@ -1,11 +0,0 @@
-export default {
-	verify: {
-		complete: 'Please complete security verification',
-		slide: {
-			explain: 'Slide right to verify',
-			success: 'Verification successful',
-			fail: 'Verification failed',
-			time: 'Verified in {time}s'
-		}
-	}
-};

+ 0 - 11
src/components/Verifition/i18n/zh-cn.ts

@@ -1,11 +0,0 @@
-export default {
-  verify: {
-    complete: '请完成安全验证',
-    slide: {
-      explain: '向右滑动完成验证',
-      success: '验证成功',
-      fail: '验证失败',
-      time: '{time}s验证成功'
-    }
-  }
-}

+ 1 - 1
src/hooks/message.ts

@@ -1,5 +1,5 @@
 import { ElMessage, ElMessageBox } from 'element-plus';
-import { i18n } from '../i18n';
+import { i18n } from '../locales';
 
 const { t } = i18n.global;
 

+ 0 - 95
src/i18n/index.ts

@@ -1,95 +0,0 @@
-import {createI18n} from 'vue-i18n';
-import pinia from '/@/stores/index';
-import {storeToRefs} from 'pinia';
-import {useThemeConfig} from '/@/stores/themeConfig';
-import {info} from '/@/api/admin/i18n';
-
-// 定义语言国际化内容
-
-/**
- * 说明:
- * 须在 pages 下新建文件夹(建议 `要国际化界面目录` 与 `i18n 目录` 相同,方便查找),
- * 注意国际化定义的字段,不要与原有的定义字段相同。
- * 1、/src/i18n/lang 下的 ts 为框架的国际化内容
- * 2、/src/i18n/pages 下的 ts 为各界面的国际化内容
- */
-
-// element plus 自带国际化
-import enLocale from 'element-plus/es/locale/lang/en';
-import zhcnLocale from 'element-plus/es/locale/lang/zh-cn';
-
-// 定义变量内容
-const messages = {};
-const element = {en: enLocale, 'zh-cn': zhcnLocale};
-const itemize = {en: [] as any[], 'zh-cn': [] as any[]};
-const modules: Record<string, any> = import.meta.glob('./**/*.ts', {eager: true});
-const pages: Record<string, any> = import.meta.glob('./../../**/**/**/i18n/*.ts', {eager: true});
-
-// 对自动引入的 modules 进行分类 en、zh-cn、zh-tw
-for (const path in modules) {
-    const key = path.match(/(\S+)\/(\S+).ts/);
-    if (itemize[key![2]]) itemize[key![2]].push(modules[path].default);
-    else itemize[key![2]] = modules[path];
-}
-for (const path in pages) {
-    const key = path.match(/(\S+)\/(\S+).ts/);
-    if (itemize[key![2]]) itemize[key![2]].push(pages[path].default);
-    else itemize[key![2]] = pages[path];
-}
-
-// 合并数组对象(非标准数组对象,数组中对象的每项 key、value 都不同)
-function mergeArrObj<T>(list: T, key: string) {
-    let obj = {};
-    list[key].forEach((i: EmptyObjectType) => {
-        obj = Object.assign({}, obj, i);
-    });
-    return obj;
-}
-
-for (const key in itemize) {
-    messages[key] = {
-        name: key,
-        el: element[key].el,
-        ...mergeArrObj(itemize, key),
-    };
-}
-
-// 读取 pinia 默认语言
-const stores = useThemeConfig(pinia);
-const {themeConfig} = storeToRefs(stores);
-
-// 导出语言国际化
-export const i18n = createI18n({
-    legacy: false,
-    silentTranslationWarn: true,
-    missingWarn: false,
-    silentFallbackWarn: true,
-    fallbackWarn: false,
-    locale: themeConfig.value.globalI18n,
-    fallbackLocale: zhcnLocale.name,
-    messages,
-});
-
-await fetchI18n()
-
-// 远程获取i18n
-async function fetchI18n() {
-    const infoI18n = await info();
-    const messageLocal: Record<string, any> = {};
-    const itemizeLocal = {en: [] as any[], 'zh-cn': [] as any[]};
-    itemizeLocal['zh-cn'].push(...infoI18n.data.data['zh-cn']);
-    itemizeLocal.en.push(...infoI18n.data.data.en);
-    for (const key in itemizeLocal) {
-        messageLocal[key] = {
-            name: key,
-            ...mergeArrObj(itemizeLocal, key),
-        };
-    }
-    // 先合并远程数据,再合并本地数据,确保本地配置优先级更高
-    i18n.global.mergeLocaleMessage('zh-cn', messageLocal['zh-cn']);
-    i18n.global.mergeLocaleMessage('en', messageLocal['en']);
-    // 重新合并本地配置,确保本地的 common 等配置不被远程覆盖
-    i18n.global.mergeLocaleMessage('zh-cn', messages['zh-cn']);
-    i18n.global.mergeLocaleMessage('en', messages['en']);
-    i18n.global.locale.value = themeConfig.value.globalI18n;
-}

+ 0 - 239
src/i18n/lang/en.ts

@@ -1,239 +0,0 @@
-export default {
-	timeGreeting: {
-		dawn: 'Good early morning',
-		morning: 'Good morning',
-		forenoon: 'Good forenoon',
-		noon: 'Good noon',
-		afternoon: 'Good afternoon',
-		evening: 'Good evening',
-		night: 'Good night',
-		lateNight: 'Good late night',
-	},
-	router: {
-		home: 'Home',
-		system: 'System',
-		systemMenu: 'System Menu',
-		systemRole: 'System Role',
-		systemUser: 'System User',
-		systemDept: 'System Department',
-		systemDic: 'System Dictionary',
-		limits: 'Permissions',
-		limitsFrontEnd: 'Front End',
-		limitsFrontEndPage: 'Front End Page',
-		limitsFrontEndBtn: 'Front End Button',
-		limitsBackEnd: 'Back End',
-		limitsBackEndEndPage: 'Back End Page',
-		menu: 'Menu',
-		menu1: 'Menu 1',
-		menu11: 'Menu 1-1',
-		menu12: 'Menu 1-2',
-		menu121: 'Menu 1-2-1',
-		menu122: 'Menu 1-2-2',
-		menu13: 'Menu 1-3',
-		menu2: 'Menu 2',
-		funIndex: 'Functions',
-		funTagsView: 'Tags View',
-		funCountup: 'Count Up',
-		funWangEditor: 'Wang Editor',
-		funCropper: 'Cropper',
-		funQrcode: 'QR Code',
-		funEchartsMap: 'Echarts Map',
-		funPrintJs: 'PrintJS',
-		funClipboard: 'Copy and Cut',
-		funGridLayout: 'Drag Layout',
-		funSplitpanes: 'Split Pane',
-		funDragVerify: 'Validator',
-		pagesIndex: 'Pages',
-		pagesFiltering: 'Filtering',
-		pagesFilteringDetails: 'Filtering Details',
-		pagesFilteringDetails1: 'Filtering Details 1',
-		pagesIocnfont: 'Icon Font Icon',
-		pagesElement: 'Element Icon',
-		pagesAwesome: 'Awesome Icon',
-		pagesFormAdapt: 'Form Adapt',
-		pagesTableRules: 'Table Rules',
-		pagesFormI18n: 'Form I18n',
-		pagesFormRules: 'Multi-Form Validation',
-		pagesDynamicForm: 'Dynamic Complex Form',
-		pagesWorkflow: 'Workflow',
-		pagesListAdapt: 'List Adapt',
-		pagesWaterfall: 'Waterfall',
-		pagesSteps: 'Steps',
-		pagesPreview: 'Large Preview',
-		pagesWaves: 'Wave Effect',
-		pagesTree: 'Tree Alter Table',
-		pagesDrag: 'Drag Command',
-		pagesLazyImg: 'Image Lazy Loading',
-		makeIndex: 'Make Index',
-		makeSelector: 'Icon Selector',
-		makeNoticeBar: 'Notification Bar',
-		makeSvgDemo: 'Svgicon Demo',
-		makeTableDemo: 'Table Demo',
-		paramsIndex: 'Routing Parameters',
-		paramsCommon: 'General Routing',
-		paramsDynamic: 'Dynamic Routing',
-		paramsCommonDetails: 'General Routing Details',
-		paramsDynamicDetails: 'Dynamic Routing Details',
-		chartIndex: 'Chart Index',
-		visualizingIndex: 'Visualizing Index',
-		visualizingLinkDemo1: 'Visualizing Link Demo 1',
-		visualizingLinkDemo2: 'Visualizing Link Demo 2',
-		personal: 'Personal',
-		tools: 'Tools',
-		layoutLinkView: 'Link View',
-		layoutIframeViewOne: 'Iframe View One',
-		layoutIframeViewTwo: 'Iframe View Two',
-	},
-	staticRoutes: {
-		login: 'Login',
-		authredirect: 'Auth Redirect',
-		expire: 'Password Expire',
-		signIn: 'Sign In',
-		notFound: 'Not Found',
-		noPower: 'No Power',
-	},
-	user: {
-		title0: 'Component Size',
-		title1: 'Language Switching',
-		title2: 'Menu Search',
-		title3: 'Layout Configuration',
-		title4: 'News',
-		title5: 'Full Screen On',
-		title6: 'Full Screen Off',
-		dropdownLarge: 'Large',
-		dropdownDefault: 'Default',
-		dropdownSmall: 'Small',
-		dropdown1: 'Home Page',
-		dropdown2: 'Personal Center',
-		dropdown3: 'Tenant Switch',
-		dropdown4: 'Current Tenant',
-		dropdown5: 'Log Out',
-		searchPlaceholder: 'Menu Search: Supports Chinese and Routing Path',
-		newTitle: 'Notice',
-		newBtn: 'All',
-		newGo: 'Go to the Notification Center',
-		newDesc: 'No Notice',
-		logOutTitle: 'Tips',
-		logOutMessage: 'This Operation Will Log Out. Do You Want to Continue?',
-		logOutConfirm: 'Determine',
-		logOutCancel: 'Cancel',
-		logOutExit: 'Exiting',
-	},
-	tagsView: {
-		refresh: 'Refresh',
-		close: 'Close',
-		closeOther: 'Close Other',
-		closeAll: 'Close All',
-		fullscreen: 'Fullscreen',
-		closeFullscreen: 'Close Fullscreen',
-		favorite: 'Favorite',
-		favoriteMax: 'The number of shortcut navigation exceeds the upper limit. Please remove some shortcuts'
-	},
-	notFound: {
-		foundTitle: 'Wrong Address Input, Please Re-enter the Address~',
-		foundMsg: 'You Can Check the Web Address First, and Then Re-enter or Give Us Feedback.',
-		foundBtn: 'Back to Home Page',
-	},
-	noAccess: {
-		accessTitle: 'You Are Not Authorized to Operate~',
-		accessMsg: 'Contact Information: Add QQ Group Discussion 665452019',
-		accessBtn: 'Reauthorization',
-	},
-	layout: {
-		configTitle: 'Layout Configuration',
-		oneTitle: 'Global Themes',
-		twoTopTitle: 'Top Bar Set Up',
-		twoMenuTitle: 'Menu Set Up',
-		twoColumnsTitle: 'Columns Set Up',
-		twoTopBar: 'Top Bar Background',
-		twoTopBarColor: 'Top Bar Default Font Color',
-		twoIsTopBarColorGradual: 'Top Bar Gradient',
-		twoMenuBar: 'Menu Background',
-		twoMenuBarColor: 'Menu Default Font Color',
-		twoMenuBarActiveColor: 'Menu Highlight Color',
-		twoIsMenuBarColorGradual: 'Menu Gradient',
-		twoColumnsMenuBar: 'Column Menu Background',
-		twoColumnsMenuBarColor: 'Default Font Color Bar Menu',
-		twoIsColumnsMenuBarColorGradual: 'Column Gradient',
-		twoIsColumnsMenuHoverPreload: 'Column Menu Hover Preload',
-		threeTitle: 'Interface Settings',
-		threeIsCollapse: 'Menu Horizontal Collapse',
-		threeIsUniqueOpened: 'Menu Accordion',
-		threeIsFixedHeader: 'Fixed Header',
-		threeIsClassicSplitMenu: 'Classic Layout Split Menu',
-		threeIsLockScreen: 'Open the Lock Screen',
-		threeLockScreenTime: 'Screen Locking (s/s)',
-		fourTitle: 'Interface Display',
-		fourIsShowLogo: 'Sidebar Logo',
-		fourIsBreadcrumb: 'Open Breadcrumb',
-		fourIsBreadcrumbIcon: 'Open Breadcrumb Icon',
-		fourIsTagsview: 'Open Tagsview',
-		fourIsTagsviewIcon: 'Open Tagsview Icon',
-		fourIsCacheTagsView: 'Enable Tagsview Cache',
-		fourIsSortableTagsView: 'Enable Tagsview Drag',
-		fourIsShareTagsView: 'Enable Tagsview Sharing',
-		fourIsFooter: 'Open Footer',
-		fourIsGrayscale: 'Grey Model',
-		fourIsInvert: 'Color Weak Mode',
-		fourIsDark: 'Dark Mode',
-		fourIsWartermark: 'Turn on Watermark',
-		fourWartermarkText: 'Watermark Copy',
-		fourIsChat: 'LLaMA Chat',
-		fiveTitle: 'Other Settings',
-		fiveTagsStyle: 'Tagsview Style',
-		fiveAnimation: 'Page Animation',
-		fiveColumnsAsideStyle: 'Column Style',
-		fiveColumnsAsideLayout: 'Column Layout',
-		sixTitle: 'Layout Switch',
-		sixDefaults: 'One',
-		sixClassic: 'Two',
-		sixTransverse: 'Three',
-		sixColumns: 'Four',
-		tipText: 'Click the Button Below to Copy the Layout Configuration to `/src/stores/themeConfig.ts`. It Has Been Modified In.',
-		copyText: 'Replication Configuration',
-		resetText: 'Restore Default',
-		copyTextSuccess: 'Copy Succeeded!',
-		copyTextError: 'Copy Failed!',
-	},
-	upgrade: {
-		title: 'New Version',
-		msg: 'The New Version is Available, Please Update It Now! Dont Worry, the Update is Fast!',
-		desc: 'Prompt: Update Will Restore the Default Configuration',
-		btnOne: 'Cruel Refusal',
-		btnTwo: 'Update Now',
-		btnTwoLoading: 'Updating',
-	},
-	tenantSelector: {
-		title: 'Switch Tenant',
-		searchPlaceholder: 'Search tenant name, domain or website',
-		noData: 'No tenant data available',
-		current: 'Current',
-		selected: 'Selected',
-		loadError: 'Failed to load tenant list',
-		selectTip: 'Please select a tenant to switch',
-		sameError: 'Already in this tenant, no need to switch',
-		confirmTitle: 'Switch Tenant Confirmation',
-		confirmMessage: 'Are you sure to switch to tenant "{name}"? The page will refresh after switching.',
-		switchSuccess: 'Tenant switched successfully, refreshing page...',
-		switchError: 'Failed to switch tenant, please try again'
-	},
-	common: {
-		closeBtn: 'Close',
-		cancelButtonText: 'Cancel',
-		confirmButtonText: 'Confirm',
-		addBtn: 'Add',
-		editBtn: 'Edit',
-		delBtn: 'Delete',
-		searchBtn: 'Search',
-		resetBtn: 'Reset',
-		delConfirmText: 'This operation will permanently delete, continue?',
-		delSuccessText: 'Delete successfully',
-		addSuccessText: 'Add successfully',
-		editSuccessText: 'Edit successfully'
-	},
-	message: {
-		box: {
-			title: 'Tips'
-		}
-	},
-};

+ 0 - 232
src/i18n/lang/zh-cn.ts

@@ -1,232 +0,0 @@
-// 定义内容
-export default {
-	timeGreeting: {
-		dawn: '凌晨好',
-		morning: '早上好',
-		forenoon: '上午好',
-		noon: '中午好',
-		afternoon: '下午好',
-		evening: '傍晚好',
-		night: '晚上好',
-		lateNight: '夜里好',
-	},
-	router: {
-		home: '首页',
-		system: '系统设置',
-		systemMenu: '菜单管理',
-		systemRole: '角色管理',
-		systemUser: '用户管理',
-		systemDept: '部门管理',
-		systemDic: '字典管理',
-		limits: '权限管理',
-		limitsFrontEnd: '前端控制',
-		limitsFrontEndPage: '页面权限',
-		limitsFrontEndBtn: '按钮权限',
-		limitsBackEnd: '后端控制',
-		limitsBackEndEndPage: '页面权限',
-		funIndex: '功能',
-		funTagsView: 'tagsView 操作',
-		funCountup: '数字滚动',
-		funWangEditor: 'Editor 编辑器',
-		funCropper: '图片裁剪',
-		funQrcode: '二维码生成',
-		funEchartsMap: '地理坐标/地图',
-		funPrintJs: '页面打印',
-		funClipboard: '复制剪切',
-		funGridLayout: '拖拽布局',
-		funSplitpanes: '窗格拆分器',
-		funDragVerify: '验证器',
-		pagesIndex: '页面',
-		pagesFiltering: '过滤筛选组件',
-		pagesFilteringDetails: '过滤筛选组件详情',
-		pagesFilteringDetails1: '过滤筛选组件详情111',
-		pagesIocnfont: 'ali 字体图标',
-		pagesElement: 'ele 字体图标',
-		pagesAwesome: 'awe 字体图标',
-		pagesFormAdapt: '表单自适应',
-		pagesTableRules: '表单表格验证',
-		pagesFormI18n: '表单国际化',
-		pagesFormRules: '多表单验证',
-		pagesDynamicForm: '动态复杂表单',
-		pagesWorkflow: '工作流',
-		pagesListAdapt: '列表自适应',
-		pagesWaterfall: '瀑布屏',
-		pagesSteps: '步骤条',
-		pagesPreview: '大图预览',
-		pagesWaves: '波浪效果',
-		pagesTree: '树形改表格',
-		pagesDrag: '拖动指令',
-		pagesLazyImg: '图片懒加载',
-		makeIndex: '组件封装',
-		makeSelector: '图标选择器',
-		makeNoticeBar: '滚动通知栏',
-		makeSvgDemo: 'svgIcon 演示',
-		makeTableDemo: '表格封装演示',
-		paramsIndex: '路由参数',
-		paramsCommon: '普通路由',
-		paramsDynamic: '动态路由',
-		paramsCommonDetails: '普通路由详情',
-		paramsDynamicDetails: '动态路由详情',
-		chartIndex: '大数据图表',
-		visualizingIndex: '数据可视化',
-		visualizingLinkDemo1: '数据可视化演示1',
-		visualizingLinkDemo2: '数据可视化演示2',
-		personal: '个人中心',
-		tools: '工具类集合',
-		layoutLinkView: '外链',
-		layoutIframeViewOne: '内嵌 iframe1',
-		layoutIframeViewTwo: '内嵌 iframe2',
-	},
-	staticRoutes: {
-		login: '登录',
-		authredirect: '回调页',
-		expire: '密码过期',
-		signIn: '登录',
-		notFound: '找不到此页面',
-		noPower: '没有权限',
-	},
-	user: {
-		title0: '组件大小',
-		title1: '语言切换',
-		title2: '菜单搜索',
-		title3: '布局配置',
-		title4: '消息',
-		title5: '开全屏',
-		title6: '关全屏',
-		dropdownLarge: '大型',
-		dropdownDefault: '默认',
-		dropdownSmall: '小型',
-		dropdown1: '首页',
-		dropdown2: '个人中心',
-		dropdown3: '切换租户',
-		dropdown4: '当前租户',
-		dropdown5: '退出登录',
-		searchPlaceholder: '菜单搜索:支持中文、路由路径',
-		newTitle: '通知',
-		newBtn: '全部',
-		newGo: '前往通知中心',
-		newDesc: '暂无通知',
-		logOutTitle: '提示',
-		logOutMessage: '此操作将退出登录, 是否继续?',
-		logOutConfirm: '确定',
-		logOutCancel: '取消',
-		logOutExit: '退出中',
-	},
-	tagsView: {
-		refresh: '刷新',
-		close: '关闭',
-		closeOther: '关闭其它',
-		closeAll: '全部关闭',
-		fullscreen: '当前页全屏',
-		closeFullscreen: '关闭全屏',
-		favorite: '收藏',
-		favoriteMax: '快捷导航数量超过上限,请移除部分'
-	},
-	notFound: {
-		foundTitle: '地址输入错误,请重新输入地址~',
-		foundMsg: '您可以先检查网址,然后重新输入或给我们反馈问题。',
-		foundBtn: '返回首页',
-	},
-	noAccess: {
-		accessTitle: '您未被授权,没有操作权限~',
-		accessMsg: '联系方式:加QQ群探讨 665452019',
-		accessBtn: '重新授权',
-	},
-	layout: {
-		configTitle: '布局配置',
-		oneTitle: '全局主题',
-		twoTopTitle: '顶栏设置',
-		twoMenuTitle: '菜单设置',
-		twoColumnsTitle: '分栏设置',
-		twoTopBar: '顶栏背景',
-		twoTopBarColor: '顶栏默认字体颜色',
-		twoIsTopBarColorGradual: '顶栏背景渐变',
-		twoMenuBar: '菜单背景',
-		twoMenuBarColor: '菜单默认字体颜色',
-		twoMenuBarActiveColor: '菜单高亮背景色',
-		twoIsMenuBarColorGradual: '菜单背景渐变',
-		twoColumnsMenuBar: '分栏菜单背景',
-		twoColumnsMenuBarColor: '分栏菜单默认字体颜色',
-		twoIsColumnsMenuBarColorGradual: '分栏菜单背景渐变',
-		twoIsColumnsMenuHoverPreload: '分栏菜单鼠标悬停预加载',
-		threeTitle: '界面设置',
-		threeIsCollapse: '菜单水平折叠',
-		threeIsUniqueOpened: '菜单手风琴',
-		threeIsFixedHeader: '固定 Header',
-		threeIsClassicSplitMenu: '经典布局顶部菜单',
-		threeIsLockScreen: '开启锁屏',
-		threeLockScreenTime: '自动锁屏(s/秒)',
-		fourTitle: '界面显示',
-		fourIsShowLogo: '侧边栏 Logo',
-		fourIsBreadcrumb: '开启 Breadcrumb',
-		fourIsBreadcrumbIcon: '开启 Breadcrumb 图标',
-		fourIsTagsview: '开启 Tagsview',
-		fourIsTagsviewIcon: '开启 Tagsview 图标',
-		fourIsCacheTagsView: '开启 TagsView 缓存',
-		fourIsSortableTagsView: '开启 TagsView 拖拽',
-		fourIsShareTagsView: '开启 TagsView 共用',
-		fourIsFooter: '开启 Footer',
-		fourIsGrayscale: '灰色模式',
-		fourIsInvert: '色弱模式',
-		fourIsDark: '深色模式',
-		fourIsWartermark: '开启水印',
-		fourIsChat: '开启AI助手',
-		fourWartermarkText: '水印文案',
-		fiveTitle: '其它设置',
-		fiveTagsStyle: 'Tagsview 风格',
-		fiveAnimation: '主页面切换动画',
-		fiveColumnsAsideStyle: '分栏高亮风格',
-		fiveColumnsAsideLayout: '分栏布局风格',
-		sixTitle: '布局切换',
-		sixDefaults: '左侧',
-		sixClassic: '左顶',
-		sixTransverse: '横向',
-		sixColumns: '分栏',
-		tipText: '点击下方按钮,复制布局配置去 `src/stores/themeConfig.ts` 中修改。',
-		copyText: '一键复制配置',
-		resetText: '一键恢复默认',
-		copyTextSuccess: '复制成功!',
-		copyTextError: '复制失败!',
-	},
-	upgrade: {
-		title: '新版本升级',
-		msg: '新版本来啦,马上更新尝鲜吧!不用担心,更新很快的哦!',
-		desc: '提示:更新会还原默认配置',
-		btnOne: '残忍拒绝',
-		btnTwo: '马上更新',
-		btnTwoLoading: '更新中',
-	},
-	tenantSelector: {
-		title: '切换租户',
-		searchPlaceholder: '搜索租户名称、域名或网站名',
-		noData: '暂无租户数据',
-		current: '当前租户',
-		selected: '已选择',
-		loadError: '加载租户列表失败',
-		selectTip: '请选择要切换的租户',
-		sameError: '当前已是该租户,无需切换',
-		confirmTitle: '切换租户确认',
-		confirmMessage: '确定要切换到租户 "{name}" 吗?切换后页面将刷新。',
-		switchSuccess: '租户切换成功,即将刷新页面...',
-		switchError: '租户切换失败,请重试'
-	},
-	common: {
-		closeBtn: '关闭',
-		cancelButtonText: '取消',
-		confirmButtonText: '确定',
-		addBtn: '新增',
-		editBtn: '编辑',
-		delBtn: '删除',
-		searchBtn: '查询',
-		resetBtn: '重置',
-		delConfirmText: '此操作将永久删除, 是否继续?',
-		delSuccessText: '删除成功',
-		addSuccessText: '添加成功',
-		editSuccessText: '修改成功'
-	},
-	message: {
-		box: {
-			title: '提示'
-		}
-	},
-};

+ 0 - 78
src/i18n/pages/agent/en.ts

@@ -1,78 +0,0 @@
-export default {
-	agentUser: {
-		index: '#',
-		agentId: 'Agent ID',
-		agentName: 'Agent Name',
-		username: 'Username',
-		realname: 'Real Name',
-		phone: 'Phone',
-		email: 'Email',
-		idcard: 'ID Card',
-		address: 'Address',
-		offlineRechargeRate: 'Offline Recharge Rate (%)',
-		status: 'Status',
-		bankName: 'Bank Name',
-		bankBranch: 'Bank Branch',
-		bankProvince: 'Bank Province',
-		bankCity: 'Bank City',
-		accountName: 'Account Name',
-		accountNum: 'Account Number',
-		createTime: 'Create Time',
-		updateTime: 'Update Time',
-		operation: 'Operation',
-		
-		// Tips
-		inputAgentNameTip: 'Please enter agent name',
-		inputUsernameTip: 'Please enter username',
-		inputRealnameTip: 'Please enter real name',
-		inputPhoneTip: 'Please enter phone',
-		inputEmailTip: 'Please enter email',
-		inputIdcardTip: 'Please enter ID card',
-		inputAddressTip: 'Please enter address',
-		inputOfflineRechargeRateTip: 'Please enter rate',
-		inputBankNameTip: 'Please enter bank name',
-		inputBankBranchTip: 'Please enter bank branch',
-		inputBankProvinceTip: 'Please enter bank province',
-		inputBankCityTip: 'Please enter bank city',
-		inputAccountNameTip: 'Please enter account name',
-		inputAccountNumTip: 'Please enter account number',
-		
-		// Search
-		searchAgentAccount: 'Please enter agent account',
-		
-		// Buttons
-		viewBtn: 'View',
-		changePwdBtn: 'Change Password',
-		
-		// Status
-		statusEnable: 'Enable',
-		statusDisable: 'Disable',
-		statusChangeSuccess: 'Status changed successfully',
-		
-		// Group titles
-		basicInfo: 'Basic Information',
-		bankInfo: 'Bank Information',
-		
-		// Tips
-		defaultPasswordTip: 'Tip: Default password for new agent is qwe123QWE!',
-		
-		// Validation
-		usernameRequired: 'Username cannot be empty',
-		agentNameRequired: 'Agent name cannot be empty',
-		realnameRequired: 'Real name cannot be empty',
-		phoneRequired: 'Phone cannot be empty',
-		emailRequired: 'Email cannot be empty',
-		
-		// Change password
-		changePwdTitle: 'Change Password',
-		newPassword: 'New Password',
-		confirmPassword: 'Confirm Password',
-		inputNewPasswordTip: 'Please enter new password',
-		inputConfirmPasswordTip: 'Please enter new password again',
-		newPasswordRequired: 'New password cannot be empty',
-		passwordLengthTip: 'Password length should be 6 to 20 characters',
-		confirmPasswordRequired: 'Please enter new password again',
-		passwordNotMatch: 'Passwords do not match',
-		changePwdSuccess: 'Password changed successfully',
-	},
-};

+ 0 - 78
src/i18n/pages/agent/zh-cn.ts

@@ -1,78 +0,0 @@
-export default {
-	agentUser: {
-		index: '#',
-		agentId: '代理ID',
-		agentName: '代理名称',
-		username: '用户名',
-		realname: '真实姓名',
-		phone: '手机号码',
-		email: '邮箱地址',
-		idcard: '身份证号',
-		address: '通讯地址',
-		offlineRechargeRate: '线下充值费率(%)',
-		status: '状态',
-		bankName: '开户行名称',
-		bankBranch: '开户网点',
-		bankProvince: '开户省',
-		bankCity: '开户市',
-		accountName: '账户名',
-		accountNum: '账户号',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		operation: '操作',
-		
-		// 提示信息
-		inputAgentNameTip: '请输入代理商名称',
-		inputUsernameTip: '请输入用户名',
-		inputRealnameTip: '请输入真实姓名',
-		inputPhoneTip: '请输入手机号码',
-		inputEmailTip: '请输入邮箱地址',
-		inputIdcardTip: '请输入身份证号',
-		inputAddressTip: '请输入通讯地址',
-		inputOfflineRechargeRateTip: '请输入费率',
-		inputBankNameTip: '请输入开户行名称',
-		inputBankBranchTip: '请输入开户网点',
-		inputBankProvinceTip: '请输入开户省',
-		inputBankCityTip: '请输入开户市',
-		inputAccountNameTip: '请输入账户名',
-		inputAccountNumTip: '请输入账户号',
-		
-		// 搜索
-		searchAgentAccount: '请输入代理账号',
-		
-		// 按钮
-		viewBtn: '查看',
-		changePwdBtn: '改密',
-		
-		// 状态
-		statusEnable: '启用',
-		statusDisable: '禁用',
-		statusChangeSuccess: '状态修改成功',
-		
-		// 分组标题
-		basicInfo: '基本信息',
-		bankInfo: '银行信息',
-		
-		// 提示
-		defaultPasswordTip: '提示:新增代理的默认密码为 qwe123QWE!',
-		
-		// 校验
-		usernameRequired: '用户名不能为空',
-		agentNameRequired: '代理商名称不能为空',
-		realnameRequired: '真实姓名不能为空',
-		phoneRequired: '手机号码不能为空',
-		emailRequired: '邮箱地址不能为空',
-		
-		// 修改密码
-		changePwdTitle: '修改密码',
-		newPassword: '新密码',
-		confirmPassword: '确认密码',
-		inputNewPasswordTip: '请输入新密码',
-		inputConfirmPasswordTip: '请再次输入新密码',
-		newPasswordRequired: '新密码不能为空',
-		passwordLengthTip: '密码长度在 6 到 20 个字符',
-		confirmPasswordRequired: '请再次输入新密码',
-		passwordNotMatch: '两次输入的密码不一致',
-		changePwdSuccess: '密码修改成功',
-	},
-};

+ 0 - 36
src/i18n/pages/form/en.ts

@@ -1,36 +0,0 @@
-// Improved versions of each word or sentence
-export default {
-	common: {
-		queryBtn: 'Query',
-		addBtn: 'Add',
-		editBtn: 'Edit',
-		delBtn: 'Delete',
-		viewBtn: 'View',
-		detailBtn: 'Details',
-		exportBtn: 'Export',
-		expandBtn: 'expand/phrase ',
-		refreshCacheBtn: 'Refresh cache',
-		importBtn: 'Import',
-		importUserTip: 'Import user',
-		queryDeptTip: 'Enter department name',
-		resetBtn: 'Reset',
-		copyBtn:'Copy',
-		action: 'Action',
-		optSuccessText: 'Operation successful',
-		optConfirmText: 'Confirm this operation?',
-		editSuccessText: 'Successfully edited',
-		addSuccessText: 'Successfully added',
-		delSuccessText: 'Successfully deleted',
-		delConfirmText: 'This operation will permanently delete',
-		confirmButtonText: 'Confirm',
-		cancelButtonText: 'Cancel',
-		download: 'Download',
-		expand: 'Expand',
-		selectAll: 'SelectAll',
-	},
-	message: {
-		box: {
-			title: 'System prompt',
-		},
-	},
-};

+ 0 - 35
src/i18n/pages/form/zh-cn.ts

@@ -1,35 +0,0 @@
-// 定义通用内容
-export default {
-	common: {
-		queryBtn: '查询',
-		addBtn: '新 增',
-		editBtn: '修 改',
-		expandBtn: '展开/折叠',
-		delBtn: '删除',
-		viewBtn: '查看',
-		detailBtn: '详情',
-		refreshCacheBtn: '刷新缓存',
-		exportBtn: '导出',
-		importBtn: '导入',
-		queryDeptTip: '请输入部门名称',
-		resetBtn: '重置',
-		copyBtn: '复制',
-		action: '操作',
-		optSuccessText: '操作成功',
-		editSuccessText: '修改成功',
-		addSuccessText: '添加成功',
-		delSuccessText: '删除成功',
-		delConfirmText: '此操作将永久删除',
-		optConfirmText: '是否确认本操作',
-		confirmButtonText: '确 认',
-		cancelButtonText: '取 消',
-		download: '下载',
-		expand: '展开/折叠',
-		selectAll: '全选/不全选',
-	},
-	message: {
-		box: {
-			title: '系统提示',
-		},
-	},
-};

+ 0 - 99
src/i18n/pages/login/en.ts

@@ -1,99 +0,0 @@
-export default {
-	label: {
-		one1: 'Account login',
-		two2: 'SMS login',
-		three3: 'Social login',
-		register: 'Create account',
-	},
-	link: {
-		one3: 'Third party login',
-		two4: 'Links',
-	},
-	password: {
-		accountPlaceholder1: 'The username "admin" is common, please use another',
-		accountPlaceholder2: 'Password',
-		accountPlaceholder3: 'Please enter the verification code',
-		phonePlaceholder4: 'Please enter your phone number',
-		tenantPlaceholder: 'Please select tenant',
-		accountBtnText: 'Sign in',
-		resetBtnText: 'Reset',
-		registerBtnText: 'Create account',
-		readAccept: 'I have read and accept',
-		privacyPolicy: 'the Privacy Policy',
-		oldPassword: 'Please enter old password',
-		newPassword: 'Please enter new password',
-		confirmPassword: 'Please confirm new password',
-		backToLogin: 'Back to login',
-		mobileLogin: 'Mobile Login',
-		createAccount: 'Create Account',
-		imageCodeTip: 'Please enter code',
-		forgetPassword: 'Forgot Password',
-	},
-	mobile: {
-		placeholder1: 'Please enter your mobile number',
-		placeholder2: 'Please enter the verification code',
-		codeText: 'Get code',
-		btnText: 'Sign in',
-		mobileLogin: 'Mobile Login',
-		backToLogin: 'Back to login',
-		createAccount: 'Create Account',
-		sendSuccess: 'Verification code sent successfully',
-		seconds: 'seconds to resend',
-		mobileRequired: 'Please enter your mobile number',
-		codeRequired: 'Please enter verification code',
-		codeLength: 'Verification code must be 4 digits',
-		sendFailed: 'Failed to send verification code',
-		loginSuccess: 'Login successful',
-		loginFailed: 'Login failed',
-		signIn: 'Sign In',
-	},
-	forget: {
-		newPasswordPlaceholder: 'Please enter new password',
-		confirmPasswordPlaceholder: 'Please confirm new password',
-		passwordEmpty: 'Password cannot be empty',
-		passwordLength: 'Password length must be between 6 and 20 characters',
-		passwordRule: 'The two passwords do not match',
-		passwordScore: 'Password strength is too low',
-	},
-	scan: {
-		text: 'Use your mobile device to scan and quickly log in or create an account',
-		wechatApp: 'Scan with WeChat',
-		appErrorTip: 'The login fails because the application is not configured',
-	},
-	signInText: 'Welcome back!',
-	browserMsgText:
-		'Tip: For best results, we recommend using Google Chrome, Microsoft Edge (version 80 or higher), or the 360 browser with speed mode enabled.',
-	expire: {
-		oldPassword: 'Please enter old password',
-		newPassword: 'Please enter new password',
-		confirmPassword: 'Please confirm new password',
-		passwordRule: 'The two passwords do not match',
-		passwordScore: 'Password strength is too low',
-		resetSuccess: 'Password reset successfully',
-	},
-	tenantSelect: {
-		select: 'Select Tenant',
-		loadError: 'Failed to get tenant list',
-	},
-	verify: {
-		imageCode: 'Please enter verification code',
-	},
-	register: {
-		tenantEmpty: 'Please select a tenant',
-		tenantLoadError: 'Failed to load tenant list',
-		usernameEmpty: 'Username cannot be empty',
-		usernameLength: 'Username length must be between 5 and 20 characters',
-		phoneEmpty: 'Phone number cannot be empty',
-		passwordEmpty: 'Password cannot be empty',
-		passwordLength: 'Password length must be between 6 and 20 characters',
-		passwordStrength: 'Password strength is too low',
-		termsRequired: 'Please read and accept the terms',
-	},
-	divider: {
-		or: 'or',
-	},
-	socialLogin: {
-		wechatWork: 'WeCom',
-		dingtalk: 'DingTalk',
-	},
-};

+ 0 - 96
src/i18n/pages/login/zh-cn.ts

@@ -1,96 +0,0 @@
-// 定义内容
-export default {
-	label: {
-		one1: '用户名登录',
-		two2: '手机号登录',
-		three3: '社交登录',
-		register: '注册账号',
-	},
-	link: {
-		one3: '第三方登录',
-		two4: '友情链接',
-	},
-	password: {
-		accountPlaceholder1: '请输入用户名',
-		accountPlaceholder2: '请输入密码',
-		accountPlaceholder3: '请输入验证码',
-		phonePlaceholder4: '请输入手机号',
-		tenantPlaceholder: '请选择租户',
-		accountBtnText: '登 录',
-		registerBtnText: '注 册',
-		resetBtnText: '重 置',
-		readAccept: '我已仔细阅读并接受',
-		privacyPolicy: '《隐私政策》',
-		oldPassword: '请输入原密码',
-		newPassword: '请输入新密码',
-		confirmPassword: '请确认新密码',
-		backToLogin: '返回登录',
-		mobileLogin: '验证码登录',
-		createAccount: '注册账号',
-		imageCodeTip: '请输入验证码',
-		forgetPassword: '找回密码',
-	},
-	mobile: {
-		placeholder1: '请输入手机号',
-		placeholder2: '请输入验证码',
-		codeText: '获取验证码',
-		btnText: '登 录',
-		mobileLogin: '验证码登录',
-		backToLogin: '返回登录',
-		createAccount: '注册账号',
-		sendSuccess: '验证码发送成功',
-		seconds: '秒后重发',
-		mobileRequired: '请输入手机号码',
-		codeRequired: '请输入验证码',
-		codeLength: '验证码必须是4位数字',
-		sendFailed: '发送验证码失败',
-		loginSuccess: '登录成功',
-		loginFailed: '登录失败',
-		signIn: '登 录',
-	},
-	forget: {
-		newPasswordPlaceholder: '请输入新密码',
-		confirmPasswordPlaceholder: '请确认新密码',
-		passwordEmpty: '密码不能为空',
-		passwordLength: '用户密码长度必须介于 6 和 20 之间',
-		passwordRule: '两次输入的密码不一致',
-		passwordScore: '密码强度太低',
-	},
-	scan: {
-		text: '打开手机扫一扫,快速登录/注册',
-		wechatApp: '微信扫码体验移动端',
-		appErrorTip: '应用未配置,登录失败',
-	},
-	signInText: '欢迎回来!',
-	browserMsgText: '* 温馨提示:建议使用谷歌、Microsoft Edge,版本 80 及以上浏览器,360浏览器请使用极速模式',
-	expire: {
-		oldPassword: '请输入原密码',
-		newPassword: '请输入新密码',
-		confirmPassword: '请确认新密码',
-		passwordRule: '两次输入的密码不一致',
-		passwordScore: '密码强度太低',
-		resetSuccess: '密码重置成功',
-	},
-	tenantSelect: {
-		select: '选择租户',
-		loadError: '获取租户列表失败',
-	},
-	register: {
-		tenantEmpty: '请选择租户',
-		tenantLoadError: '获取租户列表失败',
-		usernameEmpty: '用户名不能为空',
-		usernameLength: '用户名称长度必须介于 5 和 20 之间',
-		phoneEmpty: '手机号不能为空',
-		passwordEmpty: '密码不能为空',
-		passwordLength: '用户密码长度必须介于 6 和 20 之间',
-		passwordStrength: '密码强度太低',
-		termsRequired: '请阅读并同意条款',
-	},
-	divider: {
-		or: '或',
-	},
-	socialLogin: {
-		wechatWork: '企微',
-		dingtalk: '钉钉',
-	},
-};

+ 0 - 90
src/i18n/pages/merchant/en.ts

@@ -1,90 +0,0 @@
-export default {
-	merchantUser: {
-		index: '#',
-		merchantId: 'Merchant ID',
-		merchantName: 'Merchant Name',
-		username: 'Username',
-		realname: 'Real Name',
-		phone: 'Phone',
-		email: 'Email',
-		idcard: 'ID Card',
-		contactAddress: 'Contact Address',
-		websiteName: 'Website Name',
-		websiteAddress: 'Website Address',
-		appId: 'AppId',
-		offlineRechargeRate: 'Offline Recharge Rate (%)',
-		status: 'Status',
-		agentId: 'Agent',
-		agentName: 'Agent',
-		totalAmount: 'Total Amount',
-		freezeAmount: 'Freeze Amount',
-		withdrawnAmount: 'Withdrawn Amount',
-		createTime: 'Create Time',
-		updateTime: 'Update Time',
-		operation: 'Operation',
-		
-		// Tips
-		inputMerchantNameTip: 'Please enter merchant name',
-		inputUsernameTip: 'Please enter username',
-		inputRealnameTip: 'Please enter real name',
-		inputPhoneTip: 'Please enter phone',
-		inputEmailTip: 'Please enter email',
-		inputIdcardTip: 'Please enter ID card',
-		inputContactAddressTip: 'Please enter contact address',
-		inputWebsiteNameTip: 'Please enter website name',
-		inputWebsiteAddressTip: 'Please enter website address',
-		inputOfflineRechargeRateTip: 'Please enter rate',
-		selectAgentTip: 'Please select agent',
-		
-		// Search
-		searchMerchantAccount: 'Please enter merchant account',
-		
-		// Buttons
-		viewBtn: 'View',
-		changePwdBtn: 'Change Password',
-		resetKeyBtn: 'Reset Key',
-		
-		// Status
-		statusEnable: 'Enable',
-		statusDisable: 'Disable',
-		statusChangeSuccess: 'Status changed successfully',
-		
-		// Group titles
-		basicInfo: 'Basic Information',
-		websiteInfo: 'Website Information',
-		
-		// Tips
-		defaultPasswordTip: 'Tip: Default password for new merchant is qwe123QWE!',
-		
-		// Validation
-		usernameRequired: 'Username cannot be empty',
-		merchantNameRequired: 'Merchant name cannot be empty',
-		phoneRequired: 'Phone cannot be empty',
-		emailRequired: 'Email cannot be empty',
-		
-		// Change password
-		changePwdTitle: 'Change Password',
-		newPassword: 'New Password',
-		confirmPassword: 'Confirm Password',
-		inputNewPasswordTip: 'Please enter new password',
-		inputConfirmPasswordTip: 'Please enter new password again',
-		newPasswordRequired: 'New password cannot be empty',
-		passwordLengthTip: 'Password length should be 6 to 20 characters',
-		confirmPasswordRequired: 'Please enter new password again',
-		passwordNotMatch: 'Passwords do not match',
-		changePwdSuccess: 'Password changed successfully',
-		
-		// Reset key
-		resetKeyTitle: 'Reset MD5 Key',
-		resetKeyConfirm: 'Are you sure to reset the MD5 key for this merchant? The original key will be invalid!',
-		resetKeySuccess: 'Key reset successfully',
-		keyDialogTitle: 'MD5 Key Information',
-		keyDialogTip: 'Please keep the following key information properly. It cannot be viewed again after closing!',
-		appIdLabel: 'AppId',
-		md5KeyLabel: 'MD5 Key',
-		copyBtn: 'Copy',
-		copyAllBtn: 'Copy All',
-		copySuccess: 'Copied successfully',
-		copyFailed: 'Copy failed',
-	},
-};

+ 0 - 90
src/i18n/pages/merchant/zh-cn.ts

@@ -1,90 +0,0 @@
-export default {
-	merchantUser: {
-		index: '#',
-		merchantId: '商户ID',
-		merchantName: '商户名称',
-		username: '用户名',
-		realname: '真实姓名',
-		phone: '手机号码',
-		email: '邮箱地址',
-		idcard: '身份证号',
-		contactAddress: '通讯地址',
-		websiteName: '网站名称',
-		websiteAddress: '网站地址',
-		appId: 'AppId',
-		offlineRechargeRate: '线下充值费率(%)',
-		status: '状态',
-		agentId: '所属代理商',
-		agentName: '所属代理',
-		totalAmount: '总金额',
-		freezeAmount: '总冻结金额',
-		withdrawnAmount: '总提现金额',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		operation: '操作',
-		
-		// 提示信息
-		inputMerchantNameTip: '请输入商户名称',
-		inputUsernameTip: '请输入用户名',
-		inputRealnameTip: '请输入真实姓名',
-		inputPhoneTip: '请输入手机号码',
-		inputEmailTip: '请输入邮箱地址',
-		inputIdcardTip: '请输入身份证号',
-		inputContactAddressTip: '请输入通讯地址',
-		inputWebsiteNameTip: '请输入网站名称',
-		inputWebsiteAddressTip: '请输入网站地址',
-		inputOfflineRechargeRateTip: '请输入费率',
-		selectAgentTip: '请选择所属代理商',
-		
-		// 搜索
-		searchMerchantAccount: '请输入商户账号',
-		
-		// 按钮
-		viewBtn: '查看',
-		changePwdBtn: '改密',
-		resetKeyBtn: '重置密钥',
-		
-		// 状态
-		statusEnable: '启用',
-		statusDisable: '禁用',
-		statusChangeSuccess: '状态修改成功',
-		
-		// 分组标题
-		basicInfo: '基本信息',
-		websiteInfo: '网站信息',
-		
-		// 提示
-		defaultPasswordTip: '提示:新增商户的默认密码为 qwe123QWE!',
-		
-		// 校验
-		usernameRequired: '用户名不能为空',
-		merchantNameRequired: '商户名称不能为空',
-		phoneRequired: '手机号码不能为空',
-		emailRequired: '邮箱地址不能为空',
-		
-		// 修改密码
-		changePwdTitle: '修改密码',
-		newPassword: '新密码',
-		confirmPassword: '确认密码',
-		inputNewPasswordTip: '请输入新密码',
-		inputConfirmPasswordTip: '请再次输入新密码',
-		newPasswordRequired: '新密码不能为空',
-		passwordLengthTip: '密码长度在 6 到 20 个字符',
-		confirmPasswordRequired: '请再次输入新密码',
-		passwordNotMatch: '两次输入的密码不一致',
-		changePwdSuccess: '密码修改成功',
-		
-		// 重置密钥
-		resetKeyTitle: '重置MD5密钥',
-		resetKeyConfirm: '确定要重置该商户的MD5密钥吗?重置后原密钥将失效!',
-		resetKeySuccess: '密钥重置成功',
-		keyDialogTitle: 'MD5密钥信息',
-		keyDialogTip: '请妥善保管以下密钥信息,关闭后将无法再次查看!',
-		appIdLabel: 'AppId',
-		md5KeyLabel: 'MD5密钥',
-		copyBtn: '复制',
-		copyAllBtn: '一键复制',
-		copySuccess: '复制成功',
-		copyFailed: '复制失败',
-	},
-};

+ 13 - 12
src/layout/navBars/breadcrumb/user.vue

@@ -47,7 +47,10 @@
 		</div>
 		<el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick">
 			<span class="layout-navbars-breadcrumb-user-link">
-				<img :src="userInfos.user.avatar?.startsWith('http') ? userInfos.user.avatar : baseURL + userInfos.user.avatar" class="layout-navbars-breadcrumb-user-link-photo mr5" />
+				<img
+					:src="userInfos.user.avatar?.startsWith('http') ? userInfos.user.avatar : baseURL + userInfos.user.avatar"
+					class="layout-navbars-breadcrumb-user-link-photo mr5"
+				/>
 				{{ userInfos.user.username }}
 				<el-icon class="el-icon--right">
 					<ele-ArrowDown />
@@ -67,12 +70,7 @@
 		<Search ref="searchRef" />
 		<global-websocket uri="/admin/ws/info" v-if="websocketEnable" @rollback="rollback" />
 		<personal-drawer ref="personalDrawerRef"></personal-drawer>
-		<tenant-selector 
-			ref="tenantSelectorRef" 
-			:tenant-list="tenantList" 
-			:loading="tenantLoading"
-			@change="onTenantChange"
-		></tenant-selector>
+		<tenant-selector ref="tenantSelectorRef" :tenant-list="tenantList" :loading="tenantLoading" @change="onTenantChange"></tenant-selector>
 	</div>
 </template>
 
@@ -81,6 +79,7 @@ import { logout } from '/@/api/login';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import screenfull from 'screenfull';
 import { useI18n } from 'vue-i18n';
+import { setLanguage } from '/@/locales/index';
 import { useUserInfo } from '/@/stores/userInfo';
 import { useThemeConfig } from '/@/stores/themeConfig';
 import other from '/@/utils/other';
@@ -110,7 +109,7 @@ interface Tenant {
 }
 
 // 定义变量内容
-const { locale, t } = useI18n();
+const { t } = useI18n();
 const router = useRouter();
 const stores = useUserInfo();
 const storesThemeConfig = useThemeConfig();
@@ -134,7 +133,7 @@ const shouldShowTenantOption = computed(() => {
 const currentTenantName = computed(() => {
 	if (tenantList.value.length <= 1) return null;
 	const currentTenantId = Session.getTenant();
-	const currentTenant = tenantList.value.find(tenant => tenant.id === currentTenantId);
+	const currentTenant = tenantList.value.find((tenant) => tenant.id === currentTenantId);
 	return currentTenant?.name || null;
 });
 
@@ -238,7 +237,9 @@ const onLanguageChange = (lang: string) => {
 	Local.remove('themeConfig');
 	themeConfig.value.globalI18n = lang;
 	Local.set('themeConfig', themeConfig.value);
-	locale.value = lang;
+	// 映射旧格式语言代码到新格式
+	const localeMap: Record<string, string> = { 'zh-cn': 'zh-CN', en: 'en-US' };
+	setLanguage(localeMap[lang] || lang);
 	other.useTitle();
 	initI18nOrSize('globalI18n', 'disabledI18n');
 };
@@ -256,7 +257,7 @@ const initI18nOrSize = (value: string, attr: string) => {
 
 // 获取到消息
 const rollback = (msg: string) => {
-			useMsg().setMsg({ label: 'websocket消息', value: msg, time: formatAxisI18n(new Date(), t) });
+	useMsg().setMsg({ label: 'websocket消息', value: msg, time: formatAxisI18n(new Date(), t) });
 };
 
 // 获取是否显示未读
@@ -295,7 +296,7 @@ onMounted(() => {
 	}
 
 	getIsDot();
-	
+
 	// 加载租户列表
 	loadTenantList();
 });

+ 959 - 0
src/locales/en-US/index.json

@@ -0,0 +1,959 @@
+{
+	"app": {
+		"title": "Management System"
+	},
+	"timeGreeting": {
+		"dawn": "Good early morning",
+		"morning": "Good morning",
+		"forenoon": "Good forenoon",
+		"noon": "Good noon",
+		"afternoon": "Good afternoon",
+		"evening": "Good evening",
+		"night": "Good night",
+		"lateNight": "Good late night"
+	},
+	"router": {
+		"home": "Home",
+		"system": "System",
+		"systemMenu": "System Menu",
+		"systemRole": "System Role",
+		"systemUser": "System User",
+		"systemDept": "System Department",
+		"systemDic": "System Dictionary",
+		"order": "Order Management",
+		"payOrder": "Collection Order",
+		"withdrawOrder": "Payment Order",
+		"merchant": "Merchant Management",
+		"merchantList": "Merchant List",
+		"agent": "Agent Management",
+		"agentList": "Agent List",
+		"payment": "Payment Config",
+		"paymentChannel": "Payment Channel",
+		"paymentType": "Payment Type",
+		"settlement": "Settlement Management",
+		"merchantWithdraw": "Merchant Settlement",
+		"agentWithdraw": "Agent Settlement",
+		"systemManagement": "System Management",
+		"permissionManagement": "Permission Management",
+		"userManagement": "User Management",
+		"menuManagement": "Menu Management",
+		"roleManagement": "Role Management",
+		"departmentManagement": "Department Management",
+		"postManagement": "Post Management",
+		"tenantManagement": "Tenant Management",
+		"logManagement": "Log Management",
+		"auditLog": "Audit Log",
+		"operationLog": "Operation Log",
+		"fileManagement": "File Management",
+		"dictManagement": "Dictionary Management",
+		"parameterManagement": "Parameter Management",
+		"internationalizationManagement": "I18n Management",
+		"terminalManagement": "Terminal Management",
+		"keyManagement": "Key Management",
+		"tokenManagement": "Token Management",
+		"sensitiveWords": "Sensitive Words",
+		"sysArea": "Administrative Division",
+		"bizPlatform": "Business Platform",
+		"paymentSystem": "Payment System",
+		"checkoutCounter": "Checkout Counter",
+		"productOrder": "Product Order",
+		"paymentOrder": "Payment Order",
+		"refundOrder": "Refund Order",
+		"notificationRecord": "Notification Record",
+		"appManagement": "App Management",
+		"customerManagement": "Customer Management",
+		"appRole": "App Role",
+		"appKey": "App Key",
+		"articleInformation": "Article Information",
+		"articleCategory": "Article Category",
+		"interfaceSettings": "Interface Settings",
+		"bottomNavigation": "Bottom Navigation",
+		"wechatPlatform": "WeChat Platform",
+		"accountManagement": "Account Management",
+		"menuSettings": "Menu Settings",
+		"fanManagement": "Fan Management",
+		"tagManagement": "Tag Management",
+		"autoReply": "Auto Reply",
+		"mediaManagement": "Media Management",
+		"messageManagement": "Message Management",
+		"operationalData": "Operational Data",
+		"baseTools": "Base Tools",
+		"cacheMonitoring": "Cache Monitoring",
+		"documentExtension": "API Document",
+		"route": "Route Management",
+		"quartzManagement": "Quartz Management",
+		"datav": "Data Visualization",
+		"bi": "BI Report",
+		"message": "Message Push",
+		"collaborativeOffice": "Collaborative Office",
+		"taskManagement": "Task Management",
+		"pendingTask": "Pending Task",
+		"myInitiations": "My Initiations",
+		"copiedtoMe": "Copied to Me",
+		"completedTasks": "Completed Tasks",
+		"initiateProcess": "Initiate Process",
+		"processManagement": "Process Management",
+		"platformDevelopment": "Platform Development",
+		"dataSourceManagement": "Data Source Management",
+		"tableManagement": "Table Management",
+		"generatePages": "Generate Pages",
+		"formDesign": "Form Design",
+		"codeGeneration": "Code Generation",
+		"metadataManagement": "Metadata Management",
+		"fieldManagement": "Field Management",
+		"templateManagement": "Template Management",
+		"templateGroup": "Template Group",
+		"limits": "Permissions",
+		"limitsFrontEnd": "Front End",
+		"limitsFrontEndPage": "Front End Page",
+		"limitsFrontEndBtn": "Front End Button",
+		"limitsBackEnd": "Back End",
+		"limitsBackEndEndPage": "Back End Page",
+		"menu": "Menu",
+		"menu1": "Menu 1",
+		"menu11": "Menu 1-1",
+		"menu12": "Menu 1-2",
+		"menu121": "Menu 1-2-1",
+		"menu122": "Menu 1-2-2",
+		"menu13": "Menu 1-3",
+		"menu2": "Menu 2",
+		"funIndex": "Functions",
+		"funTagsView": "Tags View",
+		"funCountup": "Count Up",
+		"funWangEditor": "Wang Editor",
+		"funCropper": "Cropper",
+		"funQrcode": "QR Code",
+		"funEchartsMap": "Echarts Map",
+		"funPrintJs": "PrintJS",
+		"funClipboard": "Copy and Cut",
+		"funGridLayout": "Drag Layout",
+		"funSplitpanes": "Split Pane",
+		"funDragVerify": "Validator",
+		"pagesIndex": "Pages",
+		"pagesFiltering": "Filtering",
+		"pagesFilteringDetails": "Filtering Details",
+		"pagesFilteringDetails1": "Filtering Details 1",
+		"pagesIocnfont": "Icon Font Icon",
+		"pagesElement": "Element Icon",
+		"pagesAwesome": "Awesome Icon",
+		"pagesFormAdapt": "Form Adapt",
+		"pagesTableRules": "Table Rules",
+		"pagesFormI18n": "Form I18n",
+		"pagesFormRules": "Multi-Form Validation",
+		"pagesDynamicForm": "Dynamic Complex Form",
+		"pagesWorkflow": "Workflow",
+		"pagesListAdapt": "List Adapt",
+		"pagesWaterfall": "Waterfall",
+		"pagesSteps": "Steps",
+		"pagesPreview": "Large Preview",
+		"pagesWaves": "Wave Effect",
+		"pagesTree": "Tree Alter Table",
+		"pagesDrag": "Drag Command",
+		"pagesLazyImg": "Image Lazy Loading",
+		"makeIndex": "Make Index",
+		"makeSelector": "Icon Selector",
+		"makeNoticeBar": "Notification Bar",
+		"makeSvgDemo": "Svgicon Demo",
+		"makeTableDemo": "Table Demo",
+		"paramsIndex": "Routing Parameters",
+		"paramsCommon": "General Routing",
+		"paramsDynamic": "Dynamic Routing",
+		"paramsCommonDetails": "General Routing Details",
+		"paramsDynamicDetails": "Dynamic Routing Details",
+		"chartIndex": "Chart Index",
+		"visualizingIndex": "Visualizing Index",
+		"visualizingLinkDemo1": "Visualizing Link Demo 1",
+		"visualizingLinkDemo2": "Visualizing Link Demo 2",
+		"personal": "Personal",
+		"tools": "Tools",
+		"layoutLinkView": "Link View",
+		"layoutIframeViewOne": "Iframe View One",
+		"layoutIframeViewTwo": "Iframe View Two"
+	},
+	"staticRoutes": {
+		"login": "Login",
+		"authredirect": "Auth Redirect",
+		"expire": "Password Expire",
+		"signIn": "Sign In",
+		"notFound": "Not Found",
+		"noPower": "No Power"
+	},
+	"user": {
+		"title0": "Component Size",
+		"title1": "Language Switching",
+		"title2": "Menu Search",
+		"title3": "Layout Configuration",
+		"title4": "News",
+		"title5": "Full Screen On",
+		"title6": "Full Screen Off",
+		"dropdownLarge": "Large",
+		"dropdownDefault": "Default",
+		"dropdownSmall": "Small",
+		"dropdown1": "Home Page",
+		"dropdown2": "Personal Center",
+		"dropdown3": "Tenant Switch",
+		"dropdown4": "Current Tenant",
+		"dropdown5": "Log Out",
+		"searchPlaceholder": "Menu Search: Supports Chinese and Routing Path",
+		"newTitle": "Notice",
+		"newBtn": "All",
+		"newGo": "Go to the Notification Center",
+		"newDesc": "No Notice",
+		"logOutTitle": "Tips",
+		"logOutMessage": "This Operation Will Log Out. Do You Want to Continue?",
+		"logOutConfirm": "Determine",
+		"logOutCancel": "Cancel",
+		"logOutExit": "Exiting"
+	},
+	"tagsView": {
+		"refresh": "Refresh",
+		"close": "Close",
+		"closeOther": "Close Other",
+		"closeAll": "Close All",
+		"fullscreen": "Fullscreen",
+		"closeFullscreen": "Close Fullscreen",
+		"favorite": "Favorite",
+		"favoriteMax": "The number of shortcut navigation exceeds the upper limit. Please remove some shortcuts"
+	},
+	"notFound": {
+		"foundTitle": "Wrong Address Input, Please Re-enter the Address~",
+		"foundMsg": "You Can Check the Web Address First, and Then Re-enter or Give Us Feedback.",
+		"foundBtn": "Back to Home Page"
+	},
+	"noAccess": {
+		"accessTitle": "You Are Not Authorized to Operate~",
+		"accessMsg": "Contact Information: Add QQ Group Discussion 665452019",
+		"accessBtn": "Reauthorization"
+	},
+	"layout": {
+		"configTitle": "Layout Configuration",
+		"oneTitle": "Global Themes",
+		"twoTopTitle": "Top Bar Set Up",
+		"twoMenuTitle": "Menu Set Up",
+		"twoColumnsTitle": "Columns Set Up",
+		"twoTopBar": "Top Bar Background",
+		"twoTopBarColor": "Top Bar Default Font Color",
+		"twoIsTopBarColorGradual": "Top Bar Gradient",
+		"twoMenuBar": "Menu Background",
+		"twoMenuBarColor": "Menu Default Font Color",
+		"twoMenuBarActiveColor": "Menu Highlight Color",
+		"twoIsMenuBarColorGradual": "Menu Gradient",
+		"twoColumnsMenuBar": "Column Menu Background",
+		"twoColumnsMenuBarColor": "Default Font Color Bar Menu",
+		"twoIsColumnsMenuBarColorGradual": "Column Gradient",
+		"twoIsColumnsMenuHoverPreload": "Column Menu Hover Preload",
+		"threeTitle": "Interface Settings",
+		"threeIsCollapse": "Menu Horizontal Collapse",
+		"threeIsUniqueOpened": "Menu Accordion",
+		"threeIsFixedHeader": "Fixed Header",
+		"threeIsClassicSplitMenu": "Classic Layout Split Menu",
+		"threeIsLockScreen": "Open the Lock Screen",
+		"threeLockScreenTime": "Screen Locking (s/s)",
+		"fourTitle": "Interface Display",
+		"fourIsShowLogo": "Sidebar Logo",
+		"fourIsBreadcrumb": "Open Breadcrumb",
+		"fourIsBreadcrumbIcon": "Open Breadcrumb Icon",
+		"fourIsTagsview": "Open Tagsview",
+		"fourIsTagsviewIcon": "Open Tagsview Icon",
+		"fourIsCacheTagsView": "Enable Tagsview Cache",
+		"fourIsSortableTagsView": "Enable Tagsview Drag",
+		"fourIsShareTagsView": "Enable Tagsview Sharing",
+		"fourIsFooter": "Open Footer",
+		"fourIsGrayscale": "Grey Model",
+		"fourIsInvert": "Color Weak Mode",
+		"fourIsDark": "Dark Mode",
+		"fourIsWartermark": "Turn on Watermark",
+		"fourWartermarkText": "Watermark Copy",
+		"fourIsChat": "LLaMA Chat",
+		"fiveTitle": "Other Settings",
+		"fiveTagsStyle": "Tagsview Style",
+		"fiveAnimation": "Page Animation",
+		"fiveColumnsAsideStyle": "Column Style",
+		"fiveColumnsAsideLayout": "Column Layout",
+		"sixTitle": "Layout Switch",
+		"sixDefaults": "One",
+		"sixClassic": "Two",
+		"sixTransverse": "Three",
+		"sixColumns": "Four",
+		"tipText": "Click the Button Below to Copy the Layout Configuration to `/src/stores/themeConfig.ts`. It Has Been Modified In.",
+		"copyText": "Replication Configuration",
+		"resetText": "Restore Default",
+		"copyTextSuccess": "Copy Succeeded!",
+		"copyTextError": "Copy Failed!"
+	},
+	"upgrade": {
+		"title": "New Version",
+		"msg": "The New Version is Available, Please Update It Now! Dont Worry, the Update is Fast!",
+		"desc": "Prompt: Update Will Restore the Default Configuration",
+		"btnOne": "Cruel Refusal",
+		"btnTwo": "Update Now",
+		"btnTwoLoading": "Updating"
+	},
+	"tenantSelector": {
+		"title": "Switch Tenant",
+		"searchPlaceholder": "Search tenant name, domain or website",
+		"noData": "No tenant data available",
+		"current": "Current",
+		"selected": "Selected",
+		"loadError": "Failed to load tenant list",
+		"selectTip": "Please select a tenant to switch",
+		"sameError": "Already in this tenant, no need to switch",
+		"confirmTitle": "Switch Tenant Confirmation",
+		"confirmMessage": "Are you sure to switch to tenant \"{name}\"? The page will refresh after switching.",
+		"switchSuccess": "Tenant switched successfully, refreshing page...",
+		"switchError": "Failed to switch tenant, please try again"
+	},
+	"common": {
+		"queryBtn": "Query",
+		"addBtn": "Add",
+		"editBtn": "Edit",
+		"delBtn": "Delete",
+		"viewBtn": "View",
+		"detailBtn": "Details",
+		"exportBtn": "Export",
+		"expandBtn": "expand/phrase ",
+		"refreshCacheBtn": "Refresh cache",
+		"importBtn": "Import",
+		"importUserTip": "Import user",
+		"queryDeptTip": "Enter department name",
+		"resetBtn": "Reset",
+		"copyBtn": "Copy",
+		"action": "Action",
+		"optSuccessText": "Operation successful",
+		"optConfirmText": "Confirm this operation?",
+		"editSuccessText": "Successfully edited",
+		"addSuccessText": "Successfully added",
+		"delSuccessText": "Successfully deleted",
+		"delConfirmText": "This operation will permanently delete",
+		"confirmButtonText": "Confirm",
+		"cancelButtonText": "Cancel",
+		"download": "Download",
+		"expand": "Expand",
+		"selectAll": "SelectAll",
+		"closeBtn": "Close",
+		"searchBtn": "Search",
+		"cancel": "Cancel",
+		"confirm": "Confirm"
+	},
+	"message": {
+		"box": {
+			"title": "System prompt"
+		}
+	},
+	"label": {
+		"one1": "Account login",
+		"two2": "SMS login",
+		"three3": "Social login",
+		"register": "Create account"
+	},
+	"link": {
+		"one3": "Third party login",
+		"two4": "Links"
+	},
+	"password": {
+		"accountPlaceholder1": "Please enter username",
+		"accountPlaceholder2": "Password",
+		"accountPlaceholder3": "Please enter the verification code",
+		"phonePlaceholder4": "Please enter your phone number",
+		"tenantPlaceholder": "Please select tenant",
+		"accountBtnText": "Sign in",
+		"resetBtnText": "Reset",
+		"registerBtnText": "Create account",
+		"readAccept": "I have read and accept",
+		"privacyPolicy": "the Privacy Policy",
+		"oldPassword": "Please enter old password",
+		"newPassword": "Please enter new password",
+		"confirmPassword": "Please confirm new password",
+		"backToLogin": "Back to login",
+		"mobileLogin": "Mobile Login",
+		"createAccount": "Create Account",
+		"imageCodeTip": "Please enter code",
+		"forgetPassword": "Forgot Password",
+		"googleCaptchaPlaceholder": "Google Authenticator code (optional)"
+	},
+	"mobile": {
+		"placeholder1": "Please enter your mobile number",
+		"placeholder2": "Please enter the verification code",
+		"codeText": "Get code",
+		"btnText": "Sign in",
+		"mobileLogin": "Mobile Login",
+		"backToLogin": "Back to login",
+		"createAccount": "Create Account",
+		"sendSuccess": "Verification code sent successfully",
+		"seconds": "seconds to resend",
+		"mobileRequired": "Please enter your mobile number",
+		"codeRequired": "Please enter verification code",
+		"codeLength": "Verification code must be 4 digits",
+		"sendFailed": "Failed to send verification code",
+		"loginSuccess": "Login successful",
+		"loginFailed": "Login failed",
+		"signIn": "Sign In"
+	},
+	"forget": {
+		"newPasswordPlaceholder": "Please enter new password",
+		"confirmPasswordPlaceholder": "Please confirm new password",
+		"passwordEmpty": "Password cannot be empty",
+		"passwordLength": "Password length must be between 6 and 20 characters",
+		"passwordRule": "The two passwords do not match",
+		"passwordScore": "Password strength is too low"
+	},
+	"scan": {
+		"text": "Use your mobile device to scan and quickly log in or create an account",
+		"wechatApp": "Scan with WeChat",
+		"appErrorTip": "The login fails because the application is not configured"
+	},
+	"signInText": "Welcome back!",
+	"browserMsgText": "Tip: For best results, we recommend using Google Chrome, Microsoft Edge (version 80 or higher), or the 360 browser with speed mode enabled.",
+	"expire": {
+		"oldPassword": "Please enter old password",
+		"newPassword": "Please enter new password",
+		"confirmPassword": "Please confirm new password",
+		"passwordRule": "The two passwords do not match",
+		"passwordScore": "Password strength is too low",
+		"resetSuccess": "Password reset successfully"
+	},
+	"tenantSelect": {
+		"select": "Select Tenant",
+		"loadError": "Failed to get tenant list"
+	},
+	"verify": {
+		"imageCode": "Please enter verification code",
+		"complete": "Please complete security verification",
+		"slide": {
+			"explain": "Slide right to verify",
+			"success": "Verification successful",
+			"fail": "Verification failed",
+			"time": "Verified in {time}s"
+		}
+	},
+	"chat": {
+		"send": "Send",
+		"inputPlaceholder": "Type a message...",
+		"title": "AI Assistant",
+		"clearChat": "Clear Chat",
+		"webSearchEnabled": "Web Search Enabled",
+		"webSearchDisabled": "Web Search Disabled",
+		"welcome": "Hello! I am a general AI model. How can I help you?",
+		"thinking": "Thinking...",
+		"thinkingCompleted": "Thinking Completed",
+		"thinkingTime": "Time taken",
+		"connectionError": "Connection lost, please try again",
+		"seconds": "seconds"
+	},
+	"material": {
+		"uploadFileTip": "Upload",
+		"addGroup": "Add Group",
+		"editGroup": "Edit Group",
+		"delGroup": "Delete Group",
+		"moveBtn": "Move",
+		"preview": "Preview",
+		"edit": "Edit",
+		"view": "View",
+		"add": "Add",
+		"allCheck": "Select All",
+		"rename": "Rename",
+		"download": "Download",
+		"list": "List",
+		"grid": "Grid"
+	},
+	"orgSelecotr": {
+		"org": "Organization",
+		"user": "User",
+		"dept": "Department",
+		"role": "Role",
+		"select": "Select",
+		"search": "Search"
+	},
+	"queryTree": {
+		"hideSearch": "Hide Search",
+		"displayTheSearch": "Show Search",
+		"refresh": "Refresh",
+		"print": "Print",
+		"view": "View"
+	},
+	"excel": {
+		"downloadTemplate": "Download Template",
+		"fileFormat": "Only xls, xlsx format files are allowed",
+		"operationNotice": "Drag the file here, or",
+		"clickUpload": "Click to upload",
+		"lineNumbers": "Line Numbers",
+		"misDescription": "Error Description",
+		"validationFailureData": "Validation Failure Data",
+		"pleaseUpload": "Please upload",
+		"size": "Size not exceeding",
+		"format": "Format",
+		"file": "file",
+		"sizeErrorText": "File size error, max ",
+		"typeErrorText": "File type error, upload ",
+		"uploadLimit": "Upload limit exceeded. Maximum",
+		"files": "files allowed"
+	},
+	"uploadTipPrefix": "Please upload",
+	"sizeLimitTip": "Size less than",
+	"formatTip": "Format is",
+	"fileSuffix": "files",
+	"invalidFormatError": "Incorrect file format, please upload {fileType} format pictures!",
+	"invalidFilenameError": "Incorrect file name, cannot contain commas!",
+	"sizeLimitError": "Upload image size cannot exceed {fileSize} MB!",
+	"uploading": "Uploading image, please wait...",
+	"limitExceedError": "Number of uploaded files cannot exceed {limit}!",
+	"uploadFailRetry": "Upload failed, please try again",
+	"uploadFail": "Image upload failed, please try again",
+	"register": {
+		"tenantEmpty": "Please select a tenant",
+		"tenantLoadError": "Failed to load tenant list",
+		"usernameEmpty": "Username cannot be empty",
+		"usernameLength": "Username length must be between 5 and 20 characters",
+		"phoneEmpty": "Phone number cannot be empty",
+		"passwordEmpty": "Password cannot be empty",
+		"passwordLength": "Password length must be between 6 and 20 characters",
+		"passwordStrength": "Password strength is too low",
+		"termsRequired": "Please read and accept the terms"
+	},
+	"divider": {
+		"or": "or"
+	},
+	"socialLogin": {
+		"wechatWork": "WeCom",
+		"dingtalk": "DingTalk"
+	},
+	"personal": {
+		"name": "Personal Center",
+		"basicInfo": "Basic Info",
+		"securityInfo": "Security Info",
+		"socialLogin": "Social Login",
+		"merchantNo": "Merchant No",
+		"username": "Username",
+		"nickname": "Nickname",
+		"nicknamePlaceholder": "Please enter nickname",
+		"realName": "Name",
+		"realNamePlaceholder": "Please enter name",
+		"phone": "Phone",
+		"phonePlaceholder": "Please enter phone",
+		"email": "Email",
+		"emailPlaceholder": "Please enter email",
+		"uploadAvatar": "Please upload avatar",
+		"oldPassword": "Old Password",
+		"oldPasswordPlaceholder": "Please enter password",
+		"newPassword": "New Password",
+		"newPasswordPlaceholder": "Please enter new password",
+		"confirmPassword": "Confirm Password",
+		"confirmPasswordPlaceholder": "Please repeat password",
+		"changePassword": "Change Password",
+		"updateInfo": "Update Info",
+		"passwordRule": "The two passwords do not match",
+		"passwordScore": "Password strength is too low",
+		"platform": "Platform",
+		"status": "Status",
+		"bound": "Bound",
+		"unbound": "Unbound",
+		"bind": "Bind",
+		"unbind": "Unbind",
+		"wechatWork": "WeCom",
+		"dingtalk": "DingTalk",
+		"phoneRequired": "Phone cannot be empty",
+		"nicknameRequired": "Nickname cannot be empty",
+		"emailRequired": "Email cannot be empty",
+		"nameRequired": "Name cannot be empty",
+		"passwordRequired": "Password cannot be empty",
+		"passwordLengthTip": "Password length must be between 6 and 20",
+		"updateSuccess": "Update successful",
+		"unbindSuccess": "Unbind successful",
+		"index": "Index",
+		"action": "Action"
+	},
+	"agentUser": {
+		"index": "#",
+		"agentId": "Agent ID",
+		"agentName": "Agent Name",
+		"username": "Username",
+		"realname": "Real Name",
+		"phone": "Phone",
+		"email": "Email",
+		"idcard": "ID Card",
+		"address": "Address",
+		"offlineRechargeRate": "Offline Recharge Rate (%)",
+		"status": "Status",
+		"bankName": "Bank Name",
+		"bankBranch": "Bank Branch",
+		"bankProvince": "Bank Province",
+		"bankCity": "Bank City",
+		"accountName": "Account Name",
+		"accountNum": "Account Number",
+		"createTime": "Create Time",
+		"updateTime": "Update Time",
+		"operation": "Operation",
+		"inputAgentNameTip": "Please enter agent name",
+		"inputUsernameTip": "Please enter username",
+		"inputRealnameTip": "Please enter real name",
+		"inputPhoneTip": "Please enter phone",
+		"inputEmailTip": "Please enter email",
+		"inputIdcardTip": "Please enter ID card",
+		"inputAddressTip": "Please enter address",
+		"inputOfflineRechargeRateTip": "Please enter rate",
+		"inputBankNameTip": "Please enter bank name",
+		"inputBankBranchTip": "Please enter bank branch",
+		"inputBankProvinceTip": "Please enter bank province",
+		"inputBankCityTip": "Please enter bank city",
+		"inputAccountNameTip": "Please enter account name",
+		"inputAccountNumTip": "Please enter account number",
+		"searchAgentAccount": "Please enter agent account",
+		"viewBtn": "View",
+		"changePwdBtn": "Change Password",
+		"statusEnable": "Enable",
+		"statusDisable": "Disable",
+		"statusChangeSuccess": "Status changed successfully",
+		"basicInfo": "Basic Information",
+		"bankInfo": "Bank Information",
+		"defaultPasswordTip": "Tip: Default password for new agent is qwe123QWE!",
+		"usernameRequired": "Username cannot be empty",
+		"agentNameRequired": "Agent name cannot be empty",
+		"realnameRequired": "Real name cannot be empty",
+		"phoneRequired": "Phone cannot be empty",
+		"emailRequired": "Email cannot be empty",
+		"changePwdTitle": "Change Password",
+		"newPassword": "New Password",
+		"confirmPassword": "Confirm Password",
+		"inputNewPasswordTip": "Please enter new password",
+		"inputConfirmPasswordTip": "Please enter new password again",
+		"newPasswordRequired": "New password cannot be empty",
+		"passwordLengthTip": "Password length should be 6 to 20 characters",
+		"confirmPasswordRequired": "Please enter new password again",
+		"passwordNotMatch": "Passwords do not match",
+		"changePwdSuccess": "Password changed successfully",
+		"availableAmount": "Available Balance",
+		"freezeAmount": "Freeze Amount",
+		"withdrawnAmount": "Total Withdrawn Amount",
+		"settlementDays": "Settlement Period",
+		"collection": "Collection",
+		"payment": "Payment"
+	},
+	"merchantUser": {
+		"index": "#",
+		"merchantId": "Merchant ID",
+		"merchantName": "Merchant Name",
+		"username": "Username",
+		"realname": "Real Name",
+		"phone": "Phone",
+		"email": "Email",
+		"idcard": "ID Card",
+		"contactAddress": "Contact Address",
+		"websiteName": "Website Name",
+		"websiteAddress": "Website Address",
+		"appId": "AppId",
+		"offlineRechargeRate": "Offline Recharge Rate (%)",
+		"status": "Status",
+		"agentId": "Agent",
+		"agentName": "Agent",
+		"totalAmount": "Total Amount",
+		"freezeAmount": "Freeze Amount",
+		"withdrawnAmount": "Withdrawn Amount",
+		"createTime": "Create Time",
+		"updateTime": "Update Time",
+		"operation": "Operation",
+		"inputMerchantNameTip": "Please enter merchant name",
+		"inputUsernameTip": "Please enter username",
+		"inputRealnameTip": "Please enter real name",
+		"inputPhoneTip": "Please enter phone",
+		"inputEmailTip": "Please enter email",
+		"inputIdcardTip": "Please enter ID card",
+		"inputContactAddressTip": "Please enter contact address",
+		"inputWebsiteNameTip": "Please enter website name",
+		"inputWebsiteAddressTip": "Please enter website address",
+		"inputOfflineRechargeRateTip": "Please enter rate",
+		"selectAgentTip": "Please select agent",
+		"searchMerchantAccount": "Please enter merchant account",
+		"viewBtn": "View",
+		"changePwdBtn": "Change Password",
+		"resetKeyBtn": "Reset Key",
+		"statusEnable": "Enable",
+		"statusDisable": "Disable",
+		"statusChangeSuccess": "Status changed successfully",
+		"basicInfo": "Basic Information",
+		"websiteInfo": "Website Information",
+		"defaultPasswordTip": "Tip: Default password for new merchant is qwe123QWE!",
+		"usernameRequired": "Username cannot be empty",
+		"merchantNameRequired": "Merchant name cannot be empty",
+		"phoneRequired": "Phone cannot be empty",
+		"emailRequired": "Email cannot be empty",
+		"changePwdTitle": "Change Password",
+		"newPassword": "New Password",
+		"confirmPassword": "Confirm Password",
+		"inputNewPasswordTip": "Please enter new password",
+		"inputConfirmPasswordTip": "Please enter new password again",
+		"newPasswordRequired": "New password cannot be empty",
+		"passwordLengthTip": "Password length should be 6 to 20 characters",
+		"confirmPasswordRequired": "Please enter new password again",
+		"passwordNotMatch": "Passwords do not match",
+		"changePwdSuccess": "Password changed successfully",
+		"resetKeyTitle": "Reset MD5 Key",
+		"resetKeyConfirm": "Are you sure to reset the MD5 key for this merchant? The original key will be invalid!",
+		"resetKeySuccess": "Key reset successfully",
+		"keyDialogTitle": "MD5 Key Information",
+		"keyDialogTip": "Please keep the following key information properly. It cannot be viewed again after closing!",
+		"appIdLabel": "AppId",
+		"md5KeyLabel": "MD5 Key",
+		"copyBtn": "Copy",
+		"copyAllBtn": "Copy All",
+		"copySuccess": "Copied successfully",
+		"copyFailed": "Copy failed",
+		"availableAmount": "Available Balance",
+		"settlementDays": "Settlement Period",
+		"collection": "Collection",
+		"payment": "Payment"
+	},
+	"home": {
+		"submitOrder": "Submit Orders",
+		"payOrder": "Pay Orders",
+		"withdrawOrder": "Withdraw Orders",
+		"withdrawSuccess": "Withdraw Success",
+		"paySuccessRate": "Payment Success Rate",
+		"amount": "Amount",
+		"loadStatsFailed": "Failed to load statistics"
+	},
+	"payOrder": {
+		"mchOrderNo": "Merchant Order No",
+		"transactionId": "Transaction ID",
+		"merchantName": "Merchant Name",
+		"agentName": "Agent Name",
+		"channelName": "Channel Name",
+		"submitAmount": "Submit Amount",
+		"actualAmount": "Actual Amount",
+		"orderStatus": "Order Status",
+		"createTime": "Create Time",
+		"inputMchOrderNo": "Please enter merchant order no",
+		"inputTransactionId": "Please enter transaction ID",
+		"inputMerchantName": "Please enter merchant name",
+		"inputAgentName": "Please enter agent name",
+		"selectOrderStatus": "Please select order status",
+		"callbackLog": "Callback Log",
+		"submitOrderNum": "Submit Orders",
+		"totalOrderAmount": "Total Order Amount",
+		"paidOrderNum": "Paid Orders",
+		"totalPaidAmount": "Total Paid Amount",
+		"statusCreateOrder": "Created",
+		"statusPaySuccess": "Pay Success",
+		"statusPayFail": "Pay Failed",
+		"statusCancelOrder": "Cancelled",
+		"statusPayTimeout": "Pay Timeout"
+	},
+	"withdrawOrder": {
+		"mchOrderNo": "Merchant Order No",
+		"transactionId": "Transaction ID",
+		"merchantName": "Merchant Name",
+		"agentName": "Agent Name",
+		"channelName": "Channel Name",
+		"submitAmount": "Submit Amount",
+		"actualAmount": "Actual Amount",
+		"orderStatus": "Order Status",
+		"createTime": "Create Time",
+		"inputMchOrderNo": "Please enter merchant order no",
+		"inputTransactionId": "Please enter transaction ID",
+		"inputMerchantName": "Please enter merchant name",
+		"inputAgentName": "Please enter agent name",
+		"selectOrderStatus": "Please select order status",
+		"callbackLog": "Callback Log",
+		"statusCreateOrder": "Created",
+		"statusWithdrawSuccess": "Withdraw Success",
+		"statusWithdrawFail": "Withdraw Failed"
+	},
+	"paymentChannel": {
+		"channelId": "Channel ID",
+		"channelName": "Channel Name",
+		"channelCode": "Channel Code",
+		"baseRate": "Base Rate (%)",
+		"enableStatus": "Enable Status",
+		"riskControlStatus": "Risk Control Status",
+		"weightValue": "Weight Value",
+		"channelNameOrCode": "Channel Name/Code",
+		"inputChannelNameOrCode": "Please enter channel name or code",
+		"selectStatus": "Please select status",
+		"enable": "Enable",
+		"disable": "Disable",
+		"statusChangeSuccess": "Status changed successfully",
+		"collectionPayConfig": "Collection Pay Config",
+		"paymentPayConfig": "Payment Pay Config"
+	},
+	"settlement": {
+		"merchantName": "Merchant Name",
+		"agentName": "Agent Name",
+		"withdrawAmount": "Withdraw Amount",
+		"withdrawType": "Withdraw Type",
+		"bankName": "Bank Name",
+		"bankAccount": "Bank Account",
+		"realName": "Real Name",
+		"applyTime": "Apply Time",
+		"auditStatus": "Audit Status",
+		"rejectReason": "Reject Reason",
+		"createTime": "Create Time",
+		"inputMerchantName": "Please enter merchant name",
+		"inputAgentName": "Please enter agent name",
+		"inputBankAccount": "Please enter bank account",
+		"inputRealName": "Please enter real name",
+		"selectAuditStatus": "Please select audit status",
+		"startTime": "Start Time",
+		"endTime": "End Time",
+		"to": "to",
+		"audit": "Audit",
+		"bankCard": "Bank Card",
+		"usdt": "USDT",
+		"statusPending": "Pending",
+		"statusApproved": "Approved",
+		"statusRejected": "Rejected"
+	},
+	"login": {
+		"noPermission": "Sorry, you do not have login permission"
+	},
+	"paymentConfig": {
+		"agentCollectionConfig": "Agent Collection Config",
+		"agentPaymentConfig": "Agent Payment Config",
+		"merchantCollectionConfig": "Merchant Collection Config",
+		"merchantPaymentConfig": "Merchant Payment Config",
+		"configAgentPaymentChannel": "Configure Agent Payment Channel",
+		"configMerchantPaymentChannel": "Configure Merchant Payment Channel",
+		"channelName": "Channel Name",
+		"channelCode": "Channel Code",
+		"paymentTypeName": "Payment Type Name",
+		"paymentTypeCode": "Payment Type Code",
+		"enableStatus": "Enable Status",
+		"enable": "Enable",
+		"disable": "Disable",
+		"feeRate": "Fee Rate (%)",
+		"feeType": "Fee Type",
+		"feeRatePercent": "Fee Rate (%)",
+		"feeFixed": "Fixed Fee",
+		"percentage": "Percentage",
+		"fixed": "Fixed",
+		"mixed": "Percentage + Fixed",
+		"notSet": "Not Set",
+		"config": "Config",
+		"close": "Close",
+		"cancel": "Cancel",
+		"confirm": "Confirm",
+		"basicInfo": "Basic Information",
+		"configInfo": "Configuration",
+		"agentFeeInfo": "Agent Fee Information",
+		"merchantRate": "Merchant Rate (%)",
+		"merchantFeeType": "Merchant Fee Type",
+		"merchantFeeRatePercent": "Merchant Fee Rate (%)",
+		"merchantFeeFixed": "Merchant Fixed Fee",
+		"agentFeeType": "Agent Fee Type",
+		"agentFeeRatePercent": "Agent Fee Rate (%)",
+		"agentFeeFixed": "Agent Fixed Fee",
+		"singleMinAmount": "Single Min Amount",
+		"singleMaxAmount": "Single Max Amount",
+		"channelLimit": "Channel Limit",
+		"configSuccess": "Configuration successful",
+		"selectEnableStatus": "Please select enable status",
+		"selectFeeType": "Please select fee type",
+		"inputFeeRate": "Please enter fee rate",
+		"inputFeeRatePercent": "Please enter fee rate",
+		"inputFeeFixed": "Please enter fixed fee",
+		"inputMerchantRate": "Please enter merchant rate",
+		"feeRateRange": "Fee rate range is 0-100",
+		"feeFixedMin": "Fixed fee cannot be less than 0",
+		"minGreaterThanMax": "Min amount cannot be greater than max amount",
+		"minLessThanLimit": "Min amount cannot be less than channel limit",
+		"maxLessThanMin": "Max amount cannot be less than min amount",
+		"maxGreaterThanLimit": "Max amount cannot be greater than channel limit"
+	},
+	"sysmenu": {
+		"index": "#",
+		"name": "Menu Name",
+		"buttonName": "Button Name",
+		"sortOrder": "Sort Order",
+		"path": "Path",
+		"menuType": "Type",
+		"keepAlive": "Keep Alive",
+		"permission": "Permission",
+		"inputNameTip": "Please enter menu name",
+		"parentId": "Parent Menu",
+		"embedded": "Embedded",
+		"param": "Param",
+		"component": "Component",
+		"visible": "Visible",
+		"icon": "Icon",
+		"inputMenuIdTip": "",
+		"inputPermissionTip": "Please enter permission",
+		"inputPathTip": "Please enter path",
+		"inputParentIdTip": "Please select parent menu",
+		"inputIconTip": "Please select icon",
+		"inputVisibleTip": "Please select visible",
+		"inputSortOrderTip": "Please enter sort order",
+		"inputKeepAliveTip": "Please select keep alive",
+		"inputMenuTypeTip": "Please select menu type",
+		"inputEmbeddedTip": "Please select embedded",
+		"inputComponentTip": "Please enter component",
+		"deleteDisabledTip": "Menu with children cannot be deleted"
+	},
+	"sysuser": {
+		"index": "#",
+		"username": "Username",
+		"name": "Name",
+		"phone": "Phone",
+		"role": "Role",
+		"dept": "Department",
+		"post": "Post",
+		"email": "Email",
+		"lockFlag": "Status",
+		"createTime": "Create Time",
+		"inputUsernameTip": "Please enter username",
+		"inputNameTip": "Please enter name",
+		"inputPhoneTip": "Please enter phone",
+		"inputRoleTip": "Please select role",
+		"inputDeptTip": "Please select department",
+		"inputPostTip": "Please select post",
+		"inputEmailTip": "Please enter email",
+		"inputPasswordTip": "Please enter password",
+		"password": "Password"
+	},
+	"sysrole": {
+		"index": "#",
+		"roleName": "Role Name",
+		"roleCode": "Role Code",
+		"roleDesc": "Role Description",
+		"dsType": "Data Scope",
+		"createTime": "Create Time",
+		"inputRoleNameTip": "Please enter role name",
+		"inputRoleCodeTip": "Please enter role code",
+		"inputRoleDescTip": "Please enter role description",
+		"inputDsTypeTip": "Please select data scope",
+		"permissionTitle": "Menu Permission",
+		"selectAll": "Select All",
+		"expandAll": "Expand All",
+		"linkage": "Parent-Child Linkage"
+	},
+	"sysdept": {
+		"index": "#",
+		"name": "Department Name",
+		"sortOrder": "Sort Order",
+		"parentId": "Parent Department",
+		"createTime": "Create Time",
+		"inputNameTip": "Please enter department name",
+		"inputSortOrderTip": "Please enter sort order",
+		"inputParentIdTip": "Please select parent department"
+	},
+	"syspost": {
+		"index": "#",
+		"postCode": "Post Code",
+		"postName": "Post Name",
+		"postSort": "Sort Order",
+		"remark": "Remark",
+		"createTime": "Create Time",
+		"inputPostCodeTip": "Please enter post code",
+		"inputPostNameTip": "Please enter post name",
+		"inputPostSortTip": "Please enter sort order",
+		"inputRemarkTip": "Please enter remark"
+	},
+	"systenant": {
+		"index": "#",
+		"name": "Tenant Name",
+		"code": "Tenant Code",
+		"startTime": "Start Time",
+		"endTime": "End Time",
+		"status": "Status",
+		"createTime": "Create Time",
+		"inputNameTip": "Please enter tenant name",
+		"inputCodeTip": "Please enter tenant code"
+	}
+}

+ 111 - 0
src/locales/index.ts

@@ -0,0 +1,111 @@
+import { createI18n } from 'vue-i18n';
+import pinia from '/@/stores/index';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { info } from '/@/api/admin/i18n';
+
+// element plus 自带国际化
+import enLocale from 'element-plus/es/locale/lang/en';
+import zhcnLocale from 'element-plus/es/locale/lang/zh-cn';
+
+import zhCN from './zh-CN/index.json';
+import enUS from './en-US/index.json';
+
+// 语言代码映射(兼容旧格式)
+const localeMap: Record<string, 'zh-CN' | 'en-US'> = {
+	'zh-cn': 'zh-CN',
+	'zh-CN': 'zh-CN',
+	en: 'en-US',
+	'en-US': 'en-US',
+};
+
+const messages = {
+	'zh-CN': {
+		name: 'zh-CN',
+		el: zhcnLocale.el,
+		...zhCN,
+	},
+	'en-US': {
+		name: 'en-US',
+		el: enLocale.el,
+		...enUS,
+	},
+};
+
+// 读取 pinia 默认语言
+const stores = useThemeConfig(pinia);
+const { themeConfig } = storeToRefs(stores);
+
+// 获取并标准化语言代码
+const getLocale = (locale: string): 'zh-CN' | 'en-US' => localeMap[locale] || 'zh-CN';
+const defaultLocale = getLocale(localStorage.getItem('locale') || themeConfig.value.globalI18n || 'zh-CN');
+
+// 导出语言国际化
+export const i18n = createI18n({
+	legacy: false,
+	silentTranslationWarn: true,
+	missingWarn: false,
+	silentFallbackWarn: true,
+	fallbackWarn: false,
+	locale: defaultLocale,
+	fallbackLocale: 'zh-CN',
+	messages,
+	globalInjection: true,
+});
+
+// 初始化时设置 data-locale 属性
+if (typeof document !== 'undefined') {
+	document.querySelector('html')?.setAttribute('lang', defaultLocale);
+	document.querySelector('html')?.setAttribute('data-locale', defaultLocale);
+}
+
+await fetchI18n();
+
+// 远程获取i18n
+async function fetchI18n() {
+	const infoI18n = await info();
+	const messageLocal: Record<string, any> = {};
+	const itemizeLocal: Record<string, any[]> = { 'en-US': [], 'zh-CN': [] };
+	itemizeLocal['zh-CN'].push(...(infoI18n.data.data['zh-cn'] || []));
+	itemizeLocal['en-US'].push(...(infoI18n.data.data.en || []));
+
+	for (const key in itemizeLocal) {
+		messageLocal[key] = {
+			name: key,
+			...mergeArrObj(itemizeLocal, key),
+		};
+	}
+
+	i18n.global.mergeLocaleMessage('zh-CN', messageLocal['zh-CN']);
+	i18n.global.mergeLocaleMessage('en-US', messageLocal['en-US']);
+	i18n.global.locale.value = getLocale(themeConfig.value.globalI18n);
+}
+
+// 合并数组对象
+function mergeArrObj<T extends Record<string, any[]>>(list: T, key: string) {
+	let obj: Record<string, any> = {};
+	list[key].forEach((i: Record<string, any>) => {
+		obj = Object.assign({}, obj, i);
+	});
+	return obj;
+}
+
+export default i18n;
+
+// 导出语言代码映射函数
+export { getLocale };
+
+// 导出语言切换函数
+export function setLanguage(locale: string) {
+	const normalizedLocale = getLocale(locale);
+	i18n.global.locale.value = normalizedLocale;
+	localStorage.setItem('locale', normalizedLocale);
+	document.querySelector('html')?.setAttribute('lang', normalizedLocale);
+	// 设置 data-locale 属性用于样式适配
+	document.querySelector('html')?.setAttribute('data-locale', normalizedLocale);
+}
+
+// 导出当前语言
+export function getCurrentLanguage() {
+	return i18n.global.locale.value;
+}

+ 950 - 0
src/locales/zh-CN/index.json

@@ -0,0 +1,950 @@
+{
+	"app": {
+		"title": "管理系统"
+	},
+	"timeGreeting": {
+		"dawn": "凌晨好",
+		"morning": "早上好",
+		"forenoon": "上午好",
+		"noon": "中午好",
+		"afternoon": "下午好",
+		"evening": "傍晚好",
+		"night": "晚上好",
+		"lateNight": "夜里好"
+	},
+	"router": {
+		"home": "首页",
+		"system": "系统设置",
+		"systemMenu": "菜单管理",
+		"systemRole": "角色管理",
+		"systemUser": "用户管理",
+		"systemDept": "部门管理",
+		"systemDic": "字典管理",
+		"order": "订单管理",
+		"payOrder": "代收订单",
+		"withdrawOrder": "代付订单",
+		"merchant": "商户管理",
+		"merchantList": "商户列表",
+		"agent": "代理管理",
+		"agentList": "代理列表",
+		"payment": "支付配置",
+		"paymentChannel": "支付通道",
+		"paymentType": "支付类型",
+		"settlement": "结算管理",
+		"merchantWithdraw": "商户结算",
+		"agentWithdraw": "代理结算",
+		"systemManagement": "系统管理",
+		"permissionManagement": "权限管理",
+		"userManagement": "用户管理",
+		"menuManagement": "菜单管理",
+		"roleManagement": "角色管理",
+		"departmentManagement": "部门管理",
+		"postManagement": "岗位管理",
+		"tenantManagement": "租户管理",
+		"logManagement": "日志管理",
+		"auditLog": "审计日志",
+		"operationLog": "操作日志",
+		"fileManagement": "文件管理",
+		"dictManagement": "字典管理",
+		"parameterManagement": "参数管理",
+		"internationalizationManagement": "国际化管理",
+		"terminalManagement": "终端管理",
+		"keyManagement": "密钥管理",
+		"tokenManagement": "令牌管理",
+		"sensitiveWords": "敏感词",
+		"sysArea": "行政区划",
+		"bizPlatform": "业务平台",
+		"paymentSystem": "支付系统",
+		"checkoutCounter": "收银台",
+		"productOrder": "商品订单",
+		"paymentOrder": "支付订单",
+		"refundOrder": "退款订单",
+		"notificationRecord": "通知记录",
+		"appManagement": "应用管理",
+		"customerManagement": "客户管理",
+		"appRole": "应用角色",
+		"appKey": "应用密钥",
+		"articleInformation": "文章资讯",
+		"articleCategory": "文章分类",
+		"interfaceSettings": "界面设置",
+		"bottomNavigation": "底部导航",
+		"wechatPlatform": "微信平台",
+		"accountManagement": "账号管理",
+		"menuSettings": "菜单设置",
+		"fanManagement": "粉丝管理",
+		"tagManagement": "标签管理",
+		"autoReply": "自动回复",
+		"mediaManagement": "素材管理",
+		"messageManagement": "消息管理",
+		"operationalData": "运营数据",
+		"baseTools": "基础工具",
+		"cacheMonitoring": "缓存监控",
+		"documentExtension": "接口文档",
+		"route": "路由管理",
+		"quartzManagement": "定时任务",
+		"datav": "数据大屏",
+		"bi": "数据报表",
+		"message": "消息推送",
+		"collaborativeOffice": "协同办公",
+		"taskManagement": "任务管理",
+		"pendingTask": "待办任务",
+		"myInitiations": "我的发起",
+		"copiedtoMe": "抄送给我",
+		"completedTasks": "已办任务",
+		"initiateProcess": "发起流程",
+		"processManagement": "流程管理",
+		"platformDevelopment": "平台开发",
+		"dataSourceManagement": "数据源管理",
+		"tableManagement": "数据表管理",
+		"generatePages": "生成页面",
+		"formDesign": "表单设计",
+		"codeGeneration": "代码生成",
+		"metadataManagement": "元数据管理",
+		"fieldManagement": "字段管理",
+		"templateManagement": "模板管理",
+		"templateGroup": "模板分组",
+		"limits": "权限管理",
+		"limitsFrontEnd": "前端控制",
+		"limitsFrontEndPage": "页面权限",
+		"limitsFrontEndBtn": "按钮权限",
+		"limitsBackEnd": "后端控制",
+		"limitsBackEndEndPage": "页面权限",
+		"funIndex": "功能",
+		"funTagsView": "tagsView 操作",
+		"funCountup": "数字滚动",
+		"funWangEditor": "Editor 编辑器",
+		"funCropper": "图片裁剪",
+		"funQrcode": "二维码生成",
+		"funEchartsMap": "地理坐标/地图",
+		"funPrintJs": "页面打印",
+		"funClipboard": "复制剪切",
+		"funGridLayout": "拖拽布局",
+		"funSplitpanes": "窗格拆分器",
+		"funDragVerify": "验证器",
+		"pagesIndex": "页面",
+		"pagesFiltering": "过滤筛选组件",
+		"pagesFilteringDetails": "过滤筛选组件详情",
+		"pagesFilteringDetails1": "过滤筛选组件详情111",
+		"pagesIocnfont": "ali 字体图标",
+		"pagesElement": "ele 字体图标",
+		"pagesAwesome": "awe 字体图标",
+		"pagesFormAdapt": "表单自适应",
+		"pagesTableRules": "表单表格验证",
+		"pagesFormI18n": "表单国际化",
+		"pagesFormRules": "多表单验证",
+		"pagesDynamicForm": "动态复杂表单",
+		"pagesWorkflow": "工作流",
+		"pagesListAdapt": "列表自适应",
+		"pagesWaterfall": "瀑布屏",
+		"pagesSteps": "步骤条",
+		"pagesPreview": "大图预览",
+		"pagesWaves": "波浪效果",
+		"pagesTree": "树形改表格",
+		"pagesDrag": "拖动指令",
+		"pagesLazyImg": "图片懒加载",
+		"makeIndex": "组件封装",
+		"makeSelector": "图标选择器",
+		"makeNoticeBar": "滚动通知栏",
+		"makeSvgDemo": "svgIcon 演示",
+		"makeTableDemo": "表格封装演示",
+		"paramsIndex": "路由参数",
+		"paramsCommon": "普通路由",
+		"paramsDynamic": "动态路由",
+		"paramsCommonDetails": "普通路由详情",
+		"paramsDynamicDetails": "动态路由详情",
+		"chartIndex": "大数据图表",
+		"visualizingIndex": "数据可视化",
+		"visualizingLinkDemo1": "数据可视化演示1",
+		"visualizingLinkDemo2": "数据可视化演示2",
+		"personal": "个人中心",
+		"tools": "工具类集合",
+		"layoutLinkView": "外链",
+		"layoutIframeViewOne": "内嵌 iframe1",
+		"layoutIframeViewTwo": "内嵌 iframe2"
+	},
+	"staticRoutes": {
+		"login": "登录",
+		"authredirect": "回调页",
+		"expire": "密码过期",
+		"signIn": "登录",
+		"notFound": "找不到此页面",
+		"noPower": "没有权限"
+	},
+	"user": {
+		"title0": "组件大小",
+		"title1": "语言切换",
+		"title2": "菜单搜索",
+		"title3": "布局配置",
+		"title4": "消息",
+		"title5": "开全屏",
+		"title6": "关全屏",
+		"dropdownLarge": "大型",
+		"dropdownDefault": "默认",
+		"dropdownSmall": "小型",
+		"dropdown1": "首页",
+		"dropdown2": "个人中心",
+		"dropdown3": "切换租户",
+		"dropdown4": "当前租户",
+		"dropdown5": "退出登录",
+		"searchPlaceholder": "菜单搜索:支持中文、路由路径",
+		"newTitle": "通知",
+		"newBtn": "全部",
+		"newGo": "前往通知中心",
+		"newDesc": "暂无通知",
+		"logOutTitle": "提示",
+		"logOutMessage": "此操作将退出登录, 是否继续?",
+		"logOutConfirm": "确定",
+		"logOutCancel": "取消",
+		"logOutExit": "退出中"
+	},
+	"tagsView": {
+		"refresh": "刷新",
+		"close": "关闭",
+		"closeOther": "关闭其它",
+		"closeAll": "全部关闭",
+		"fullscreen": "当前页全屏",
+		"closeFullscreen": "关闭全屏",
+		"favorite": "收藏",
+		"favoriteMax": "快捷导航数量超过上限,请移除部分"
+	},
+	"notFound": {
+		"foundTitle": "地址输入错误,请重新输入地址~",
+		"foundMsg": "您可以先检查网址,然后重新输入或给我们反馈问题。",
+		"foundBtn": "返回首页"
+	},
+	"noAccess": {
+		"accessTitle": "您未被授权,没有操作权限~",
+		"accessMsg": "联系方式:加QQ群探讨 665452019",
+		"accessBtn": "重新授权"
+	},
+	"layout": {
+		"configTitle": "布局配置",
+		"oneTitle": "全局主题",
+		"twoTopTitle": "顶栏设置",
+		"twoMenuTitle": "菜单设置",
+		"twoColumnsTitle": "分栏设置",
+		"twoTopBar": "顶栏背景",
+		"twoTopBarColor": "顶栏默认字体颜色",
+		"twoIsTopBarColorGradual": "顶栏背景渐变",
+		"twoMenuBar": "菜单背景",
+		"twoMenuBarColor": "菜单默认字体颜色",
+		"twoMenuBarActiveColor": "菜单高亮背景色",
+		"twoIsMenuBarColorGradual": "菜单背景渐变",
+		"twoColumnsMenuBar": "分栏菜单背景",
+		"twoColumnsMenuBarColor": "分栏菜单默认字体颜色",
+		"twoIsColumnsMenuBarColorGradual": "分栏菜单背景渐变",
+		"twoIsColumnsMenuHoverPreload": "分栏菜单鼠标悬停预加载",
+		"threeTitle": "界面设置",
+		"threeIsCollapse": "菜单水平折叠",
+		"threeIsUniqueOpened": "菜单手风琴",
+		"threeIsFixedHeader": "固定 Header",
+		"threeIsClassicSplitMenu": "经典布局顶部菜单",
+		"threeIsLockScreen": "开启锁屏",
+		"threeLockScreenTime": "自动锁屏(s/秒)",
+		"fourTitle": "界面显示",
+		"fourIsShowLogo": "侧边栏 Logo",
+		"fourIsBreadcrumb": "开启 Breadcrumb",
+		"fourIsBreadcrumbIcon": "开启 Breadcrumb 图标",
+		"fourIsTagsview": "开启 Tagsview",
+		"fourIsTagsviewIcon": "开启 Tagsview 图标",
+		"fourIsCacheTagsView": "开启 TagsView 缓存",
+		"fourIsSortableTagsView": "开启 TagsView 拖拽",
+		"fourIsShareTagsView": "开启 TagsView 共用",
+		"fourIsFooter": "开启 Footer",
+		"fourIsGrayscale": "灰色模式",
+		"fourIsInvert": "色弱模式",
+		"fourIsDark": "深色模式",
+		"fourIsWartermark": "开启水印",
+		"fourIsChat": "开启AI助手",
+		"fourWartermarkText": "水印文案",
+		"fiveTitle": "其它设置",
+		"fiveTagsStyle": "Tagsview 风格",
+		"fiveAnimation": "主页面切换动画",
+		"fiveColumnsAsideStyle": "分栏高亮风格",
+		"fiveColumnsAsideLayout": "分栏布局风格",
+		"sixTitle": "布局切换",
+		"sixDefaults": "左侧",
+		"sixClassic": "左顶",
+		"sixTransverse": "横向",
+		"sixColumns": "分栏",
+		"tipText": "点击下方按钮,复制布局配置去 `src/stores/themeConfig.ts` 中修改。",
+		"copyText": "一键复制配置",
+		"resetText": "一键恢复默认",
+		"copyTextSuccess": "复制成功!",
+		"copyTextError": "复制失败!"
+	},
+	"upgrade": {
+		"title": "新版本升级",
+		"msg": "新版本来啦,马上更新尝鲜吧!不用担心,更新很快的哦!",
+		"desc": "提示:更新会还原默认配置",
+		"btnOne": "残忍拒绝",
+		"btnTwo": "马上更新",
+		"btnTwoLoading": "更新中"
+	},
+	"tenantSelector": {
+		"title": "切换租户",
+		"searchPlaceholder": "搜索租户名称、域名或网站名",
+		"noData": "暂无租户数据",
+		"current": "当前租户",
+		"selected": "已选择",
+		"loadError": "加载租户列表失败",
+		"selectTip": "请选择要切换的租户",
+		"sameError": "当前已是该租户,无需切换",
+		"confirmTitle": "切换租户确认",
+		"confirmMessage": "确定要切换到租户 \"{name}\" 吗?切换后页面将刷新。",
+		"switchSuccess": "租户切换成功,即将刷新页面...",
+		"switchError": "租户切换失败,请重试"
+	},
+	"common": {
+		"queryBtn": "查询",
+		"addBtn": "新 增",
+		"editBtn": "修 改",
+		"expandBtn": "展开/折叠",
+		"delBtn": "删除",
+		"viewBtn": "查看",
+		"detailBtn": "详情",
+		"refreshCacheBtn": "刷新缓存",
+		"exportBtn": "导出",
+		"importBtn": "导入",
+		"queryDeptTip": "请输入部门名称",
+		"resetBtn": "重置",
+		"copyBtn": "复制",
+		"action": "操作",
+		"optSuccessText": "操作成功",
+		"editSuccessText": "修改成功",
+		"addSuccessText": "添加成功",
+		"delSuccessText": "删除成功",
+		"delConfirmText": "此操作将永久删除",
+		"optConfirmText": "是否确认本操作",
+		"confirmButtonText": "确 认",
+		"cancelButtonText": "取 消",
+		"download": "下载",
+		"expand": "展开/折叠",
+		"selectAll": "全选/不全选",
+		"closeBtn": "关闭",
+		"searchBtn": "查询",
+		"cancel": "取消",
+		"confirm": "确认"
+	},
+	"message": {
+		"box": {
+			"title": "系统提示"
+		}
+	},
+	"label": {
+		"one1": "用户名登录",
+		"two2": "手机号登录",
+		"three3": "社交登录",
+		"register": "注册账号"
+	},
+	"link": {
+		"one3": "第三方登录",
+		"two4": "友情链接"
+	},
+	"password": {
+		"accountPlaceholder1": "请输入用户名",
+		"accountPlaceholder2": "请输入密码",
+		"accountPlaceholder3": "请输入验证码",
+		"phonePlaceholder4": "请输入手机号",
+		"tenantPlaceholder": "请选择租户",
+		"accountBtnText": "登 录",
+		"registerBtnText": "注 册",
+		"resetBtnText": "重 置",
+		"readAccept": "我已仔细阅读并接受",
+		"privacyPolicy": "《隐私政策》",
+		"oldPassword": "请输入原密码",
+		"newPassword": "请输入新密码",
+		"confirmPassword": "请确认新密码",
+		"backToLogin": "返回登录",
+		"mobileLogin": "验证码登录",
+		"createAccount": "注册账号",
+		"imageCodeTip": "请输入验证码",
+		"forgetPassword": "找回密码",
+		"googleCaptchaPlaceholder": "谷歌验证码(若没有可以不填)"
+	},
+	"mobile": {
+		"placeholder1": "请输入手机号",
+		"placeholder2": "请输入验证码",
+		"codeText": "获取验证码",
+		"btnText": "登 录",
+		"mobileLogin": "验证码登录",
+		"backToLogin": "返回登录",
+		"createAccount": "注册账号",
+		"sendSuccess": "验证码发送成功",
+		"seconds": "秒后重发",
+		"mobileRequired": "请输入手机号码",
+		"codeRequired": "请输入验证码",
+		"codeLength": "验证码必须是4位数字",
+		"sendFailed": "发送验证码失败",
+		"loginSuccess": "登录成功",
+		"loginFailed": "登录失败",
+		"signIn": "登 录"
+	},
+	"forget": {
+		"newPasswordPlaceholder": "请输入新密码",
+		"confirmPasswordPlaceholder": "请确认新密码",
+		"passwordEmpty": "密码不能为空",
+		"passwordLength": "用户密码长度必须介于 6 和 20 之间",
+		"passwordRule": "两次输入的密码不一致",
+		"passwordScore": "密码强度太低"
+	},
+	"scan": {
+		"text": "打开手机扫一扫,快速登录/注册",
+		"wechatApp": "微信扫码体验移动端",
+		"appErrorTip": "应用未配置,登录失败"
+	},
+	"signInText": "欢迎回来!",
+	"browserMsgText": "* 温馨提示:建议使用谷歌、Microsoft Edge,版本 80 及以上浏览器,360浏览器请使用极速模式",
+	"expire": {
+		"oldPassword": "请输入原密码",
+		"newPassword": "请输入新密码",
+		"confirmPassword": "请确认新密码",
+		"passwordRule": "两次输入的密码不一致",
+		"passwordScore": "密码强度太低",
+		"resetSuccess": "密码重置成功"
+	},
+	"tenantSelect": {
+		"select": "选择租户",
+		"loadError": "获取租户列表失败"
+	},
+	"register": {
+		"tenantEmpty": "请选择租户",
+		"tenantLoadError": "获取租户列表失败",
+		"usernameEmpty": "用户名不能为空",
+		"usernameLength": "用户名称长度必须介于 5 和 20 之间",
+		"phoneEmpty": "手机号不能为空",
+		"passwordEmpty": "密码不能为空",
+		"passwordLength": "用户密码长度必须介于 6 和 20 之间",
+		"passwordStrength": "密码强度太低",
+		"termsRequired": "请阅读并同意条款"
+	},
+	"divider": {
+		"or": "或"
+	},
+	"socialLogin": {
+		"wechatWork": "企微",
+		"dingtalk": "钉钉"
+	},
+	"personal": {
+		"name": "个人中心",
+		"basicInfo": "基本信息",
+		"securityInfo": "安全信息",
+		"socialLogin": "社交登录",
+		"merchantNo": "商户号",
+		"username": "用户名",
+		"nickname": "昵称",
+		"nicknamePlaceholder": "请输入昵称",
+		"realName": "姓名",
+		"realNamePlaceholder": "请输入姓名",
+		"phone": "手机",
+		"phonePlaceholder": "请输入手机",
+		"email": "邮箱",
+		"emailPlaceholder": "请输入邮箱",
+		"uploadAvatar": "请上传头像",
+		"oldPassword": "原密码",
+		"oldPasswordPlaceholder": "请输入密码",
+		"newPassword": "新密码",
+		"newPasswordPlaceholder": "请输入新密码",
+		"confirmPassword": "确认密码",
+		"confirmPasswordPlaceholder": "请重复密码",
+		"changePassword": "修改密码",
+		"updateInfo": "更新个人信息",
+		"passwordRule": "两次输入密码不一致",
+		"passwordScore": "密码等级太低",
+		"platform": "平台",
+		"status": "状态",
+		"bound": "已绑定",
+		"unbound": "未绑定",
+		"bind": "绑定",
+		"unbind": "解绑",
+		"wechatWork": "企业微信",
+		"dingtalk": "钉钉办公",
+		"phoneRequired": "手机号不能为空",
+		"nicknameRequired": "昵称不能为空",
+		"emailRequired": "邮箱不能为空",
+		"nameRequired": "姓名不能为空",
+		"passwordRequired": "密码不能为空",
+		"passwordLengthTip": "用户密码长度必须介于 6 和 20 之间",
+		"updateSuccess": "修改成功",
+		"unbindSuccess": "解绑成功",
+		"index": "序号",
+		"action": "操作"
+	},
+	"agentUser": {
+		"index": "#",
+		"agentId": "代理ID",
+		"agentName": "代理名称",
+		"username": "用户名",
+		"realname": "真实姓名",
+		"phone": "手机号码",
+		"email": "邮箱地址",
+		"idcard": "身份证号",
+		"address": "通讯地址",
+		"offlineRechargeRate": "线下充值费率(%)",
+		"status": "状态",
+		"bankName": "开户行名称",
+		"bankBranch": "开户网点",
+		"bankProvince": "开户省",
+		"bankCity": "开户市",
+		"accountName": "账户名",
+		"accountNum": "账户号",
+		"createTime": "创建时间",
+		"updateTime": "更新时间",
+		"operation": "操作",
+		"inputAgentNameTip": "请输入代理商名称",
+		"inputUsernameTip": "请输入用户名",
+		"inputRealnameTip": "请输入真实姓名",
+		"inputPhoneTip": "请输入手机号码",
+		"inputEmailTip": "请输入邮箱地址",
+		"inputIdcardTip": "请输入身份证号",
+		"inputAddressTip": "请输入通讯地址",
+		"inputOfflineRechargeRateTip": "请输入费率",
+		"inputBankNameTip": "请输入开户行名称",
+		"inputBankBranchTip": "请输入开户网点",
+		"inputBankProvinceTip": "请输入开户省",
+		"inputBankCityTip": "请输入开户市",
+		"inputAccountNameTip": "请输入账户名",
+		"inputAccountNumTip": "请输入账户号",
+		"searchAgentAccount": "请输入代理账号",
+		"viewBtn": "查看",
+		"changePwdBtn": "改密",
+		"statusEnable": "启用",
+		"statusDisable": "禁用",
+		"statusChangeSuccess": "状态修改成功",
+		"basicInfo": "基本信息",
+		"bankInfo": "银行信息",
+		"defaultPasswordTip": "提示:新增代理的默认密码为 qwe123QWE!",
+		"usernameRequired": "用户名不能为空",
+		"agentNameRequired": "代理商名称不能为空",
+		"realnameRequired": "真实姓名不能为空",
+		"phoneRequired": "手机号码不能为空",
+		"emailRequired": "邮箱地址不能为空",
+		"changePwdTitle": "修改密码",
+		"newPassword": "新密码",
+		"confirmPassword": "确认密码",
+		"inputNewPasswordTip": "请输入新密码",
+		"inputConfirmPasswordTip": "请再次输入新密码",
+		"newPasswordRequired": "新密码不能为空",
+		"passwordLengthTip": "密码长度在 6 到 20 个字符",
+		"confirmPasswordRequired": "请再次输入新密码",
+		"passwordNotMatch": "两次输入的密码不一致",
+		"changePwdSuccess": "密码修改成功",
+		"availableAmount": "可用余额",
+		"freezeAmount": "冻结金额",
+		"withdrawnAmount": "总提现金额",
+		"settlementDays": "结算周期",
+		"collection": "代收",
+		"payment": "代付"
+	},
+	"merchantUser": {
+		"index": "#",
+		"merchantId": "商户ID",
+		"merchantName": "商户名称",
+		"username": "用户名",
+		"realname": "真实姓名",
+		"phone": "手机号码",
+		"email": "邮箱地址",
+		"idcard": "身份证号",
+		"contactAddress": "通讯地址",
+		"websiteName": "网站名称",
+		"websiteAddress": "网站地址",
+		"appId": "AppId",
+		"offlineRechargeRate": "线下充值费率(%)",
+		"status": "状态",
+		"agentId": "所属代理商",
+		"agentName": "所属代理",
+		"totalAmount": "总金额",
+		"freezeAmount": "总冻结金额",
+		"withdrawnAmount": "总提现金额",
+		"createTime": "创建时间",
+		"updateTime": "更新时间",
+		"operation": "操作",
+		"inputMerchantNameTip": "请输入商户名称",
+		"inputUsernameTip": "请输入用户名",
+		"inputRealnameTip": "请输入真实姓名",
+		"inputPhoneTip": "请输入手机号码",
+		"inputEmailTip": "请输入邮箱地址",
+		"inputIdcardTip": "请输入身份证号",
+		"inputContactAddressTip": "请输入通讯地址",
+		"inputWebsiteNameTip": "请输入网站名称",
+		"inputWebsiteAddressTip": "请输入网站地址",
+		"inputOfflineRechargeRateTip": "请输入费率",
+		"selectAgentTip": "请选择所属代理商",
+		"searchMerchantAccount": "请输入商户账号",
+		"viewBtn": "查看",
+		"changePwdBtn": "改密",
+		"resetKeyBtn": "重置密钥",
+		"statusEnable": "启用",
+		"statusDisable": "禁用",
+		"statusChangeSuccess": "状态修改成功",
+		"basicInfo": "基本信息",
+		"websiteInfo": "网站信息",
+		"defaultPasswordTip": "提示:新增商户的默认密码为 qwe123QWE!",
+		"usernameRequired": "用户名不能为空",
+		"merchantNameRequired": "商户名称不能为空",
+		"phoneRequired": "手机号码不能为空",
+		"emailRequired": "邮箱地址不能为空",
+		"changePwdTitle": "修改密码",
+		"newPassword": "新密码",
+		"confirmPassword": "确认密码",
+		"inputNewPasswordTip": "请输入新密码",
+		"inputConfirmPasswordTip": "请再次输入新密码",
+		"newPasswordRequired": "新密码不能为空",
+		"passwordLengthTip": "密码长度在 6 到 20 个字符",
+		"confirmPasswordRequired": "请再次输入新密码",
+		"passwordNotMatch": "两次输入的密码不一致",
+		"changePwdSuccess": "密码修改成功",
+		"resetKeyTitle": "重置MD5密钥",
+		"resetKeyConfirm": "确定要重置该商户的MD5密钥吗?重置后原密钥将失效!",
+		"resetKeySuccess": "密钥重置成功",
+		"keyDialogTitle": "MD5密钥信息",
+		"keyDialogTip": "请妥善保管以下密钥信息,关闭后将无法再次查看!",
+		"appIdLabel": "AppId",
+		"md5KeyLabel": "MD5密钥",
+		"copyBtn": "复制",
+		"copyAllBtn": "一键复制",
+		"copySuccess": "复制成功",
+		"copyFailed": "复制失败",
+		"availableAmount": "可用余额",
+		"settlementDays": "结算周期",
+		"collection": "代收",
+		"payment": "代付"
+	},
+	"home": {
+		"submitOrder": "提交订单",
+		"payOrder": "支付订单",
+		"withdrawOrder": "提现订单",
+		"withdrawSuccess": "提现成功",
+		"paySuccessRate": "支付成功率",
+		"amount": "金额",
+		"loadStatsFailed": "加载统计数据失败"
+	},
+	"payOrder": {
+		"mchOrderNo": "商户订单号",
+		"transactionId": "平台订单号",
+		"merchantName": "商户名称",
+		"agentName": "代理名称",
+		"channelName": "通道名称",
+		"submitAmount": "提交金额",
+		"actualAmount": "实际金额",
+		"orderStatus": "订单状态",
+		"createTime": "创建时间",
+		"inputMchOrderNo": "请输入商户订单号",
+		"inputTransactionId": "请输入平台订单号",
+		"inputMerchantName": "请输入商户名称",
+		"inputAgentName": "请输入代理名称",
+		"selectOrderStatus": "请选择订单状态",
+		"callbackLog": "回调日志",
+		"submitOrderNum": "提交订单数",
+		"totalOrderAmount": "订单总金额",
+		"paidOrderNum": "已付订单数",
+		"totalPaidAmount": "已付总金额",
+		"statusCreateOrder": "创建订单",
+		"statusPaySuccess": "支付成功",
+		"statusPayFail": "支付失败",
+		"statusCancelOrder": "取消订单",
+		"statusPayTimeout": "支付超时"
+	},
+	"withdrawOrder": {
+		"mchOrderNo": "商户订单号",
+		"transactionId": "平台订单号",
+		"merchantName": "商户名称",
+		"agentName": "代理名称",
+		"channelName": "通道名称",
+		"submitAmount": "提交金额",
+		"actualAmount": "实际金额",
+		"orderStatus": "订单状态",
+		"createTime": "创建时间",
+		"inputMchOrderNo": "请输入商户订单号",
+		"inputTransactionId": "请输入平台订单号",
+		"inputMerchantName": "请输入商户名称",
+		"inputAgentName": "请输入代理名称",
+		"selectOrderStatus": "请选择订单状态",
+		"callbackLog": "回调日志",
+		"statusCreateOrder": "创建订单",
+		"statusWithdrawSuccess": "提现成功",
+		"statusWithdrawFail": "提现失败"
+	},
+	"paymentChannel": {
+		"channelId": "通道ID",
+		"channelName": "通道名称",
+		"channelCode": "通道编码",
+		"baseRate": "基础费率(%)",
+		"enableStatus": "启用状态",
+		"riskControlStatus": "风控状态",
+		"weightValue": "权重值",
+		"channelNameOrCode": "通道名称/编码",
+		"inputChannelNameOrCode": "请输入通道名称或编码",
+		"selectStatus": "请选择状态",
+		"enable": "启用",
+		"disable": "禁用",
+		"statusChangeSuccess": "状态修改成功",
+		"collectionPayConfig": "代收支付配置",
+		"paymentPayConfig": "代付支付配置"
+	},
+	"settlement": {
+		"merchantName": "商户名称",
+		"agentName": "代理名称",
+		"withdrawAmount": "提现金额",
+		"withdrawType": "提现类型",
+		"bankName": "银行名称",
+		"bankAccount": "银行账号",
+		"realName": "真实姓名",
+		"applyTime": "申请时间",
+		"auditStatus": "审核状态",
+		"rejectReason": "拒绝原因",
+		"createTime": "创建时间",
+		"inputMerchantName": "请输入商户名称",
+		"inputAgentName": "请输入代理名称",
+		"inputBankAccount": "请输入银行账号",
+		"inputRealName": "请输入真实姓名",
+		"selectAuditStatus": "请选择审核状态",
+		"startTime": "开始时间",
+		"endTime": "结束时间",
+		"to": "至",
+		"audit": "审核",
+		"bankCard": "银行卡",
+		"usdt": "U",
+		"statusPending": "待审核",
+		"statusApproved": "通过",
+		"statusRejected": "拒绝"
+	},
+	"login": {
+		"noPermission": "抱歉,您没有登录权限"
+	},
+	"paymentConfig": {
+		"agentCollectionConfig": "代理商代收配置",
+		"agentPaymentConfig": "代理商代付配置",
+		"merchantCollectionConfig": "商户代收配置",
+		"merchantPaymentConfig": "商户代付配置",
+		"configAgentPaymentChannel": "配置代理商支付通道",
+		"configMerchantPaymentChannel": "配置商户支付通道",
+		"channelName": "通道名称",
+		"channelCode": "通道编码",
+		"paymentTypeName": "支付类型名称",
+		"paymentTypeCode": "支付类型代码",
+		"enableStatus": "启用状态",
+		"enable": "启用",
+		"disable": "禁用",
+		"feeRate": "费率(%)",
+		"feeType": "手续费类型",
+		"feeRatePercent": "手续费比例(%)",
+		"feeFixed": "手续费固定金额",
+		"percentage": "百分比",
+		"fixed": "固定",
+		"mixed": "百分比+固定",
+		"notSet": "未设置",
+		"config": "配置",
+		"close": "关闭",
+		"cancel": "取消",
+		"confirm": "确定",
+		"basicInfo": "基本信息",
+		"configInfo": "配置信息",
+		"agentFeeInfo": "代理商手续费信息",
+		"merchantRate": "商户费率(%)",
+		"merchantFeeType": "商户手续费类型",
+		"merchantFeeRatePercent": "商户手续费比例(%)",
+		"merchantFeeFixed": "商户手续费固定金额",
+		"agentFeeType": "代理商手续费类型",
+		"agentFeeRatePercent": "代理商手续费比例(%)",
+		"agentFeeFixed": "代理商手续费固定金额",
+		"singleMinAmount": "单笔最小金额",
+		"singleMaxAmount": "单笔最大金额",
+		"channelLimit": "通道限制",
+		"configSuccess": "配置成功",
+		"selectEnableStatus": "请选择启用状态",
+		"selectFeeType": "请选择手续费类型",
+		"inputFeeRate": "请输入费率",
+		"inputFeeRatePercent": "请输入手续费比例",
+		"inputFeeFixed": "请输入手续费固定金额",
+		"inputMerchantRate": "请输入商户费率",
+		"feeRateRange": "费率范围为0-100",
+		"feeFixedMin": "手续费固定金额不能小于0",
+		"minGreaterThanMax": "单笔最小金额不能大于单笔最大金额",
+		"minLessThanLimit": "单笔最小金额不能小于通道限制",
+		"maxLessThanMin": "单笔最大金额不能小于单笔最小金额",
+		"maxGreaterThanLimit": "单笔最大金额不能大于通道限制"
+	},
+	"sysmenu": {
+		"index": "#",
+		"name": "菜单名称",
+		"buttonName": "按钮名称",
+		"sortOrder": "排序",
+		"path": "路由",
+		"menuType": "类型",
+		"keepAlive": "缓冲",
+		"permission": "权限标识",
+		"inputNameTip": "请输入菜单名称",
+		"parentId": "上级菜单",
+		"embedded": "内嵌",
+		"param": "带参",
+		"component": "组件",
+		"visible": "显示",
+		"icon": "图标",
+		"inputMenuIdTip": "",
+		"inputPermissionTip": "请输入权限标识",
+		"inputPathTip": "请输入路由路径",
+		"inputParentIdTip": "请选择上级菜单",
+		"inputIconTip": "请选择图标",
+		"inputVisibleTip": "请选择是否显示",
+		"inputSortOrderTip": "请输入排序",
+		"inputKeepAliveTip": "请选择是否缓冲",
+		"inputMenuTypeTip": "请选择菜单类型",
+		"inputEmbeddedTip": "请选择是否内嵌",
+		"inputComponentTip": "请输入组件名称",
+		"deleteDisabledTip": "菜单包含下级不能删除"
+	},
+	"sysuser": {
+		"index": "#",
+		"username": "用户名",
+		"name": "姓名",
+		"phone": "手机号",
+		"role": "角色",
+		"dept": "部门",
+		"post": "岗位",
+		"email": "邮箱",
+		"lockFlag": "状态",
+		"createTime": "创建时间",
+		"inputUsernameTip": "请输入用户名",
+		"inputNameTip": "请输入姓名",
+		"inputPhoneTip": "请输入手机号",
+		"inputRoleTip": "请选择角色",
+		"inputDeptTip": "请选择部门",
+		"inputPostTip": "请选择岗位",
+		"inputEmailTip": "请输入邮箱",
+		"inputPasswordTip": "请输入密码",
+		"password": "密码"
+	},
+	"sysrole": {
+		"index": "#",
+		"roleName": "角色名称",
+		"roleCode": "角色标识",
+		"roleDesc": "角色描述",
+		"dsType": "数据权限",
+		"createTime": "创建时间",
+		"inputRoleNameTip": "请输入角色名称",
+		"inputRoleCodeTip": "请输入角色标识",
+		"inputRoleDescTip": "请输入角色描述",
+		"inputDsTypeTip": "请选择数据权限",
+		"permissionTitle": "菜单权限",
+		"selectAll": "全选/全不选",
+		"expandAll": "展开/折叠",
+		"linkage": "父子联动"
+	},
+	"sysdept": {
+		"index": "#",
+		"name": "部门名称",
+		"sortOrder": "排序",
+		"parentId": "上级部门",
+		"createTime": "创建时间",
+		"inputNameTip": "请输入部门名称",
+		"inputSortOrderTip": "请输入排序",
+		"inputParentIdTip": "请选择上级部门"
+	},
+	"syspost": {
+		"index": "#",
+		"postCode": "岗位编码",
+		"postName": "岗位名称",
+		"postSort": "排序",
+		"remark": "备注",
+		"createTime": "创建时间",
+		"inputPostCodeTip": "请输入岗位编码",
+		"inputPostNameTip": "请输入岗位名称",
+		"inputPostSortTip": "请输入排序",
+		"inputRemarkTip": "请输入备注"
+	},
+	"systenant": {
+		"index": "#",
+		"name": "租户名称",
+		"code": "租户编号",
+		"startTime": "开始时间",
+		"endTime": "结束时间",
+		"status": "状态",
+		"createTime": "创建时间",
+		"inputNameTip": "请输入租户名称",
+		"inputCodeTip": "请输入租户编号"
+	},
+	"verify": {
+		"imageCode": "请输入验证码",
+		"complete": "请完成安全验证",
+		"slide": {
+			"explain": "向右滑动完成验证",
+			"success": "验证成功",
+			"fail": "验证失败",
+			"time": "{time}s验证成功"
+		}
+	},
+	"chat": {
+		"send": "发送",
+		"inputPlaceholder": "请输入消息...",
+		"title": "AI 助手",
+		"clearChat": "清空会话",
+		"webSearchEnabled": "已开启联网搜索",
+		"webSearchDisabled": "已关闭联网搜索",
+		"welcome": "您好!我是通用大模型,请问有什么可以帮助您?",
+		"thinking": "正在思考...",
+		"thinkingCompleted": "已完成思考",
+		"thinkingTime": "用时",
+		"connectionError": "连接已断开,请重试",
+		"seconds": "秒"
+	},
+	"material": {
+		"uploadFileTip": "上传",
+		"addGroup": "新增分组",
+		"editGroup": "修改分组",
+		"delGroup": "删除分组",
+		"moveBtn": "移动",
+		"preview": "预览",
+		"edit": "修改",
+		"view": "查看",
+		"add": "添加",
+		"allCheck": "全选",
+		"rename": "重命名",
+		"download": "下载",
+		"list": "列表",
+		"grid": "平铺"
+	},
+	"orgSelecotr": {
+		"org": "组织",
+		"user": "用户",
+		"dept": "部门",
+		"role": "角色",
+		"select": "选择",
+		"search": "搜索"
+	},
+	"queryTree": {
+		"hideSearch": "隐藏搜索",
+		"displayTheSearch": "显示搜索",
+		"refresh": "刷新",
+		"print": "打印",
+		"view": "视图"
+	},
+	"excel": {
+		"downloadTemplate": "下载模板",
+		"fileFormat": "仅允许导入xls、xlsx格式文件。",
+		"operationNotice": "将文件拖到此处,或",
+		"clickUpload": "点击上传",
+		"lineNumbers": "行号",
+		"misDescription": "错误描述",
+		"validationFailureData": "校验失败数据",
+		"pleaseUpload": "请上传",
+		"size": "大小不超过",
+		"format": "格式为",
+		"file": "的文件",
+		"sizeErrorText": "文件大小不超过",
+		"typeErrorText": "文件类型错误,请上传 ",
+		"uploadLimit": "上传文件数量超出限制,最多允许上传",
+		"files": "个文件"
+	},
+	"uploadTipPrefix": "请上传",
+	"sizeLimitTip": "大小不超过",
+	"formatTip": "格式为",
+	"fileSuffix": "的文件",
+	"invalidFormatError": "文件格式不正确,请上传{fileType}图片格式文件!",
+	"invalidFilenameError": "文件名不正确,不能包含英文逗号!",
+	"sizeLimitError": "上传头像图片大小不能超过 {fileSize} MB!",
+	"uploading": "正在上传图片,请稍候...",
+	"limitExceedError": "上传文件数量不能超过 {limit} 个!",
+	"uploadFailRetry": "上传失败,请重试",
+	"uploadFail": "上传图片失败,请重试"
+}

+ 1 - 1
src/main.ts

@@ -4,7 +4,7 @@ import App from './App.vue';
 import router from './router';
 import { directive } from '/@/directive';
 import Components from '/@/components';
-import { i18n } from '/@/i18n';
+import { i18n } from '/@/locales';
 import { properties } from '/@/utils/globalProperties';
 import { initAntiDebug } from './utils/antiDebug';
 

+ 3 - 3
src/stores/tagsViewRoutes.ts

@@ -2,7 +2,7 @@ import { defineStore } from 'pinia';
 import { Session } from '/@/utils/storage';
 import { useMessage } from '/@/hooks/message';
 import { useThemeConfig } from '/@/stores/themeConfig';
-import { i18n } from '/@/i18n/index';
+import { i18n } from '/@/locales/index';
 
 /**
  * TagsView 路由列表
@@ -28,8 +28,8 @@ export const useTagsViewRoutes = defineStore('tagsViewRoutes', {
 			const { themeConfig } = storeToRefs(storesThemeConfig);
 			// 判断已经存储的长度,如果超过主题设置则警告
 			if (this.favoriteRoutes.length > themeConfig.value.quickLinkNum) {
-				useMessage().error(i18n.global.t('tagsView.favoriteMax'))
-				return
+				useMessage().error(i18n.global.t('tagsView.favoriteMax'));
+				return;
 			}
 			this.favoriteRoutes.unshift(item);
 		},

+ 321 - 322
src/utils/other.ts

@@ -1,30 +1,29 @@
-import {nextTick} from 'vue';
+import { nextTick } from 'vue';
 import router from '/@/router/index';
 import pinia from '/@/stores/index';
-import {storeToRefs} from 'pinia';
-import {useThemeConfig} from '/@/stores/themeConfig';
-import {i18n} from '/@/i18n/index';
-import {Local} from '/@/utils/storage';
-import {verifyUrl} from '/@/utils/toolsValidate';
+import { storeToRefs } from 'pinia';
+import { useThemeConfig } from '/@/stores/themeConfig';
+import { i18n } from '/@/locales/index';
+import { Local } from '/@/utils/storage';
+import { verifyUrl } from '/@/utils/toolsValidate';
 import request from '/@/utils/request';
-import {useMessage} from '/@/hooks/message';
+import { useMessage } from '/@/hooks/message';
 import * as CryptoJS from 'crypto-js';
-import {sm4} from 'sm-crypto'
-import {validateNull} from './validate';
-
+import { sm4 } from 'sm-crypto';
+import { validateNull } from './validate';
 
 /**
  * 设置浏览器标题国际化
  * @method const title = useTitle(); ==> title()
  */
 export function useTitle() {
-    const stores = useThemeConfig(pinia);
-    const {themeConfig} = storeToRefs(stores);
-    nextTick(() => {
-        let globalTitle: string = themeConfig.value.globalTitle;
-        let webTitle = setTagsViewNameI18n(router.currentRoute.value);
-        document.title = `${webTitle} - ${globalTitle}` || globalTitle;
-    });
+	const stores = useThemeConfig(pinia);
+	const { themeConfig } = storeToRefs(stores);
+	nextTick(() => {
+		let globalTitle: string = themeConfig.value.globalTitle;
+		let webTitle = setTagsViewNameI18n(router.currentRoute.value);
+		document.title = `${webTitle} - ${globalTitle}` || globalTitle;
+	});
 }
 
 /**
@@ -33,24 +32,24 @@ export function useTitle() {
  * @returns 返回当前 tagsViewName 名称
  */
 export function setTagsViewNameI18n(item: any) {
-    let tagsViewName: string = '';
-    const {query, params} = item;
-    //修复tagsViewName匹配到其他含下列单词的路由
-    const pattern = /^\{("(zh-cn|en|zh-tw)":"[^,]+",?){1,3}}$/;
-    if (query?.tagsViewName || params?.tagsViewName) {
-        if (pattern.test(query?.tagsViewName) || pattern.test(params?.tagsViewName)) {
-            // 国际化
-            const urlTagsParams = (query?.tagsViewName && JSON.parse(query?.tagsViewName)) || (params?.tagsViewName && JSON.parse(params?.tagsViewName));
-            tagsViewName = urlTagsParams[i18n.global.locale.value];
-        } else {
-            // 非国际化
-            tagsViewName = query?.tagsViewName || params?.tagsViewName;
-        }
-    } else {
-        // 非自定义 tagsView 名称
-        tagsViewName = i18n.global.t(item.name);
-    }
-    return tagsViewName;
+	let tagsViewName: string = '';
+	const { query, params } = item;
+	//修复tagsViewName匹配到其他含下列单词的路由
+	const pattern = /^\{("(zh-cn|en|zh-tw)":"[^,]+",?){1,3}}$/;
+	if (query?.tagsViewName || params?.tagsViewName) {
+		if (pattern.test(query?.tagsViewName) || pattern.test(params?.tagsViewName)) {
+			// 国际化
+			const urlTagsParams = (query?.tagsViewName && JSON.parse(query?.tagsViewName)) || (params?.tagsViewName && JSON.parse(params?.tagsViewName));
+			tagsViewName = urlTagsParams[i18n.global.locale.value];
+		} else {
+			// 非国际化
+			tagsViewName = query?.tagsViewName || params?.tagsViewName;
+		}
+	} else {
+		// 非自定义 tagsView 名称
+		tagsViewName = i18n.global.t(item.name);
+	}
+	return tagsViewName;
 }
 
 /**
@@ -60,21 +59,21 @@ export function setTagsViewNameI18n(item: any) {
  * @description data-xxx 属性用于存储页面或应用程序的私有自定义数据
  */
 export const lazyImg = (el: string, arr: EmptyArrayType) => {
-    const io = new IntersectionObserver((res) => {
-        res.forEach((v: any) => {
-            if (v.isIntersecting) {
-                const {img, key} = v.target.dataset;
-                v.target.src = img;
-                v.target.onload = () => {
-                    io.unobserve(v.target);
-                    arr[key]['loading'] = false;
-                };
-            }
-        });
-    });
-    nextTick(() => {
-        document.querySelectorAll(el).forEach((img) => io.observe(img));
-    });
+	const io = new IntersectionObserver((res) => {
+		res.forEach((v: any) => {
+			if (v.isIntersecting) {
+				const { img, key } = v.target.dataset;
+				v.target.src = img;
+				v.target.onload = () => {
+					io.unobserve(v.target);
+					arr[key]['loading'] = false;
+				};
+			}
+		});
+	});
+	nextTick(() => {
+		document.querySelectorAll(el).forEach((img) => io.observe(img));
+	});
 };
 
 /**
@@ -82,9 +81,9 @@ export const lazyImg = (el: string, arr: EmptyArrayType) => {
  * @returns 返回 `window.localStorage` 中读取的缓存值 `globalComponentSize`
  */
 export const globalComponentSize = (): string => {
-    const stores = useThemeConfig(pinia);
-    const {themeConfig} = storeToRefs(stores);
-    return Local.get('themeConfig')?.globalComponentSize || themeConfig.value?.globalComponentSize;
+	const stores = useThemeConfig(pinia);
+	const { themeConfig } = storeToRefs(stores);
+	return Local.get('themeConfig')?.globalComponentSize || themeConfig.value?.globalComponentSize;
 };
 
 /**
@@ -93,35 +92,35 @@ export const globalComponentSize = (): string => {
  * @returns 克隆后的对象
  */
 export function deepClone(obj: EmptyObjectType) {
-    let newObj: EmptyObjectType;
-    try {
-        newObj = obj.push ? [] : {};
-    } catch (error) {
-        newObj = {};
-    }
-    for (let attr in obj) {
-        if (obj[attr] && typeof obj[attr] === 'object') {
-            newObj[attr] = deepClone(obj[attr]);
-        } else {
-            newObj[attr] = obj[attr];
-        }
-    }
-    return newObj;
+	let newObj: EmptyObjectType;
+	try {
+		newObj = obj.push ? [] : {};
+	} catch (error) {
+		newObj = {};
+	}
+	for (let attr in obj) {
+		if (obj[attr] && typeof obj[attr] === 'object') {
+			newObj[attr] = deepClone(obj[attr]);
+		} else {
+			newObj[attr] = obj[attr];
+		}
+	}
+	return newObj;
 }
 
 /**
  * 判断是否是移动端
  */
 export function isMobile() {
-    if (
-        navigator.userAgent.match(
-            /('phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone')/i
-        )
-    ) {
-        return true;
-    } else {
-        return false;
-    }
+	if (
+		navigator.userAgent.match(
+			/('phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone')/i
+		)
+	) {
+		return true;
+	} else {
+		return false;
+	}
 }
 
 /**
@@ -131,18 +130,18 @@ export function isMobile() {
  * @returns 删除空值后的数组对象
  */
 export function handleEmpty(list: EmptyArrayType) {
-    const arr = [] as any[];
-    for (const i in list) {
-        const d = [] as any[];
-        for (const j in list[i]) {
-            d.push(list[i][j]);
-        }
-        const leng = d.filter((item) => item === '').length;
-        if (leng !== d.length) {
-            arr.push(list[i]);
-        }
-    }
-    return arr;
+	const arr = [] as any[];
+	for (const i in list) {
+		const d = [] as any[];
+		for (const j in list[i]) {
+			d.push(list[i][j]);
+		}
+		const leng = d.filter((item) => item === '').length;
+		if (leng !== d.length) {
+			arr.push(list[i]);
+		}
+	}
+	return arr;
 }
 
 /**
@@ -150,55 +149,55 @@ export function handleEmpty(list: EmptyArrayType) {
  * @param val 当前点击项菜单
  */
 export function handleOpenLink(val: RouteItem) {
-    router.push(val.path);
-    if (verifyUrl(<string>val.meta?.isLink)) window.open(val.meta?.isLink);
-    else window.open(`${val.meta?.isLink}`);
+	router.push(val.path);
+	if (verifyUrl(<string>val.meta?.isLink)) window.open(val.meta?.isLink);
+	else window.open(`${val.meta?.isLink}`);
 }
 
 /**
  * 打开小窗口
  */
 export const openWindow = (url: string, title: string, w: number, h: number) => {
-    // @ts-ignore
-    const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
-    // @ts-ignore
-    const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;
-
-    const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
-    const height = window.innerHeight
-        ? window.innerHeight
-        : document.documentElement.clientHeight
-            ? document.documentElement.clientHeight
-            : screen.height;
-
-    const left = width / 2 - w / 2 + dualScreenLeft;
-    const top = height / 2 - h / 2 + dualScreenTop;
-    return window.open(
-        url,
-        title,
-        'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
-        w +
-        ', height=' +
-        h +
-        ', top=' +
-        top +
-        ', left=' +
-        left
-    );
+	// @ts-ignore
+	const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left;
+	// @ts-ignore
+	const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top;
+
+	const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
+	const height = window.innerHeight
+		? window.innerHeight
+		: document.documentElement.clientHeight
+		? document.documentElement.clientHeight
+		: screen.height;
+
+	const left = width / 2 - w / 2 + dualScreenLeft;
+	const top = height / 2 - h / 2 + dualScreenTop;
+	return window.open(
+		url,
+		title,
+		'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
+			w +
+			', height=' +
+			h +
+			', top=' +
+			top +
+			', left=' +
+			left
+	);
 };
 
 /**
  *加密处理
  */
 export function encryption(src: string, keyWord: string) {
-    const key = CryptoJS.enc.Utf8.parse(keyWord);
-    // 加密
-    var encrypted = CryptoJS.AES.encrypt(src, key, {
-        iv: key,
-        mode: CryptoJS.mode.CFB,
-        padding: CryptoJS.pad.NoPadding,
-    });
-    return encrypted.toString();
+	const key = CryptoJS.enc.Utf8.parse(keyWord);
+	// 加密
+	var encrypted = CryptoJS.AES.encrypt(src, key, {
+		iv: key,
+		mode: CryptoJS.mode.CFB,
+		padding: CryptoJS.pad.NoPadding,
+	});
+	return encrypted.toString();
 }
 
 /**
@@ -207,22 +206,22 @@ export function encryption(src: string, keyWord: string) {
  * @returns 明文
  */
 export function decryption(src: string, keyWord: string) {
-    const key = CryptoJS.enc.Utf8.parse(keyWord);
-    // 解密逻辑
-    var decryptd = CryptoJS.AES.decrypt(src, key, {
-        iv: key,
-        mode: CryptoJS.mode.CFB,
-        padding: CryptoJS.pad.NoPadding,
-    });
-
-    return decryptd.toString(CryptoJS.enc.Utf8);
+	const key = CryptoJS.enc.Utf8.parse(keyWord);
+	// 解密逻辑
+	var decryptd = CryptoJS.AES.decrypt(src, key, {
+		iv: key,
+		mode: CryptoJS.mode.CFB,
+		padding: CryptoJS.pad.NoPadding,
+	});
+
+	return decryptd.toString(CryptoJS.enc.Utf8);
 }
 
 /**
  * SM4加密处理
  */
 export function sm4Encryption(src: string, keyWord: string) {
-    return sm4.encrypt(src, keyWord);
+	return sm4.encrypt(src, keyWord);
 }
 
 /**
@@ -231,7 +230,7 @@ export function sm4Encryption(src: string, keyWord: string) {
  * @returns 明文
  */
 export function sm4Decryption(src: string, keyWord: string) {
-    return sm4.decrypt(src, keyWord);
+	return sm4.decrypt(src, keyWord);
 }
 
 /**
@@ -240,8 +239,8 @@ export function sm4Decryption(src: string, keyWord: string) {
  * @returns 密文
  */
 export function base64Encrypt(src: string) {
-    const encodedWord = CryptoJS.enc.Utf8.parse(src);
-    return CryptoJS.enc.Base64.stringify(encodedWord);
+	const encodedWord = CryptoJS.enc.Utf8.parse(src);
+	return CryptoJS.enc.Base64.stringify(encodedWord);
 }
 
 /**
@@ -252,14 +251,14 @@ export function base64Encrypt(src: string) {
  * @returns {*}
  */
 export function downBlobFile(url: any, query: any, fileName: string) {
-    return request({
-        url: url,
-        method: 'get',
-        responseType: 'blob',
-        params: query,
-    }).then((response) => {
-        handleBlobFile(response, fileName);
-    });
+	return request({
+		url: url,
+		method: 'get',
+		responseType: 'blob',
+		params: query,
+	}).then((response) => {
+		handleBlobFile(response, fileName);
+	});
 }
 
 /**
@@ -268,26 +267,26 @@ export function downBlobFile(url: any, query: any, fileName: string) {
  * @returns
  */
 export function handleBlobFile(response: any, fileName: string) {
-    // 处理返回的文件流
-    const blob = response;
-    if (blob && blob.size === 0) {
-        useMessage().error('内容为空,无法下载');
-        return;
-    }
-    const link = document.createElement('a');
-
-    // 兼容一下 入参不是 File Blob 类型情况
-    var binaryData = [] as any;
-    binaryData.push(response);
-    link.href = window.URL.createObjectURL(new Blob(binaryData));
-    link.download = fileName;
-    document.body.appendChild(link);
-    link.click();
-    window.setTimeout(function () {
-        // @ts-ignore
-        URL.revokeObjectURL(blob);
-        document.body.removeChild(link);
-    }, 0);
+	// 处理返回的文件流
+	const blob = response;
+	if (blob && blob.size === 0) {
+		useMessage().error('内容为空,无法下载');
+		return;
+	}
+	const link = document.createElement('a');
+
+	// 兼容一下 入参不是 File Blob 类型情况
+	var binaryData = [] as any;
+	binaryData.push(response);
+	link.href = window.URL.createObjectURL(new Blob(binaryData));
+	link.download = fileName;
+	document.body.appendChild(link);
+	link.click();
+	window.setTimeout(function () {
+		// @ts-ignore
+		URL.revokeObjectURL(blob);
+		document.body.removeChild(link);
+	}, 0);
 }
 
 /**
@@ -295,31 +294,31 @@ export function handleBlobFile(response: any, fileName: string) {
  * @return string
  */
 export function generateUUID() {
-    if (typeof crypto === 'object') {
-        if (typeof crypto.randomUUID === 'function') {
-            return crypto.randomUUID();
-        }
-        if (typeof crypto.getRandomValues === 'function' && typeof Uint8Array === 'function') {
-            const callback = (c: any) => {
-                const num = Number(c);
-                return (num ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16);
-            };
-            return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, callback);
-        }
-    }
-    let timestamp = new Date().getTime();
-    let performanceNow = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0;
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
-        let random = Math.random() * 16;
-        if (timestamp > 0) {
-            random = (timestamp + random) % 16 | 0;
-            timestamp = Math.floor(timestamp / 16);
-        } else {
-            random = (performanceNow + random) % 16 | 0;
-            performanceNow = Math.floor(performanceNow / 16);
-        }
-        return (c === 'x' ? random : (random & 0x3) | 0x8).toString(16);
-    });
+	if (typeof crypto === 'object') {
+		if (typeof crypto.randomUUID === 'function') {
+			return crypto.randomUUID();
+		}
+		if (typeof crypto.getRandomValues === 'function' && typeof Uint8Array === 'function') {
+			const callback = (c: any) => {
+				const num = Number(c);
+				return (num ^ (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (num / 4)))).toString(16);
+			};
+			return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, callback);
+		}
+	}
+	let timestamp = new Date().getTime();
+	let performanceNow = (typeof performance !== 'undefined' && performance.now && performance.now() * 1000) || 0;
+	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
+		let random = Math.random() * 16;
+		if (timestamp > 0) {
+			random = (timestamp + random) % 16 | 0;
+			timestamp = Math.floor(timestamp / 16);
+		} else {
+			random = (performanceNow + random) % 16 | 0;
+			performanceNow = Math.floor(performanceNow / 16);
+		}
+		return (c === 'x' ? random : (random & 0x3) | 0x8).toString(16);
+	});
 }
 
 /**
@@ -334,96 +333,96 @@ export function generateUUID() {
  * @method handleOpenLink 打开外部链接
  */
 const other = {
-    useTitle: () => {
-        useTitle();
-    },
-    setTagsViewNameI18n(route: RouteToFrom) {
-        return setTagsViewNameI18n(route);
-    },
-    lazyImg: (el: string, arr: EmptyArrayType) => {
-        lazyImg(el, arr);
-    },
-    globalComponentSize: () => {
-        return globalComponentSize();
-    },
-    deepClone: (obj: EmptyObjectType) => {
-        return deepClone(obj);
-    },
-    isMobile: () => {
-        return isMobile();
-    },
-    handleEmpty: (list: EmptyArrayType) => {
-        return handleEmpty(list);
-    },
-    handleOpenLink: (val: RouteItem) => {
-        handleOpenLink(val);
-    },
-    encryption: (src: string, keyWord: string) => {
-        return encryption(src, keyWord);
-    },
-    decryption: (src: string, keyWord: string) => {
-        return decryption(src, keyWord);
-    },
-    base64Encrypt: (data: any) => {
-        return base64Encrypt(data);
-    },
-    downBlobFile: (url: any, query: any, fileName: string) => {
-        return downBlobFile(url, query, fileName);
-    },
-    toUnderline: (str: string) => {
-        return toUnderline(str);
-    },
-    openWindow: (url: string, title: string, w: number, h: number) => {
-        return openWindow(url, title, w, h);
-    },
-    getQueryString: (url: string, paraName: string) => {
-        return getQueryString(url, paraName);
-    },
-    adaptationUrl: (url?: string) => {
-        return adaptationUrl(url);
-    },
-    resolveAllEunuchNodeId: (json: any[], idArr: any[], temp: any[] = []) => {
-        return resolveAllEunuchNodeId(json, idArr, temp);
-    },
-    getNonDuplicateID: () => {
-        return getNonDuplicateID();
-    },
-
-    addUnit: (value: string | number, unit = 'px') => {
-        return addUnit(value, unit);
-    },
-    validateNull: (value: any) => {
-        return validateNull(value);
-    },
-    getNumberRadixNum: (input: Number) => {
-        return getNumberRadixNum(input);
-    }
+	useTitle: () => {
+		useTitle();
+	},
+	setTagsViewNameI18n(route: RouteToFrom) {
+		return setTagsViewNameI18n(route);
+	},
+	lazyImg: (el: string, arr: EmptyArrayType) => {
+		lazyImg(el, arr);
+	},
+	globalComponentSize: () => {
+		return globalComponentSize();
+	},
+	deepClone: (obj: EmptyObjectType) => {
+		return deepClone(obj);
+	},
+	isMobile: () => {
+		return isMobile();
+	},
+	handleEmpty: (list: EmptyArrayType) => {
+		return handleEmpty(list);
+	},
+	handleOpenLink: (val: RouteItem) => {
+		handleOpenLink(val);
+	},
+	encryption: (src: string, keyWord: string) => {
+		return encryption(src, keyWord);
+	},
+	decryption: (src: string, keyWord: string) => {
+		return decryption(src, keyWord);
+	},
+	base64Encrypt: (data: any) => {
+		return base64Encrypt(data);
+	},
+	downBlobFile: (url: any, query: any, fileName: string) => {
+		return downBlobFile(url, query, fileName);
+	},
+	toUnderline: (str: string) => {
+		return toUnderline(str);
+	},
+	openWindow: (url: string, title: string, w: number, h: number) => {
+		return openWindow(url, title, w, h);
+	},
+	getQueryString: (url: string, paraName: string) => {
+		return getQueryString(url, paraName);
+	},
+	adaptationUrl: (url?: string) => {
+		return adaptationUrl(url);
+	},
+	resolveAllEunuchNodeId: (json: any[], idArr: any[], temp: any[] = []) => {
+		return resolveAllEunuchNodeId(json, idArr, temp);
+	},
+	getNonDuplicateID: () => {
+		return getNonDuplicateID();
+	},
+
+	addUnit: (value: string | number, unit = 'px') => {
+		return addUnit(value, unit);
+	},
+	validateNull: (value: any) => {
+		return validateNull(value);
+	},
+	getNumberRadixNum: (input: Number) => {
+		return getNumberRadixNum(input);
+	},
 };
 
 export function getNumberRadixNum(input: Number) {
-    let strings = input.toString().split(".");
-    if (strings.length <= 1) {
-        return 0;
-    }
-    return strings[1].toString().length;
-};
+	let strings = input.toString().split('.');
+	if (strings.length <= 1) {
+		return 0;
+	}
+	return strings[1].toString().length;
+}
 
 export function getQueryString(url: string, paraName: string) {
-    const arrObj = url.split('?');
-    if (arrObj.length > 1) {
-        const arrPara = arrObj[1].split('&');
-        let arr;
-        for (let i = 0; i < arrPara.length; i++) {
-            arr = arrPara[i].split('=');
-            // eslint-disable-next-line eqeqeq
-            if (arr != null && arr[0] == paraName) {
-                return arr[1];
-            }
-        }
-        return '';
-    } else {
-        return '';
-    }
+	const arrObj = url.split('?');
+	if (arrObj.length > 1) {
+		const arrPara = arrObj[1].split('&');
+		let arr;
+		for (let i = 0; i < arrPara.length; i++) {
+			arr = arrPara[i].split('=');
+			// eslint-disable-next-line eqeqeq
+			if (arr != null && arr[0] == paraName) {
+				return arr[1];
+			}
+		}
+		return '';
+	} else {
+		return '';
+	}
 }
 
 /**
@@ -436,31 +435,31 @@ export function getQueryString(url: string, paraName: string) {
  * @returns {*}
  */
 export function handleTree(data: any, id: any, parentId: any, children: any, rootId: any) {
-    id = id || 'id';
-    parentId = parentId || 'parentId';
-    children = children || 'children';
-    rootId =
-        rootId ||
-        Math.min.apply(
-            Math,
-            data.map((item: any) => {
-                return item[parentId];
-            })
-        ) ||
-        0;
-    //对源数据深度克隆
-    const cloneData = JSON.parse(JSON.stringify(data));
-    //循环所有项
-    const treeData = cloneData.filter((father: any) => {
-        const branchArr = cloneData.filter((child: any) => {
-            //返回每一项的子级数组
-            return father[id] === child[parentId];
-        });
-        branchArr.length > 0 ? (father[children] = branchArr) : '';
-        //返回第一层
-        return father[parentId] === rootId;
-    });
-    return treeData !== '' ? treeData : data;
+	id = id || 'id';
+	parentId = parentId || 'parentId';
+	children = children || 'children';
+	rootId =
+		rootId ||
+		Math.min.apply(
+			Math,
+			data.map((item: any) => {
+				return item[parentId];
+			})
+		) ||
+		0;
+	//对源数据深度克隆
+	const cloneData = JSON.parse(JSON.stringify(data));
+	//循环所有项
+	const treeData = cloneData.filter((father: any) => {
+		const branchArr = cloneData.filter((child: any) => {
+			//返回每一项的子级数组
+			return father[id] === child[parentId];
+		});
+		branchArr.length > 0 ? (father[children] = branchArr) : '';
+		//返回第一层
+		return father[parentId] === rootId;
+	});
+	return treeData !== '' ? treeData : data;
 }
 
 /**
@@ -468,14 +467,14 @@ export function handleTree(data: any, id: any, parentId: any, children: any, roo
  * @returns
  */
 const resolveAllEunuchNodeId = (json: any[], idArr: any[], temp: any[] = []) => {
-    for (const item of json) {
-        if (item.children && item.children.length !== 0) {
-            resolveAllEunuchNodeId(item.children, idArr, temp);
-        } else {
-            temp.push(...idArr.filter((id) => id === item.id));
-        }
-    }
-    return temp;
+	for (const item of json) {
+		if (item.children && item.children.length !== 0) {
+			resolveAllEunuchNodeId(item.children, idArr, temp);
+		} else {
+			temp.push(...idArr.filter((id) => id === item.id));
+		}
+	}
+	return temp;
 };
 
 /**
@@ -484,7 +483,7 @@ const resolveAllEunuchNodeId = (json: any[], idArr: any[], temp: any[] = []) =>
  * @returns 下划线
  */
 export function toUnderline(str: string) {
-    return str.replace(/([A-Z])/g, '_$1').toLowerCase();
+	return str.replace(/([A-Z])/g, '_$1').toLowerCase();
 }
 
 /**
@@ -495,14 +494,14 @@ export function toUnderline(str: string) {
  * @param originUrl 原始路径
  */
 const adaptationUrl = (originUrl?: string) => {
-    // 微服务架构 不做路径转换,为空不做路径转换
-    const isMicro = import.meta.env.VITE_IS_MICRO;
-    if (validateNull(isMicro) || isMicro === 'true') {
-        return originUrl;
-    }
-
-    // 转为 /admin 路由前缀的请求
-    return `/admin/${originUrl?.split('/').splice(2).join('/')}`;
+	// 微服务架构 不做路径转换,为空不做路径转换
+	const isMicro = import.meta.env.VITE_IS_MICRO;
+	if (validateNull(isMicro) || isMicro === 'true') {
+		return originUrl;
+	}
+
+	// 转为 /admin 路由前缀的请求
+	return `/admin/${originUrl?.split('/').splice(2).join('/')}`;
 };
 
 /**
@@ -511,9 +510,9 @@ const adaptationUrl = (originUrl?: string) => {
  * @return { String } id
  */
 const getNonDuplicateID = (length = 8) => {
-    let idStr = Date.now().toString(36);
-    idStr += Math.random().toString(36).substring(3, length);
-    return idStr;
+	let idStr = Date.now().toString(36);
+	idStr += Math.random().toString(36).substring(3, length);
+	return idStr;
 };
 
 /**
@@ -522,7 +521,7 @@ const getNonDuplicateID = (length = 8) => {
  * @param {String} unit 单位 px em rem
  */
 const addUnit = (value: string | number, unit = 'px') => {
-    return !Object.is(Number(value), NaN) ? `${value}${unit}` : value;
+	return !Object.is(Number(value), NaN) ? `${value}${unit}` : value;
 };
 
 // 统一批量导出

+ 0 - 24
src/views/admin/audit/i18n/en.ts

@@ -1,24 +0,0 @@
-export default {
-	audit: {
-		index: '#',
-		importsysAuditLogTip: 'import SysAuditLog',
-		id: 'id',
-		auditName: 'auditName',
-		auditField: 'auditField',
-		beforeVal: 'beforeVal',
-		afterVal: 'afterVal',
-		createBy: 'createBy',
-		createTime: 'createTime',
-		delFlag: 'delFlagx',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputAuditNameTip: 'input auditName',
-		inputAuditFieldTip: 'input auditField',
-		inputBeforeValTip: 'input beforeVal',
-		inputAfterValTip: 'input afterVal',
-		inputCreateByTip: 'input createBy',
-		inputCreateTimeTip: 'input createTime',
-		inputDelFlagTip: 'input delFlagx',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 24
src/views/admin/audit/i18n/zh-cn.ts

@@ -1,24 +0,0 @@
-export default {
-	audit: {
-		index: '#',
-		importsysAuditLogTip: '导入审计记录表',
-		id: '主键',
-		auditName: '审计名称',
-		auditField: '字段名称',
-		beforeVal: '变更前值',
-		afterVal: '变更后值',
-		createBy: '操作人',
-		createTime: '操作时间',
-		delFlag: '删除标记',
-		tenantId: '租户ID',
-		inputIdTip: '请输入主键',
-		inputAuditNameTip: '请输入审计名称',
-		inputAuditFieldTip: '请输入字段名称',
-		inputBeforeValTip: '请输入变更前值',
-		inputAfterValTip: '请输入变更后值',
-		inputCreateByTip: '请输入操作人',
-		inputCreateTimeTip: '请输入操作时间',
-		inputDelFlagTip: '请输入删除标记',
-		inputTenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 45
src/views/admin/client/i18n/en.ts

@@ -1,45 +0,0 @@
-export default {
-	client: {
-		index: '#',
-		importsysOauthClientDetailsTip: 'import SysOauthClientDetails',
-		id: 'id',
-		clientId: 'client Id',
-		resourceIds: 'resourceIds',
-		clientSecret: 'clientSecret',
-		scope: 'scope',
-		authorizedGrantTypes: 'authorizedGrantTypes',
-		webServerRedirectUri: 'webServerRedirectUri',
-		authorities: 'authorities',
-		accessTokenValidity: 'accessTokenValidity',
-		refreshTokenValidity: 'refreshTokenValidity',
-		additionalInformation: 'additionalInformation',
-		autoapprove: 'autoapprove',
-		delFlag: 'delFlag',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		captchaFlag: 'captchaFlag',
-		encFlag: 'encFlag',
-		onlineQuantity: 'onlineQuantity',
-		inputIdTip: 'input id',
-		inputClientIdTip: 'input clientId',
-		inputResourceIdsTip: 'input resourceIds',
-		inputClientSecretTip: 'input clientSecret',
-		inputScopeTip: 'input scope',
-		inputAuthorizedGrantTypesTip: 'input authorizedGrantTypes',
-		inputWebServerRedirectUriTip: 'input webServerRedirectUri',
-		inputAuthoritiesTip: 'input authorities',
-		inputAccessTokenValidityTip: 'input accessTokenValidity',
-		inputRefreshTokenValidityTip: 'input refreshTokenValidity',
-		inputAdditionalInformationTip: 'input additionalInformation',
-		inputAutoapproveTip: 'input autoapprove',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateByTip: 'input createBy',
-		inputUpdateByTip: 'input updateBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 43
src/views/admin/client/i18n/zh-cn.ts

@@ -1,43 +0,0 @@
-export default {
-	client: {
-		index: '#',
-		importsysOauthClientDetailsTip: '导入终端信息表',
-		id: 'ID',
-		clientId: '客户端id',
-		resourceIds: '',
-		clientSecret: '密钥',
-		scope: '域',
-		authorizedGrantTypes: '授权模式',
-		webServerRedirectUri: '回调地址',
-		authorities: '权限',
-		accessTokenValidity: '令牌时效(秒)',
-		refreshTokenValidity: '刷新时效(秒)',
-		additionalInformation: '扩展信息',
-		autoapprove: '自动放行',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '上传时间',
-		updateTime: '更新时间',
-		tenantId: '所属租户',
-		captchaFlag: '验证码开关',
-		encFlag: '前端密码加密',
-		onlineQuantity: '允许同时在线',
-		inputIdTip: '请输入ID',
-		inputClientIdTip: '请输入客户端id',
-		inputResourceIdsTip: '请输入',
-		inputClientSecretTip: '请输入密钥',
-		inputScopeTip: '请输入域',
-		inputAuthorizedGrantTypesTip: '请输入授权模式',
-		inputWebServerRedirectUriTip: '请输入回调地址',
-		inputAuthoritiesTip: '请输入权限',
-		inputAccessTokenValidityTip: '请输入令牌时效',
-		inputRefreshTokenValidityTip: '请输入刷新时效',
-		inputAdditionalInformationTip: '请输入扩展信息',
-		inputAutoapproveTip: '请输入自动放行',
-		inputCreateByTip: '请输入创建人',
-		inputUpdateByTip: '请输入修改人',
-		inputCreateTimeTip: '请输入上传时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入所属租户',
-	},
-};

+ 0 - 63
src/views/admin/dict/i18n/en.ts

@@ -1,63 +0,0 @@
-export default {
-	sysdict: {
-		index: '#',
-		importsysDictTip: 'import SysDict',
-		id: 'id',
-		dictType: 'dictType',
-		description: 'description',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		remarks: 'remarks',
-		systemFlag: 'systemFlag',
-		inputDictTypeTip: 'input dictType',
-		inputDescriptionTip: 'input description',
-		inputCreateByTip: 'input createBy',
-		inputUpdateByTip: 'input updateBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputRemarksTip: 'input remarks',
-		inputSystemFlagTip: 'input systemFlag',
-		inputDelFlagTip: 'input delFlag',
-		inputTenantIdTip: 'input tenantId',
-		dictItem: 'dict item',
-		deleteDisabledTip: 'system data cannot be deleted ',
-	},
-	dictItem: {
-		index: '#',
-		name: 'dict item',
-		importsysDictItemTip: 'import SysDictItem',
-		id: 'id',
-		dictId: 'dictId',
-		itemValue: 'itemValue',
-		label: 'label',
-		dictType: 'dictType',
-		description: 'description',
-		sortOrder: 'sortOrder',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		remarks: 'remarks',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputDictIdTip: 'input dictId',
-		inputItemValueTip: 'input itemValue',
-		inputLabelTip: 'input label',
-		inputDictTypeTip: 'input dictType',
-		inputDescriptionTip: 'input description',
-		inputSortOrderTip: 'input sortOrder',
-		inputCreateByTip: 'input createBy',
-		inputUpdateByTip: 'input updateBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputRemarksTip: 'input remarks',
-		inputDelFlagTip: 'input delFlag',
-		inputTenantIdTip: 'input tenantId',
-		emptyItemsError: 'dict items cannot be empty',
-		labelRequired: 'label cannot be empty',
-		valueRequired: 'value cannot be empty',
-	},
-};

+ 0 - 66
src/views/admin/dict/i18n/zh-cn.ts

@@ -1,66 +0,0 @@
-export default {
-	sysdict: {
-		index: '#',
-		importsysDictTip: '导入字典表',
-		id: '编号',
-		dictType: '字典标识',
-		description: '字典名称',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		remarks: '备注',
-		systemFlag: '配置类型',
-		delFlag: ' delFlag',
-		tenantId: '所属租户',
-		inputIdTip: '请输入编号',
-		inputDictTypeTip: '请输入字典类型',
-		inputDescriptionTip: '请输入描述',
-		inputCreateByTip: '请输入创建人',
-		inputUpdateByTip: '请输入修改人',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputRemarksTip: '请输入备注',
-		inputSystemFlagTip: '请输入字典类型',
-		inputDelFlagTip: '请输入 delFlag',
-		inputTenantIdTip: '请输入所属租户',
-		dictItem: '字典项',
-		deleteDisabledTip: '系统内置数据不能删除',
-	},
-	dictItem: {
-		index: '#',
-		name: '字典项',
-		importsysDictItemTip: '导入字典项',
-		id: '编号',
-		dictId: ' dictId',
-		itemValue: '数据值',
-		label: '标签名',
-		dictType: '类型',
-		description: '描述',
-		sortOrder: '排序',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		remarks: '备注',
-		delFlag: ' delFlag',
-		tenantId: '所属租户',
-		inputIdTip: '请输入编号',
-		inputDictIdTip: '请输入 dictId',
-		inputItemValueTip: '请输入数据值',
-		inputLabelTip: '请输入标签名',
-		inputDictTypeTip: '请输入类型',
-		inputDescriptionTip: '请输入描述',
-		inputSortOrderTip: '请输入排序',
-		inputCreateByTip: '请输入创建人',
-		inputUpdateByTip: '请输入修改人',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputRemarksTip: '请输入备注',
-		inputDelFlagTip: '请输入 delFlag',
-		inputTenantIdTip: '请输入所属租户',
-		emptyItemsError: '字典项不能为空',
-		labelRequired: '标签名不能为空',
-		valueRequired: '数据值不能为空',
-	},
-};

+ 0 - 33
src/views/admin/file/i18n/en.ts

@@ -1,33 +0,0 @@
-export default {
-	file: {
-		index: '#',
-		importsysFileTip: 'import SysFile',
-		id: 'id',
-		fileName: 'fileName',
-		bucketName: 'bucketName',
-		original: 'original',
-		type: 'type',
-		fileSize: 'fileSize',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputidTip: 'input id',
-		inputfileNameTip: 'input fileName',
-		inputbucketNameTip: 'input bucketName',
-		inputoriginalTip: 'input original',
-		inputtypeTip: 'input type',
-		inputfileSizeTip: 'input fileSize',
-		inputcreateByTip: 'input createBy',
-		inputupdateByTip: 'input updateBy',
-		inputcreateTimeTip: 'input createTime',
-		inputupdateTimeTip: 'input updateTime',
-		inputdelFlagTip: 'input delFlag',
-		inputtenantIdTip: 'input tenantId',
-		image: 'image',
-		video: 'video',
-		file: 'file',
-	},
-};

+ 0 - 32
src/views/admin/file/i18n/zh-cn.ts

@@ -1,32 +0,0 @@
-export default {
-	file: {
-		index: '#',
-		importsysFileTip: '导入文件管理表',
-		id: '编号',
-		fileName: '文件名称',
-		bucketName: '桶名称',
-		original: '原文件名',
-		type: '文件类型',
-		fileSize: '文件大小',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '上传时间',
-		updateTime: '更新时间',
-		delFlag: '${field.fieldComment}',
-		tenantId: '所属租户',
-		inputidTip: '请输入编号',
-		inputfileNameTip: '请输入文件名称',
-		inputbucketNameTip: '请输入桶名称',
-		inputoriginalTip: '请输入原文件名',
-		inputtypeTip: '请输入文件类型',
-		inputfileSizeTip: '请输入文件大小',
-		inputcreateByTip: '请输入创建人',
-		inputupdateByTip: '请输入修改人',
-		inputcreateTimeTip: '请输入上传时间',
-		inputupdateTimeTip: '请输入更新时间',
-		inputtenantIdTip: '请输入所属租户',
-		image: '图片',
-		video: '视频',
-		file: '文件',
-	},
-};

+ 0 - 134
src/views/admin/i18n/form.vue

@@ -1,134 +0,0 @@
-<template>
-	<el-dialog :close-on-click-modal="false" width="600" :title="form.id ? $t('common.editBtn') : $t('common.addBtn')" draggable v-model="visible">
-		<el-form :model="form" :rules="dataRules" formDialogRef label-width="90px" ref="dataFormRef" v-loading="loading">
-			<el-form-item :label="t('i18n.name')" prop="name">
-				<el-input :placeholder="t('i18n.inputKeyTip')" v-model="form.name" />
-			</el-form-item>
-			<el-form-item :label="t('i18n.zhCn')" prop="zhCn">
-				<el-input :placeholder="t('i18n.inputZhCnTip')" v-model="form.zhCn" />
-			</el-form-item>
-			<el-form-item :label="t('i18n.en')" prop="en">
-				<el-input :placeholder="t('i18n.inputEnTip')" v-model="form.en" />
-			</el-form-item>
-		</el-form>
-		<template #footer>
-			<span class="dialog-footer">
-				<el-button @click="visible = false">{{ $t('common.cancelButtonText') }}</el-button>
-				<el-button @click="onSubmit" type="primary" :disabled="loading">{{ $t('common.confirmButtonText') }}</el-button>
-			</span>
-		</template>
-	</el-dialog>
-</template>
-
-<script lang="ts" name="SysI18nDialog" setup>
-// 定义子组件向父组件传值/事件
-import { useMessage } from '/@/hooks/message';
-import { addObj, getObj, putObj, validateName, validateZhCn, validateEn } from '/@/api/admin/i18n';
-import { useI18n } from 'vue-i18n';
-import { rule } from '/@/utils/validate';
-
-const emit = defineEmits(['refresh']);
-const { t } = useI18n();
-
-// 定义变量内容
-const dataFormRef = ref();
-const visible = ref(false);
-const loading = ref(false);
-
-// 提交表单数据
-const form = reactive({
-	id: '',
-	name: '',
-	zhCn: '',
-	en: '',
-});
-
-// 定义校验规则
-const dataRules = ref({
-	name: [
-    { validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: 'name不能为空', trigger: 'blur' },
-		{ validator: rule.noChinese, trigger: 'blur' },
-		{
-			validator: (rule: any, value: any, callback: any) => {
-				validateName(rule, value, callback, form.id !== '');
-			},
-			trigger: 'blur',
-		},
-	],
-	zhCn: [
-    { validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: '中文不能为空', trigger: 'blur' },
-		{
-			validator: (rule: any, value: any, callback: any) => {
-				validateZhCn(rule, value, callback, form.id !== '');
-			},
-			trigger: 'blur',
-		},
-	],
-	en: [
-    { validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: '英文不能为空', trigger: 'blur' },
-		{ validator: rule.letter, trigger: 'blur' },
-		{
-			validator: (rule: any, value: any, callback: any) => {
-				validateEn(rule, value, callback, form.id !== '');
-			},
-			trigger: 'blur',
-		},
-	],
-});
-
-// 打开弹窗
-const openDialog = (id: string) => {
-	visible.value = true;
-	form.id = '';
-	// 重置表单数据
-	nextTick(() => {
-		dataFormRef.value?.resetFields();
-	});
-
-	// 获取sysI18n信息
-	if (id) {
-		form.id = id;
-		getsysI18nData(id);
-	}
-};
-
-// 提交
-const onSubmit = async () => {
-	// 立即设置 loading,防止重复点击
-	if (loading.value) return;
-	loading.value = true;
-
-	try {
-		const valid = await dataFormRef.value.validate().catch(() => {});
-		if (!valid) {
-			loading.value = false;
-			return false;
-		}
-
-		form.id ? await putObj(form) : await addObj(form);
-		useMessage().success(t(form.id ? 'common.editSuccessText' : 'common.addSuccessText'));
-		visible.value = false;
-		emit('refresh');
-	} catch (err: any) {
-		useMessage().error(err.msg);
-	} finally {
-		loading.value = false;
-	}
-};
-
-// 初始化表单数据
-const getsysI18nData = (id: string) => {
-	// 获取数据
-	getObj(id).then((res: any) => {
-		Object.assign(form, res.data);
-	});
-};
-
-// 暴露变量
-defineExpose({
-	openDialog,
-});
-</script>

+ 0 - 24
src/views/admin/i18n/i18n/en.ts

@@ -1,24 +0,0 @@
-export default {
-	i18n: {
-		index: '#',
-		importsysI18nTip: 'import SysI18n',
-		id: 'id',
-		name: 'name',
-		zhCn: 'zh-cn',
-		en: 'en',
-		createBy: 'createBy',
-		createTime: 'createTime',
-		updateBy: 'updateBy',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		inputIdTip: 'input id',
-		inputKeyTip: 'input key',
-		inputZhCnTip: 'input zh-cn',
-		inputEnTip: 'input en',
-		inputCreateByTip: 'input createBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateByTip: 'input updateBy',
-		inputUpdateTimeTip: 'input updateTime',
-		inputDelFlagTip: 'input delFlag',
-	},
-};

+ 0 - 24
src/views/admin/i18n/i18n/zh-cn.ts

@@ -1,24 +0,0 @@
-export default {
-	i18n: {
-		index: '#',
-		id: 'id',
-		name: '名称',
-		zhCn: '中文',
-		en: '英文',
-		createBy: '创建人',
-		createTime: '创建时间',
-		updateBy: '修改人',
-		updateTime: '更新时间',
-		delFlag: '删除标记',
-		inputIdTip: '请输入id',
-		inputKeyTip: '请输入key',
-		inputZhCnTip: '请输入中文',
-		inputEnTip: '请输入英文',
-		inputCreateByTip: '请输入创建人',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateByTip: '请输入修改人',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputDelFlagTip: '请输入删除标记',
-		importsysI18nTip: '导入系统表-国际化',
-	},
-};

+ 0 - 167
src/views/admin/i18n/index.vue

@@ -1,167 +0,0 @@
-<template>
-	<div class="layout-padding">
-		<div class="layout-padding-auto layout-padding-view">
-			<el-row class="ml10" v-show="showSearch">
-				<el-form :inline="true" :model="state.queryForm" @keyup.enter="getDataList" ref="queryRef">
-					<el-form-item :label="$t('i18n.name')" prop="name">
-						<el-input :placeholder="t('i18n.inputKeyTip')" style="max-width: 180px" v-model="state.queryForm.name" />
-					</el-form-item>
-					<el-form-item :label="$t('i18n.zhCn')" prop="zhCn">
-						<el-input :placeholder="t('i18n.inputZhCnTip')" style="max-width: 180px" v-model="state.queryForm.zhCn" />
-					</el-form-item>
-					<el-form-item :label="$t('i18n.en')" prop="en">
-						<el-input :placeholder="t('i18n.inputEnTip')" style="max-width: 180px" v-model="state.queryForm.en" />
-					</el-form-item>
-					<el-form-item>
-						<el-button @click="getDataList" formDialogRef icon="search" type="primary">
-							{{ $t('common.queryBtn') }}
-						</el-button>
-						<el-button @click="resetQuery" icon="Refresh">{{ $t('common.resetBtn') }} </el-button>
-					</el-form-item>
-				</el-form>
-			</el-row>
-			<el-row>
-				<div class="mb8" style="width: 100%">
-					<el-button @click="formDialogRef.openDialog()" class="ml10" formDialogRef icon="folder-add" type="primary" v-auth="'sys_i18n_add'">
-						{{ $t('common.addBtn') }}
-					</el-button>
-					<el-button plain @click="handleRefreshCache()" class="ml10" icon="refresh-left" type="primary">
-						{{ $t('common.refreshCacheBtn') }}
-					</el-button>
-					<el-button
-						:disabled="multiple"
-						@click="handleDelete(selectObjs)"
-						class="ml10"
-						formDialogRef
-						icon="Delete"
-						type="primary"
-						v-auth="'sys_i18n_del'"
-					>
-						{{ $t('common.delBtn') }}
-					</el-button>
-
-					<right-toolbar
-						:export="'sys_i18n_export'"
-						@exportExcel="exportExcel"
-						@queryTable="getDataList"
-						class="ml10"
-						style="float: right; margin-right: 20px"
-						v-model:showSearch="showSearch"
-					></right-toolbar>
-				</div>
-			</el-row>
-			<el-table
-				:data="state.dataList"
-				@selection-change="handleSelectionChange"
-				@sort-change="sortChangeHandle"
-				style="width: 100%"
-        row-key="id"
-				v-loading="state.loading"
-				border
-				:cell-style="tableStyle.cellStyle"
-				:header-cell-style="tableStyle.headerCellStyle"
-			>
-				<el-table-column align="center" type="selection" width="40" />
-				<el-table-column :label="t('file.index')" type="index" width="60" />
-				<el-table-column :label="t('i18n.name')" prop="name" show-overflow-tooltip />
-				<el-table-column :label="t('i18n.zhCn')" prop="zhCn" show-overflow-tooltip />
-				<el-table-column :label="t('i18n.en')" prop="en" show-overflow-tooltip />
-				<el-table-column :label="t('i18n.createBy')" prop="createBy" show-overflow-tooltip />
-				<el-table-column :label="t('i18n.createTime')" prop="createTime" show-overflow-tooltip />
-				<el-table-column :label="$t('common.action')" width="150">
-					<template #default="scope">
-						<el-button icon="edit-pen" @click="formDialogRef.openDialog(scope.row.id)" text type="primary" v-auth="'sys_i18n_edit'"
-							>{{ $t('common.editBtn') }}
-						</el-button>
-						<el-button icon="delete" @click="handleDelete([scope.row.id])" text type="primary" v-auth="'sys_i18n_del'">
-							{{ $t('common.delBtn') }}
-						</el-button>
-					</template>
-				</el-table-column>
-			</el-table>
-			<pagination @current-change="currentChangeHandle" @size-change="sizeChangeHandle" v-bind="state.pagination" />
-		</div>
-
-		<!-- 编辑、新增  -->
-		<form-dialog @refresh="getDataList()" ref="formDialogRef" />
-	</div>
-</template>
-
-<script lang="ts" name="systemSysI18n" setup>
-import { BasicTableProps, useTable } from '/@/hooks/table';
-import { delObj, fetchList, refreshCache } from '/@/api/admin/i18n';
-import { useMessage, useMessageBox } from '/@/hooks/message';
-import { useI18n } from 'vue-i18n';
-
-// 引入组件
-const FormDialog = defineAsyncComponent(() => import('./form.vue'));
-const { t } = useI18n();
-// 定义查询字典
-
-// 定义变量内容
-const formDialogRef = ref();
-// 搜索变量
-const queryRef = ref();
-const showSearch = ref(true);
-// 多选变量
-const selectObjs = ref([]) as any;
-const multiple = ref(true);
-
-const state: BasicTableProps = reactive<BasicTableProps>({
-	queryForm: {
-		name: '',
-		zhCn: '',
-		en: '',
-	},
-	pageList: fetchList,
-	descs: ['create_time'],
-});
-
-//  table hook
-const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, downBlobFile, tableStyle } = useTable(state);
-
-// 清空搜索条件
-const resetQuery = () => {
-	// 清空搜索条件
-	queryRef.value.resetFields();
-	// 清空排序规则
-	state.queryForm!.descs = [];
-	state.queryForm!.ascs = [];
-	// 清空多选
-	selectObjs.value = [];
-	getDataList();
-};
-const handleRefreshCache = () => {
-	refreshCache().then(() => {
-		useMessage().success('同步成功');
-	});
-};
-
-// 导出excel
-const exportExcel = () => {
-	downBlobFile('/admin/i18n/export', Object.assign(state.queryForm,{ids:selectObjs}), 'i18n.xlsx');
-};
-
-// 多选事件
-const handleSelectionChange = (objs: { id: string }[]) => {
-	selectObjs.value = objs.map(({ id }) => id);
-	multiple.value = !objs.length;
-};
-
-// 删除操作
-const handleDelete = async (ids: string[]) => {
-	try {
-		await useMessageBox().confirm(t('common.delConfirmText'));
-	} catch {
-		return;
-	}
-
-	try {
-		await delObj(ids);
-		getDataList();
-		useMessage().success(t('common.delSuccessText'));
-	} catch (err: any) {
-		useMessage().error(err.msg);
-	}
-};
-</script>

+ 0 - 22
src/views/admin/log/i18n/en.ts

@@ -1,22 +0,0 @@
-export default {
-    syslog: {
-        index: '#',
-        logType: 'logType',
-        title: 'title',
-        remoteAddr: 'remoteAddr',
-        method: 'method',
-        ua: 'browser',
-        serviceId: 'serviceId',
-        time: 'time',
-        params: 'params',
-        createTime: 'createTime',
-        requestUri: 'requestUri',
-        exception: 'exception',
-        createBy: 'createBy',
-        action: 'action',
-        inputLogTypeTip: 'select logType',
-        inputStartPlaceholderTip: 'Start Time',
-        inputEndPlaceholderTip: 'End TIme',
-        result: 'result'
-    },
-};

+ 0 - 22
src/views/admin/log/i18n/zh-cn.ts

@@ -1,22 +0,0 @@
-export default {
-    syslog: {
-        index: '#',
-        logType: '类型',
-        title: '标题',
-        remoteAddr: 'IP地址',
-        method: '请求方式',
-        ua: '浏览器',
-        serviceId: '客户端',
-        time: '耗时',
-        params: '请求参数',
-        createTime: '请求时间',
-        requestUri: '请求地址',
-        exception: '异常信息',
-        createBy: '操作人',
-        action: '操作',
-        inputLogTypeTip: '请选择类型',
-        inputStartPlaceholderTip: '开始时间',
-        inputEndPlaceholderTip: '结束时间',
-        result: '结果',
-    },
-};

+ 0 - 34
src/views/admin/param/i18n/en.ts

@@ -1,34 +0,0 @@
-export default {
-	param: {
-		index: '#',
-		importsysPublicParamTip: 'import SysPublicParam',
-		publicId: 'publicId',
-		publicName: 'publicName',
-		publicKey: 'publicKey',
-		publicValue: 'publicValue',
-		status: 'status',
-		validateCode: 'validateCode',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		publicType: 'publicType',
-		systemFlag: 'systemFlag',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputpublicIdTip: 'input publicId',
-		inputpublicNameTip: 'input publicName',
-		inputpublicKeyTip: 'input publicKey',
-		inputpublicValueTip: 'input publicValue',
-		inputstatusTip: 'input status',
-		inputvalidateCodeTip: 'input validateCode',
-		inputcreateByTip: 'input createBy',
-		inputupdateByTip: 'input updateBy',
-		inputcreateTimeTip: 'input createTime',
-		inputupdateTimeTip: 'input updateTime',
-		inputpublicTypeTip: 'input publicType',
-		inputsystemFlagTip: 'input systemFlag',
-		inputdelFlagTip: 'input delFlag',
-		inputtenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 32
src/views/admin/param/i18n/zh-cn.ts

@@ -1,32 +0,0 @@
-export default {
-	param: {
-		index: '#',
-		importsysPublicParamTip: '导入公共参数配置表',
-		publicId: '编号',
-		publicName: '名称',
-		publicKey: '键',
-		publicValue: '值',
-		status: '状态',
-		validateCode: '编码',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '创建时间',
-		updateTime: '修改时间',
-		publicType: '类型',
-		systemFlag: '类型',
-		tenantId: '租户ID',
-		inputpublicIdTip: '请输入编号',
-		inputpublicNameTip: '请输入名称',
-		inputpublicKeyTip: '请输入键',
-		inputpublicValueTip: '请输入值',
-		inputstatusTip: '请输入状态',
-		inputvalidateCodeTip: '请输入编码',
-		inputcreateByTip: '请输入创建人',
-		inputupdateByTip: '请输入修改人',
-		inputcreateTimeTip: '请输入创建时间',
-		inputupdateTimeTip: '请输入修改时间',
-		inputpublicTypeTip: '请输入类型',
-		inputsystemFlagTip: '请输入类型',
-		inputtenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 32
src/views/admin/social/i18n/en.ts

@@ -1,32 +0,0 @@
-export default {
-	social: {
-		index: '#',
-		importappSocialDetailsTip: 'import AppSocialDetails',
-		id: 'id',
-		type: 'type',
-		remark: 'remark',
-		appId: 'appId',
-		appSecret: 'appSecret',
-		redirectUrl: 'redirectUrl',
-		ext: 'ext',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputTypeTip: 'input type',
-		inputRemarkTip: 'input remark',
-		inputAppIdTip: 'input appId',
-		inputAppSecretTip: 'input appSecret',
-		inputRedirectUrlTip: 'input redirectUrl',
-		inputExtTip: 'input ext',
-		inputCreateByTip: 'input createBy',
-		inputUpdateByTip: 'input updateBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputDelFlagTip: 'input delFlag',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 32
src/views/admin/social/i18n/zh-cn.ts

@@ -1,32 +0,0 @@
-export default {
-	social: {
-		index: '#',
-		importappSocialDetailsTip: '导入系统社交登录账号表',
-		id: '主鍵',
-		type: '类型',
-		remark: '描述',
-		appId: 'appId',
-		appSecret: 'appSecret',
-		redirectUrl: '回调地址',
-		ext: '拓展字段',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		delFlag: '${field.fieldComment}',
-		tenantId: '所属租户',
-		inputIdTip: '请输入主鍵',
-		inputTypeTip: '请输入类型',
-		inputRemarkTip: '请输入描述',
-		inputAppIdTip: '请输入appId',
-		inputAppSecretTip: '请输入appSecret',
-		inputRedirectUrlTip: '请输入回调地址',
-		inputExtTip: '请输入拓展字段',
-		inputCreateByTip: '请输入创建人',
-		inputUpdateByTip: '请输入修改人',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputDelFlagTip: '请输入${field.fieldComment}',
-		inputTenantIdTip: '请输入所属租户',
-	},
-};

+ 0 - 17
src/views/admin/sysArea/i18n/en.ts

@@ -1,17 +0,0 @@
-export default {
-	area: {
-		index: '#',
-		id: 'id',
-		pid: 'pid',
-		name: 'name',
-		adcode:'adcode',
-		areaType:'areaType',
-		areaSort:'areaSort',
-		hot:'hot',
-		areaStatus:'areaStatus',
-		inputAdCodeByTip: 'input adcode',
-		inputPidByTip: 'input pid',
-		inputNameByTip: 'input name',
-		inputAreaSortByTip: 'input sort',
-	},
-};

+ 0 - 17
src/views/admin/sysArea/i18n/zh-cn.ts

@@ -1,17 +0,0 @@
-export default {
-	area: {
-		index: '#',
-		id: '主键',
-		pid: '父级地区',
-		name: '名称',
-		adcode:'编码',
-		areaType:'类型',
-		areaSort:'排序值',
-		hot:'热门',
-		areaStatus:'有效',
-		inputAdCodeByTip: '请选择编码',
-		inputPidByTip: '请选择父级地区',
-		inputNameByTip: '请输入地区名称',
-		inputAreaSortByTip: '请输入排序值',
-	},
-};

+ 0 - 21
src/views/admin/system/dept/i18n/en.ts

@@ -1,21 +0,0 @@
-export default {
-	sysdept: {
-		name: 'dept name',
-		parentId: 'parent dept',
-		createTime: 'createTime',
-		weight: 'weight',
-		leaderId: 'dept leader',
-		sortOrder: 'sortOrder',
-		inputdeptNameTip: 'input deptName',
-		inputnameTip: 'input deptName',
-		inputparentIdTip: 'select deptName',
-		inputLeaderIdTip: 'input leader',
-		inputsortOrderTip: 'input sortOrder',
-		importTip: 'import dept',
-		addNodeText:'add dept',
-		editNodeText:'edit dept',
-		delNodeText:'delete dept',
-		view: 'tree/table view',
-		tenantNodeErrorText: 'The current node cannot be operated. You need to maintain it in tenant management',
-	},
-};

+ 0 - 21
src/views/admin/system/dept/i18n/zh-cn.ts

@@ -1,21 +0,0 @@
-export default {
-    sysdept: {
-        name: '部门名称',
-        parentId: '上级部门',
-        createTime: '创建时间',
-        weight: '排序',
-        sortOrder: '排序',
-        leaderId: '部门负责人',
-        inputdeptNameTip: '请输入部门名称',
-        inputnameTip: '请输入部门名称',
-        inputLeaderIdTip: '请输入部门领导',
-        inputparentIdTip: '请选择上级部门',
-        inputsortOrderTip: '请输入排序',
-        importTip: '导入部门',
-        addNodeText: '添加部门',
-        editNodeText: '编辑部门',
-        delNodeText: '删除部门',
-        tenantNodeErrorText: '当前节点不可操作,请在租户管理功能中维护',
-        view: '树/表视图'
-    },
-};

+ 0 - 37
src/views/admin/system/menu/i18n/en.ts

@@ -1,37 +0,0 @@
-export default {
-    sysmenu: {
-        index: '#',
-        name: 'menu name',
-        buttonName: 'button name',
-        sortOrder: 'sortOrder',
-        path: 'path',
-        menuType: 'menuType',
-        keepAlive: 'keepAlive',
-        permission: 'permission',
-        inputNameTip: 'input name',
-        parentId: 'parent menu',
-        embedded: 'embedded',
-        param: 'param',
-        component: 'component',
-        visible: 'visible',
-        icon: 'icon',
-        inputMenuIdTip: 'input menuId',
-        inputPermissionTip: 'input permission',
-        inputPathTip: 'input path',
-        inputParentIdTip: 'input parentId',
-        inputIconTip: 'input icon',
-        inputVisibleTip: 'input visible',
-        inputSortOrderTip: 'input sortOrder',
-        inputKeepAliveTip: 'input keepAlive',
-        inputMenuTypeTip: 'input menuType',
-        inputCreateByTip: 'input createBy',
-        inputCreateTimeTip: 'input createTime',
-        inputUpdateByTip: 'input updateBy',
-        inputUpdateTimeTip: 'input updateTime',
-        inputDelFlagTip: 'input delFlag',
-        inputTenantIdTip: 'input tenantId',
-        inputEmbeddedTip: 'input embedded',
-        inputComponentTip: 'input component',
-        deleteDisabledTip: 'menu inclusion subordinates cannot be deleted',
-    },
-};

+ 0 - 31
src/views/admin/system/menu/i18n/zh-cn.ts

@@ -1,31 +0,0 @@
-export default {
-    sysmenu: {
-        index: '#',
-        name: '菜单名称',
-        buttonName: '按钮名称',
-        sortOrder: '排序',
-        path: '路由',
-        menuType: '类型',
-        keepAlive: '缓冲',
-        permission: '权限标识',
-        inputNameTip: '请输入菜单名称',
-        parentId: '上级菜单',
-        embedded: '内嵌',
-        param: '带参',
-        component: '组件',
-        visible: '显示',
-        icon: '图标',
-        inputMenuIdTip: '',
-        inputPermissionTip: '请输入权限标识',
-        inputPathTip: '请输入路由路径',
-        inputParentIdTip: '请选择上级菜单',
-        inputIconTip: '请选择图标',
-        inputVisibleTip: '请选择是否显示',
-        inputSortOrderTip: '请输入排序',
-        inputKeepAliveTip: '请选择是否缓冲',
-        inputMenuTypeTip: '请选择菜单类型',
-        inputEmbeddedTip: '请选择是否内嵌',
-        inputComponentTip: '请输入组件名称',
-        deleteDisabledTip: '菜单包含下级不能删除',
-    },
-};

+ 0 - 28
src/views/admin/system/post/i18n/en.ts

@@ -1,28 +0,0 @@
-export default {
-	post: {
-		index: '#',
-		importPostTip: ' import Post',
-		postId: 'postId',
-		postCode: 'postCode',
-		postName: 'postName',
-		postSort: 'postSort',
-		remark: 'remark',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		createBy: 'createBy',
-		updateTime: 'updateTime',
-		updateBy: 'updateBy',
-		tenantId: 'tenantId',
-		inputpostIdTip: 'input postId',
-		inputpostCodeTip: 'input postCode',
-		inputpostNameTip: 'input postName',
-		inputpostSortTip: 'input postSort',
-		inputremarkTip: 'input remark',
-		inputdelFlagTip: 'input delFlag',
-		inputcreateTimeTip: 'input createTime',
-		inputcreateByTip: 'input createBy',
-		inputupdateTimeTip: 'input updateTime',
-		inputupdateByTip: 'input updateBy',
-		inputtenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 28
src/views/admin/system/post/i18n/zh-cn.ts

@@ -1,28 +0,0 @@
-export default {
-	post: {
-		index: '#',
-		importPostTip: '导入岗位管理',
-		postId: '岗位ID',
-		postCode: '岗位编码',
-		postName: '岗位名称',
-		postSort: '岗位排序',
-		remark: '岗位描述',
-		delFlag: '是否删除  -1:已删除  0:正常',
-		createTime: '创建时间',
-		createBy: '创建人',
-		updateTime: '更新时间',
-		updateBy: '更新人',
-		tenantId: '租户ID',
-		inputpostIdTip: '请输入岗位ID',
-		inputpostCodeTip: '请输入岗位编码',
-		inputpostNameTip: '请输入岗位名称',
-		inputpostSortTip: '请输入岗位排序',
-		inputremarkTip: '请输入岗位描述',
-		inputdelFlagTip: '请输入是否删除  -1:已删除  0:正常',
-		inputcreateTimeTip: '请输入创建时间',
-		inputcreateByTip: '请输入创建人',
-		inputupdateTimeTip: '请输入更新时间',
-		inputupdateByTip: '请输入更新人',
-		inputtenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 23
src/views/admin/system/role/i18n/en.ts

@@ -1,23 +0,0 @@
-export default {
-	sysrole: {
-		index: '#',
-		roleName: 'roleName',
-		inputRoleNameTip: 'input roleName',
-		permissionTip: 'Grant',
-		deleteDisabledTip: 'not allowed to delete',
-		mustCheckOneTip: 'the assign permissions menu must be selected',
-		roleCode: 'roleCode',
-		roleDesc: 'role description',
-		data_authority: 'data authority',
-		createTime: 'createTime',
-		please_enter_a_role_name: 'please enter a role name',
-		please_enter_the_role_Code: 'please enter the role Code',
-		please_enter_the_role_description: 'please enter the role description',
-		menu_authority: 'menu authority',
-		please_select: 'please select',
-		importRoleTip: 'import role',
-		assignPermission: 'Assign Permission',
-		update: 'Update',
-		cancel: 'Cancel',
-	},
-};

+ 0 - 23
src/views/admin/system/role/i18n/zh-cn.ts

@@ -1,23 +0,0 @@
-export default {
-	sysrole: {
-		index: '#',
-		roleName: '角色名称',
-		inputRoleNameTip: '请输入角色名称',
-		permissionTip: '授权',
-		deleteDisabledTip: '角色不允许删除',
-		mustCheckOneTip: '必须选择【分配权限】菜单',
-		roleCode: '角色标识',
-		roleDesc: '角色描述',
-		data_authority: '数据权限',
-		createTime: '创建时间',
-		please_enter_a_role_name: '请输入角色名称',
-		please_enter_the_role_Code: '请输入角色标识',
-		please_enter_the_role_description: '请输入角色描述',
-		menu_authority: '数据权限',
-		please_select: '请选择',
-		importRoleTip: '导入角色',
-		assignPermission: '分配权限',
-		update: '更新',
-		cancel: '取 消',
-	},
-};

+ 0 - 54
src/views/admin/system/tenant/i18n/en.ts

@@ -1,54 +0,0 @@
-export default {
-	tenant: {
-		index: '#',
-		importTenantTip: 'Import Tenant',
-		id: 'Tenant ID',
-		name: 'Tenant Name',
-		code: 'Code',
-		tenantDomain: 'Domain',
-		startTime: 'Start Time',
-		endTime: 'End Time',
-		status: 'Status',
-		delFlag: 'Delete Flag',
-		createBy: 'Creator',
-		updateBy: 'Updater',
-		createTime: 'Create Time',
-		updateTime: 'Update Time',
-		menuId: 'Tenant Package',
-		individuationBtn: 'Customization',
-		userListBtn: 'Users',
-		userListTitle: 'Tenant User List',
-		inviteUserBtn: 'Invite User',
-		inviteUserTitle: 'Invite User to Tenant',
-		username: 'Username',
-		role: 'Role',
-		post: 'Post',
-		dept: 'Department',
-		inviteUserSuccess: 'User invited successfully',
-		inputidTip: 'Please enter tenant ID',
-		inputnameTip: 'Please enter name',
-		inputcodeTip: 'Please enter code',
-		inputtenantDomainTip: 'Please enter domain',
-		inputstartTimeTip: 'Please enter start time',
-		inputendTimeTip: 'Please enter end time',
-		inputstatusTip: 'Please enter status',
-		inputdelFlagTip: 'Please enter delete flag',
-		inputcreateByTip: 'Please enter creator',
-		inputupdateByTip: 'Please enter updater',
-		inputcreateTimeTip: 'Please enter create time',
-		inputupdateTimeTip: 'Please enter update time',
-		inputmenuIdTip: 'Please select tenant package',
-		inputUsernameTip: 'Please enter username',
-		selectUserTip: 'Please search and select user',
-		selectRoleTip: 'Please select a role',
-		selectPostTip: 'Please select a post',
-		selectDeptTip: 'Please select a department',
-		deleteDisabledTip: 'Basic tenant cannot be deleted',
-	},
-	tenantmenu: {
-		name: 'tenantmenu',
-		index: '#',
-		status: 'status',
-		createTime: 'createTime',
-	},
-};

+ 0 - 67
src/views/admin/system/tenant/i18n/zh-cn.ts

@@ -1,67 +0,0 @@
-export default {
-    tenant: {
-        index: '#',
-        importTenantTip: '导入租户',
-        id: '租户id',
-        name: '租户名称',
-        code: '编码',
-        tenantDomain: '域名',
-        startTime: '开始时间',
-        endTime: '结束时间',
-        status: '状态',
-        delFlag: 'delFlag',
-        createBy: '创建人',
-        updateBy: '修改人',
-        createTime: '创建',
-        updateTime: '更新时间',
-        menuId: '租户套餐',
-        individuationBtn: '个性化',
-        userListBtn: '用户',
-        userListTitle: '租户用户列表',
-        inviteUserBtn: '邀请用户',
-        inviteUserTitle: '邀请用户到租户',
-        username: '用户名',
-        role: '角色',
-        post: '岗位',
-        dept: '部门',
-        inviteUserSuccess: '用户邀请成功',
-        inputidTip: '请输入租户id',
-        inputnameTip: '请输入名称',
-        inputcodeTip: '请输入编码',
-        inputtenantDomainTip: '请输入域名',
-        inputstartTimeTip: '请输入开始时间',
-        inputendTimeTip: '请输入结束时间',
-        inputstatusTip: '请输入status',
-        inputdelFlagTip: '请输入delFlag',
-        inputcreateByTip: '请输入创建人',
-        inputupdateByTip: '请输入修改人',
-        inputcreateTimeTip: '请输入创建',
-        inputupdateTimeTip: '请输入更新时间',
-        inputmenuIdTip: '请选择租户套餐',
-        inputUsernameTip: '请输入用户名',
-        selectUserTip: '请搜索并选择用户',
-        selectRoleTip: '请选择一个角色',
-        selectPostTip: '请选择岗位',
-        selectDeptTip: '请选择部门',
-        deleteDisabledTip: '基础租户不允许删除',
-    },
-    tenantmenu: {
-        name: '套餐',
-        index: '#',
-        status: '状态',
-        createTime: '创建',
-    },
-
-    individuation: {
-        websiteName: '网站名称',
-        miniQr: '移动端二维码',
-        logo: '网站图标',
-        footerAuthor: '页脚信息',
-        background: '登录页背景图',
-        inputIndividuationNameTip: '请输入网站名称',
-        inputMiniQrTip: '请输入网站图标',
-        inputLogoTip: '请输入网站Logo',
-        inputFooterAuthorTip: '请输入页脚信息',
-        inputBackgroundTip: '请输入登录页背景图',
-    }
-};

+ 0 - 45
src/views/admin/system/user/i18n/en.ts

@@ -1,45 +0,0 @@
-export default {
-	sysuser: {
-		index: '#',
-		username: 'username',
-		name: 'name',
-		phone: 'phone',
-		post: 'post',
-		role: 'role',
-		lockFlag: 'lockFlag',
-		createTime: 'createTime',
-		password: 'password',
-		dept: 'dept',
-		email: 'email',
-		nickname: 'nickname',
-		inputUsernameTip: 'input username',
-		inputPhoneTip: 'input phone',
-		inputPasswordTip: 'input password',
-		inputNameTip: 'input name',
-		inputEmailTip: 'input email',
-		inputNicknameTip: 'input nickname',
-		importUserTip: 'user import',
-		deleteDisabledTip: 'admin are not allowed to delete',
-		noDataScopeTip: 'no data permissions',
-		passwordBtn: 'password',
-		passwordLength: 'Password length must be between 5 and 20 characters',
-		nameRequired: 'Name cannot be empty',
-		deptRequired: 'Department cannot be empty',
-		roleRequired: 'Role cannot be empty',
-		postRequired: 'Post cannot be empty',
-		phoneRequired: 'Phone cannot be empty',
-		emailFormat: 'Please enter a valid email address',
-		statusRequired: 'Status cannot be empty',
-		usernameRequired: 'Username cannot be empty',
-		usernameLength: 'Username length must be between 5 and 20 characters',
-		passwordRequired: 'Password cannot be empty',
-		selectDept: 'Please select a department',
-		selectRole: 'Please select roles',
-		selectPost: 'Please select posts',
-	},
-	personal: {
-		name: 'personal info',
-		passwordRule: 'The two passwords are inconsistent',
-		passwordScore: 'Password level is too low',
-	},
-};

+ 0 - 45
src/views/admin/system/user/i18n/zh-cn.ts

@@ -1,45 +0,0 @@
-export default {
-	sysuser: {
-		index: '#',
-		username: '用户名',
-		name: '姓名',
-		phone: '手机号',
-		post: '岗位',
-		role: '角色',
-		lockFlag: '启用',
-		createTime: '创建时间',
-		password: '密码',
-		dept: '部门',
-		email: '邮箱',
-		nickname: '昵称',
-		inputUsernameTip: '请输入用户名',
-		inputPhoneTip: '请输入手机号',
-		inputNameTip: '请输入姓名',
-		inputPasswordTip: '请输入密码',
-		inputEmailTip: '请输入邮箱',
-		inputNicknameTip: '请输入昵称',
-		importUserTip: '用户导入',
-		deleteDisabledTip: 'admin 不允许被删除',
-		noDataScopeTip: '没有数据权限',
-		passwordBtn: '密码',
-		passwordLength: '用户密码长度必须介于 5 和 20 之间',
-		nameRequired: '姓名不能为空',
-		deptRequired: '部门不能为空',
-		roleRequired: '角色不能为空',
-		postRequired: '岗位不能为空',
-		phoneRequired: '手机号不能为空',
-		emailFormat: '请输入正确的邮箱地址',
-		statusRequired: '状态不能为空',
-		usernameRequired: '用户名不能为空',
-		usernameLength: '用户名称长度必须介于 5 和 20 之间',
-		passwordRequired: '密码不能为空',
-		selectDept: '请选择所属部门',
-		selectRole: '请选择角色',
-		selectPost: '请选择岗位',
-	},
-	personal: {
-		name: '个人信息',
-		passwordRule: '两次输入密码不一致',
-		passwordScore: '密码等级太低',
-	},
-};

+ 53 - 48
src/views/admin/system/user/personal.vue

@@ -1,7 +1,7 @@
 <template>
 	<el-drawer v-model="visible" :title="$t('personal.name')" size="40%">
 		<el-tabs style="height: 200px" class="demo-tabs">
-			<el-tab-pane label="基本信息" v-loading="loading">
+			<el-tab-pane :label="$t('personal.basicInfo')" v-loading="loading">
 				<template #label>
 					<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
 						<path
@@ -10,7 +10,7 @@
 							d="M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
 						/>
 					</svg>
-					基本信息
+					{{ $t('personal.basicInfo') }}
 				</template>
 				<el-form :model="formData" :rules="ruleForm" label-width="100px" class="mt30" ref="formdataRef">
 					<el-row :gutter="20">
@@ -19,46 +19,46 @@
 								<ImageUpload v-model:imageUrl="formData.avatar" borderRadius="50%">
 									<template #empty>
 										<el-icon><Avatar /></el-icon>
-										<span>请上传头像</span>
+										<span>{{ $t('personal.uploadAvatar') }}</span>
 									</template>
 								</ImageUpload>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="用户名" prop="username">
+							<el-form-item :label="$t('personal.username')" prop="username">
 								<el-input v-model="formData.username" clearable disabled></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="手机" prop="phone">
-								<el-input v-model="formData.phone" placeholder="请输入手机" clearable></el-input>
+							<el-form-item :label="$t('personal.phone')" prop="phone">
+								<el-input v-model="formData.phone" :placeholder="$t('personal.phonePlaceholder')" clearable></el-input>
 							</el-form-item>
 						</el-col>
 
 						<el-col :span="24" class="mb20">
-							<el-form-item label="邮箱" prop="email">
-								<el-input v-model="formData.email" placeholder="请输入邮箱" clearable></el-input>
+							<el-form-item :label="$t('personal.email')" prop="email">
+								<el-input v-model="formData.email" :placeholder="$t('personal.emailPlaceholder')" clearable></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="昵称" prop="nickname">
-								<el-input v-model="formData.nickname" placeholder="请输入昵称" clearable></el-input>
+							<el-form-item :label="$t('personal.nickname')" prop="nickname">
+								<el-input v-model="formData.nickname" :placeholder="$t('personal.nicknamePlaceholder')" clearable></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="姓名" prop="name">
-								<el-input v-model="formData.name" placeholder="请输入姓名" clearable></el-input>
+							<el-form-item :label="$t('personal.realName')" prop="name">
+								<el-input v-model="formData.name" :placeholder="$t('personal.realNamePlaceholder')" clearable></el-input>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
 							<el-form-item>
-								<el-button type="primary" @click="handleSaveUser"> 更新个人信息 </el-button>
+								<el-button type="primary" @click="handleSaveUser">{{ $t('personal.updateInfo') }}</el-button>
 							</el-form-item>
 						</el-col>
 					</el-row>
 				</el-form>
 			</el-tab-pane>
-			<el-tab-pane label="安全信息">
+			<el-tab-pane :label="$t('personal.securityInfo')">
 				<template #label>
 					<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
 						<path
@@ -67,16 +67,16 @@
 							d="M9 12.75 11.25 15 15 9.75m-3-7.036A11.959 11.959 0 0 1 3.598 6 11.99 11.99 0 0 0 3 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285Z"
 						/>
 					</svg>
-					安全信息
+					{{ $t('personal.securityInfo') }}
 				</template>
 				<el-form :model="passwordFormData" :rules="passwordRuleForm" label-width="100px" class="mt30" ref="passwordFormdataRef">
 					<el-row :gutter="20">
 						<el-col :span="24" class="mb20">
-							<el-form-item label="原密码" prop="password">
+							<el-form-item :label="$t('personal.oldPassword')" prop="password">
 								<el-input
 									v-model="passwordFormData.password"
 									:type="showPassword ? 'text' : 'password'"
-									placeholder="请输入密码"
+									:placeholder="$t('personal.oldPasswordPlaceholder')"
 									clearable
 									type="password"
 								>
@@ -92,31 +92,36 @@
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="新密码" prop="newpassword1">
+							<el-form-item :label="$t('personal.newPassword')" prop="newpassword1">
 								<strength-meter
 									v-model="passwordFormData.newpassword1"
 									:minlength="6"
 									:maxlength="16"
-									placeholder="请输入新密码"
+									:placeholder="$t('personal.newPasswordPlaceholder')"
 									@score="passwordScore"
 								></strength-meter>
 								<!--									<el-input v-model="passwordFormData.newpassword1" clearable type="password"></el-input>-->
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
-							<el-form-item label="确认密码" prop="newpassword2">
-								<strength-meter v-model="passwordFormData.newpassword2" :minlength="6" :maxlength="16" placeholder="请重复密码"></strength-meter>
+							<el-form-item :label="$t('personal.confirmPassword')" prop="newpassword2">
+								<strength-meter
+									v-model="passwordFormData.newpassword2"
+									:minlength="6"
+									:maxlength="16"
+									:placeholder="$t('personal.confirmPasswordPlaceholder')"
+								></strength-meter>
 							</el-form-item>
 						</el-col>
 						<el-col :span="24" class="mb20">
 							<el-form-item>
-								<el-button type="primary" @click="handleChangePassword"> 修改密码 </el-button>
+								<el-button type="primary" @click="handleChangePassword">{{ $t('personal.changePassword') }}</el-button>
 							</el-form-item>
 						</el-col>
 					</el-row>
 				</el-form>
 			</el-tab-pane>
-			<el-tab-pane label="第三方账号">
+			<el-tab-pane :label="$t('personal.socialLogin')">
 				<template #label>
 					<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
 						<path
@@ -126,21 +131,21 @@
 						/>
 					</svg>
 
-					社交登录
+					{{ $t('personal.socialLogin') }}
 				</template>
 				<el-table :data="socialList" class="mt10">
-					<el-table-column type="index" label="序号" width="80"></el-table-column>
-					<el-table-column prop="name" label="平台"></el-table-column>
-					<el-table-column label="状态">
+					<el-table-column type="index" :label="$t('personal.index')" width="80"></el-table-column>
+					<el-table-column prop="name" :label="$t('personal.platform')"></el-table-column>
+					<el-table-column :label="$t('personal.status')">
 						<template #default="scope">
-							<el-tag v-if="scope.row.openId"> 已绑定 </el-tag>
-							<el-tag v-else> 未绑定 </el-tag>
+							<el-tag v-if="scope.row.openId">{{ $t('personal.bound') }}</el-tag>
+							<el-tag v-else>{{ $t('personal.unbound') }}</el-tag>
 						</template>
 					</el-table-column>
-					<el-table-column prop="action" label="操作">
+					<el-table-column prop="action" :label="$t('personal.action')">
 						<template #default="scope">
-							<el-button @click="unbinding(scope.row.type)" text type="primary" v-if="scope.row.openId"> 解绑 </el-button>
-							<el-button @click="handleClick(scope.row.type)" text type="primary" v-else> 绑定 </el-button>
+							<el-button @click="unbinding(scope.row.type)" text type="primary" v-if="scope.row.openId">{{ $t('personal.unbind') }}</el-button>
+							<el-button @click="handleClick(scope.row.type)" text type="primary" v-else>{{ $t('personal.bind') }}</el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -190,24 +195,24 @@ const passwordFormData = reactive({
 const formdataRef = ref();
 const passwordFormdataRef = ref();
 
-const ruleForm = reactive({
+const ruleForm = computed(() => ({
 	phone: [
-		{ required: true, message: '手机号不能为空', trigger: 'blur' },
+		{ required: true, message: t('personal.phoneRequired'), trigger: 'blur' },
 		{ validator: rule.validatePhone, trigger: 'blur' },
 	],
 	nickname: [
 		{ validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: '昵称不能为空', trigger: 'blur' },
+		{ required: true, message: t('personal.nicknameRequired'), trigger: 'blur' },
 	],
 	email: [
 		{ validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: '邮箱不能为空', trigger: 'blur' },
+		{ required: true, message: t('personal.emailRequired'), trigger: 'blur' },
 	],
 	name: [
 		{ validator: rule.overLength, trigger: 'blur' },
-		{ required: true, message: '姓名不能为空', trigger: 'blur' },
+		{ required: true, message: t('personal.nameRequired'), trigger: 'blur' },
 	],
-});
+}));
 const validatorPassword2 = (rule: any, value: any, callback: any) => {
 	if (value !== passwordFormData.newpassword1) {
 		callback(new Error(t('personal.passwordRule')));
@@ -223,13 +228,13 @@ const validatorScore = (rule: any, value: any, callback: any) => {
 	}
 };
 
-const passwordRuleForm = reactive({
-	password: [{ required: true, message: '密码不能为空', trigger: 'blur' }],
+const passwordRuleForm = computed(() => ({
+	password: [{ required: true, message: t('personal.passwordRequired'), trigger: 'blur' }],
 	newpassword1: [
 		{
 			min: 6,
 			max: 20,
-			message: '用户密码长度必须介于 6 和 20 之间',
+			message: t('personal.passwordLengthTip'),
 			trigger: 'blur',
 		},
 		{ validator: validatorScore, trigger: 'blur' },
@@ -238,12 +243,12 @@ const passwordRuleForm = reactive({
 		{
 			min: 6,
 			max: 20,
-			message: '用户密码长度必须介于 6 和 20 之间',
+			message: t('personal.passwordLengthTip'),
 			trigger: 'blur',
 		},
 		{ validator: validatorPassword2, trigger: 'blur' },
 	],
-});
+}));
 
 const score = ref(0);
 
@@ -258,7 +263,7 @@ const handleChangePassword = () => {
 		}
 		password(passwordFormData)
 			.then(() => {
-				useMessage().success('修改成功');
+				useMessage().success(t('personal.updateSuccess'));
 				// 需要重新登录
 				// 清除缓存/token等
 				Session.clear();
@@ -284,7 +289,7 @@ const handleSaveUser = () => {
 
 		editInfo(formData.value)
 			.then(() => {
-				useMessage().success('修改成功');
+				useMessage().success(t('personal.updateSuccess'));
 				// 更新上下文的 user信息
 				useUserInfo().setUserInfos();
 			})
@@ -299,12 +304,12 @@ const socialList = ref([] as any);
 const initSocialList = () => {
 	socialList.value = [
 		{
-			name: '企业微信',
+			name: t('personal.wechatWork'),
 			type: SocialLoginEnum.WEIXIN_CP,
 			openId: formData.value.wxCpUserid,
 		},
 		{
-			name: '钉钉办公',
+			name: t('personal.dingtalk'),
 			type: SocialLoginEnum.DINGTALK,
 			openId: formData.value.wxDingUserid,
 		},
@@ -339,7 +344,7 @@ const handleClick = async (thirdpart: SocialLoginEnum) => {
 const unbinding = (type: SocialLoginEnum) => {
 	unbindingUser(type)
 		.then(() => {
-			useMessage().success('解绑成功');
+			useMessage().success(t('personal.unbindSuccess'));
 		})
 		.catch((err) => {
 			useMessage().error(err.msg);

+ 0 - 14
src/views/admin/token/i18n/en.ts

@@ -1,14 +0,0 @@
-export default {
-	systoken: {
-		index: '#',
-		userId: 'userId',
-		username: 'username',
-		clientId: 'clientId',
-		accessToken: 'accessToken',
-		expiresAt: 'expiresAt',
-		inputUsernameTip: 'input Username',
-		offlineBtn: 'offline',
-		offlineConfirmText: 'offline confirm',
-		offlineSuccessText: 'offline success',
-	},
-};

+ 0 - 14
src/views/admin/token/i18n/zh-cn.ts

@@ -1,14 +0,0 @@
-export default {
-	systoken: {
-		index: '#',
-		userId: '用户ID',
-		username: '用户名',
-		clientId: '客户端',
-		accessToken: '令牌',
-		expiresAt: '过期时间',
-		inputUsernameTip: '请输入用户名',
-		offlineBtn: '下线',
-		offlineConfirmText: '确认下线',
-		offlineSuccessText: '下线成功',
-	},
-};

+ 44 - 21
src/views/agent/list/agentPaymentConfigDialog.vue

@@ -1,64 +1,84 @@
 <template>
-	<el-dialog :close-on-click-modal="false" title="配置代理商支付通道" draggable v-model="visible" width="700px">
+	<el-dialog :close-on-click-modal="false" :title="$t('paymentConfig.configAgentPaymentChannel')" draggable v-model="visible" width="700px">
 		<el-form :model="formData" :rules="formRules" label-width="140px" ref="formRef" v-loading="formLoading">
 			<!-- 基本信息(只读) -->
-			<el-divider content-position="left">基本信息</el-divider>
+			<el-divider content-position="left">{{ $t('paymentConfig.basicInfo') }}</el-divider>
 			<el-row :gutter="24">
 				<el-col :span="24" class="mb20">
-					<el-form-item label="通道名称">
+					<el-form-item :label="$t('paymentConfig.channelName')">
 						<el-input v-model="formData.channelName" disabled />
 					</el-form-item>
 				</el-col>
 
 				<el-col :span="24" class="mb20">
-					<el-form-item label="支付类型名称">
+					<el-form-item :label="$t('paymentConfig.paymentTypeName')">
 						<el-input v-model="formData.paymentName" disabled />
 					</el-form-item>
 				</el-col>
 			</el-row>
 
 			<!-- 配置信息 -->
-			<el-divider content-position="left">配置信息</el-divider>
+			<el-divider content-position="left">{{ $t('paymentConfig.configInfo') }}</el-divider>
 			<el-row :gutter="24">
 				<el-col :span="24" class="mb20">
-					<el-form-item label="启用状态" prop="status">
+					<el-form-item :label="$t('paymentConfig.enableStatus')" prop="status">
 						<el-radio-group v-model="formData.status">
-							<el-radio :label="true">启用</el-radio>
-							<el-radio :label="false">禁用</el-radio>
+							<el-radio :label="true">{{ $t('paymentConfig.enable') }}</el-radio>
+							<el-radio :label="false">{{ $t('paymentConfig.disable') }}</el-radio>
 						</el-radio-group>
 					</el-form-item>
 				</el-col>
 
 				<!-- 代收:只显示费率,固定百分比类型 -->
 				<el-col :span="24" class="mb20" v-if="formData.paymentType === 'HARVEST'">
-					<el-form-item label="费率(%)" prop="feeRate">
-						<el-input-number placeholder="请输入费率" v-model="formData.feeRate" :min="0" :max="100" :precision="2" style="width: 100%" />
+					<el-form-item :label="$t('paymentConfig.feeRate')" prop="feeRate">
+						<el-input-number
+							:placeholder="$t('paymentConfig.inputFeeRate')"
+							v-model="formData.feeRate"
+							:min="0"
+							:max="100"
+							:precision="2"
+							style="width: 100%"
+						/>
 					</el-form-item>
 				</el-col>
 
 				<!-- 代付:显示手续费类型选择 -->
 				<template v-if="formData.paymentType === 'PAY'">
 					<el-col :span="24" class="mb20">
-						<el-form-item label="手续费类型" prop="feeType">
+						<el-form-item :label="$t('paymentConfig.feeType')" prop="feeType">
 							<el-radio-group v-model="formData.feeType">
-								<el-radio label="PERCENTAGE">百分比</el-radio>
-								<el-radio label="FIXED">固定</el-radio>
-								<el-radio label="MIXED">百分比+固定</el-radio>
+								<el-radio label="PERCENTAGE">{{ $t('paymentConfig.percentage') }}</el-radio>
+								<el-radio label="FIXED">{{ $t('paymentConfig.fixed') }}</el-radio>
+								<el-radio label="MIXED">{{ $t('paymentConfig.mixed') }}</el-radio>
 							</el-radio-group>
 						</el-form-item>
 					</el-col>
 
 					<!-- 代付:百分比、百分比+固定 显示手续费比例 -->
 					<el-col :span="24" class="mb20" v-if="formData.feeType === 'PERCENTAGE' || formData.feeType === 'MIXED'">
-						<el-form-item label="手续费比例(%)" prop="feeRate">
-							<el-input-number placeholder="请输入手续费比例" v-model="formData.feeRate" :min="0" :max="100" :precision="2" style="width: 100%" />
+						<el-form-item :label="$t('paymentConfig.feeRatePercent')" prop="feeRate">
+							<el-input-number
+								:placeholder="$t('paymentConfig.inputFeeRatePercent')"
+								v-model="formData.feeRate"
+								:min="0"
+								:max="100"
+								:precision="2"
+								style="width: 100%"
+							/>
 						</el-form-item>
 					</el-col>
 
 					<!-- 代付:固定、百分比+固定 显示手续费固定金额 -->
 					<el-col :span="24" class="mb20" v-if="formData.feeType === 'FIXED' || formData.feeType === 'MIXED'">
-						<el-form-item label="手续费固定金额" prop="feeEvery">
-							<el-input-number placeholder="请输入手续费固定金额" v-model="formData.feeEvery" :min="0" :precision="2" style="width: 100%" />
+						<el-form-item :label="$t('paymentConfig.feeFixed')" prop="feeEvery">
+							<el-input-number
+								:placeholder="$t('paymentConfig.inputFeeFixed')"
+								v-model="formData.feeEvery"
+								:min="0"
+								:precision="2"
+								style="width: 100%"
+							/>
 						</el-form-item>
 					</el-col>
 				</template>
@@ -67,8 +87,8 @@
 
 		<template #footer>
 			<span class="dialog-footer">
-				<el-button @click="visible = false">取消</el-button>
-				<el-button @click="handleSubmit" type="primary" :disabled="formLoading">确定</el-button>
+				<el-button @click="visible = false">{{ $t('paymentConfig.cancel') }}</el-button>
+				<el-button @click="handleSubmit" type="primary" :disabled="formLoading">{{ $t('paymentConfig.confirm') }}</el-button>
 			</span>
 		</template>
 	</el-dialog>
@@ -77,6 +97,9 @@
 <script lang="ts" name="AgentPaymentConfigDialog" setup>
 import { editAgentPaymentType } from '/@/api/agent';
 import { useMessage } from '/@/hooks/message';
+import { useI18n } from 'vue-i18n';
+
+const { t } = useI18n();
 
 const emit = defineEmits(['refresh']);
 
@@ -193,7 +216,7 @@ const handleSubmit = async () => {
 			feeEvery: formData.feeEvery,
 		};
 		await editAgentPaymentType(submitData);
-		useMessage().success('配置成功');
+		useMessage().success(t('paymentConfig.configSuccess'));
 		visible.value = false;
 		emit('refresh');
 	} catch (err: any) {

+ 22 - 17
src/views/agent/list/agentPaymentDialog.vue

@@ -10,54 +10,56 @@
 			style="width: 100%"
 			max-height="500"
 		>
-			<el-table-column label="通道名称" prop="channelName" show-overflow-tooltip />
-			<el-table-column label="通道编码" prop="channelCode" show-overflow-tooltip />
-			<el-table-column label="支付类型名称" prop="paymentName" show-overflow-tooltip />
-			<el-table-column label="支付类型代码" prop="paymentCode" show-overflow-tooltip />
-			<el-table-column label="启用状态" prop="status" show-overflow-tooltip>
+			<el-table-column :label="$t('paymentConfig.channelName')" prop="channelName" show-overflow-tooltip />
+			<el-table-column :label="$t('paymentConfig.channelCode')" prop="channelCode" show-overflow-tooltip />
+			<el-table-column :label="$t('paymentConfig.paymentTypeName')" prop="paymentName" show-overflow-tooltip />
+			<el-table-column :label="$t('paymentConfig.paymentTypeCode')" prop="paymentCode" show-overflow-tooltip />
+			<el-table-column :label="$t('paymentConfig.enableStatus')" prop="status" show-overflow-tooltip>
 				<template #default="scope">
 					<el-tag :type="scope.row.status ? 'success' : 'info'">
-						{{ scope.row.status ? '启用' : '禁用' }}
+						{{ scope.row.status ? $t('paymentConfig.enable') : $t('paymentConfig.disable') }}
 					</el-tag>
 				</template>
 			</el-table-column>
 			<!-- 代收:只显示费率 -->
-			<el-table-column v-if="paymentType === 'HARVEST'" label="费率(%)" prop="feeRate" show-overflow-tooltip>
+			<el-table-column v-if="paymentType === 'HARVEST'" :label="$t('paymentConfig.feeRate')" prop="feeRate" show-overflow-tooltip>
 				<template #default="scope">
 					{{ scope.row.feeRate ? scope.row.feeRate.toFixed(2) : '0.00' }}
 				</template>
 			</el-table-column>
 			<!-- 代付:显示手续费类型、手续费比例、手续费固定金额 -->
 			<template v-if="paymentType === 'PAY'">
-				<el-table-column label="手续费类型" prop="feeType" show-overflow-tooltip>
+				<el-table-column :label="$t('paymentConfig.feeType')" prop="feeType" show-overflow-tooltip>
 					<template #default="scope">
-						<el-tag v-if="scope.row.feeType === 'PERCENTAGE'" type="primary">百分比</el-tag>
-						<el-tag v-else-if="scope.row.feeType === 'FIXED'" type="success">固定</el-tag>
-						<el-tag v-else-if="scope.row.feeType === 'MIXED'" type="warning">百分比+固定</el-tag>
+						<el-tag v-if="scope.row.feeType === 'PERCENTAGE'" type="primary">{{ $t('paymentConfig.percentage') }}</el-tag>
+						<el-tag v-else-if="scope.row.feeType === 'FIXED'" type="success">{{ $t('paymentConfig.fixed') }}</el-tag>
+						<el-tag v-else-if="scope.row.feeType === 'MIXED'" type="warning">{{ $t('paymentConfig.mixed') }}</el-tag>
 						<el-tag v-else type="info">-</el-tag>
 					</template>
 				</el-table-column>
-				<el-table-column label="手续费比例(%)" prop="feeRate" show-overflow-tooltip>
+				<el-table-column :label="$t('paymentConfig.feeRatePercent')" prop="feeRate" show-overflow-tooltip>
 					<template #default="scope">
 						{{ scope.row.feeRate ? scope.row.feeRate.toFixed(2) : '0.00' }}
 					</template>
 				</el-table-column>
-				<el-table-column label="手续费固定金额" prop="feeEvery" show-overflow-tooltip>
+				<el-table-column :label="$t('paymentConfig.feeFixed')" prop="feeEvery" show-overflow-tooltip>
 					<template #default="scope">
 						{{ scope.row.feeEvery || 0 }}
 					</template>
 				</el-table-column>
 			</template>
-			<el-table-column label="操作" width="100">
+			<el-table-column :label="$t('common.action')" width="100">
 				<template #default="scope">
-					<el-button icon="Setting" @click="handleConfig(scope.row)" text type="primary" v-auth="'agent_payment_type_edit'">配置 </el-button>
+					<el-button icon="Setting" @click="handleConfig(scope.row)" text type="primary" v-auth="'agent_payment_type_edit'">{{
+						$t('paymentConfig.config')
+					}}</el-button>
 				</template>
 			</el-table-column>
 		</el-table>
 
 		<template #footer>
 			<span class="dialog-footer">
-				<el-button @click="visible = false">关闭</el-button>
+				<el-button @click="visible = false">{{ $t('paymentConfig.close') }}</el-button>
 			</span>
 		</template>
 	</el-dialog>
@@ -69,6 +71,9 @@
 <script lang="ts" name="AgentPaymentDialog" setup>
 import { fetchAgentPaymentTypeList } from '/@/api/agent';
 import { useMessage } from '/@/hooks/message';
+import { useI18n } from 'vue-i18n';
+
+const { t } = useI18n();
 
 // 引入配置弹窗组件
 const ConfigDialog = defineAsyncComponent(() => import('./agentPaymentConfigDialog.vue'));
@@ -93,7 +98,7 @@ const openDialog = (userId: string, type: 'PAY' | 'HARVEST') => {
 	visible.value = true;
 	agentUserId.value = userId;
 	paymentType.value = type;
-	dialogTitle.value = type === 'HARVEST' ? '代理商代收配置' : '代理商代付配置';
+	dialogTitle.value = type === 'HARVEST' ? t('paymentConfig.agentCollectionConfig') : t('paymentConfig.agentPaymentConfig');
 
 	// 加载数据
 	loadPaymentList();

+ 10 - 10
src/views/agent/list/index.vue

@@ -40,22 +40,22 @@
 				<el-table-column align="center" type="selection" width="40" />
 				<el-table-column :label="$t('agentUser.agentId')" prop="userId" show-overflow-tooltip />
 				<el-table-column :label="$t('agentUser.agentName')" prop="agentName" show-overflow-tooltip />
-				<el-table-column label="可用余额" prop="totalAmount" show-overflow-tooltip>
+				<el-table-column :label="$t('agentUser.availableAmount')" prop="totalAmount" show-overflow-tooltip>
 					<template #default="scope">
 						{{ scope.row.availableAmount ? `¥${scope.row.availableAmount.toFixed(2)}` : '¥0.00' }}
 					</template>
 				</el-table-column>
-				<el-table-column label="冻结金额" prop="freezeAmount" show-overflow-tooltip>
+				<el-table-column :label="$t('agentUser.freezeAmount')" prop="freezeAmount" show-overflow-tooltip>
 					<template #default="scope">
 						{{ scope.row.freezeAmount ? `¥${scope.row.freezeAmount.toFixed(2)}` : '¥0.00' }}
 					</template>
 				</el-table-column>
-				<el-table-column label="总提现金额" prop="withdrawnAmount" show-overflow-tooltip>
+				<el-table-column :label="$t('agentUser.withdrawnAmount')" prop="withdrawnAmount" show-overflow-tooltip>
 					<template #default="scope">
 						{{ scope.row.withdrawnAmount ? `¥${scope.row.withdrawnAmount.toFixed(2)}` : '¥0.00' }}
 					</template>
 				</el-table-column>
-				<el-table-column label="结算周期" prop="settlementDays" show-overflow-tooltip>
+				<el-table-column :label="$t('agentUser.settlementDays')" prop="settlementDays" show-overflow-tooltip>
 					<template #default="scope">
 						<el-tag type="info" size="small">T+{{ scope.row.settlementDays || 0 }}</el-tag>
 					</template>
@@ -80,12 +80,12 @@
 						<el-button icon="Key" @click="handleChangePwd(scope.row)" text type="warning" v-auth="'agent_admin'">{{
 							$t('agentUser.changePwdBtn')
 						}}</el-button>
-						<el-button icon="Setting" @click="handleAgentPayment(scope.row, 'HARVEST')" text type="success" v-auth="'agent_payment_type_query'"
-							>代收
-						</el-button>
-						<el-button icon="Setting" @click="handleAgentPayment(scope.row, 'PAY')" text type="warning" v-auth="'agent_payment_type_query'"
-							>代付
-						</el-button>
+						<el-button icon="Setting" @click="handleAgentPayment(scope.row, 'HARVEST')" text type="success" v-auth="'agent_payment_type_query'">{{
+							$t('agentUser.collection')
+						}}</el-button>
+						<el-button icon="Setting" @click="handleAgentPayment(scope.row, 'PAY')" text type="warning" v-auth="'agent_payment_type_query'">{{
+							$t('agentUser.payment')
+						}}</el-button>
 					</template>
 				</el-table-column>
 			</el-table>

+ 0 - 6
src/views/biz/app/appArticle/i18n/en.ts

@@ -1,6 +0,0 @@
-export default {
-	article: {
-		edit: 'edit article',
-		add: 'add article',
-	},
-};

+ 0 - 6
src/views/biz/app/appArticle/i18n/zh-cn.ts

@@ -1,6 +0,0 @@
-export default {
-	article: {
-		edit: '编辑文章',
-		add: '发布文章',
-	},
-};

+ 0 - 15
src/views/biz/app/approle/i18n/en.ts

@@ -1,15 +0,0 @@
-export default {
-	approle: {
-		index: '#',
-		roleName: 'roleName',
-		inputRoleNameTip: 'input roleName',
-		permissionTip: 'grant',
-
-		roleCode: 'roleCode',
-		roleDesc: 'role description',
-		createTime: 'createTime',
-		please_enter_a_role_name: 'please enter a role name',
-		please_enter_the_role_Code: 'please enter the role Code',
-		please_enter_the_role_description: 'please enter the role description',
-	},
-};

+ 0 - 15
src/views/biz/app/approle/i18n/zh-cn.ts

@@ -1,15 +0,0 @@
-export default {
-	approle: {
-		index: '#',
-		roleName: '角色名',
-		inputRoleNameTip: '请输入角色名称',
-		permissionTip: '授权',
-
-		roleCode: '用户标识',
-		roleDesc: '用户描述',
-		createTime: '创建时间',
-		please_enter_a_role_name: '请输入角色名称',
-		please_enter_the_role_Code: '请输入角色标识',
-		please_enter_the_role_description: '请输入角色描述',
-	},
-};

+ 0 - 32
src/views/biz/app/appsocial/i18n/en.ts

@@ -1,32 +0,0 @@
-export default {
-	appsocial: {
-		index: '#',
-		importappSocialDetailsTip: 'import AppSocialDetails',
-		id: 'id',
-		type: 'type',
-		remark: 'remark',
-		appId: 'appId',
-		appSecret: 'appSecret',
-		redirectUrl: 'redirectUrl',
-		ext: 'ext',
-		createBy: 'createBy',
-		updateBy: 'updateBy',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputTypeTip: 'input type',
-		inputRemarkTip: 'input remark',
-		inputAppIdTip: 'input appId',
-		inputAppSecretTip: 'input appSecret',
-		inputRedirectUrlTip: 'input redirectUrl',
-		inputExtTip: 'input ext',
-		inputCreateByTip: 'input createBy',
-		inputUpdateByTip: 'input updateBy',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputDelFlagTip: 'input delFlag',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 32
src/views/biz/app/appsocial/i18n/zh-cn.ts

@@ -1,32 +0,0 @@
-export default {
-	appsocial: {
-		index: '#',
-		importappSocialDetailsTip: '导入系统社交登录账号表',
-		id: '主鍵',
-		type: '类型',
-		remark: '描述',
-		appId: 'appId',
-		appSecret: 'app秘钥',
-		redirectUrl: '回调地址',
-		ext: '拓展字段',
-		createBy: '创建人',
-		updateBy: '修改人',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		delFlag: '${field.fieldComment}',
-		tenantId: '所属租户',
-		inputIdTip: '请输入主鍵',
-		inputTypeTip: '请输入类型',
-		inputRemarkTip: '请输入描述',
-		inputAppIdTip: '请输入appId',
-		inputAppSecretTip: '请输入appSecret',
-		inputRedirectUrlTip: '请输入回调地址',
-		inputExtTip: '请输入拓展字段',
-		inputCreateByTip: '请输入创建人',
-		inputUpdateByTip: '请输入修改人',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputDelFlagTip: '请输入${field.fieldComment}',
-		inputTenantIdTip: '请输入所属租户',
-	},
-};

+ 0 - 25
src/views/biz/app/appuser/i18n/en.ts

@@ -1,25 +0,0 @@
-export default {
-	appuser: {
-		index: '#',
-		username: 'username',
-		name: 'name',
-		phone: 'phone',
-		post: 'post',
-		role: 'role',
-		lockFlag: 'lockFlag',
-		createTime: 'createTime',
-		password: 'password',
-		dept: 'dept',
-		email: 'email',
-		avatar: 'avatar',
-		nickname: 'nickname',
-		inputNameTip: 'input name',
-		inputRoleTip: 'input role',
-		inputUserNameTip: 'input username',
-		inputPasswordTip: 'input Password',
-		inputPhoneTip: 'input phone',
-		inputEmailTip: 'input Email',
-		inputNickNameTip: 'input NickName',
-		importUserTip: 'import user',
-	},
-};

+ 0 - 25
src/views/biz/app/appuser/i18n/zh-cn.ts

@@ -1,25 +0,0 @@
-export default {
-	appuser: {
-		index: '#',
-		username: '用户名',
-		name: '姓名',
-		phone: '手机号',
-		post: '岗位',
-		role: '角色',
-		lockFlag: '状态',
-		createTime: '创建时间',
-		password: '密码',
-		dept: '部门',
-		email: '邮箱',
-		nickname: '昵称',
-		avatar: '头像',
-		inputNameTip: '请输入姓名',
-		inputRoleTip: '请选择角色',
-		inputUserNameTip: '请输入用户名',
-		inputPasswordTip: '请输入密码',
-		inputEmailTip: '请输入邮箱',
-		inputPhoneTip: '请输入手机号码',
-		inputNickNameTip: '请输入昵称',
-		importUserTip: '导入用户',
-	},
-};

+ 0 - 24
src/views/biz/mp/wx-account-fans/i18n/en.ts

@@ -1,24 +0,0 @@
-export default {
-	fans: {
-		index: '#',
-		importwxAccountFansTip: 'import WxAccountFans',
-		id: 'id',
-		openid: 'openid',
-		subscribeStatus: 'subscribeStatus',
-		subscribeTime: 'subscribeTime',
-		nickname: 'nickname',
-		gender: 'gender',
-		language: 'language',
-		country: 'country',
-		province: 'province',
-		isBlack: 'black',
-		city: 'city',
-		tagIds: 'tagIds',
-		headimgUrl: 'headimgUrl',
-		remark: 'remark',
-		wxAccountId: 'wxAccountId',
-		wxAccountName: 'wxAccountName',
-		wxAccountAppid: 'wxAccountAppid',
-		inputNicknameTip: 'input nickname',
-	},
-};

+ 0 - 26
src/views/biz/mp/wx-account-fans/i18n/zh-cn.ts

@@ -1,26 +0,0 @@
-export default {
-	fans: {
-		index: '#',
-		importwxAccountFansTip: '导入微信公众号粉丝表',
-		id: '主键',
-		openid: '用户标识',
-		subscribeStatus: '订阅状态',
-		subscribeTime: '订阅时间',
-		nickname: '昵称',
-		gender: '性别',
-		language: '语言',
-		country: '国家',
-		province: '省份',
-		isBlack: '黑名单',
-		city: '城市',
-		tagIds: '分组',
-		headimgUrl: ' headimgUrl',
-		remark: '备注',
-		wxAccountId: '微信公众号ID',
-		wxAccountName: '微信公众号',
-		wxAccountAppid: '公众号appid',
-		inputremarkTip: '请输入备注',
-		inputTagTip: '请选择分组',
-		inputNicknameTip: '请输入粉丝昵称',
-	},
-};

+ 0 - 18
src/views/biz/mp/wx-account-tag/i18n/en.ts

@@ -1,18 +0,0 @@
-export default {
-	wxAccountTag: {
-		index: '#',
-		importwxAccountTagTip: 'import WxAccountTag',
-		id: 'id',
-		tag: 'tag',
-		wxAccountId: 'wxAccountId',
-		wxAccountName: 'wxAccountName',
-		wxAccountAppid: 'wxAccountAppid',
-		tagId: 'tagId',
-		inputIdTip: 'input id',
-		inputTagTip: 'input tag',
-		inputWxAccountIdTip: 'input wxAccountId',
-		inputWxAccountNameTip: 'input wxAccountName',
-		inputWxAccountAppidTip: 'input wxAccountAppid',
-		inputTagIdTip: 'input tagId',
-	},
-};

+ 0 - 18
src/views/biz/mp/wx-account-tag/i18n/zh-cn.ts

@@ -1,18 +0,0 @@
-export default {
-	wxAccountTag: {
-		index: '#',
-		importwxAccountTagTip: '导入标签管理',
-		id: '主键',
-		tag: '标签',
-		wxAccountId: '微信账号ID',
-		wxAccountName: '微信账号名称',
-		wxAccountAppid: 'appID',
-		tagId: '标签ID',
-		inputIdTip: '请输入主键',
-		inputTagTip: '请输入标签',
-		inputWxAccountIdTip: '请输入微信账号ID',
-		inputWxAccountNameTip: '请输入微信账号名称',
-		inputWxAccountAppidTip: '请输入appID',
-		inputTagIdTip: '请输入标签ID',
-	},
-};

+ 0 - 25
src/views/biz/mp/wx-account/i18n/en.ts

@@ -1,25 +0,0 @@
-export default {
-	account: {
-		index: '#',
-		importwxAccountTip: 'import WxAccount',
-		id: 'id',
-		name: 'name',
-		account: 'account',
-		appid: 'appid',
-		appsecret: 'appsecret',
-		url: 'url',
-		export: 'export',
-		token: 'token',
-		aeskey: 'aeskey',
-		qrUrl: 'qrUrl',
-		inputIdTip: 'input id',
-		inputNameTip: 'input name',
-		inputAccountTip: 'input account',
-		inputAppidTip: 'input appid',
-		inputAppsecretTip: 'input appsecret',
-		inputUrlTip: 'input url',
-		inputTokenTip: 'input token',
-		inputAeskeyTip: 'input aeskey',
-		inputQrUrlTip: 'input qrUrl',
-	},
-};

+ 0 - 25
src/views/biz/mp/wx-account/i18n/zh-cn.ts

@@ -1,25 +0,0 @@
-export default {
-	account: {
-		index: '#',
-		importwxAccountTip: '导入公众号账户表',
-		id: '主键',
-		name: '名称',
-		account: '微信号',
-		appid: 'appid',
-		appsecret: '密钥',
-		export: '导出',
-		url: ' url',
-		token: 'token',
-		aeskey: '加密密钥',
-		qrUrl: '图片',
-		inputIdTip: '请输入主键',
-		inputNameTip: '请输入名称',
-		inputAccountTip: '请输入微信号',
-		inputAppidTip: '请输入appid',
-		inputAppsecretTip: '请输入密钥',
-		inputUrlTip: '请输入 url',
-		inputTokenTip: '请输入token',
-		inputAeskeyTip: '请输入加密密钥',
-		inputQrUrlTip: '请输入图片',
-	},
-};

+ 0 - 64
src/views/biz/mp/wx-fans-msg/i18n/en.ts

@@ -1,64 +0,0 @@
-export default {
-	wxFansMsg: {
-		index: '#',
-		importwxMsgTip: 'import WxMsg',
-		id: 'id',
-		appName: 'appName',
-		appLogo: 'appLogo',
-		wxUserId: 'wxUserId',
-		nickName: 'nickName',
-		headimgUrl: 'headimgUrl',
-		type: 'type',
-		repType: 'repType',
-		repEvent: 'repEvent',
-		repContent: 'repContent',
-		repMediaId: 'repMediaId',
-		repName: 'repName',
-		repDesc: 'repDesc',
-		repUrl: 'repUrl',
-		repHqUrl: 'repHqUrl',
-		content: 'content',
-		repThumbMediaId: 'repThumbMediaId',
-		repThumbUrl: 'repThumbUrl',
-		repLocationX: 'repLocationX',
-		repLocationY: 'repLocationY',
-		repScale: 'repScale',
-		readFlag: 'readFlag',
-		appId: 'appId',
-		openId: 'openId',
-		remark: 'remark',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputAppNameTip: 'input appName',
-		inputAppLogoTip: 'input appLogo',
-		inputWxUserIdTip: 'input wxUserId',
-		inputNickNameTip: 'input nickName',
-		inputHeadimgUrlTip: 'input headimgUrl',
-		inputTypeTip: 'input type',
-		inputRepTypeTip: 'input repType',
-		inputRepEventTip: 'input repEvent',
-		inputRepContentTip: 'input repContent',
-		inputRepMediaIdTip: 'input repMediaId',
-		inputRepNameTip: 'input repName',
-		inputRepDescTip: 'input repDesc',
-		inputRepUrlTip: 'input repUrl',
-		inputRepHqUrlTip: 'input repHqUrl',
-		inputContentTip: 'input content',
-		inputRepThumbMediaIdTip: 'input repThumbMediaId',
-		inputRepThumbUrlTip: 'input repThumbUrl',
-		inputRepLocationXTip: 'input repLocationX',
-		inputRepLocationYTip: 'input repLocationY',
-		inputRepScaleTip: 'input repScale',
-		inputReadFlagTip: 'input readFlag',
-		inputAppIdTip: 'input appId',
-		inputOpenIdTip: 'input openId',
-		inputRemarkTip: 'input remark',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 64
src/views/biz/mp/wx-fans-msg/i18n/zh-cn.ts

@@ -1,64 +0,0 @@
-export default {
-	wxFansMsg: {
-		index: '#',
-		importwxMsgTip: '导入微信消息',
-		id: '主键',
-		appName: '公众号名称',
-		appLogo: '公众号logo',
-		wxUserId: '微信用户ID',
-		nickName: '微信用户昵称',
-		headimgUrl: '微信用户头像',
-		type: '消息分类',
-		repType: '消息类型',
-		repEvent: '事件类型',
-		repContent: '内容',
-		repMediaId: '回复类型',
-		repName: '回复的素材名、视频和音乐的标题',
-		repDesc: '视频和音乐的描述',
-		repUrl: '链接',
-		repHqUrl: '高质量链接',
-		content: '图文消息的内容',
-		repThumbMediaId: '缩略图的媒体id',
-		repThumbUrl: '缩略图url',
-		repLocationX: '地理位置维度',
-		repLocationY: '地理位置经度',
-		repScale: '地图缩放大小',
-		readFlag: '已读标记',
-		appId: '公众号ID',
-		openId: '微信唯一标识',
-		remark: '备注',
-		delFlag: '逻辑删除标记(0:显示;1:隐藏)',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		tenantId: '租户ID',
-		inputIdTip: '请输入主键',
-		inputAppNameTip: '请输入公众号名称',
-		inputAppLogoTip: '请输入公众号logo',
-		inputWxUserIdTip: '请输入微信用户ID',
-		inputNickNameTip: '请输入微信用户昵称',
-		inputHeadimgUrlTip: '请输入微信用户头像',
-		inputTypeTip: '请输入消息分类',
-		inputRepTypeTip: '请输入消息类型',
-		inputRepEventTip: '请输入事件类型',
-		inputRepContentTip: '请输入回复类型文本保存文字、地理位置信息',
-		inputRepMediaIdTip: '请输入回复类型',
-		inputRepNameTip: '请输入回复的素材名、视频和音乐的标题',
-		inputRepDescTip: '请输入视频和音乐的描述',
-		inputRepUrlTip: '请输入链接',
-		inputRepHqUrlTip: '请输入高质量链接',
-		inputContentTip: '请输入图文消息的内容',
-		inputRepThumbMediaIdTip: '请输入缩略图的媒体id',
-		inputRepThumbUrlTip: '请输入缩略图url',
-		inputRepLocationXTip: '请输入地理位置维度',
-		inputRepLocationYTip: '请输入地理位置经度',
-		inputRepScaleTip: '请输入地图缩放大小',
-		inputReadFlagTip: '请输入已读标记(1:是;0:否)',
-		inputAppIdTip: '请输入公众号ID',
-		inputOpenIdTip: '请输入微信唯一标识',
-		inputRemarkTip: '请输入备注',
-		inputDelFlagTip: '请输入逻辑删除标记(0:显示;1:隐藏)',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 36
src/views/biz/pay/channel/i18n/en.ts

@@ -1,36 +0,0 @@
-export default {
-	channel: {
-		index: '#',
-		importpayChannelTip: 'import PayChannel',
-		id: 'id',
-		mchId: 'mchId',
-		channelId: 'channelId',
-		channelName: 'channelName',
-		channelMchId: 'channelMchId',
-		returnUrl: 'returnUrl',
-		notifyUrl: 'notifyUrl',
-		state: 'state',
-		param: 'param',
-		remark: 'remark',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		appId: 'appId',
-		inputIdTip: 'input id',
-		inputMchIdTip: 'input mchId',
-		inputChannelIdTip: 'input channelId',
-		inputChannelNameTip: 'input channelName',
-		inputChannelMchIdTip: 'input channelMchId',
-		inputReturnUrlTip: 'input returnUrl',
-		inputNotifyUrlTip: 'input notifyUrl',
-		inputStateTip: 'input state',
-		inputParamTip: 'input param',
-		inputRemarkTip: 'input remark',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-		inputAppIdTip: 'input appId',
-	},
-};

+ 0 - 36
src/views/biz/pay/channel/i18n/zh-cn.ts

@@ -1,36 +0,0 @@
-export default {
-	channel: {
-		index: '#',
-		importpayChannelTip: '导入支付渠道表',
-		id: '渠道主键ID',
-		mchId: '商户ID',
-		channelId: '渠道类型',
-		channelName: ' 渠道名称',
-		channelMchId: ' 渠道商户ID',
-		returnUrl: '前端回调',
-		notifyUrl: '后端回调',
-		state: '渠道状态',
-		param: '配置参数',
-		remark: '备注',
-		delFlag: ' delFlag',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		tenantId: '租户ID',
-		appId: 'AppID',
-		inputIdTip: '请输入渠道主键ID',
-		inputMchIdTip: '请输入商户ID',
-		inputChannelIdTip: '请输入渠道ID',
-		inputChannelNameTip: '请输入渠道名称',
-		inputChannelMchIdTip: '请输入渠道商户ID',
-		inputReturnUrlTip: '请输入前端回调地址',
-		inputNotifyUrlTip: '请输入后端回调地址',
-		inputStateTip: '请输入商户ID',
-		inputParamTip: '请输入配置参数',
-		inputRemarkTip: '请输入备注',
-		inputDelFlagTip: '请输入 delFlag',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入租户ID',
-		inputAppIdTip: '请输入应用ID',
-	},
-};

+ 0 - 28
src/views/biz/pay/order/i18n/en.ts

@@ -1,28 +0,0 @@
-export default {
-	order: {
-		index: '#',
-		importpayGoodsOrderTip: 'import PayGoodsOrder',
-		goodsOrderId: 'goodsOrderId',
-		goodsId: 'goodsId',
-		goodsName: 'goodsName',
-		amount: 'amount',
-		userId: 'userId',
-		status: 'status',
-		payOrderId: 'payOrderId',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		inputGoodsOrderIdTip: 'input goodsOrderId',
-		inputGoodsIdTip: 'input goodsId',
-		inputGoodsNameTip: 'input goodsName',
-		inputAmountTip: 'input amount',
-		inputUserIdTip: 'input userId',
-		inputStatusTip: 'input status',
-		inputPayOrderIdTip: 'input payOrderId',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 28
src/views/biz/pay/order/i18n/zh-cn.ts

@@ -1,28 +0,0 @@
-export default {
-	order: {
-		index: '#',
-		importpayGoodsOrderTip: '导入商品订单表',
-		goodsOrderId: '商品订单ID',
-		goodsId: '商品ID',
-		goodsName: '商品名称',
-		amount: '金额',
-		userId: '用户ID',
-		status: '订单状态',
-		payOrderId: '支付订单号',
-		delFlag: ' delFlag',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		tenantId: '租户ID',
-		inputGoodsOrderIdTip: '请输入商品订单ID',
-		inputGoodsIdTip: '请输入商品ID',
-		inputGoodsNameTip: '请输入商品名称',
-		inputAmountTip: '请输入金额',
-		inputUserIdTip: '请输入用户ID',
-		inputStatusTip: '请输入订单状态',
-		inputPayOrderIdTip: '请输入支付订单号',
-		inputDelFlagTip: '请输入 delFlag',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 26
src/views/biz/pay/record/i18n/en.ts

@@ -1,26 +0,0 @@
-export default {
-	record: {
-		index: '#',
-		importpayNotifyRecordTip: 'import PayNotifyRecord',
-		id: 'id',
-		notifyId: 'notifyId',
-		request: 'request',
-		response: 'response',
-		orderNo: 'orderNo',
-		httpStatus: 'httpStatus',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		inputIdTip: 'input id',
-		inputNotifyIdTip: 'input notifyId',
-		inputRequestTip: 'input request',
-		inputResponseTip: 'input response',
-		inputOrderNoTip: 'input orderNo',
-		inputHttpStatusTip: 'input httpStatus',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 26
src/views/biz/pay/record/i18n/zh-cn.ts

@@ -1,26 +0,0 @@
-export default {
-	record: {
-		index: '#',
-		importpayNotifyRecordTip: '导入通知记录日志表',
-		id: 'ID',
-		notifyId: '响应ID',
-		request: '请求报文',
-		response: '响应报文',
-		orderNo: '系统订单号',
-		httpStatus: 'http状态',
-		delFlag: 'delFlag',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		tenantId: '租户ID',
-		inputIdTip: '请输入ID',
-		inputNotifyIdTip: '请输入响应ID',
-		inputRequestTip: '请输入请求报文',
-		inputResponseTip: '请输入响应报文',
-		inputOrderNoTip: '请输入系统订单号',
-		inputHttpStatusTip: '请输入http状态',
-		inputDelFlagTip: '请输入delFlag',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 66
src/views/biz/pay/refund/i18n/en.ts

@@ -1,66 +0,0 @@
-export default {
-	refund: {
-		index: '#',
-		importpayRefundOrderTip: 'import PayRefundOrder',
-		refundOrderId: 'refundOrderId',
-		payOrderId: 'payOrderId',
-		channelPayOrderNo: 'channelPayOrderNo',
-		mchId: 'mchId',
-		mchRefundNo: 'mchRefundNo',
-		channelId: 'channelId',
-		payAmount: 'payAmount',
-		refundAmount: 'refundAmount',
-		currency: 'currency',
-		status: 'status',
-		result: 'result',
-		clientIp: 'clientIp',
-		device: 'device',
-		remark: 'remark',
-		channelUser: 'channelUser',
-		username: 'username',
-		channelMchId: 'channelMchId',
-		channelOrderNo: 'channelOrderNo',
-		channelErrCode: 'channelErrCode',
-		channelErrMsg: 'channelErrMsg',
-		extra: 'extra',
-		notifyUrl: 'notifyUrl',
-		param1: 'param1',
-		param2: 'param2',
-		expireTime: 'expireTime',
-		refundSuccTime: 'refundSuccTime',
-		delFlag: 'delFlag',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		tenantId: 'tenantId',
-		inputRefundOrderIdTip: 'input refundOrderId',
-		inputPayOrderIdTip: 'input payOrderId',
-		inputChannelPayOrderNoTip: 'input channelPayOrderNo',
-		inputMchIdTip: 'input mchId',
-		inputMchRefundNoTip: 'input mchRefundNo',
-		inputChannelIdTip: 'input channelId',
-		inputPayAmountTip: 'input payAmount',
-		inputRefundAmountTip: 'input refundAmount',
-		inputCurrencyTip: 'input currency',
-		inputStatusTip: 'input status',
-		inputResultTip: 'input result',
-		inputClientIpTip: 'input clientIp',
-		inputDeviceTip: 'input device',
-		inputRemarkTip: 'input remark',
-		inputChannelUserTip: 'input channelUser',
-		inputUsernameTip: 'input username',
-		inputChannelMchIdTip: 'input channelMchId',
-		inputChannelOrderNoTip: 'input channelOrderNo',
-		inputChannelErrCodeTip: 'input channelErrCode',
-		inputChannelErrMsgTip: 'input channelErrMsg',
-		inputExtraTip: 'input extra',
-		inputNotifyUrlTip: 'input notifyUrl',
-		inputParam1Tip: 'input param1',
-		inputParam2Tip: 'input param2',
-		inputExpireTimeTip: 'input expireTime',
-		inputRefundSuccTimeTip: 'input refundSuccTime',
-		inputDelFlagTip: 'input delFlag',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputTenantIdTip: 'input tenantId',
-	},
-};

+ 0 - 66
src/views/biz/pay/refund/i18n/zh-cn.ts

@@ -1,66 +0,0 @@
-export default {
-	refund: {
-		index: '#',
-		importpayRefundOrderTip: '导入退款订单表',
-		refundOrderId: '退款订单号',
-		payOrderId: '支付订单号',
-		channelPayOrderNo: '渠道支付单号',
-		mchId: ' 商户ID',
-		mchRefundNo: '商户退款单号',
-		channelId: '渠道ID',
-		payAmount: '支付金额',
-		refundAmount: '退款金额',
-		currency: ' 三位货币代码',
-		status: '退款状态',
-		result: '退款结果',
-		clientIp: '客户端IP',
-		device: '设备',
-		remark: '备注',
-		channelUser: ' 渠道用户标识',
-		username: ' 用户姓名',
-		channelMchId: ' 渠道商户ID',
-		channelOrderNo: ' 渠道订单号',
-		channelErrCode: ' 渠道错误码',
-		channelErrMsg: ' 渠道错误描述',
-		extra: ' 特定渠道发起时额外参数',
-		notifyUrl: ' 通知地址',
-		param1: ' 扩展参数1',
-		param2: ' 扩展参数2',
-		expireTime: '订单失效时间',
-		refundSuccTime: '订单退款成功时间',
-		delFlag: ' delFlag',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		tenantId: '租户ID',
-		inputRefundOrderIdTip: '请输入退款订单号',
-		inputPayOrderIdTip: '请输入支付订单号',
-		inputChannelPayOrderNoTip: '请输入渠道支付单号',
-		inputMchIdTip: '请输入商户ID',
-		inputMchRefundNoTip: '请输入商户退款单号',
-		inputChannelIdTip: '请输入渠道ID',
-		inputPayAmountTip: '请输入支付金额',
-		inputRefundAmountTip: '请输入退款金额',
-		inputCurrencyTip: '请输入三位货币代码',
-		inputStatusTip: '请输入退款状态',
-		inputResultTip: '请输入退款结果',
-		inputClientIpTip: '请输入客户端IP',
-		inputDeviceTip: '请输入设备',
-		inputRemarkTip: '请输入备注',
-		inputChannelUserTip: '请输入渠道用户标识',
-		inputUsernameTip: '请输入用户姓名',
-		inputChannelMchIdTip: '请输入渠道商户ID',
-		inputChannelOrderNoTip: '请输入渠道订单号',
-		inputChannelErrCodeTip: '请输入渠道错误码',
-		inputChannelErrMsgTip: '请输入渠道错误描述',
-		inputExtraTip: '请输入特定渠道发起时额外参数',
-		inputNotifyUrlTip: '请输入通知地址',
-		inputParam1Tip: '请输入扩展参数1',
-		inputParam2Tip: '请输入扩展参数2',
-		inputExpireTimeTip: '请输入订单失效时间',
-		inputRefundSuccTimeTip: '请输入订单退款成功时间',
-		inputDelFlagTip: '请输入 delFlag',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputTenantIdTip: '请输入租户ID',
-	},
-};

+ 0 - 57
src/views/biz/pay/trade/i18n/en.ts

@@ -1,57 +0,0 @@
-export default {
-	trade: {
-		index: '#',
-		importpayTradeOrderTip: 'import PayTradeOrder',
-		orderId: 'orderId',
-		channelId: 'channelId',
-		amount: 'amount',
-		currency: 'currency',
-		status: 'status',
-		clientIp: 'clientIp',
-		device: 'device',
-		subject: 'subject',
-		body: 'body',
-		extra: 'extra',
-		channelMchId: 'channelMchId',
-		channelOrderNo: 'channelOrderNo',
-		errCode: 'errCode',
-		errMsg: 'errMsg',
-		param1: 'param1',
-		param2: 'param2',
-		notifyUrl: 'notifyUrl',
-		notifyCount: 'notifyCount',
-		lastNotifyTime: 'lastNotifyTime',
-		expireTime: 'expireTime',
-		paySuccTime: 'paySuccTime',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		inputOrderIdTip: 'input orderId',
-		inputChannelIdTip: 'input channelId',
-		inputAmountTip: 'input amount',
-		inputCurrencyTip: 'input currency',
-		inputStatusTip: 'input status',
-		inputClientIpTip: 'input clientIp',
-		inputDeviceTip: 'input device',
-		inputSubjectTip: 'input subject',
-		inputBodyTip: 'input body',
-		inputExtraTip: 'input extra',
-		inputChannelMchIdTip: 'input channelMchId',
-		inputChannelOrderNoTip: 'input channelOrderNo',
-		inputErrCodeTip: 'input errCode',
-		inputErrMsgTip: 'input errMsg',
-		inputParam1Tip: 'input param1',
-		inputParam2Tip: 'input param2',
-		inputNotifyUrlTip: 'input notifyUrl',
-		inputNotifyCountTip: 'input notifyCount',
-		inputLastNotifyTimeTip: 'input lastNotifyTime',
-		inputExpireTimeTip: 'input expireTime',
-		inputPaySuccTimeTip: 'input paySuccTime',
-		inputCreateTimeTip: 'input createTime',
-		inputUpdateTimeTip: 'input updateTime',
-		inputDelFlagTip: 'input delFlag',
-		inputTenantIdTip: 'input tenantId',
-		refundBtn: 'refund',
-	},
-};

+ 0 - 57
src/views/biz/pay/trade/i18n/zh-cn.ts

@@ -1,57 +0,0 @@
-export default {
-	trade: {
-		index: '#',
-		importpayTradeOrderTip: '导入支付订单表',
-		orderId: ' 支付订单号',
-		channelId: ' 渠道ID',
-		amount: ' 金额 (分)',
-		currency: ' 三位货币代码',
-		status: '支付状态',
-		clientIp: ' 客户端IP',
-		device: ' 设备',
-		subject: ' 商品标题',
-		body: ' 商品描述',
-		extra: ' 特定渠道发起时额外参数',
-		channelMchId: ' 渠道商户ID',
-		channelOrderNo: ' 渠道订单号',
-		errCode: '错误码',
-		errMsg: '错误描述',
-		param1: '扩展参数1',
-		param2: '扩展参数2',
-		notifyUrl: ' 通知地址',
-		notifyCount: '通知次数',
-		lastNotifyTime: '最后一次通知时间',
-		expireTime: '订单失效时间',
-		paySuccTime: '成功时间',
-		createTime: '创建时间',
-		updateTime: '更新时间',
-		delFlag: ' delFlag',
-		tenantId: '租户ID',
-		inputOrderIdTip: '请输入 支付订单号',
-		inputChannelIdTip: '请输入 渠道ID',
-		inputAmountTip: '请输入 支付金额',
-		inputCurrencyTip: '请输入 三位货币代码',
-		inputStatusTip: '请输入支付状态',
-		inputClientIpTip: '请输入 客户端IP',
-		inputDeviceTip: '请输入 设备',
-		inputSubjectTip: '请输入 商品标题',
-		inputBodyTip: '请输入 商品描述信息',
-		inputExtraTip: '请输入 特定渠道发起时额外参数',
-		inputChannelMchIdTip: '请输入 渠道商户ID',
-		inputChannelOrderNoTip: '请输入 渠道订单号',
-		inputErrCodeTip: '请输入 渠道支付错误码',
-		inputErrMsgTip: '请输入 渠道支付错误描述',
-		inputParam1Tip: '请输入 扩展参数1',
-		inputParam2Tip: '请输入 扩展参数2',
-		inputNotifyUrlTip: '请输入 通知地址',
-		inputNotifyCountTip: '请输入通知次数',
-		inputLastNotifyTimeTip: '请输入最后一次通知时间',
-		inputExpireTimeTip: '请输入订单失效时间',
-		inputPaySuccTimeTip: '请输入订单支付成功时间',
-		inputCreateTimeTip: '请输入创建时间',
-		inputUpdateTimeTip: '请输入更新时间',
-		inputDelFlagTip: '请输入 delFlag',
-		inputTenantIdTip: '请输入租户ID',
-		refundBtn: '退款',
-	},
-};

+ 0 - 47
src/views/flow/i18n/en.ts

@@ -1,47 +0,0 @@
-// 定义通用内容
-export default {
-	flow: {
-		allUser: 'all user',
-		end: 'end',
-		initiator: 'initiator',
-		approver: 'approver',
-		carbonCopyRecipient: 'carbonCopy',
-		conditionalBranching: 'conditional',
-		parallelBranch: 'parallel',
-		basicInformation: 'basic information',
-		formDesign: 'form design',
-		processDesign: 'process design',
-		processCheck: 'process check',
-		publish: 'publish',
-		submit: 'submit',
-		checkSuccess: 'check success',
-		checkSubSuccess: 'check success,submit?',
-		checkIng: 'check ing',
-		checkSubIng: 'check ing',
-		logo: 'logo',
-		name: 'name',
-		remark: 'remark',
-		group: 'group',
-		admin: 'admin',
-		groupTips: 'please select a group',
-		emptyComponent: 'please click on the left component and drag it here	',
-		createTime: 'createTime',
-		scopeOfUse: 'scopeOfUse',
-		creationProcess: 'creation process',
-		creationGroup: 'creation group',
-		componentLibrary: 'ComponentLibrary',
-		title: 'title',
-		minLength: 'min length',
-		maxLength: 'max length',
-		regularExpression: 'regularExpression',
-		regularExpressionTip: 'regular expression tip',
-		inputErrorRegularExpressionTip: 'input regular expression tip',
-		defaultTip: 'default',
-		enTitle: 'en title',
-		required: 'required',
-		other: 'other',
-		tips: 'tips',
-		servicePrefix: 'service prefix',
-		servicePrefixTips: 'input tips',
-	},
-};

+ 0 - 47
src/views/flow/i18n/zh-cn.ts

@@ -1,47 +0,0 @@
-// 定义通用内容
-export default {
-	flow: {
-		allUser: '所有人',
-		end: '结束',
-		initiator: '发起人',
-		approver: '审批人',
-		carbonCopyRecipient: '抄送人',
-		conditionalBranching: '条件分支',
-		parallelBranch: '并行分支',
-		basicInformation: '基础信息',
-		formDesign: '表单设计',
-		processDesign: '流程设计',
-		processCheck: '流程检查',
-		publish: '发布',
-		submit: '提交',
-		remark: '备注',
-		group: '分组',
-		groupTips: '请选择分组',
-		admin: '管理员',
-		checkSuccess: '检查成功',
-		checkSubSuccess: '流程检查完成,现在提交?',
-		checkIng: '检查中',
-		checkSubIng: '正在检查流程信息',
-		emptyComponent: '请点击左侧组件拖拽到此处',
-		logo: '图标',
-		name: '名称',
-		createTime: '创建时间',
-		scopeOfUse: '使用范围',
-		creationProcess: '创建流程',
-		creationGroup: '创建分组',
-		componentLibrary: '组件库',
-		title: '标题',
-		enTitle: '英文标题',
-		required: '必填',
-		other: '其他',
-		tips: '提示',
-		minLength: '最小长度',
-		maxLength: '最大长度',
-		regularExpression: '正则表达式',
-		regularExpressionTip: '请输入正则表达式',
-		inputErrorRegularExpressionTip: '请输入正确的正则表达式',
-		defaultTip: '默认',
-		servicePrefix: '服务前缀',
-		servicePrefixTips: '请输入服务前缀',
-	},
-};

+ 0 - 33
src/views/gen/create-table/i18n/en.ts

@@ -1,33 +0,0 @@
-export default {
-   createTable: {
-        index: '#',
-        importcreateTableTip: 'import CreateTable',
-        id: 'id',
-        tableName: 'tableName',
-        comments: 'comments',
-        comment: 'comment',
-        databaseType: 'databaseType',
-        pkPolicy: 'pkPolicy',
-        createUser: 'createUser',
-        createTime: 'createTime',
-        columnInfo: 'columnInfo',
-        tenantId: 'tenantId',
-        inputIdTip: 'input id',
-        inputTableNameTip: 'input tableName',
-        inputCommentsTip: 'input comments',
-        inputCommentTip: 'input comment',
-        inputDatabaseTypeTip: 'input databaseType',
-        inputPkPolicyTip: 'input pkPolicy',
-        inputCreateUserTip: 'input createUser',
-        inputCreateTimeTip: 'input createTime',
-        inputColumnInfoTip: 'input columnInfo',
-        inputTenantIdTip: 'input tenantId',
-        name: 'name',
-        typeName: 'typeName',
-        precision: 'precision',
-        scale: 'scale',
-        defaultValue: 'defaultValue',
-        primary: 'primary',
-        nullable: 'nullable',
-    }
-}

+ 0 - 33
src/views/gen/create-table/i18n/zh-cn.ts

@@ -1,33 +0,0 @@
-export default {
-   createTable: {
-        index: '#',
-        importcreateTableTip: '导入自动创建表管理',
-        id: '主键ID',
-        tableName: '表名称',
-        comments: '表注释',
-        comment: '字段注释',
-        databaseType: '数据库类型',
-        pkPolicy: '主键策略',
-        createUser: '创建人',
-        createTime: '创建时间',
-        columnInfo: '字段信息',
-        tenantId: '租户ID',
-        inputIdTip: '请输入主键ID',
-        inputTableNameTip: '请输入表名称',
-        inputCommentsTip: '请输入表注释',
-        inputCommentTip: '请输入字段注释',
-        inputDatabaseTypeTip: '请输入数据库引擎',
-        inputPkPolicyTip: '请输入主键策略',
-        inputCreateUserTip: '请输入创建人',
-        inputCreateTimeTip: '请输入创建时间',
-        inputColumnInfoTip: '请输入字段信息',
-        inputTenantIdTip: '请输入租户ID',
-        name: '字段名称',
-        typeName: '字段类型',
-        precision: '字段长度',
-        scale: '小数位数',
-        defaultValue: '默认值',
-        primary: '主键',
-        nullable: 'NULL',
-    }
-}

+ 0 - 37
src/views/gen/datasource/i18n/en.ts

@@ -1,37 +0,0 @@
-export default {
-	datasourceconf: {
-		index: '#',
-		importDatasourceConfTip: ' import DatasourceConf',
-		id: 'id',
-		name: 'name',
-		url: 'url',
-		username: 'username',
-		password: 'password',
-		docBtn: 'doc',
-		createTime: 'createTime',
-		updateTime: 'updateTime',
-		delFlag: 'delFlag',
-		tenantId: 'tenantId',
-		dsType: 'dsType',
-		confType: 'confType',
-		dsName: 'dsName',
-		instance: 'instance',
-		port: 'port',
-		host: 'host',
-		inputidTip: 'input id',
-		inputnameTip: 'input name',
-		inputurlTip: 'input url',
-		inputusernameTip: 'input username',
-		inputpasswordTip: 'input password',
-		inputcreateTimeTip: 'input createTime',
-		inputupdateTimeTip: 'input updateTime',
-		inputdelFlagTip: 'input delFlag',
-		inputtenantIdTip: 'input tenantId',
-		inputdsTypeTip: 'input dsType',
-		inputconfTypeTip: 'input confType',
-		inputdsNameTip: 'input dsName',
-		inputinstanceTip: 'input instance',
-		inputportTip: 'input port',
-		inputhostTip: 'input host',
-	},
-};

Неке датотеке нису приказане због велике количине промена