diff --git a/src/components/locales/lang/en.js b/src/components/locales/lang/en.js index addca5c..7d658b1 100644 --- a/src/components/locales/lang/en.js +++ b/src/components/locales/lang/en.js @@ -7,6 +7,8 @@ export default { common: { // Filters name: 'Name', + account: 'OA Account', + accountPlaceholder: 'Please enter OA account', jwcode: 'Homily ID', jwcodePlaceholder: 'Please enter Homily ID', activityName: 'Activity', @@ -19,6 +21,10 @@ export default { refundTypePlaceholder: 'Select refund type', market: 'Region', marketPlaceholder: 'Select region', + position: 'Position', + positionPlaceholder: 'Select position', + roleName: 'Role Name', + roleNamePlaceholder: 'Please enter role name', consumePlatform: 'Consumption Platform', consumePlatformPlaceholder: 'Select consumption platform', rechargePlatform: 'Recharge Platform', @@ -41,18 +47,32 @@ export default { // Buttons search: 'Query', + searchLabel: 'Search', + searchPlaceholder: 'Enter keywords', + searchButton: 'Search', exportExcel: 'Export Excel', viewExportList: 'View Export List', reset: 'Reset', edit: 'Edit', + editPermission: 'Edit Permission', + resetPassword: 'Reset Password', + delete: 'Delete', pass: 'Approve', reject: 'Reject', cancel: 'Cancel', confirm: 'Confirm', submit: 'Submit', + add: 'Add', + addUser: 'Add User', + addRole: 'Add Role', + save: 'Save', + saving: 'Saving...', addActivity: 'Add Activity', addReceive: 'Add Receive', confirmRecharge: 'Confirm Recharge', + batchImport: 'Batch Import', + import: 'Import', + uploadHint: 'Drag file here or click to upload', // Buttons - Date today: 'Today', @@ -79,15 +99,35 @@ export default { // Dialog Titles will: 'Will ', deleteRecord: 'Delete Record!', + deleteTranslationRecord: 'Delete this translation record', deleteActivityRecord: 'Delete this activity record', + noData: 'No data' + , + all: 'All' + }, + + // Permission module + permission: { + warning: 'Warning', + user: 'this user', + changeRoleConfirmContent1: 'Confirm role change?
You are changing the role of [', + changeRoleConfirmContent2: '] from [', + changeRoleConfirmContent3: '] to [', + changeRoleConfirmContent4: ']
After the change, the user’s permissions will be updated to the new role configuration, including data access and functional operations. Please confirm carefully.', + changeRoleSuccessContent1: 'User ', + changeRoleSuccessContent2: ' role has been changed to [', + roleRegionNote: 'This region setting has no practical effect; it is only for branch managers to view roles by region.' }, // Message Group elmessage: { // Common addSuccess: 'Added successfully', + submitFailed: 'Submission failed', searchSuccess: 'Search completed', requestFailed: 'Request failed', + inNetworkError: 'Network error, please try again', + prompt: 'Prompt', jwcodeError: 'Invalid Homily ID', addFailedUnknown: 'Add failed due to an unknown error', addFailed: 'Add failed. Please check your network or contact the administrator', @@ -155,6 +195,40 @@ export default { rechargeFormatError: 'Recharge method format error. Please contact the administrator', getRechargeError: 'Failed to obtain recharge methods. Please try again later', deleteSuccess: 'Deleted successfully', + success: 'Success', + confirmDeleteUser: 'Are you sure you want to delete this user?', + resetPasswordConfirm: 'Confirm reset for this account password?', + resetPasswordDefault: 'After reset, the password will be: 123456. Please notify the user to change it.', + checkAccountFormat: 'Please check OA account format', + deviceLimitReached: 'Device count has reached the limit', + noParentRoleMarket: 'The selected parent role has no associated region', + roleAddSuccess: 'Role {roleName} added successfully', + enableSuccess: 'Enabled successfully', + disableSuccess: 'Disabled successfully', + inputRoleName: 'Please enter role name', + roleNameLengthLimit: 'Role name length should be 2–20 characters', + selectPermissionList: 'Please select permission list', + inputAccount: 'Please enter OA account', + onlyDigits: 'Must be digits', + lengthLimit20: 'Length must not exceed 20 characters', + inputUserName: 'Please enter user name', + inputPosition: 'Please enter position', + inputAtLeastOneMachineCode: 'Please enter at least one machine code', + roleNameDuplicate: 'Role name already exists', + resetPasswordSuccess: 'Password reset successful', + resetPasswordFailed: 'Password reset failed', + noPermissionResetMarket: 'You do not have permission to modify passwords for users in the {market} region', + // Import & Upload + importSuccess: 'Import successful', + importFailed: 'Import failed', + importFailedNetworkOrFormat: 'Import failed. Please check your network or file format', + onlyExcelAllowed: 'Only Excel files are allowed', + fileTooLarge5MB: 'File size cannot exceed 5MB', + fileSelectSuccess: 'File selected successfully', + uploadLimitOne: 'You can upload only one file', + selectFileFirst: 'Please select a file first', + // Plain text validation + onlyPlainText: 'Only plain text is supported; HTML is not allowed', // Export exportSuccess: 'Export successful', @@ -173,9 +247,24 @@ export default { // Common List Fields common_list: { id: 'No.', + originalChinese: 'Original Chinese', + english: 'English', + thai: 'Thai', + chineseTraditional: 'Traditional Chinese', + malay: 'Malay', + vietnamese: 'Vietnamese', + translated: 'Translated', + untranslated: 'Untranslated', + account: 'OA Account', name: 'Name', jwcode: 'Homily ID', market: 'Region', + position: 'Position', + roleName: 'Role Name', + rolePermission: 'Role Permission', + departmentPermission: 'Department Permission', + parentRole: 'Parent Role', + permissionScope: 'Permission Scope', sumGold: 'Total Coins', payPlatform: 'Platform', type: 'Update Type', @@ -211,6 +300,16 @@ export default { consumeTime: 'Consumption Time', refundTime: 'Refund Time', updateTime: 'Update Time', + activityStatus: { + notStarted: 'Not Started', + inProgress: 'In Progress', + ended: 'Ended', + }, + operation: 'Operation', + configTime: 'Configuration Time', + status: 'Status', + enable: 'Enable', + disable: 'Disable', }, // Common Export Fields @@ -227,6 +326,39 @@ export default { // Add Form Fields common_add: { jwcode: 'Homily ID', + addUserPermission: 'Add User Permission', + editUserPermission: 'Edit User Permission', + account: 'OA Account', + accountPlaceholder: 'Please enter OA account', + userName: 'User Name', + userNamePlaceholder: 'Please enter user name', + roleName: 'Role Name', + roleNamePlaceholder: 'Please select role name', + parentRole: 'Parent Role', + noParentRole: 'No Parent Role', + permissionList: 'Permission List', + machineCode: 'Machine Code', + machineCodePlaceholder: 'Please enter machine code', + remark: 'Remark', + addRole: 'Add Role', + editRole: 'Edit Role', + permissionDetails: 'Permission Details', + channelName: 'Channel Name', + channelPlaceholder: 'Please select channel', + originalChinese: 'Original Chinese', + originalChinesePlaceholder: 'Enter original Chinese', + english: 'English', + englishPlaceholder: 'Enter English', + thai: 'Thai', + thaiPlaceholder: 'Enter Thai', + chineseTraditional: 'Traditional Chinese', + chineseTraditionalPlaceholder: 'Enter Traditional Chinese', + malay: 'Malay', + malayPlaceholder: 'Enter Malay', + vietnamese: 'Vietnamese', + vietnamesePlaceholder: 'Enter Vietnamese', + addTranslation: 'Add Translation', + editTranslation: 'Edit Translation', activity: 'Activity', activityPlaceholder: 'Please enter activity name', businessBelong: 'Performance Belonging', diff --git a/src/components/locales/lang/zh-CN.js b/src/components/locales/lang/zh-CN.js index 9b19908..c9af7c9 100644 --- a/src/components/locales/lang/zh-CN.js +++ b/src/components/locales/lang/zh-CN.js @@ -15,12 +15,18 @@ export default { activityNameChoose: "请选择活动方式", goodsName: "商品名称", goodsNamePlaceholder: "请输入商品名称", + account: "OA号", + accountPlaceholder: "请输入OA号", payModel: "支付方式", payModelPlaceholder: "请选择支付方式", refundType: "退款类型", refundTypePlaceholder: "请选择退款类型", market: "所属地区", marketPlaceholder: "请选择所属地区", + position: "职位名称", + positionPlaceholder: "请选择职位名称", + roleName: "角色名称", + roleNamePlaceholder: "请输入角色名称", refundCurrency: "退款币种", refundCurrencyPlaceholder: "请选择退款币种", refundMethod: "退款途径", @@ -70,12 +76,18 @@ export default { endTime: "结束时间", // 按钮组 search: "查询", + searchLabel: "搜索", + searchPlaceholder: "请输入搜索内容", + searchButton: "查询", exportExcel: "导出Excel", viewExportList: "查看导出列表", reset: "重置", audit: "审核", refund: "退款", edit: "编辑", + editPermission: "修改权限", + resetPassword: "重置密码", + delete: "删除", withdraw: "撤回", pass: "通过", close: "关闭", @@ -83,10 +95,18 @@ export default { cancel: "取消", confirm: "确认", submit: "提交", + add: "添加", + addUser: "新增用户", + addRole: "新增角色", + save: "保存", + saving: "保存中...", addActivity: "新增活动", modify: "修改", addReceive: "添加收款", confirmRecharge: "确认充值", + batchImport: "批量导入", + import: "导入", + uploadHint: "将文件拖到此处,或点击上传", pendingFee: "待填写手续费", viewRejectReason: "查看驳回理由", // 按钮组-日期 @@ -127,19 +147,38 @@ export default { // 对话框标题 will: "将要", deleteRecord: "删除该翻译记录!", + deleteTranslationRecord: "删除该翻译记录", deleteActivityRecord: "删除该活动数据", willRefundOrder: "将要对该订单退款!", willRecallOrder: "将要撤回该订单!", // 市场 markets: { - headquarter: "总部", + headquarters: "总部", } + , + noData: "暂无数据" + , + all: "全部" + }, + + // 权限模块 + permission: { + warning: "警告", + user: "该用户", + changeRoleConfirmContent1: "确认修改权限角色?
您正在将【", + changeRoleConfirmContent2: "】的权限角色从【", + changeRoleConfirmContent3: "】修改为【", + changeRoleConfirmContent4: "】
变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。", + changeRoleSuccessContent1: "用户", + changeRoleSuccessContent2: "的权限角色已更改为【", + roleRegionNote: "此地区无实际意义,仅用于各分部负责人查看其地区角色" }, // 提示信息组 elmessage: { // 通用 addSuccess: "添加成功", // 大写是添加成功,小写是新增 addsuccess: "新增成功", + prompt: "提示", editSuccess: "编辑成功", withdrawSuccess: "撤回成功", dataException: "数据异常", @@ -154,6 +193,7 @@ export default { customerSuccess: "客户信息查询成功", customerNotExist: "客户不存在", addFailedUnknown: "添加失败,未知错误", + addUserPermissionFailed: "添加用户权限失败", addFailed: "添加失败,请检查网络连接或联系管理员", queryFailed: "查询失败,请检查网络连接或精网号是否正确", refundTypeError: "退款类型数据格式错误,请联系管理员", @@ -164,6 +204,42 @@ export default { inNetworkError: "网络异常,请重试", adminInfoLoadFailed: "管理员信息加载异常,请稍后重试", deleteSuccess: "删除成功", + success: "成功", + confirmDeleteUser: "确定将此用户删除吗?", + resetPasswordConfirm: "确认重置该账号密码?", + resetPasswordDefault: "重置后密码为: 123456,请通知用户及时修改", + checkAccountFormat: "请检查OA号格式", + deviceLimitReached: "设备数量已达上限", + noParentRoleMarket: "该上级角色无归属地区", + roleAddSuccess: "角色{roleName}添加成功", + enableSuccess: "启用成功", + disableSuccess: "禁用成功", + inputRoleName: "请输入角色名称", + roleNameLengthLimit: "角色名称长度应在2-20个字符之间", + selectPermissionList: "请选择权限列表", + inputAccount: "请输入OA号", + onlyDigits: "必须为数字", + lengthLimit20: "长度不能超过20位", + inputUserName: "请输入用户名", + inputPosition: "请输入职位", + inputAtLeastOneMachineCode: "请至少输入一个机器码", + roleNameDuplicate: "角色名重复", + resetPasswordSuccess: "重置密码成功", + resetPasswordFailed: "重置密码失败", + noPermissionResetMarket1: "您没有修改", + noPermissionResetMarket2: "地区的用户密码的权限", + selectRoleName: "请选择角色名称", + // 导入与上传 + importSuccess: "导入成功", + importFailed: "导入失败", + importFailedNetworkOrFormat: "导入失败,请检查网络或文件格式", + onlyExcelAllowed: "只能上传Excel文件", + fileTooLarge5MB: "文件大小不能超过5MB", + fileSelectSuccess: "文件选择成功", + uploadLimitOne: "最多只能上传一个文件", + selectFileFirst: "请先选择要导入的文件", + // 纯文本校验 + onlyPlainText: "译文仅支持纯文本,不支持HTML标签", // 校验精网号,充值等输入 checkInputContent: "请检查输入内容", permanentAndFreeNoZero: "永久金币和免费金币不能同时为0", @@ -291,14 +367,30 @@ export default { // 权限 noPermissionText: "您暂无该页面操作权限,请联系管理员", permissionPrompt: "权限提示", + noRoleAssigned: "暂未分配角色", + unknownRole: "未知角色", }, // 通用列表字段组 common_list: { id: "序号", + originalChinese: "原始中文", + english: "英文", + thai: "泰文", + chineseTraditional: "繁体中文", + malay: "马来文", + vietnamese: "越南文", + translated: "已翻译", + untranslated: "未翻译", + account: "OA号", name: "姓名", jwcode: "精网号", market: "所属地区", + position: "职位", + roleName: "角色名称", + departmentPermission: "部门权限", + parentRole: "上级角色", + permissionScope: "权限范围", gift: "礼物", sumGold: "金币总数", payPlatform: "平台信息", @@ -387,6 +479,16 @@ export default { payVoucher: "支付凭证", refund: "退款", normal: "正常", + activityStatus: { + notStarted: "未开始", + inProgress: "进行中", + ended: "已结束" + }, + operation: "操作", + configTime: "配置时间", + status: "状态", + enable: "启用", + disable: "禁用", }, // 通用导出字段组 common_export: { @@ -403,6 +505,40 @@ export default { common_add: { jwcode: "精网号", jwcodePlaceholder: "请输入精网号", + originalChinese: "原始中文", + originalChinesePlaceholder: "请输入原始中文", + english: "英文", + englishPlaceholder: "请输入英文", + thai: "泰文", + thaiPlaceholder: "请输入泰文", + chineseTraditional: "繁体中文", + chineseTraditionalPlaceholder: "请输入繁体中文", + malay: "马来文", + malayPlaceholder: "请输入马来文", + vietnamese: "越南文", + vietnamesePlaceholder: "请输入越南文", + addTranslation: "新增翻译", + editTranslation: "编辑翻译", + // 用户与角色管理 + addUserPermission: "新增用户权限", + editUserPermission: "编辑用户权限", + account: "OA号", + accountPlaceholder: "请输入OA号", + userName: "用户名", + userNamePlaceholder: "请输入用户名", + roleName: "角色名称", + roleNamePlaceholder: "请选择角色名称", + parentRole: "上级角色", + noParentRole: "无上级角色", + permissionList: "权限列表", + machineCode: "机器码", + machineCodePlaceholder: "请输入机器码", + remark: "备注", + addRole: "新增角色", + editRole: "编辑角色", + permissionDetails: "权限详情", + channelName: "频道名称", + channelPlaceholder: "请选择频道", customerName: "客户姓名", customerNamePlaceholder: "请输入客户姓名", rejectReason: "驳回理由", diff --git a/src/views/activityManage/activity.vue b/src/views/activityManage/activity.vue index 16ed76a..92c74a4 100644 --- a/src/views/activityManage/activity.vue +++ b/src/views/activityManage/activity.vue @@ -59,10 +59,7 @@ @@ -167,8 +164,15 @@ import _ from 'lodash' import { useI18n } from 'vue-i18n'; const {t} = useI18n(); +const getActivityStatusText = (status) => { + if (status === '0') return t('common_list.activityStatus.notStarted') + if (status === '1') return t('common_list.activityStatus.inProgress') + if (status === '2') return t('common_list.activityStatus.ended') + return status +} + // 活动名称正则表达式 -const activityNameReg = /^[\u4e00-\u9fa5a-zA-Z0-9,。!?、;:“”()‘’《》【】{}——~,.!?:;'--()""\[\]_&+=]+$/; +const activityNameReg = /^[\\u4e00-\\u9fa5a-zA-Z0-9,。!?、;:“”()‘’《》【】{}——~,.!?:;'--()\"\"\\[\\]_&+=]+$/; // 为什么一定要两个--才能成功????????? const tableData = ref([]) const pagination = ref({ diff --git a/src/views/language/languageTranslate.vue b/src/views/language/languageTranslate.vue index 113f471..db4c273 100644 --- a/src/views/language/languageTranslate.vue +++ b/src/views/language/languageTranslate.vue @@ -3,13 +3,13 @@
- 搜索: - + {{ t('common.searchLabel') }}: +
- 搜索 - 重置 + {{ t('common.searchButton') }} + {{ t('common.reset') }}
@@ -17,20 +17,20 @@
- 添加 + {{ t('common.add') }} - 批量导入 + {{ t('common.batchImport') }}
- + - + - + - + - + - + - + - + - + @@ -159,54 +159,54 @@ @cancel="handleDeleteCancel" @close="handleDeleteClose" /> - - - - + + + - - + + - - + + - - + + - - + + - - + + - + -
将文件拖到此处,或点击上传
+
{{ t('common.uploadHint') }}
@@ -307,7 +307,7 @@ const getTranslationList = async () => { } } catch (error) { console.error('获取翻译列表失败:', error) - ElMessage.error('获取数据失败') + ElMessage.error(t('elmessage.requestFailed')) } } @@ -352,7 +352,7 @@ const getMenuTree = async function () { } catch (error) { console.error('菜单数据请求失败:', error) // return { code: 500, msg: '获取菜单失败' } - ElMessage.error('网络异常') + ElMessage.error(t('elmessage.inNetworkError')) adminStore.clearState() } // console.log('1') @@ -367,7 +367,7 @@ const handleSave = async () => { const fields = ['english', 'thai', 'chineseTraditional', 'malay', 'vietnamese'] for (const field of fields) { if (editForm.value[field] && /<[^>]*>/.test(editForm.value[field])) { - ElMessage.error('译文仅支持纯文本,不支持HTML标签') + ElMessage.error(t('elmessage.onlyPlainText')) saveLoading.value = false // 校验失败,恢复按钮状态 return } @@ -384,7 +384,7 @@ const handleSave = async () => { await getMenuTree() if (res.code === 200) { - ElMessage.success(editForm.value.id ? '编辑成功' : '添加成功') + ElMessage.success(editForm.value.id ? t('elmessage.editSuccess') : t('elmessage.addSuccess')) showEditDialog.value = false // getTranslationList() @@ -394,14 +394,14 @@ const handleSave = async () => { }, 500) } else if (res.code === 0) { // 处理后端返回的错误信息 - ElMessage.error(res.msg || '操作失败') + ElMessage.error(res.msg || t('elmessage.operationFailed')) } else { // 处理其他错误码 - ElMessage.error(res.msg || '操作失败') + ElMessage.error(res.msg || t('elmessage.operationFailed')) } } catch (error) { console.error('保存失败:', error) - ElMessage.error('保存失败') + ElMessage.error(t('elmessage.submitFailed')) } finally { // 无论成功还是失败,都恢复按钮状态 saveLoading.value = false @@ -425,7 +425,7 @@ const handleDeleteConfirm = async () => { // 点击删除后,刷新菜单树 await getMenuTree() if (res.code === 200) { - ElMessage.success('删除成功') + ElMessage.success(t('elmessage.deleteSuccess')) // getTranslationList() // 触发页面刷新以重新加载数据 setTimeout(() => { @@ -434,7 +434,7 @@ const handleDeleteConfirm = async () => { } } catch (error) { console.error('删除失败:', error) - ElMessage.error('删除失败') + ElMessage.error(t('elmessage.operationFailed')) } finally { showDeleteDialog.value = false currentDeleteRow.value = null @@ -465,28 +465,28 @@ const handleFileChange = (file) => { // 验证文件类型 if (file.raw.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && file.raw.type !== 'application/vnd.ms-excel') { - ElMessage.error('只能上传Excel文件') + ElMessage.error(t('elmessage.onlyExcelAllowed')) return } // 验证文件大小(限制为5MB) if (file.raw.size > 5 * 1024 * 1024) { - ElMessage.error('文件大小不能超过5MB') + ElMessage.error(t('elmessage.fileTooLarge5MB')) return } // 存储文件 uploadFile.value = file.raw - ElMessage.success('文件选择成功') + ElMessage.success(t('elmessage.fileSelectSuccess')) } // 添加文件超出限制的处理函数 const handleExceed = (files, fileList) => { - ElMessage.warning('最多只能上传一个文件'); + ElMessage.warning(t('elmessage.uploadLimitOne')); }; // 导入处理 const handleImport = async () => { if (!uploadFile.value) { - ElMessage.warning('请先选择要导入的文件') + ElMessage.warning(t('elmessage.selectFileFirst')) return } @@ -506,7 +506,7 @@ const handleImport = async () => { }) if (res.code === 200) { - ElMessage.success(`导入成功`) + ElMessage.success(t('elmessage.importSuccess')) // 刷新菜单树(与保存、删除操作保持一致) await getMenuTree() // 触发页面刷新以重新加载数据 @@ -518,11 +518,11 @@ const handleImport = async () => { // 清空上传文件 uploadFile.value = null } else { - ElMessage.error(res.msg || '导入失败') + ElMessage.error(res.msg || t('elmessage.importFailed')) } } catch (error) { console.error('导入失败:', error) - ElMessage.error('导入失败,请检查网络或文件格式') + ElMessage.error(t('elmessage.importFailedNetworkOrFormat')) } finally { importLoading.value = false } @@ -624,4 +624,4 @@ onMounted(() => { width: 100%; height: 180px; } - \ No newline at end of file + diff --git a/src/views/permissions/rolePermission.vue b/src/views/permissions/rolePermission.vue index 4e8fa09..b904b35 100644 --- a/src/views/permissions/rolePermission.vue +++ b/src/views/permissions/rolePermission.vue @@ -11,9 +11,11 @@ const adminStore = useAdminStore(); const { adminData, menuTree } = storeToRefs(adminStore); import { permissionMapping, findMenuById } from "@/utils/menuTreePermission.js" import { tr } from 'element-plus/es/locales.mjs' +import { useI18n } from 'vue-i18n' // 表单验证ref const Ref = ref(null) +const { t } = useI18n() const roleData = ref([]) const roleTotal = ref(100) const treeRef = ref(null) @@ -37,10 +39,10 @@ const addRole = ref({ market: '' }) const addRoleMarket = ref([]) -const channelList = ref(['全部']) +const channelList = ref([t('common.all')]) const getRoleList = async function (val) { if (!findMenuById(menuTree.value, permissionMapping.view_role_information)) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } try { @@ -173,7 +175,7 @@ function processTreeData(data) { const handleAddRole = async function () { if (!findMenuById(menuTree.value, permissionMapping.add_role_information)) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } try { @@ -182,7 +184,7 @@ const handleAddRole = async function () { if (valid) { resolve(); // 验证通过,继续执行后续代码 } else { - reject(new Error('请检查并完善表单信息')); // 验证失败,抛出错误 + reject(new Error(t('elmessage.checkFormInfo'))); // 验证失败,抛出错误 } }); }); @@ -203,7 +205,7 @@ const handleAddRole = async function () { } }) if (res.code === 200) { - ElMessage.success('角色' + addRole.value.roleName + '添加成功') + ElMessage.success(t('elmessage.roleAddSuccess', { roleName: addRole.value.roleName })) console.log('成功了,看看addRole', addRole.value) console.log('提交的权限ID列表:', finalCheckedKeys) closePermissionAddVisible() @@ -262,7 +264,7 @@ const getLists = async function () { addRole.value.market = '' } } else { - ElMessage.error('该上级角色无归属地区') + ElMessage.error(t('elmessage.noParentRoleMarket')) console.log('该上级角色无归属地区') } @@ -417,7 +419,7 @@ const showMenuTree = (treeData, roleName) => { Rolecheckedkeys.value = collectIds(treeData) console.log('Rolecheckedkeys', Rolecheckedkeys.value) - currentRoleName.value = roleName || '权限详情' + currentRoleName.value = roleName || t('common_add.permissionDetails') menuTreeVisible.value = true; } @@ -525,7 +527,7 @@ const permissionEditRoleInit = async function (row) { // 编辑角色提交 const permissionEditRole = async function () { if (!findMenuById(menuTree.value, permissionMapping.edit_role_information)) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermission')) return } try { @@ -534,7 +536,7 @@ const permissionEditRole = async function () { if (valid) { resolve(); } else { - reject(new Error('请检查并完善表单信息')); + reject(new Error(t('elmessage.checkFormInfo'))); } }); }); @@ -562,13 +564,13 @@ const permissionEditRole = async function () { console.log('提交的权限ID列表:', finalCheckedKeys); permissionEditRoleVisible.value = false; getRoleList(); - ElMessage.success('编辑角色成功'); + ElMessage.success(t('elmessage.editSuccess')); } else if (res.code === 0) { console.log('角色名重复', permissionEditRoleObj.value); - ElMessage.error('角色名重复'); + ElMessage.error(t('elmessage.roleNameDuplicate')); } else { console.log('编辑角色失败', res); - ElMessage.error('编辑角色失败'); + ElMessage.error(t('elmessage.editFailed')); } } catch (error) { console.log('编辑角色失败', error); @@ -602,22 +604,22 @@ const selectParentNodesForSubmit = (treeData, nodeId, checkedKeys) => { const Rolerules = reactive({ roleName: [ - { required: true, message: '请输入角色名称', trigger: 'blur' }, - { min: 2, max: 20, message: '角色名称长度应在2-20个字符之间', trigger: 'blur' } + { required: true, message: t('elmessage.inputRoleName'), trigger: 'blur' }, + { min: 2, max: 20, message: t('elmessage.roleNameLengthLimit'), trigger: 'blur' } ], market: [ - { required: true, message: '请选择归属地区', trigger: 'change' } + { required: true, message: t('elmessage.selectMarket'), trigger: 'change' } ], checkedKeys: [ { required: true, - message: '请选择权限列表', + message: t('elmessage.selectPermissionList'), trigger: 'change', // 选框变化或提交时触发,可根据实际调整 validator: (rule, value, callback) => { if (value && value.length > 0) { callback(); // 有选中项,校验通过 } else { - callback(new Error('请选择权限列表')); // 未选中,抛出错误提示 + callback(new Error(t('elmessage.selectPermissionList'))); // 未选中,抛出错误提示 } } } @@ -642,11 +644,11 @@ onMounted(async function () {
- 角色名称: - + {{ t('common.roleName') }}: +
- 查询 - 重置 + {{ t('common.search') }} + {{ t('common.reset') }}
@@ -654,13 +656,13 @@ onMounted(async function () {
新增角色 + v-if="canAdd">{{ t('common.addRole') }}
- + - - + + - + - + @@ -701,37 +703,37 @@ onMounted(async function () {
- + -
- 暂无数据 + {{ t('common.noData') }}
- - + +
- 取消 + {{ t('common.cancel') }} - 提交 + {{ t('common.submit') }}
- + @@ -855,4 +857,4 @@ onMounted(async function () { color: #409eff; /* 蓝色文字,提示可点击 */ } - \ No newline at end of file + diff --git a/src/views/permissions/userPermission.vue b/src/views/permissions/userPermission.vue index 4a6e774..69f5822 100644 --- a/src/views/permissions/userPermission.vue +++ b/src/views/permissions/userPermission.vue @@ -8,9 +8,11 @@ import API from '@/util/http' import { useAdminStore } from "@/store/index.js" import { storeToRefs } from "pinia" import { findMenuById, permissionMapping } from "@/utils/menuTreePermission.js" +import { useI18n } from 'vue-i18n' import BackGroundSvg from '@/assets/SvgIcons/promptBackground.svg' +const { t } = useI18n() const adminStore = useAdminStore() const { adminData, menuTree } = storeToRefs(adminStore) @@ -50,34 +52,34 @@ const showStatusConfirm = (row, targetStatus) => { // 规则 const addUserRules = { account: [ - { required: true, message: '请输入OA号', trigger: 'blur' }, - { pattern: /^\d+$/, message: 'OA号必须为数字', trigger: 'blur' }, - { max: 20, message: '长度不能超过20位', trigger: 'blur' } + { required: true, message: t('elmessage.inputAccount'), trigger: 'blur' }, + { pattern: /^\d+$/, message: t('elmessage.onlyDigits'), trigger: 'blur' }, + { max: 20, message: t('elmessage.lengthLimit20'), trigger: 'blur' } ], name: [ - { required: true, message: '请输入用户名', trigger: 'blur' }, - { max: 20, message: '长度不能超过20位', trigger: 'blur' } + { required: true, message: t('elmessage.inputUserName'), trigger: 'blur' }, + { max: 20, message: t('elmessage.lengthLimit20'), trigger: 'blur' } ], market: [ - { required: true, message: '请选择所属地区', trigger: 'change' } + { required: true, message: t('elmessage.selectMarket'), trigger: 'change' } ], permission: [ - { required: true, message: '请选择角色名称', trigger: 'change' } + { required: true, message: t('elmessage.selectRoleName'), trigger: 'change' } ], postiton: [ - { required: true, message: '请输入职位', trigger: 'blur' }, - { max: 20, message: '长度不能超过20位', trigger: 'blur' } + { required: true, message: t('elmessage.inputPosition'), trigger: 'blur' }, + { max: 20, message: t('elmessage.lengthLimit20'), trigger: 'blur' } ], machineIds: [ { required: true, - message: '请至少输入一个机器码', + message: t('elmessage.inputAtLeastOneMachineCode'), trigger: 'change', validator: (rule, value, callback) => { // 检查是否有非空的机器码 const hasValid = value.some(item => item.trim() !== ''); if (!hasValid) { - callback(new Error('请至少输入一个机器码')); + callback(new Error(t('elmessage.inputAtLeastOneMachineCode'))); } else { callback(); } @@ -117,14 +119,14 @@ const permissionEditObj = ref({ }) const addMachineIdInput = function () { if (addAdmin.value.machineIds.length >= 2) { - ElMessage.warning('设备数量已达上限') + ElMessage.warning(t('elmessage.deviceLimitReached')) return } addAdmin.value.machineIds.push('') } const UseraddMachineIdInput = function () { if (permissionEditObj.value.machineIds.length >= 2) { - ElMessage.warning('设备数量已达上限') + ElMessage.warning(t('elmessage.deviceLimitReached')) return } permissionEditObj.value.machineIds.push('') @@ -149,7 +151,7 @@ const getPermission = async function (val) { // 检查是否不是数字 if (!numberRegex.test(admin.value.account)) { - ElMessage.error('请检查OA号格式') + ElMessage.error(t('elmessage.checkAccountFormat')) // 上面提示过了 return } @@ -272,7 +274,7 @@ const userAddInit = function () { //新增用户 const permissionAdd = async function () { if (!canLook) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } try { @@ -281,7 +283,7 @@ const permissionAdd = async function () { if (valid) { resolve(); // 验证通过,继续执行后续代码 } else { - reject(new Error('请检查并完善表单信息')); // 验证失败,抛出错误 + reject(new Error(t('elmessage.checkFormInfo'))); // 验证失败,抛出错误 } }); }); @@ -307,7 +309,7 @@ const permissionAdd = async function () { console.log(addAdmin.value) if (result.code === 200) { - ElMessage.success('添加成功') + ElMessage.success(t('elmessage.addSuccess')) } else { ElMessage.error(result.msg) } @@ -319,7 +321,7 @@ const permissionAdd = async function () { } catch (error) { console.log('新增用户权限失败', error) - ElMessage.error('新增用户权限失败') + ElMessage.error(t('elmessage.addUserPermissionFailed')) } } // 表单验证ref @@ -441,19 +443,19 @@ const getUserLists = async function (selectedRoleId) { permissionEditObj.value.parentName = ''; permissionEditObj.value.checkedKeys = []; parentRoleTip.value = ''; - const parentRes = await request({ - url: '/role/selectFather', - data: { id: selectedRoleId } // 用选中的角色ID请求 - }); - const parentId = parentRes.data.fatherId; - const parentName = parentRes.data.parentName; - - permissionEditObj.value.parentId = parentId; - permissionEditObj.value.parentName = parentName; - if (parentId == null) { - // 无上级角色:显示提示 - parentRoleTip.value = '该角色无上级角色'; - } + const parentRes = await request({ + url: '/role/selectFather', + data: { id: selectedRoleId } // 用选中的角色ID请求 + }); + const parentId = parentRes.data.fatherId; + const parentName = parentRes.data.parentName; + + permissionEditObj.value.parentId = parentId; + permissionEditObj.value.parentName = parentName; + if (parentId == null) { + // 无上级角色:显示提示 + parentRoleTip.value = t('common_add.noParentRole'); + } let roleId = permissionEditObj.value.roleId // if (permissionEditObj.value.parentId === null || permissionEditObj.value.parentId === undefined) { @@ -476,22 +478,22 @@ const getUserLists = async function (selectedRoleId) { //编辑用户表单校验 const editAdminRules = { market: [ - { required: true, message: '请选择所属地区', trigger: 'change' } + { required: true, message: t('elmessage.selectMarket'), trigger: 'change' } ], postiton: [ - { required: true, message: '请输入职位', trigger: ['blur', 'change'] }, - { max: 20, message: '长度不能超过20位', trigger: ['blur', 'change'] } + { required: true, message: t('elmessage.inputPosition'), trigger: ['blur', 'change'] }, + { max: 20, message: t('elmessage.lengthLimit20'), trigger: ['blur', 'change'] } ], machineIds: [ { required: true, - message: '请至少输入一个机器码', + message: t('elmessage.inputAtLeastOneMachineCode'), trigger: 'change', validator: (rule, value, callback) => { // 检查是否有非空的机器码 const hasValid = value.some(item => item.trim() !== ''); if (!hasValid) { - callback(new Error('请至少输入一个机器码')); + callback(new Error(t('elmessage.inputAtLeastOneMachineCode'))); } else { callback(); } @@ -502,33 +504,34 @@ const editAdminRules = { // 编辑用户权限提交 const permissionEdit = async function () { if (!canEdit) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } let { adminName: userName, roleName: oldRole, roleId: newRoleId } = permissionEditObj.value; if (oldRole == null) { - oldRole = '暂未分配角色' + oldRole = t('elmessage.noRoleAssigned') } - const newRole = permissionList.value.find(item => item.value === newRoleId)?.label || '未知角色'; + const newRole = permissionList.value.find(item => item.value === newRoleId)?.label || t('elmessage.unknownRole'); + const confirmContent = `${t('permission.changeRoleConfirmContent1')}${userName}${t('permission.changeRoleConfirmContent2')}${oldRole}${t('permission.changeRoleConfirmContent3')}${newRole}${t('permission.changeRoleConfirmContent4')}` try { await new Promise((resolve, reject) => { Ref.value.validate((valid) => { if (valid) { resolve(); // 验证通过,继续执行后续代码 } else { - reject(new Error('请检查并完善表单信息')); // 验证失败,抛出错误 + reject(new Error(t('elmessage.checkFormInfo'))); // 验证失败,抛出错误 } }); }); await ElMessageBox.confirm( - `确认修改权限角色?
您正在将【${userName}】的权限角色从【${oldRole}】修改为【${newRole}】
变更后,该用户的可操作权限将同步更新为新角色配置,涉及数据访问、功能操作等权限变化,请谨慎确认。`, - '警告', + confirmContent, + t('permission.warning'), { - confirmButtonText: '确认', - cancelButtonText: '取消', + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: "warning", lockScroll: false, - dangerouslyUseHTMLString: true //允许解析 HTML 标签 + dangerouslyUseHTMLString: true } ) const result = await request({ @@ -548,11 +551,11 @@ const permissionEdit = async function () { console.log('编辑最后提交数据', permissionEditObj.value); if (result.code === 200) { await ElMessageBox.alert( - `用户${userName}的权限角色已更改为【${newRole}】`, - '成功', + `${t('permission.changeRoleSuccessContent1')}${userName}${t('permission.changeRoleSuccessContent2')}${newRole}】`, + t('elmessage.success'), { - confirmButtonText: '确定', - type: 'success' // 设置为 success 类型 + confirmButtonText: t('common.confirm'), + type: 'success' } ); getPermission(); @@ -563,7 +566,7 @@ const permissionEdit = async function () { } catch (error) { console.log('编辑用户权限失败', error) - ElMessage.error('编辑用户权限失败') + ElMessage.error(t('elmessage.editFailed') || t('elmessage.operationFailed')) } } @@ -578,7 +581,7 @@ const del = function (row) { // 删除权限 const delConfirm = async function () { if (!canDel) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } try { @@ -589,18 +592,18 @@ const delConfirm = async function () { console.log('看看删除对象', delObj.value) console.log('请求成功1', result) - ElMessage.success('删除权限成功') + ElMessage.success(t('elmessage.deleteSuccess')) delObj.value = {} getPermission() } catch (error) { console.log('删除权限失败', error) - ElMessage.error('删除权限失败') + ElMessage.error(t('elmessage.operationFailed')) } } // 禁用启用用户权限 const editStatus = async function (row) { if (!change) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermissionText')) return } const { id, account, targetStatus, ...restRow } = currentStatusRow.value @@ -622,7 +625,7 @@ const editStatus = async function (row) { console.log('请求成功2', result) if (result.code === 200) { ElMessage.success( - permissionEditObj.value.adminStatus === 1 ? '启用成功' : '禁用成功' + permissionEditObj.value.adminStatus === 1 ? t('elmessage.enableSuccess') : t('elmessage.disableSuccess') ) statusLoading.value[id] = false } @@ -681,11 +684,11 @@ const handleMarketChangeAddUser = (value) => { .filter(Boolean); // 检查是否包含总部 - const hasHeadquarters = selectedMarkets.includes('总部'); + const hasHeadquarters = selectedMarkets.includes(t('common.markets.headquarters')); if (hasHeadquarters) { // 如果包含总部,只保留总部 - addAdmin.value.market = ['总部']; + addAdmin.value.market = [t('common.markets.headquarters')]; } else { // 不包含总部,保留所有选择 addAdmin.value.market = selectedMarkets; @@ -705,11 +708,11 @@ const handleMarketChangeEditUser = (value) => { .filter(Boolean); // 检查是否包含总部 - const hasHeadquarters = selectedMarkets.includes('总部'); + const hasHeadquarters = selectedMarkets.includes(t('common.markets.headquarters')); if (hasHeadquarters) { // 如果包含总部,只保留总部 - permissionEditObj.value.market = ['总部']; + permissionEditObj.value.market = [t('common.markets.headquarters')]; } else { // 不包含总部,保留所有选择 permissionEditObj.value.market = selectedMarkets; @@ -793,7 +796,7 @@ const resetPassword = function (row) { // 确认重置密码 const confirmResetPassword = async function () { if (!canEdit) { - ElMessage.error('无此权限') + ElMessage.error(t('elmessage.noPermission')) return } console.log('adminData', adminData.value) @@ -827,20 +830,20 @@ const confirmResetPassword = async function () { }); if (result.code === 200) { // 使用严格相等运算符 - ElMessage.success('重置密码成功'); + ElMessage.success(t('elmessage.resetPasswordSuccess')); resetConfirmVisible.value = false; // 关闭弹窗 await getPermission() } else { - ElMessage.error(result.message || '重置密码失败'); + ElMessage.error(result.message || t('elmessage.resetPasswordFailed')); } } catch (error) { - ElMessage.error('重置密码失败'); + ElMessage.error(t('elmessage.resetPasswordFailed')); console.error('请求错误:', error); } } else { // console.log("为什么不能重置",adminData.value.markets) - ElMessage.error('您没有修改' + currentRow.value.market + '地区的用户密码的权限'); + ElMessage.error(t('elmessage.noPermissionResetMarket1') + currentRow.value.market + t('elmessage.noPermissionResetMarket2')); resetConfirmVisible.value = false; // 关闭弹窗 } @@ -918,25 +921,25 @@ onMounted(async function () {
- OA号: - + {{ t('common.account') }}: +
- 所属地区: - {{ t('common.market') }}: +
- 职位名称: - + {{ t('common.position') }}: +
- 查询 - 重置 + {{ t('common.search') }} + {{ t('common.reset') }}
@@ -944,14 +947,14 @@ onMounted(async function () {
新增用户 + @click="userAddInit()">{{ t('common.addUser') }}
- + - - - - - + + + + + - - + + - + @@ -1013,106 +1016,106 @@ onMounted(async function () {
- - + - - + + - - + + - - + - - + + - - + + - - + - +
- 暂无数据 + {{ t('common.noData') }}
- +
- 添加 + {{ t('common.add') }}
@@ -1120,9 +1123,9 @@ onMounted(async function () {
@@ -1138,15 +1141,15 @@ onMounted(async function () { -

提示

-

确认重置该账号密码?

-

重置后密码为: 123456,请通知用户及时修改

+

{{ t('elmessage.prompt') }}

+

{{ t('elmessage.resetPasswordConfirm') }}

+

{{ t('elmessage.resetPasswordDefault') }}

@@ -1159,7 +1162,7 @@ onMounted(async function () { }" @close="() => { if (currentStatusRow) currentStatusRow.adminStatus = currentStatusRow.adminStatus === 1 ? 0 : 1 }">
- 将要{{ currentStatusRow?.adminStatus === 1 ? '禁用' : '启用' }}该用户 + {{ t('common.will') }}{{ currentStatusRow?.adminStatus === 1 ? t('common_list.disable') : t('common_list.enable') }}{{ t('permission.user') }}
@@ -1241,4 +1244,4 @@ onMounted(async function () { margin-bottom: 30px; font-size: 48px; } - \ No newline at end of file +