From 822414c228b55e551e728dcaf4583c395123cc76 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 24 Jun 2026 13:33:44 +0800 Subject: [PATCH] feat(i18n): migrate login, dashboard, navbar, sidebar, user/role pages to vue-i18n with language switcher on login page --- healthlink-his-ui/src/i18n/locales/enUS.json | 205 +++++++++++++- healthlink-his-ui/src/i18n/locales/viVN.json | 205 +++++++++++++- healthlink-his-ui/src/i18n/locales/zhCN.json | 203 ++++++++++++- .../src/layout/components/Navbar.vue | 32 ++- .../src/layout/components/Sidebar/Logo.vue | 5 +- .../src/views/dashboard/index.vue | 141 ++++----- healthlink-his-ui/src/views/login.vue | 121 ++++++-- .../src/views/system/role/index.vue | 155 +++++----- .../src/views/system/user/index.vue | 267 +++++++++--------- 9 files changed, 1003 insertions(+), 331 deletions(-) diff --git a/healthlink-his-ui/src/i18n/locales/enUS.json b/healthlink-his-ui/src/i18n/locales/enUS.json index 71acb88e5..b31833772 100644 --- a/healthlink-his-ui/src/i18n/locales/enUS.json +++ b/healthlink-his-ui/src/i18n/locales/enUS.json @@ -1,4 +1,14 @@ { + "navbar": { + "helpCenter": "Help Center", + "themeSettings": "Theme Settings", + "profile": "Profile", + "lockScreen": "Lock Screen", + "logout": "Logout", + "switchDepartment": "Switch Department", + "switchDepartmentConfirm": "Are you sure to switch to department \"{name}\"?", + "logoutConfirm": "Are you sure to logout and exit the system?" + }, "nav": { "dashboard": "Dashboard", "system": "System Settings", @@ -30,7 +40,35 @@ "noTenant": "No tenant selection needed", "loginSuccess": "Login successful", "logoutSuccess": "Logged out", - "pleaseSelectTenant": "Please select tenant" + "pleaseSelectTenant": "Please select tenant", + "systemSubtitle": "Information Management System", + "featureSecure": "Secure & Reliable", + "featureSecureDesc": "Comprehensive data security protection", + "featureEfficient": "Efficient & Convenient", + "featureEfficientDesc": "Intelligent medical business processes", + "featureCollab": "Collaborative Office", + "featureCollabDesc": "Seamless collaboration across departments and roles", + "techSupport": "Technical Support: Shanghai Jingchuang Helian Information Technology Co., Ltd.", + "welcomeBack": "Welcome Back", + "loginDesc": "Please log in securely with your account and password", + "account": "Username", + "placeholderAccount": "Enter your account", + "hide": "Hide", + "show": "Show", + "medicalInstitution": "Medical Institution", + "placeholderMedicalInstitution": "Select medical institution", + "connectMedicalInsurance": "Connect Medical Insurance", + "loginButtonText": "Log In", + "loggingIn": "Logging in...", + "connectingInsurance": "Connecting insurance...", + "frontendVersion": "Frontend", + "backendVersion": "Backend", + "copyrightSystem": " Information Management System", + "validationUsername": "Please enter your username", + "validationPassword": "Please enter your password", + "validationCaptcha": "Please enter verification code", + "forgotPasswordTip": "Forgot password feature is under development", + "signInFailed": "Medical insurance sign-in failed" }, "common": { "add": "Add", @@ -111,7 +149,71 @@ "enable": "Enable", "authRole": "Assign Roles", "importTemplate": "Download Template", - "selectDept": "Select Department" + "selectDept": "Select Department", + "userAccount": "User Account", + "userPassword": "Password", + "responsibilityDept": "Department", + "birthDate": "Birth Date", + "address": "Address", + "medicalInsuranceCode": "Insurance Code", + "role": "Role", + "titleCode": "Title Code", + "signatureImage": "Signature Image", + "qualificationCertNo": "Qualification No.", + "visitDept": "Visit Department", + "manageWarehouse": "Manage Warehouse", + "managePharmacy": "Manage Pharmacy", + "manageDept": "Manage Department", + "manageWard": "Manage Ward", + "userInfo": "User Info", + "remarks": "Remarks", + "clickToUpload": "Click to upload", + "dragOrClick": "Drag file here, or click to upload", + "updateExisting": "Update existing user data?", + "importFormatTip": "Only xls, xlsx files are allowed.", + "downloadTemplate": "Download Template", + "userImport": "User Import", + "importResult": "Import Result", + "uploadOneImage": "Only one image allowed, please delete the existing one first!", + "fileFormatError": "Invalid format, please upload image files (JPG, PNG).", + "imageSizeLimit": "Image size cannot exceed 2MB!", + "selectImageFile": "Please select an image file!", + "enterDeptName": "Enter department name", + "enterUserAccount": "Enter user account", + "enterPhone": "Enter phone number", + "userStatus": "User Status", + "enterUserName": "Enter user name", + "selectRespDept": "Select department", + "enterEmail": "Enter email", + "enterPassword": "Enter password", + "selectDate": "Select date", + "enterAddress": "Enter address", + "enterMedicalCode": "Enter insurance code", + "selectTitleCode": "Select title code", + "enterQualCertNo": "Enter qualification number", + "selectVisitDept": "Select visit department", + "selectWarehouse": "Select warehouse", + "selectPharmacy": "Select pharmacy", + "selectManageDept": "Select department", + "selectWard": "Select ward", + "enterContent": "Enter content", + "deleteConfirm": "Are you sure to delete user \"{id}\"?", + "statusConfirm": "Are you sure to \"{action}\" user \"{username}\"?", + "operationFailed": "Operation failed, please try again", + "resetPwdPrompt": "Enter new password for \"{username}\"", + "resetPwdSuccess": "Password updated, new password: {pwd}", + "addUser": "Add User", + "editUser": "Edit User", + "valAccountRequired": "User account cannot be empty", + "valAccountLength": "User account must be 2-20 characters", + "valNameRequired": "User name cannot be empty", + "valDeptRequired": "Department cannot be empty", + "valRoleRequired": "Role cannot be empty", + "valPasswordRequired": "Password cannot be empty", + "valPasswordLength": "Password must be 5-20 characters", + "valPasswordChars": "Cannot contain illegal characters: < > \" ' \\ |", + "valEmail": "Please enter a valid email", + "valPhone": "Please enter a valid phone number" }, "role": { "roleId": "Role ID", @@ -125,7 +227,37 @@ "customData": "Custom Data", "deptdata": "Dept Data", "deptAndChildrenData": "Dept & Sub-dept", - "selfData": "Self Only" + "selfData": "Self Only", + "assignUser": "Assign Users", + "assignUserBatch": "Batch Assign", + "enterRoleName": "Enter role name", + "enterRoleKey": "Enter role key", + "roleStatus": "Role Status", + "startDate": "Start Date", + "endDate": "End Date", + "roleNumber": "Role Number", + "displayOrder": "Display Order", + "expandCollapse": "Expand/Collapse", + "selectAll": "Select All/None", + "parentChildLink": "Parent-Child Link", + "loadingPleaseWait": "Loading, please wait", + "permissionChar": "Permission Key", + "permissionTooltip": "Permission key defined in controller, e.g.: @PreAuthorize(`@ss.hasRole('admin')`)", + "roleOrder": "Role Order", + "addRole": "Add Role", + "editRole": "Edit Role", + "assignDataPermission": "Assign Data Permission", + "deleteConfirm": "Are you sure to delete role \"{id}\"?", + "valNameRequired": "Role name cannot be empty", + "valKeyRequired": "Role key cannot be empty", + "valSortRequired": "Role order cannot be empty", + "allDataPermission": "All Data Permission", + "customDataPermission": "Custom Data Permission", + "deptDataPermission": "Department Data Permission", + "deptAndChildrenPermission": "Dept & Sub-dept Permission", + "selfDataPermission": "Self Only Permission", + "dataPermission": "Data Permission", + "permissionScope": "Permission Scope" }, "menu": { "menuId": "Menu ID", @@ -196,6 +328,73 @@ "copySuccess": "Copied successfully", "copyFailed": "Copy failed" }, + "dashboard": { + "title": "System Dashboard", + "realtimeConnected": "● Real-time Connected", + "offline": "○ Offline", + "systemInfo": "System Info", + "version": "Version", + "env": "Environment", + "devEnv": "Development", + "realtimeAlert": "⚠️ Real-time Alerts", + "totalRevenue": "Total Revenue (10K)", + "totalProfit": "Total Profit (10K)", + "totalPatients": "Total Patients", + "drgCases": "DRG Cases", + "featureModules": "Feature Modules", + "quickActions": "Quick Actions", + "recentOperations": "Recent Operations", + "justNow": "Just now", + "enterModule": "Enter module", + "navigateTo": "Navigate to", + "dbTables": "DB Tables", + "apiInterfaces": "API Interfaces", + "modules": "Modules", + "menuCount": "Menus", + "onlineUsers": "Online Users", + "todayOps": "Today's Ops", + "outpatientMgmt": "Outpatient", + "outpatientDesc": "Register/Billing/Prescription", + "inpatientMgmt": "Inpatient", + "inpatientDesc": "Admit/Discharge/Order", + "pharmacyMgmt": "Pharmacy", + "pharmacyDesc": "Dispense/Stock/Trace", + "nursingMgmt": "Nursing", + "nursingDesc": "Assess/Execute/QA", + "labMgmt": "Laboratory", + "labDesc": "Specimen/Report/History", + "imagingMgmt": "Imaging", + "imagingDesc": "Exam/Report/Compare", + "anesthesiaMgmt": "Anesthesia", + "anesthesiaDesc": "Record/Follow-up/QC", + "surgeryMgmt": "Surgery", + "surgeryDesc": "Schedule/Safety/Record", + "infectionMgmt": "Infection Control", + "infectionDesc": "Monitor/Alert/Report", + "qualityMgmt": "Quality Control", + "qualityDesc": "Chart/Nursing/Runtime", + "tcmMgmt": "TCM", + "tcmDesc": "Formula/Constitution/Rx", + "consultMgmt": "Consultation", + "consultDesc": "Request/Confirm/Feedback", + "actionRegister": "Register", + "actionPrescribe": "Prescribe", + "actionDispense": "Dispense", + "actionLab": "Lab", + "actionQuality": "QC", + "actionReport": "Reports", + "systemName": "System Name", + "versionNumber": "Version", + "runEnv": "Environment", + "backendPort": "Backend Port", + "dbTableCount": "DB Tables", + "apiCount": "API Count", + "moduleCount": "Modules", + "startTime": "Start Time" + }, + "sidebar": { + "defaultTitle": "Hospital Management System" + }, "table": { "index": "#", "action": "Action", diff --git a/healthlink-his-ui/src/i18n/locales/viVN.json b/healthlink-his-ui/src/i18n/locales/viVN.json index ce39e8a70..24d314b8a 100644 --- a/healthlink-his-ui/src/i18n/locales/viVN.json +++ b/healthlink-his-ui/src/i18n/locales/viVN.json @@ -1,4 +1,14 @@ { + "navbar": { + "helpCenter": "Trung Tâm Trợ Giúp", + "themeSettings": "Cài Đặt Giao Diện", + "profile": "Hồ Sơ Cá Nhân", + "lockScreen": "Khóa Màn Hình", + "logout": "Đăng Xuất", + "switchDepartment": "Chuyển Khoa", + "switchDepartmentConfirm": "Bạn có chắc chắn muốn chuyển đến khoa \"{name}\"?", + "logoutConfirm": "Bạn có chắc chắn muốn đăng xuất và thoát hệ thống?" + }, "nav": { "dashboard": "Bảng Điều Khiển", "system": "Cài Đặt Hệ Thống", @@ -30,7 +40,35 @@ "noTenant": "Không cần chọn thuê bao", "loginSuccess": "Đăng nhập thành công", "logoutSuccess": "Đã đăng xuất", - "pleaseSelectTenant": "Vui lòng chọn thuê bao" + "pleaseSelectTenant": "Vui lòng chọn thuê bao", + "systemSubtitle": "Hệ Thống Quản Lý Thông Tin", + "featureSecure": "An Toàn & Đáng Tin Cậy", + "featureSecureDesc": "Bảo mật dữ liệu toàn diện", + "featureEfficient": "Hiệu Quả & Tiện Lợi", + "featureEfficientDesc": "Quy trình nghiệp vụ y tế thông minh", + "featureCollab": "Làm Việc Cộng Tác", + "featureCollabDesc": "Cộng tác liền mạch giữa các khoa và vai trò", + "techSupport": "Hỗ trợ kỹ thuật: Shanghai Jingchuang Helian Information Technology Co., Ltd.", + "welcomeBack": "Chào Mừng Trở Lại", + "loginDesc": "Vui lòng đăng nhập an toàn bằng tài khoản và mật khẩu", + "account": "Tên Đăng Nhập", + "placeholderAccount": "Nhập tài khoản", + "hide": "Ẩn", + "show": "Hiện", + "medicalInstitution": "Cơ Sở Y Tế", + "placeholderMedicalInstitution": "Chọn cơ sở y tế", + "connectMedicalInsurance": "Kết Nối Bảo Hiểm Y Tế", + "loginButtonText": "Đăng Nhập", + "loggingIn": "Đang đăng nhập...", + "connectingInsurance": "Đang kết nối bảo hiểm...", + "frontendVersion": "Frontend", + "backendVersion": "Backend", + "copyrightSystem": " Hệ Thống Quản Lý Thông Tin", + "validationUsername": "Vui lòng nhập tên đăng nhập", + "validationPassword": "Vui lòng nhập mật khẩu", + "validationCaptcha": "Vui lòng nhập mã xác minh", + "forgotPasswordTip": "Tính năng quên mật khẩu đang được phát triển", + "signInFailed": "Đăng ký bảo hiểm y tế thất bại" }, "common": { "add": "Thêm", @@ -111,7 +149,71 @@ "enable": "Kích Hoạt", "authRole": "Phân Vai Trò", "importTemplate": "Tải Mẫu", - "selectDept": "Chọn Bộ Phận" + "selectDept": "Chọn Bộ Phận", + "userAccount": "Tài Khoản", + "userPassword": "Mật Khẩu", + "responsibilityDept": "Khoa Phụ Trách", + "birthDate": "Ngày Sinh", + "address": "Địa Chỉ", + "medicalInsuranceCode": "Mã BHYT", + "role": "Vai Trò", + "titleCode": "Mã Chức Danh", + "signatureImage": "Ảnh Chữ Ký", + "qualificationCertNo": "Số Chứng Chỉ", + "visitDept": "Khoa Khám Bệnh", + "manageWarehouse": "Quản Lý Kho", + "managePharmacy": "Quản Lý Nhà Thuốc", + "manageDept": "Quản Lý Khoa", + "manageWard": "Quản Lý Khu", + "userInfo": "Thông Tin Người Dùng", + "remarks": "Ghi Chú", + "clickToUpload": "Nhấn để tải lên", + "dragOrClick": "Kéo tệp vào đây, hoặc nhấn để tải lên", + "updateExisting": "Cập nhật dữ liệu người dùng đã tồn tại?", + "importFormatTip": "Chỉ cho phép tệp xls, xlsx.", + "downloadTemplate": "Tải Mẫu", + "userImport": "Nhập Người Dùng", + "importResult": "Kết Quả Nhập", + "uploadOneImage": "Chỉ được tải lên một ảnh, vui lòng xóa ảnh hiện tại trước!", + "fileFormatError": "Sai định dạng, vui lòng tải lên tệp ảnh (JPG, PNG).", + "imageSizeLimit": "Kích thước ảnh không được vượt quá 2MB!", + "selectImageFile": "Vui lòng chọn tệp ảnh!", + "enterDeptName": "Nhập tên khoa", + "enterUserAccount": "Nhập tài khoản", + "enterPhone": "Nhập số điện thoại", + "userStatus": "Trạng Thái TK", + "enterUserName": "Nhập tên người dùng", + "selectRespDept": "Chọn khoa phụ trách", + "enterEmail": "Nhập email", + "enterPassword": "Nhập mật khẩu", + "selectDate": "Chọn ngày", + "enterAddress": "Nhập địa chỉ", + "enterMedicalCode": "Nhập mã BHYT", + "selectTitleCode": "Chọn mã chức danh", + "enterQualCertNo": "Nhập số chứng chỉ", + "selectVisitDept": "Chọn khoa khám bệnh", + "selectWarehouse": "Chọn kho", + "selectPharmacy": "Chọn nhà thuốc", + "selectManageDept": "Chọn khoa quản lý", + "selectWard": "Chọn khu vực", + "enterContent": "Nhập nội dung", + "deleteConfirm": "Bạn có chắc chắn muốn xóa người dùng \"{id}\"?", + "statusConfirm": "Bạn có chắc chắn muốn \"{action}\" người dùng \"{username}\"?", + "operationFailed": "Thao tác thất bại, vui lòng thử lại", + "resetPwdPrompt": "Nhập mật khẩu mới cho \"{username}\"", + "resetPwdSuccess": "Đã cập nhật mật khẩu, mật khẩu mới: {pwd}", + "addUser": "Thêm Người Dùng", + "editUser": "Sửa Người Dùng", + "valAccountRequired": "Tài khoản không được để trống", + "valAccountLength": "Tài khoản phải từ 2-20 ký tự", + "valNameRequired": "Tên người dùng không được để trống", + "valDeptRequired": "Khoa không được để trống", + "valRoleRequired": "Vai trò không được để trống", + "valPasswordRequired": "Mật khẩu không được để trống", + "valPasswordLength": "Mật khẩu phải từ 5-20 ký tự", + "valPasswordChars": "Không được chứa ký tự bất hợp pháp: < > \" ' \\ |", + "valEmail": "Vui lòng nhập email hợp lệ", + "valPhone": "Vui lòng nhập số điện thoại hợp lệ" }, "role": { "roleId": "ID Vai Trò", @@ -125,7 +227,37 @@ "customData": "Tùy Chỉnh", "deptdata": "Dữ Liệu Bộ Phận", "deptAndChildrenData": "Bộ Phận & Cấp Dưới", - "selfData": "Chỉ Bản Thân" + "selfData": "Chỉ Bản Thân", + "assignUser": "Phân Bổ Người Dùng", + "assignUserBatch": "Phân Bổ Hàng Loạt", + "enterRoleName": "Nhập tên vai trò", + "enterRoleKey": "Nhập mã vai trò", + "roleStatus": "Trạng Thái Vai Trò", + "startDate": "Ngày Bắt Đầu", + "endDate": "Ngày Kết Thúc", + "roleNumber": "Số Vai Trò", + "displayOrder": "Thứ Tự Hiển Thị", + "expandCollapse": "Mở Rộng/Thu Gọn", + "selectAll": "Chọn Tất Cả/Bỏ Chọn", + "parentChildLink": "Liên Kết Cha-Con", + "loadingPleaseWait": "Đang tải, vui lòng đợi", + "permissionChar": "Mã Quyền", + "permissionTooltip": "Mã quyền được định nghĩa trong controller, ví dụ: @PreAuthorize(`@ss.hasRole('admin')`)", + "roleOrder": "Thứ Tự Vai Trò", + "addRole": "Thêm Vai Trò", + "editRole": "Sửa Vai Trò", + "assignDataPermission": "Phân Quyền Dữ Liệu", + "deleteConfirm": "Bạn có chắc chắn muốn xóa vai trò \"{id}\"?", + "valNameRequired": "Tên vai trò không được để trống", + "valKeyRequired": "Mã vai trò không được để trống", + "valSortRequired": "Thứ tự vai trò không được để trống", + "allDataPermission": "Quyền Tất Cả Dữ Liệu", + "customDataPermission": "Quyền Dữ Liệu Tùy Chỉnh", + "deptDataPermission": "Quyền Dữ Liệu Bộ Phận", + "deptAndChildrenPermission": "Quyền Bộ Phận & Cấp Dưới", + "selfDataPermission": "Quyền Chỉ Bản Thân", + "dataPermission": "Quyền Dữ Liệu", + "permissionScope": "Phạm Vi Quyền" }, "menu": { "menuId": "ID Menu", @@ -196,6 +328,73 @@ "copySuccess": "Sao chép thành công", "copyFailed": "Sao chép thất bại" }, + "dashboard": { + "title": "Bảng Điều Khiển Hệ Thống", + "realtimeConnected": "● Đã Kết Nối Thời Gian Thực", + "offline": "○ Ngoại Tuyến", + "systemInfo": "Thông Tin Hệ Thống", + "version": "Phiên Bản", + "env": "Môi Trường", + "devEnv": "Phát Triển", + "realtimeAlert": "⚠️ Cảnh Báo Thời Gian Thực", + "totalRevenue": "Tổng Doanh Thu (10K)", + "totalProfit": "Tổng Lợi Nhuận (10K)", + "totalPatients": "Tổng Bệnh Nhân", + "drgCases": "Ca DRG", + "featureModules": "Chức Năng", + "quickActions": "Thao Tác Nhanh", + "recentOperations": "Thao Tác Gần Đây", + "justNow": "Vừa xong", + "enterModule": "Vào module", + "navigateTo": "Chuyển đến", + "dbTables": "Bảng DB", + "apiInterfaces": "API", + "modules": "Chức Năng", + "menuCount": "Menu", + "onlineUsers": "Trực Tuyến", + "todayOps": "Hôm Nay", + "outpatientMgmt": "Ngoại Trú", + "outpatientDesc": "ĐK/Thuốc/Đơn", + "inpatientMgmt": "Nội Trú", + "inpatientDesc": "Nhập/Xuất/Y Lệnh", + "pharmacyMgmt": "Nhà Thuốc", + "pharmacyDesc": "Phát/Tồn/Truy Xuất", + "nursingMgmt": "Điều Dưỡng", + "nursingDesc": "Đánh Giá/Thực Hiện/CL", + "labMgmt": "Xét Nghiệm", + "labDesc": "Mẫu/Báo Cáo/Lịch Sử", + "imagingMgmt": "Chẩn Đoán Hình Ảnh", + "imagingDesc": "Khám/BC/So Sánh", + "anesthesiaMgmt": "Gây Mê", + "anesthesiaDesc": "Ghi Nhận/Tái Khám/CL", + "surgeryMgmt": "Phẫu Thuật", + "surgeryDesc": "Lịch/An Toàn/Ghi Nhận", + "infectionMgmt": "Kiểm Soát Nhiễm Trùng", + "infectionDesc": "Giám Sát/Cảnh Báo/BC", + "qualityMgmt": "Kiểm Soát Chất Lượng", + "qualityDesc": "Bệnh Án/ĐD/Vận Hành", + "tcmMgmt": "Y Học Cổ Truyền", + "tcmDesc": "Thang/Thể Chất/Đơn", + "consultMgmt": "Hội Chẩn", + "consultDesc": "Yêu Cầu/Xác Nhận/Phản Hồi", + "actionRegister": "Đăng Ký", + "actionPrescribe": "Kê Đơn", + "actionDispense": "Phát Thuốc", + "actionLab": "Xét Nghiệm", + "actionQuality": "Kiểm Soát CL", + "actionReport": "Báo Cáo", + "systemName": "Tên Hệ Thống", + "versionNumber": "Phiên Bản", + "runEnv": "Môi Trường", + "backendPort": "Cổng Backend", + "dbTableCount": "Bảng DB", + "apiCount": "Số API", + "moduleCount": "Chức Năng", + "startTime": "Thời Gian Khởi Động" + }, + "sidebar": { + "defaultTitle": "Hệ Thống Quản Lý Bệnh Viện" + }, "table": { "index": "#", "action": "Hành Động", diff --git a/healthlink-his-ui/src/i18n/locales/zhCN.json b/healthlink-his-ui/src/i18n/locales/zhCN.json index 797e5a1a3..2b760b236 100644 --- a/healthlink-his-ui/src/i18n/locales/zhCN.json +++ b/healthlink-his-ui/src/i18n/locales/zhCN.json @@ -1,4 +1,14 @@ { + "navbar": { + "helpCenter": "帮助中心", + "themeSettings": "主题设置", + "profile": "个人中心", + "lockScreen": "锁定屏幕", + "logout": "退出登录", + "switchDepartment": "切换科室", + "switchDepartmentConfirm": "确定要切换到科室\"{name}\"吗?", + "logoutConfirm": "确定注销并退出系统吗?" + }, "nav": { "dashboard": "系统仪表盘", "system": "系统设置", @@ -30,7 +40,35 @@ "noTenant": "无需选择租户", "loginSuccess": "登录成功", "logoutSuccess": "退出成功", - "pleaseSelectTenant": "请选择租户" + "pleaseSelectTenant": "请选择租户", + "systemSubtitle": "信息管理系统", + "featureSecure": "安全可靠", + "featureSecureDesc": "全方位数据安全保障", + "featureEfficient": "高效便捷", + "featureEfficientDesc": "智能化医疗业务流程", + "featureCollab": "协同办公", + "featureCollabDesc": "多科室多角色无缝协作", + "techSupport": "技术支持:上海经创贺联信息技术有限公司", + "welcomeBack": "欢迎回来", + "loginDesc": "请使用您的账号密码安全登录系统", + "account": "用户名", + "placeholderAccount": "请输入账号", + "hide": "隐藏", + "show": "显示", + "medicalInstitution": "医疗机构", + "placeholderMedicalInstitution": "请选择医疗机构", + "connectMedicalInsurance": "连接医保", + "loginButtonText": "登 录", + "loggingIn": "登录中...", + "connectingInsurance": "连接医保中...", + "frontendVersion": "前端", + "backendVersion": "后端", + "copyrightSystem": "信息管理系统", + "validationUsername": "请输入您的账号", + "validationPassword": "请输入您的密码", + "validationCaptcha": "请输入验证码", + "forgotPasswordTip": "忘记密码功能正在开发中", + "signInFailed": "医保签到失败" }, "common": { "add": "新增", @@ -111,7 +149,71 @@ "enable": "启用", "authRole": "授权角色", "importTemplate": "下载模板", - "selectDept": "请选择部门" + "selectDept": "请选择部门", + "userAccount": "用户账号", + "userPassword": "用户密码", + "responsibilityDept": "责任科室", + "birthDate": "出生日期", + "address": "地址", + "medicalInsuranceCode": "医保码", + "role": "角色", + "titleCode": "职称编码", + "signatureImage": "签名图片", + "qualificationCertNo": "职业资格证编号", + "visitDept": "出诊科室", + "manageWarehouse": "管理药库", + "managePharmacy": "管理药房", + "manageDept": "管理科室", + "manageWard": "管理病区", + "userInfo": "用户信息", + "remarks": "备注", + "clickToUpload": "点击上传图片", + "dragOrClick": "将文件拖到此处,或点击上传", + "updateExisting": "是否更新已经存在的用户数据", + "importFormatTip": "仅允许导入xls、xlsx格式文件。", + "downloadTemplate": "下载模板", + "userImport": "用户导入", + "importResult": "导入结果", + "uploadOneImage": "只能上传一张图片,请先删除已上传的图片!", + "fileFormatError": "文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。", + "imageSizeLimit": "图片大小不能超过2MB!", + "selectImageFile": "请选择图片文件!", + "enterDeptName": "请输入部门名称", + "enterUserAccount": "请输入用户账号", + "enterPhone": "请输入手机号码", + "userStatus": "用户状态", + "enterUserName": "请输入用户姓名", + "selectRespDept": "请选择责任科室", + "enterEmail": "请输入邮箱", + "enterPassword": "请输入用户密码", + "selectDate": "选择日期", + "enterAddress": "请输入地址", + "enterMedicalCode": "请输入医保码", + "selectTitleCode": "请选择职称编码", + "enterQualCertNo": "请输入职业资格证编号", + "selectVisitDept": "请选择出诊科室", + "selectWarehouse": "请选择管理药库", + "selectPharmacy": "请选择管理药房", + "selectManageDept": "请选择管理科室", + "selectWard": "请选择管理病区", + "enterContent": "请输入内容", + "deleteConfirm": "是否确认删除用户编号为\"{id}\"的数据项?", + "statusConfirm": "确认要\"{action}\"\"{username}\"用户吗?", + "operationFailed": "操作失败,请重试", + "resetPwdPrompt": "请输入\"{username}\"的新密码", + "resetPwdSuccess": "修改成功,新密码是:{pwd}", + "addUser": "添加用户", + "editUser": "修改用户", + "valAccountRequired": "用户账号不能为空", + "valAccountLength": "用户账号长度必须介于 2 和 20 之间", + "valNameRequired": "用户姓名不能为空", + "valDeptRequired": "责任科室不能为空", + "valRoleRequired": "角色不能为空", + "valPasswordRequired": "用户密码不能为空", + "valPasswordLength": "用户密码长度必须介于 5 和 20 之间", + "valPasswordChars": "不能包含非法字符:< > \" ' \\ |", + "valEmail": "请输入正确的邮箱地址", + "valPhone": "请输入正确的手机号码" }, "role": { "roleId": "角色ID", @@ -127,7 +229,35 @@ "deptAndChildrenData": "本部门及下级数据", "selfData": "仅本人数据", "assignUser": "分配用户", - "assignUserBatch": "批量分配" + "assignUserBatch": "批量分配", + "enterRoleName": "请输入角色名称", + "enterRoleKey": "请输入权限字符", + "roleStatus": "角色状态", + "startDate": "开始日期", + "endDate": "结束日期", + "roleNumber": "角色编号", + "displayOrder": "显示顺序", + "expandCollapse": "展开/折叠", + "selectAll": "全选/全不选", + "parentChildLink": "父子联动", + "loadingPleaseWait": "加载中,请稍候", + "permissionChar": "权限字符", + "permissionTooltip": "控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)", + "roleOrder": "角色顺序", + "addRole": "添加角色", + "editRole": "修改角色", + "assignDataPermission": "分配数据权限", + "deleteConfirm": "是否确认删除角色编号为\"{id}\"的数据项?", + "valNameRequired": "角色名称不能为空", + "valKeyRequired": "权限字符不能为空", + "valSortRequired": "角色顺序不能为空", + "allDataPermission": "全部数据权限", + "customDataPermission": "自定数据权限", + "deptDataPermission": "本部门数据权限", + "deptAndChildrenPermission": "本部门及以下数据权限", + "selfDataPermission": "仅本人数据权限", + "dataPermission": "数据权限", + "permissionScope": "权限范围" }, "menu": { "menuId": "菜单ID", @@ -198,6 +328,73 @@ "copySuccess": "复制成功", "copyFailed": "复制失败" }, + "dashboard": { + "title": "系统仪表盘", + "realtimeConnected": "● 实时连接", + "offline": "○ 离线", + "systemInfo": "系统信息", + "version": "版本", + "env": "环境", + "devEnv": "开发环境", + "realtimeAlert": "⚠️ 实时预警", + "totalRevenue": "总收入(万)", + "totalProfit": "总利润(万)", + "totalPatients": "总患者数", + "drgCases": "DRG病例数", + "featureModules": "功能模块", + "quickActions": "快捷操作", + "recentOperations": "最近操作", + "justNow": "刚刚", + "enterModule": "进入模块", + "navigateTo": "跳转", + "dbTables": "数据库表", + "apiInterfaces": "API接口", + "modules": "功能模块", + "menuCount": "菜单数", + "onlineUsers": "在线用户", + "todayOps": "今日操作", + "outpatientMgmt": "门诊管理", + "outpatientDesc": "挂号/收费/处方", + "inpatientMgmt": "住院管理", + "inpatientDesc": "入院/出院/医嘱", + "pharmacyMgmt": "药房管理", + "pharmacyDesc": "发药/库存/追溯", + "nursingMgmt": "护理管理", + "nursingDesc": "评估/执行/质量", + "labMgmt": "检验管理", + "labDesc": "标本/报告/历史", + "imagingMgmt": "影像管理", + "imagingDesc": "检查/报告/对比", + "anesthesiaMgmt": "麻醉管理", + "anesthesiaDesc": "记录/随访/质控", + "surgeryMgmt": "手术管理", + "surgeryDesc": "排班/安全/记录", + "infectionMgmt": "院感管理", + "infectionDesc": "监测/预警/报告", + "qualityMgmt": "质控管理", + "qualityDesc": "病历/护理/运行", + "tcmMgmt": "中医管理", + "tcmDesc": "方剂/体质/处方", + "consultMgmt": "会诊管理", + "consultDesc": "申请/确认/反馈", + "actionRegister": "挂号", + "actionPrescribe": "开方", + "actionDispense": "发药", + "actionLab": "检验", + "actionQuality": "质控", + "actionReport": "报表", + "systemName": "系统名称", + "versionNumber": "版本号", + "runEnv": "运行环境", + "backendPort": "后端端口", + "dbTableCount": "数据库表", + "apiCount": "API接口", + "moduleCount": "功能模块", + "startTime": "启动时间" + }, + "sidebar": { + "defaultTitle": "医院管理系统" + }, "table": { "index": "#", "action": "操作", diff --git a/healthlink-his-ui/src/layout/components/Navbar.vue b/healthlink-his-ui/src/layout/components/Navbar.vue index f504efb78..7e187ce22 100755 --- a/healthlink-his-ui/src/layout/components/Navbar.vue +++ b/healthlink-his-ui/src/layout/components/Navbar.vue @@ -21,7 +21,7 @@
- 个人中心 + {{ $t('navbar.profile') }} - 锁定屏幕 + {{ $t('navbar.lockScreen') }} - 退出登录 + {{ $t('navbar.logout') }} @@ -121,7 +121,7 @@
- 确定 + {{ $t('common.confirm') }} - 取消 + {{ $t('common.cancel') }}
@@ -166,7 +166,9 @@ import useUserStore from '@/store/modules/user'; import useLockStore from '@/store/modules/lock'; import usePermissionStore from '@/store/modules/permission'; import {getOrg, switchOrg} from '@/api/login'; +import {useI18n} from 'vue-i18n'; +const {t} = useI18n(); const appStore = useAppStore(); const userStore = useUserStore(); const lockStore = useLockStore(); @@ -213,10 +215,10 @@ async function loadOrgList() { async function handleOrgSwitch(val) { const selectedOrg = orgOptions.value.find(item => item.orgId === val); - const orgName = selectedOrg ? selectedOrg.orgName : '该科室'; - ElMessageBox.confirm(`确定要切换到科室"${orgName}"吗?`, '切换科室', { - confirmButtonText: '确定', - cancelButtonText: '取消', + const orgName = selectedOrg ? selectedOrg.orgName : t('navbar.switchDepartment'); + ElMessageBox.confirm(t('navbar.switchDepartmentConfirm', {name: orgName}), t('navbar.switchDepartment'), { + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: 'warning' }).then(async () => { try { @@ -233,9 +235,9 @@ function submit() { } function logout() { - ElMessageBox.confirm('确定注销并退出系统吗?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + ElMessageBox.confirm(t('navbar.logoutConfirm'), t('common.tip'), { + confirmButtonText: t('common.confirm'), + cancelButtonText: t('common.cancel'), type: 'warning' }).then(() => { userStore.logOut().then(() => { diff --git a/healthlink-his-ui/src/layout/components/Sidebar/Logo.vue b/healthlink-his-ui/src/layout/components/Sidebar/Logo.vue index 95b8b89b1..fb5a79ce1 100755 --- a/healthlink-his-ui/src/layout/components/Sidebar/Logo.vue +++ b/healthlink-his-ui/src/layout/components/Sidebar/Logo.vue @@ -40,6 +40,9 @@ import variables from '@/assets/styles/variables.module.scss'; import useSettingsStore from '@/store/modules/settings'; import useUserStore from '@/store/modules/user'; import {computed} from 'vue'; +import {useI18n} from 'vue-i18n'; + +const {t} = useI18n(); defineProps({ collapse: { @@ -48,7 +51,7 @@ defineProps({ }, }); -const title = import.meta.env.VITE_APP_TITLE || '医院管理系统'; +const title = computed(() => import.meta.env.VITE_APP_TITLE || t('sidebar.defaultTitle')); const settingsStore = useSettingsStore(); const userStore = useUserStore(); const sideTheme = computed(() => settingsStore.sideTheme); diff --git a/healthlink-his-ui/src/views/dashboard/index.vue b/healthlink-his-ui/src/views/dashboard/index.vue index bc1615cf8..6d809c8e4 100644 --- a/healthlink-his-ui/src/views/dashboard/index.vue +++ b/healthlink-his-ui/src/views/dashboard/index.vue @@ -1,16 +1,16 @@