diff --git a/healthlink-his-ui/src/i18n/locales/enUS.json b/healthlink-his-ui/src/i18n/locales/enUS.json index a0487bfcf..f3c02bc7e 100644 --- a/healthlink-his-ui/src/i18n/locales/enUS.json +++ b/healthlink-his-ui/src/i18n/locales/enUS.json @@ -1364,7 +1364,14 @@ "exportDev": "Export feature in development", "collectSuccess": "Collected {count} indicators", "collectFailed": "Collection failed", - "monthLabels": ["Jan", "Feb", "Mar", "Apr", "May", "Jun"] + "monthLabels": [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun" + ] }, "execution": { "title": "Inpatient Nurse Execution", @@ -1569,5 +1576,811 @@ "rollFee": "Roll Fee Config", "medicineReturn": "Medicine Return" } + }, + "surgicalschedule": { + "operCode": "Surgery Order No.", + "placeholderOperCode": "Enter surgery order no.", + "scheduleDate": "Schedule Date", + "rangeSeparator": "to", + "startDate": "Start Date", + "endDate": "End Date", + "orgName": "Organization", + "placeholderOrg": "Select organization", + "applyDept": "Apply Department", + "placeholderDept": "Select department", + "patientNameOrPinyin": "Name/Pinyin", + "placeholderNameOrPinyin": "Enter name or pinyin", + "search": "Search", + "reset": "Reset", + "add": "New Surgery Schedule", + "billing": "Billing", + "medicalAdvice": "Orders", + "export": "Export", + "patientName": "Name", + "identifierNo": "Card No.", + "operName": "Surgery Name", + "surgeryType": "Surgery Type", + "surgeryNature": "Surgery Nature", + "surgeonName": "Surgeon", + "anesMethod": "Anesthesia Method", + "operator": "Operator", + "actions": "Actions", + "view": "View", + "edit": "Edit", + "cancel": "Cancel", + "find": "Find", + "refresh": "Refresh", + "back": "Back", + "save": "Save", + "patientBasicInfo": "Patient Basic Info", + "patientId": "Patient ID", + "gender": "Gender", + "male": "Male", + "female": "Female", + "unknown": "Unknown", + "age": "Age", + "patientWeight": "Weight", + "placeholderWeight": "Enter weight (kg)", + "patientHeight": "Height", + "placeholderHeight": "Enter height (cm)", + "surgeryApplyInfo": "Surgery Application Info", + "feeType": "Fee Type", + "applyTime": "Apply Time", + "applyDoctor": "Apply Doctor", + "placeholderSurgeryType": "Select surgery type", + "surgerySchedule": "Surgery Schedule", + "placeholderScheduleDate": "Select schedule date", + "sequenceNo": "Sequence No.", + "placeholderSequenceNo": "Enter sequence no.", + "roomCode": "Room Code", + "placeholderRoomCode": "Select room code", + "tableNo": "Table No.", + "placeholderTableNo": "Enter table no.", + "isFirstSurgery": "First Surgery", + "yes": "Yes", + "no": "No", + "natureAndSite": "Nature and Site", + "placeholderSurgeryNature": "Select surgery nature", + "surgerySite": "Surgery Site", + "placeholderSurgerySite": "Select surgery site", + "allergyMedication": "Allergy Medication", + "allergyRemark": "Allergy Remark", + "placeholderAllergyRemark": "Enter allergy remark", + "medicalStaff": "Medical Staff", + "assistant1": "Assistant 1", + "placeholderAssistant1": "Select assistant 1", + "assistant2": "Assistant 2", + "placeholderAssistant2": "Select assistant 2", + "assistant3": "Assistant 3", + "placeholderAssistant3": "Select assistant 3", + "scrubNurse": "Scrub Nurse", + "placeholderScrubNurse": "Select scrub nurse", + "instrumentNurse1": "Instrument Nurse 1", + "placeholderInstrumentNurse1": "Select instrument nurse 1", + "instrumentNurse2": "Instrument Nurse 2", + "placeholderInstrumentNurse2": "Select instrument nurse 2", + "circulatingNurse1": "Circulating Nurse 1", + "placeholderCirculatingNurse1": "Select circulating nurse 1", + "placeholderAnesMethod": "Select anesthesia method", + "circulatingNurse2": "Circulating Nurse 2", + "placeholderCirculatingNurse2": "Select circulating nurse 2", + "externalExpert": "External Expert", + "externalExpertName": "External Expert Name", + "placeholderExternalExpertName": "Enter external expert name", + "anesDoctor1": "Anesthesia Doctor 1", + "placeholderAnesDoctor1": "Select anesthesia doctor 1", + "anesDoctor2": "Anesthesia Doctor 2", + "placeholderAnesDoctor2": "Select anesthesia doctor 2", + "anesDoctor3": "Anesthesia Doctor 3", + "placeholderAnesDoctor3": "Select anesthesia doctor 3", + "preDiagnosis": "Preoperative Diagnosis", + "placeholderPreDiagnosis": "Enter preoperative diagnosis", + "postDiagnosis": "Postoperative Diagnosis", + "placeholderPostDiagnosis": "Enter postoperative diagnosis", + "surgeryProcess": "Surgery Process", + "admissionTime": "Admission Time", + "placeholderAdmissionTime": "Select admission time", + "entryTime": "Entry Time", + "placeholderEntryTime": "Select entry time", + "anesStartTime": "Anesthesia Start", + "placeholderAnesStartTime": "Select anesthesia start time", + "startTime": "Incision Time", + "placeholderStartTime": "Select incision time", + "endTime": "Surgery End", + "placeholderEndTime": "Select surgery end time", + "anesEndTime": "Anesthesia End", + "placeholderAnesEndTime": "Select anesthesia end time", + "incisionType": "Incision Type", + "placeholderIncisionType": "Select incision type", + "infectionDiagnosis": "Infection Diagnosis", + "placeholderInfectionDiagnosis": "Enter infection diagnosis", + "isolationType": "Isolation Type", + "placeholderIsolationType": "Enter isolation type", + "implantFlag": "Implant Flag", + "implantSerial": "Implant Serial/Batch", + "placeholderImplantSerial": "Enter implant serial/batch", + "bloodLoss": "Blood Loss", + "placeholderBloodLoss": "Enter blood loss", + "bloodTrans": "Blood Transfusion", + "placeholderBloodTrans": "Enter blood transfusion", + "remarkInfo": "Remark Info", + "communicationInfo": "Communication Info", + "placeholderCommunicationInfo": "Enter communication info", + "remark": "Remark", + "placeholderRemark": "Enter remark", + "applyQuery": "Surgery Application Query", + "applyTimeRange": "Apply Time Range", + "placeholderSurgeon": "Select surgeon", + "confirm": "Confirm", + "patientInfo": "Patient Info:", + "billingAccount": "Billing Account", + "loadingAdvice": "Loading order data, please wait...", + "surgeryLevel": "Surgery Level", + "anesthesiaType": "Anesthesia Type", + "exportFilename": "surgery_schedule.csv", + "addSchedule": "New Surgery Schedule", + "editTitle": "Edit Surgery Schedule", + "viewTitle": "View Surgery Schedule", + "temporaryMedicalTitle": "Outpatient Intraoperative Temporary Orders", + "insurance": "Insurance", + "selfPay": "Self Pay", + "immediate": "Immediate", + "ivInjection": "IV Injection", + "unknownMedicine": "Unknown Medicine", + "msgSelectScheduleDate": "Please select schedule date", + "msgInputSequenceNo": "Please enter sequence no.", + "msgSequenceNoNumber": "Sequence no. must be a number", + "msgSelectRoomCode": "Please select room code", + "msgSelectTableNo": "Please select table no.", + "msgSelectSurgeryNature": "Please select surgery nature", + "msgSelectSurgerySite": "Please select surgery site", + "msgSelectAnesMethod": "Please select anesthesia method", + "msgInputPreDiagnosis": "Please enter preoperative diagnosis", + "msgSelectSurgeon": "Please select surgeon", + "msgGetDetailFailed": "Failed to get surgery schedule detail", + "msgConfirmDelete": "Are you sure to cancel surgery schedule \"{name}\"?", + "msgDeletedSuccess": "Surgery schedule cancelled", + "msgSelectForBilling": "Please select a surgery schedule for billing", + "msgNoVisitForBilling": "This schedule is not linked to an encounter. Please confirm the patient has completed registration.", + "msgGetAccountFailed": "Failed to get account info. Please confirm the encounter has a billing account.", + "msgGetAccountError": "Failed to get account info, please retry.", + "chargeDialogTitle": "Surgery Billing - {name} - {op}", + "msgSelectForAdvice": "Please select a surgery schedule for orders", + "msgNoVisitForAdvice": "This schedule is not linked to an encounter. Please confirm the patient has completed registration.", + "msgRefreshFailed": "Failed to refresh data, please retry", + "msgAdviceGenerated": "Temporary orders generated (signed)", + "msgAdviceDeleted": "Order deleted, moved back to pending list", + "msgPatientInfoIncomplete": "Patient info incomplete, please close and reopen", + "msgTooManyAdvices": "Too many pending orders ({count}), showing first {max}", + "msgQuoteSuccess": "Successfully quoted latest billing medicines!", + "msgGetChargeFailed": "Failed to get billing data, please retry", + "msgAddSuccess": "Added successfully", + "msgAddFailed": "Failed to add surgery schedule, please check form", + "msgEditSuccess": "Updated successfully", + "msgUpdateFailed": "Failed to update surgery schedule, please check form", + "msgValidateFailed": "Please check form, red fields are required", + "msgGetApplyListFailed": "Failed to get surgery application list, please retry", + "msgSelectApplyRecord": "Please select a surgery application record", + "msgExportConfirm": "Export surgery schedule list with current filters?", + "tmp": { + "title": "Outpatient Intraoperative Temporary Orders", + "patientLabel": "Patient: ", + "cardNoLabel": "Card No.: ", + "operCodeLabel": "Surgery Order No.: ", + "deptLabel": "Department: ", + "doctorLabel": "Doctor: ", + "roleLabel": "Role: ", + "refresh": "Refresh", + "quoteBilling": "Quote Billing", + "sectionBillingTitle": "1. Quoted Billing Medicines (Pending Orders)", + "collapse": "Collapse", + "expandAll": "Expand All", + "items": " items", + "colSeq": "No.", + "colMedicineName": "Medicine Name", + "colSpec": "Specification", + "colQuantity": "Quantity", + "colBatchNo": "Batch No.", + "colUnitPrice": "Unit Price", + "colSubtotal": "Subtotal", + "colInsurance": "Insurance", + "insuranceIn": "Insurance Covered", + "selfPay": "Self Pay", + "total": "Total", + "sectionAdviceTitle": "2. Temporary Orders Preview (Generated)", + "colAdviceName": "Order Name", + "colDosage": "Dosage", + "colUnit": "Unit", + "colUsage": "Usage", + "colFrequency": "Frequency", + "immediate": "Immediate", + "colExecuteTime": "Execute Time", + "colAction": "Action", + "edit": "Edit", + "delete": "Delete", + "sectionSignatureTitle": "3. Doctor Electronic Signature", + "signDoctorLabel": "Signing Doctor: ", + "signTimeLabel": "Signing Time: ", + "unsigned": "Unsigned", + "cancel": "Cancel", + "alreadySigned": "Already Signed", + "signAndGenerate": "Sign and Generate Orders", + "signDialogTitle": "Signature Password", + "enterAccountPassword": "Please enter your account password:", + "placeholderPassword": "Enter password", + "confirm": "Confirm", + "editDialogTitle": "Edit Order", + "placeholderDosage": "Enter dosage", + "placeholderUnit": "Enter unit", + "placeholderSelectUsage": "Select usage", + "loading": "Loading...", + "save": "Save", + "tip": "Tip", + "unknownUser": "Unknown User", + "usageIv": "IV Injection", + "usagePo": "Oral", + "usageIm": "Intramuscular", + "usageSc": "Subcutaneous", + "usageIvgtt": "IV Drip", + "usageIh": "Inhalation", + "usageIt": "Sublingual", + "usageIp": "Intraperitoneal", + "usageTop": "Topical", + "usagePr": "Rectal", + "msgFillDosage": "Please enter dosage", + "msgDosageMustBeNumber": "Dosage must be a number", + "msgFillUsage": "Please enter usage", + "msgEditSaved": "Order modification saved to server", + "msgSaveFailedRetry": "Save failed, please retry", + "msgEnterPassword": "Please enter password", + "msgSignSuccess": "Signature successful", + "msgConfirmRollback": "Are you sure to rollback this order?", + "msgRollbackSuccess": "Rollback successful", + "msgRollbackFailedRetry": "Rollback failed, please retry", + "msgSignFirst": "Please sign electronically first", + "msgSubmitting": "Submitting orders, please wait...", + "msgNoAdviceData": "No order data to save", + "msgSaveSuccess": "Temporary orders saved successfully", + "msgSaveFailed": "Failed to save orders: ", + "unknownError": "Unknown error" + }, + "msgGetScheduleListFailed": "Failed to get surgery schedule list, please try again later", + "msgTooManyDrafts": "Too many pending advices ({count}), only showing first {max}", + "placeholderSurgeryRemark": "Enter surgery remark", + "scheduleTime": "Schedule Time", + "surgeryNameLabel": "Surgery Name", + "surgeryRemark": "Surgery Remark" + }, + "surgerymanage": { + "surgeryNo": "Surgery No.", + "surgeryName": "Surgery Name", + "patientName": "Patient Name", + "surgeryStatus": "Surgery Status", + "surgeryType": "Surgery Type", + "plannedTime": "Planned Time", + "rangeSeparator": "to", + "startDate": "Start Date", + "endDate": "End Date", + "search": "Search", + "reset": "Reset", + "addSurgery": "New Surgery", + "refresh": "Refresh", + "applyDate": "Apply Date", + "surgeryOrderNo": "Surgery Order No.", + "applyDoctor": "Apply Doctor", + "applyDept": "Apply Department", + "surgeryLevel": "Surgery Level", + "emergency": "Emergency", + "yes": "Yes", + "no": "No", + "implantMaterial": "Implant Material", + "mainSurgeon": "Main Surgeon", + "anesthetist": "Anesthetist", + "anesthesiaType": "Anesthesia Type", + "bodySite": "Body Site", + "operatingRoom": "Operating Room", + "operatingRoomDept": "OR Department", + "execDept": "Exec Department", + "status": "Status", + "actions": "Actions", + "view": "View", + "edit": "Edit", + "cancel": "Cancel", + "schedule": "Schedule", + "start": "Start", + "complete": "Complete", + "currentStatus": "Current Status", + "viewModeTip": "View mode: all fields are read-only", + "patient": "Patient", + "placeholderPatient": "Select patient", + "noIdCard": "No ID", + "editModePatientTip": "Patient info cannot be changed in edit mode", + "encounterNo": "Encounter No.", + "placeholderEncounterNo": "Select encounter", + "originalEncounter": "Original encounter", + "none": "None", + "placeholderAutoDoctor": "Auto-detected from current login", + "placeholderAutoDept": "Auto-detected from doctor's department", + "surgeryCode": "Surgery Code", + "placeholderSurgeryCode": "Enter surgery code", + "plannedSurgeryTime": "Planned Surgery Time", + "placeholderDateTime": "Select date and time", + "placeholderBodySite": "Select body site", + "surgeryTeam": "Surgery Team", + "placeholderMainSurgeon": "Select main surgeon", + "placeholderAnesthetist": "Select anesthetist", + "assistant1": "Assistant 1", + "placeholderAssistant1": "Select assistant 1", + "assistant2": "Assistant 2", + "placeholderAssistant2": "Select assistant 2", + "scrubNurse": "Scrub Nurse", + "placeholderScrubNurse": "Select scrub nurse", + "placeholderAnesthesiaType": "Select anesthesia type", + "placeholderOperatingRoom": "Select operating room", + "placeholderExecDept": "Select exec department", + "diagnosisInfo": "Diagnosis Info", + "preoperativeDiagnosis": "Preoperative Diagnosis", + "placeholderPreoperativeDiagnosis": "Enter preoperative diagnosis", + "postoperativeDiagnosis": "Postoperative Diagnosis", + "placeholderPostoperativeDiagnosis": "Enter postoperative diagnosis", + "surgeryDescription": "Surgery Description", + "placeholderSurgeryDescription": "Enter surgery description", + "postoperativeAdvice": "Postoperative Advice", + "placeholderPostoperativeAdvice": "Enter postoperative advice", + "surgeryFee": "Surgery Fee", + "anesthesiaFee": "Anesthesia Fee", + "totalFee": "Total Fee", + "incisionLevel": "Incision Level", + "placeholderIncisionLevel": "Select incision level", + "healingLevel": "Healing Level", + "placeholderHealingLevel": "Select healing level", + "complications": "Complications", + "placeholderComplications": "Enter complications", + "emergencyFlag": "Emergency Flag", + "implantFlag": "Implant Flag", + "operatingRoomConfirmUser": "OR Confirmer", + "placeholderOperatingRoomConfirmUser": "OR confirmer", + "operatingRoomConfirmTime": "OR Confirm Time", + "placeholderOperatingRoomConfirmTime": "Select OR confirm time", + "remark": "Remark", + "placeholderRemark": "Enter remark", + "close": "Close", + "confirm": "Confirm", + "placeholderSurgeryNo": "Enter surgery no.", + "placeholderSurgeryName": "Enter surgery name", + "placeholderPatientName": "Enter patient name", + "placeholderSurgeryStatus": "Select surgery status", + "placeholderSurgeryType": "Select surgery type", + "statusPending": "Pending", + "statusScheduled": "Scheduled", + "statusInProgress": "In Progress", + "statusCompleted": "Completed", + "statusCancelled": "Cancelled", + "statusPaused": "Paused", + "healingGradeA": "Grade A Healing", + "healingGradeB": "Grade B Healing", + "healingGradeC": "Grade C Healing", + "encounterRegistered": "Registered", + "encounterInProgress": "In Progress", + "encounterCompleted": "Completed", + "encounterCancelled": "Cancelled", + "unknown": "Unknown", + "valPatientRequired": "Please select a patient", + "valSurgeryNameRequired": "Please enter surgery name", + "valSurgeryTypeRequired": "Please select surgery type", + "valSurgeryLevelRequired": "Please select surgery level", + "valPlannedTimeRequired": "Please select planned surgery time", + "valMainSurgeonRequired": "Please select main surgeon", + "valAnesthesiaTypeRequired": "Please select anesthesia type", + "valBodySiteRequired": "Please enter body site", + "addSurgeryTitle": "New Surgery", + "editSurgeryTitle": "Edit Surgery", + "viewSurgeryTitle": "View Surgery", + "errorGetSurgeryList": "Failed to get surgery list, please retry", + "errorGetPatientList": "Failed to get patient list", + "warningNoEncounter": "No encounter records, please register first", + "errorGetEncounterList": "Failed to get encounter list", + "errorGetDoctorList": "Failed to get doctor list", + "errorGetOperatingRoomList": "Failed to get operating room list", + "errorGetNurseList": "Failed to get nurse list", + "errorGetOrgList": "Failed to get department list", + "warningEditNotAllowed": "Current status does not allow editing", + "errorGetSurgeryInfo": "Failed to get surgery info", + "infoViewModeNoSubmit": "View mode, cannot submit", + "successAdd": "Added successfully", + "errorAddSurgery": "Failed to add surgery, please check form", + "successUpdate": "Updated successfully", + "errorUpdateSurgery": "Failed to update surgery, please check form", + "errorFormValidation": "Please check form, red fields are required", + "confirmDelete": "Are you sure to delete surgery \"{name}\"?", + "successDelete": "Deleted successfully", + "errorDelete": "Delete failed", + "confirmCancel": "Are you sure to cancel surgery \"{name}\"?", + "successCancelled": "Surgery cancelled", + "errorCancel": "Cancel failed", + "warningCancelNotAllowed": "Current status does not allow cancellation", + "warningSelectOperatingRoom": "Please select operating room first", + "warningSetPlannedTime": "Please set planned surgery time first", + "confirmSchedule": "Are you sure to schedule surgery \"{name}\"?", + "successScheduled": "Surgery scheduled", + "errorSchedule": "Schedule failed", + "confirmStart": "Are you sure to start surgery \"{name}\"?", + "successStarted": "Surgery started", + "errorStart": "Failed to start surgery", + "confirmComplete": "Are you sure to complete surgery \"{name}\"?", + "successCompleted": "Surgery completed", + "errorComplete": "Failed to complete surgery", + "infoSelectEncounter": "Please select an encounter", + "sun": "Sun", + "mon": "Mon", + "tue": "Tue", + "wed": "Wed", + "thu": "Thu", + "fri": "Fri", + "sat": "Sat" + }, + "emr": { + "timeliness": { + "stats": { "pending": "Pending", "completed": "Completed", "overdue": "Overdue", "rate": "Completion Rate" }, + "department": "Department", + "emrTypeLabel": "EMR Type", + "statusLabel": "Status", + "all": "All", + "search": "Search", + "reset": "Reset", + "doctor": "Doctor", + "requiredHours": "Required Hours(h)", + "deadline": "Deadline", + "actualCompleteTime": "Actual Complete Time", + "emrType": { "admission": "Admission Record", "firstCourse": "First Course", "dailyCourse": "Daily Course", "discharge": "Discharge Record" }, + "status": { "pending": "Pending", "completed": "Completed", "overdue": "Overdue" } + }, + "sync": { + "title": "EMR Data Sync", + "stats": "Sync Statistics", + "emrCount": "EMR Count", + "revisionCount": "Revision History", + "searchIndexCount": "Search Index", + "operations": "Data Sync Operations", + "alertMessage": "Sync will clear existing revision history and search index, then regenerate from EMR table.", + "syncing": "Syncing...", + "startSync": "Start Sync", + "refreshStats": "Refresh Statistics", + "confirmMessage": "Sync EMR data? This will clear existing revision history and search index, then regenerate.", + "confirmTitle": "Confirm Sync", + "syncComplete": "Sync Complete", + "syncFailed": "Sync Failed", + "unknownError": "Unknown Error" + }, + "archive": { + "title": "EMR Print & Archive", + "syncing": "Syncing...", + "syncHistory": "Sync History Data", + "refreshStats": "Refresh Statistics", + "totalRecords": "Total Records", + "archived": "Archived", + "pendingArchive": "Pending Archive", + "archiveRate24h": "24h Archive Rate", + "patientName": "Patient Name", + "status": "Status", + "printed": "Printed", + "lost": "Lost", + "query": "Query", + "patient": "Patient", + "emrType": "EMR Type", + "title_col": "Title", + "operation": "Operation", + "print": "Print", + "archive": "Archive", + "reprint": "Reprint", + "printBy": "Printed By", + "printCount": "Print Count", + "time": "Time", + "archiver": "Archiver", + "confirmArchive": "Confirm Archive", + "archivedSuccess": "Archived", + "reprintAdded": "Reprint record added", + "syncConfirmMessage": "Will sync data from EMR table to revision history and search index. Continue?", + "syncConfirmTitle": "Confirm Sync", + "syncComplete": "Sync Complete", + "syncFailed": "Sync Failed" + }, + "completeness": { + "executeCheck": "Execute Completeness Check", + "emrId": "EMR ID", + "emrIdPlaceholder": "Enter EMR ID", + "encounterId": "Encounter ID", + "encounterIdPlaceholder": "Enter Encounter ID", + "totalItems": "Total Items", + "requiredTotal": "Required Total", + "requiredPassed": "Required Passed", + "isComplete": "Is Complete", + "yes": "Yes", + "no": "No", + "failedItemsAlert": "Failed Items Alert", + "resultDetail": "Check Result Details", + "checkItem": "Check Item", + "category": "Category", + "required": "Required", + "requiredYes": "Required", + "requiredNo": "Optional", + "checkResult": "Result", + "pass": "Pass", + "fail": "Fail", + "detail": "Detail", + "checkTime": "Check Time", + "categoryBasic": "Basic Info", + "categoryExamination": "Examination", + "categoryDiagnosis": "Diagnosis", + "categoryTreatment": "Treatment", + "categorySignature": "Signature", + "enterEmrId": "Please enter EMR ID", + "enterEncounterId": "Please enter Encounter ID", + "checkPassed": "EMR completeness check passed", + "checkFailed": "EMR completeness check failed, there are non-conforming items", + "checkError": "Check execution failed", + "getResultError": "Failed to get check results" + }, + "warehouse": { + "extractTitle": "Structured Data Extraction", + "emrId": "EMR ID", + "emrIdPlaceholder": "Enter EMR ID", + "extract": "Extract Data", + "viewTitle": "Structured Data View", + "encounterId": "Encounter ID", + "encounterIdPlaceholder": "Enter Encounter ID", + "query": "Query", + "dataType": "Data Type", + "dataKey": "Data Key", + "dataValue": "Data Value", + "dataUnit": "Unit", + "recordTime": "Record Time", + "qualityScore": "Quality Score", + "calculate": "Calculate Score", + "queryHistory": "Query History", + "totalScore": "Total Score", + "completenessScore": "Completeness", + "timelinessScore": "Timeliness", + "accuracyScore": "Accuracy", + "scoreTime": "Score Time", + "emrType": "EMR Type", + "typeVitalSigns": "Vital Signs", + "typeLabResults": "Lab Results", + "typeDiagnosis": "Diagnosis", + "typeMedication": "Medication", + "enterEmrId": "Please enter EMR ID", + "enterEncounterId": "Please enter Encounter ID", + "extractSuccess": "Extraction complete, {count} records", + "extractFailed": "Extraction failed", + "queryFailed": "Query failed", + "calculateSuccess": "Score calculation complete", + "calculateFailed": "Calculation failed" + }, + "revision": { + "title": "EMR Revision History", + "patient": "Patient", + "patientName": "Patient Name", + "doctor": "Doctor", + "doctorName": "Doctor Name", + "operator": "Operator", + "operatorName": "Operator Name", + "emrType": "EMR Type", + "all": "All", + "emrTypeAdmission": "Admission Record", + "emrTypeFirstCourse": "First Course", + "emrTypeDailyCourse": "Daily Course", + "emrTypeDischarge": "Discharge Record", + "search": "Search", + "reset": "Reset", + "emrTitle": "EMR Title", + "emrPrefix": "EMR #", + "attendingDoctor": "Attending Doctor", + "department": "Department", + "encounterNo": "Encounter No.", + "operationType": "Operation Type", + "changeContent": "Change Content", + "time": "Time", + "operation": "Operation", + "detail": "Detail", + "revisionDetail": "Revision Detail", + "version": "Version", + "contentSnapshot": "Content Snapshot", + "opCreate": "Create", + "opEdit": "Edit", + "opApprove": "Approve", + "opSign": "Sign", + "loadFailed": "Load failed" + } + }, + "surgery": { + "safety": { + "patient": "Patient", + "patientName": "Patient Name", + "checkPhase": "Check Phase", + "all": "All", + "preOp": "Pre-Op", + "intraOp": "Intra-Op", + "postOp": "Post-Op", + "search": "Search", + "reset": "Reset", + "add": "Add", + "surgeryName": "Surgery Name", + "surgeon": "Surgeon", + "anesthesiologist": "Anesthesiologist", + "circulatingNurse": "Circulating Nurse", + "checkTime": "Check Time", + "status": "Status", + "pending": "Pending", + "inProgress": "In Progress", + "completed": "Completed", + "operation": "Operation", + "edit": "Edit", + "delete": "Delete", + "addTitle": "Add Surgery Safety Check", + "editTitle": "Edit Surgery Safety Check", + "operationSuccess": "Operation successful", + "confirmDelete": "Confirm delete?", + "tip": "Tip", + "deleteSuccess": "Deleted successfully", + "checkContent": "Check Content", + "remark": "Remark", + "cancel": "Cancel", + "confirm": "Confirm" + } + }, + "operatingroom": { + "name": "Room Name", + "placeholderName": "Enter room name", + "status": "Status", + "placeholderStatus": "Select status", + "search": "Search", + "reset": "Reset", + "addRoom": "Add Room", + "batchEnable": "Batch Enable", + "batchDisable": "Batch Disable", + "seq": "No.", + "roomNo": "Room No.", + "type": "Type", + "department": "Department", + "location": "Location", + "equipment": "Equipment", + "capacity": "Capacity", + "enabled": "Enabled", + "disabled": "Disabled", + "displayOrder": "Display Order", + "actions": "Actions", + "edit": "Edit", + "view": "View", + "enable": "Enable", + "disable": "Disable", + "placeholderRoomNo": "Enter room no.", + "placeholderCapacity": "Enter capacity", + "placeholderType": "Select type", + "placeholderDept": "Select department", + "placeholderDisplayOrder": "Enter display order", + "placeholderLocation": "Enter location", + "placeholderEquipment": "Enter equipment, e.g.: anesthesia machine, monitor, etc.", + "placeholderRemark": "Enter remark", + "remark": "Remark", + "confirm": "Confirm", + "cancel": "Cancel", + "viewTitle": "Room Details", + "roomCode": "Room Code", + "valRoomNoRequired": "Room no. is required", + "valNameRequired": "Room name is required", + "valCapacityRequired": "Capacity is required", + "valCapacityNumber": "Capacity must be a number", + "valDeptRequired": "Please select department", + "addTitle": "Add Room", + "editTitle": "Edit Room", + "errorGetList": "Failed to get room list", + "errorGetListRetry": "Failed to get room list, please retry", + "successModify": "Modified successfully", + "errorModify": "Modify failed", + "errorModifyRetry": "Modify failed, please retry", + "successAdd": "Added successfully", + "errorAdd": "Add failed", + "errorAddRetry": "Add failed, please retry", + "errorForm": "Please complete the form", + "confirmEnable": "Enable selected rooms?", + "successEnable": "Enabled successfully", + "confirmDisable": "Disable selected rooms?", + "successDisable": "Disabled successfully" + }, + "preopmanage": { + "totalDiscussions": "Total Discussions", + "draft": "Draft", + "pendingSignature": "Pending Signature", + "pendingReview": "Pending Review", + "completed": "Completed", + "rejected": "Rejected", + "title": "Preop Discussion Management", + "newDiscussion": "New Discussion", + "patient": "Patient", + "patientName": "Patient Name", + "surgeryLevel": "Surgery Level", + "all": "All", + "level1": "Level 1", + "level2": "Level 2", + "level3": "Level 3", + "level4": "Level 4", + "statusLabel": "Status", + "search": "Search", + "reset": "Reset", + "seq": "No.", + "surgeryName": "Surgery Name", + "level": "Level", + "levelSuffix": "", + "host": "Host", + "conclusion": "Conclusion", + "agreeSurgery": "Agree Surgery", + "needSupplement": "Need Supplement", + "noSurgery": "No Surgery", + "createTime": "Create Time", + "actions": "Actions", + "detail": "Detail", + "submit": "Submit", + "pass": "Pass", + "reject": "Reject", + "newDialogTitle": "New Preop Discussion", + "encounterId": "Admission No.", + "placeholderEncounterId": "Admission No.", + "preopDiagnosis": "Preop Diagnosis", + "placeholderPreopDiagnosis": "Preop Diagnosis", + "surgeryIndication": "Surgery Indication", + "placeholderSurgeryIndication": "Surgery Indication", + "mainPlan": "Main Plan", + "placeholderMainPlan": "Main Surgery Plan", + "backupPlan": "Backup Plan", + "placeholderBackupPlan": "Backup Surgery Plan", + "anesthesiaType": "Anesthesia Type", + "placeholderAnesthesiaType": "Anesthesia Type", + "discussionType": "Discussion Type", + "typeDept": "Department", + "typeFull": "Full Department", + "typeHospital": "Hospital-wide", + "risks": "Risks & Countermeasures", + "placeholderRisks": "Possible risks and countermeasures", + "postopNotes": "Postop Notes", + "placeholderPostopNotes": "Postoperative notes", + "hostName": "Host", + "placeholderHostName": "Host name", + "location": "Location", + "placeholderLocation": "Discussion location", + "conclusionLabel": "Conclusion", + "needFurtherCheck": "Need Further Check", + "save": "Save", + "detailTitle": "Discussion Detail", + "detailPatient": "Patient", + "detailSurgeryName": "Surgery Name", + "detailSurgeryLevel": "Surgery Level", + "detailHost": "Host", + "detailConclusion": "Conclusion", + "detailStatus": "Status", + "discussionContent": "Discussion Content", + "participants": "Participants", + "name": "Name", + "titleProf": "Title", + "role": "Role", + "signature": "Signature", + "signed": "Signed", + "unsigned": "Unsigned", + "signTime": "Sign Time", + "valPatientRequired": "Please enter patient name", + "valSurgeryNameRequired": "Please enter surgery name", + "valSurgeryLevelRequired": "Please select surgery level", + "valDiagnosisRequired": "Please enter preop diagnosis", + "valMainPlanRequired": "Please enter main plan", + "valHostRequired": "Please enter host", + "submitSuccess": "Submitted", + "submitFailed": "Submit failed", + "confirmApprove": "Approve this discussion?", + "confirmReject": "Reject this discussion?", + "approveSuccess": "Approved", + "rejectSuccess": "Rejected", + "approveFailed": "Approve failed", + "rejectFailed": "Reject failed", + "createSuccess": "Created successfully", + "createFailed": "Create failed" } -} +} \ No newline at end of file diff --git a/healthlink-his-ui/src/i18n/locales/viVN.json b/healthlink-his-ui/src/i18n/locales/viVN.json index ab97bc7c2..0a07dafa4 100644 --- a/healthlink-his-ui/src/i18n/locales/viVN.json +++ b/healthlink-his-ui/src/i18n/locales/viVN.json @@ -1364,7 +1364,14 @@ "exportDev": "Chức năng xuất đang phát triển", "collectSuccess": "Đã thu thập {count} chỉ số", "collectFailed": "Thu thập thất bại", - "monthLabels": ["T1", "T2", "T3", "T4", "T5", "T6"] + "monthLabels": [ + "T1", + "T2", + "T3", + "T4", + "T5", + "T6" + ] }, "execution": { "title": "Thực hiện y tá nội trú", @@ -1569,5 +1576,811 @@ "rollFee": "Cấu hình phí tự động", "medicineReturn": "Trả thuốc" } + }, + "surgicalschedule": { + "operCode": "Số phiếu phẫu thuật", + "placeholderOperCode": "Nhập số phiếu phẫu thuật", + "scheduleDate": "Thời gian xếp lịch", + "rangeSeparator": "đến", + "startDate": "Ngày bắt đầu", + "endDate": "Ngày kết thúc", + "orgName": "Cơ sở y tế", + "placeholderOrg": "Chọn cơ sở y tế", + "applyDept": "Khoa đăng ký", + "placeholderDept": "Chọn khoa", + "patientNameOrPinyin": "Tên/Mã pinyin", + "placeholderNameOrPinyin": "Nhập tên hoặc mã pinyin", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "add": "Thêm lịch phẫu thuật", + "billing": "Viện phí", + "medicalAdvice": "Y lệnh", + "export": "Xuất bảng", + "patientName": "Họ tên", + "identifierNo": "Số thẻ", + "operName": "Tên phẫu thuật", + "surgeryType": "Loại phẫu thuật", + "surgeryNature": "Tính chất phẫu thuật", + "surgeonName": "Bác sĩ chính", + "anesMethod": "Phương pháp gây mê", + "operator": "Người thao tác", + "actions": "Thao tác", + "view": "Xem", + "edit": "Sửa", + "cancel": "Hủy", + "find": "Tìm", + "refresh": "Làm mới", + "back": "Quay lại", + "save": "Lưu", + "patientBasicInfo": "Thông tin cơ bản bệnh nhân", + "patientId": "Mã bệnh nhân", + "gender": "Giới tính", + "male": "Nam", + "female": "Nữ", + "unknown": "Không xác định", + "age": "Tuổi", + "patientWeight": "Cân nặng", + "placeholderWeight": "Nhập cân nặng (kg)", + "patientHeight": "Chiều cao", + "placeholderHeight": "Nhập chiều cao (cm)", + "surgeryApplyInfo": "Thông tin đăng ký phẫu thuật", + "feeType": "Loại phí", + "applyTime": "Thời gian đăng ký", + "applyDoctor": "Bác sĩ đăng ký", + "placeholderSurgeryType": "Chọn loại phẫu thuật", + "surgerySchedule": "Xếp lịch phẫu thuật", + "placeholderScheduleDate": "Chọn thời gian xếp lịch", + "sequenceNo": "Thứ tự mổ", + "placeholderSequenceNo": "Nhập thứ tự mổ", + "roomCode": "Số phòng mổ", + "placeholderRoomCode": "Chọn số phòng mổ", + "tableNo": "Bàn mổ", + "placeholderTableNo": "Nhập bàn mổ", + "isFirstSurgery": "Phẫu thuật đầu tiên", + "yes": "Có", + "no": "Không", + "natureAndSite": "Tính chất và vị trí", + "placeholderSurgeryNature": "Chọn tính chất phẫu thuật", + "surgerySite": "Vị trí phẫu thuật", + "placeholderSurgerySite": "Chọn vị trí phẫu thuật", + "allergyMedication": "Thuốc dị ứng", + "allergyRemark": "Ghi chú dị ứng", + "placeholderAllergyRemark": "Nhập ghi chú dị ứng", + "medicalStaff": "Nhân viên y tế", + "assistant1": "Trợ lý 1", + "placeholderAssistant1": "Chọn trợ lý 1", + "assistant2": "Trợ lý 2", + "placeholderAssistant2": "Chọn trợ lý 2", + "assistant3": "Trợ lý 3", + "placeholderAssistant3": "Chọn trợ lý 3", + "scrubNurse": "Điều dưỡng rửa tay", + "placeholderScrubNurse": "Chọn điều dưỡng rửa tay", + "instrumentNurse1": "Điều dưỡng dụng cụ 1", + "placeholderInstrumentNurse1": "Chọn điều dưỡng dụng cụ 1", + "instrumentNurse2": "Điều dưỡng dụng cụ 2", + "placeholderInstrumentNurse2": "Chọn điều dưỡng dụng cụ 2", + "circulatingNurse1": "Điều dưỡng vòng ngoài 1", + "placeholderCirculatingNurse1": "Chọn điều dưỡng vòng ngoài 1", + "placeholderAnesMethod": "Chọn phương pháp gây mê", + "circulatingNurse2": "Điều dưỡng vòng ngoài 2", + "placeholderCirculatingNurse2": "Chọn điều dưỡng vòng ngoài 2", + "externalExpert": "Chuyên gia bên ngoài", + "externalExpertName": "Tên chuyên gia", + "placeholderExternalExpertName": "Nhập tên chuyên gia", + "anesDoctor1": "Bác sĩ gây mê 1", + "placeholderAnesDoctor1": "Chọn bác sĩ gây mê 1", + "anesDoctor2": "Bác sĩ gây mê 2", + "placeholderAnesDoctor2": "Chọn bác sĩ gây mê 2", + "anesDoctor3": "Bác sĩ gây mê 3", + "placeholderAnesDoctor3": "Chọn bác sĩ gây mê 3", + "preDiagnosis": "Chẩn đoán trước mổ", + "placeholderPreDiagnosis": "Nhập chẩn đoán trước mổ", + "postDiagnosis": "Chẩn đoán sau mổ", + "placeholderPostDiagnosis": "Nhập chẩn đoán sau mổ", + "surgeryProcess": "Quy trình phẫu thuật", + "admissionTime": "Thời gian vào phòng", + "placeholderAdmissionTime": "Chọn thời gian vào phòng", + "entryTime": "Thời gian vào bàn mổ", + "placeholderEntryTime": "Chọn thời gian vào bàn mổ", + "anesStartTime": "Bắt đầu gây mê", + "placeholderAnesStartTime": "Chọn thời gian bắt đầu gây mê", + "startTime": "Thời gian rạch", + "placeholderStartTime": "Chọn thời gian rạch", + "endTime": "Kết thúc phẫu thuật", + "placeholderEndTime": "Chọn thời gian kết thúc", + "anesEndTime": "Kết thúc gây mê", + "placeholderAnesEndTime": "Chọn thời gian kết thúc gây mê", + "incisionType": "Loại vết rạch", + "placeholderIncisionType": "Chọn loại vết rạch", + "infectionDiagnosis": "Chẩn đoán nhiễm trùng", + "placeholderInfectionDiagnosis": "Nhập chẩn đoán nhiễm trùng", + "isolationType": "Loại cách ly", + "placeholderIsolationType": "Nhập loại cách ly", + "implantFlag": "Có cấy ghép", + "implantSerial": "Số sêri/Lô cấy ghép", + "placeholderImplantSerial": "Nhập số sêri/lô cấy ghép", + "bloodLoss": "Lượng máu mất", + "placeholderBloodLoss": "Nhập lượng máu mất", + "bloodTrans": "Lượng máu truyền", + "placeholderBloodTrans": "Nhập lượng máu truyền", + "remarkInfo": "Thông tin ghi chú", + "communicationInfo": "Thông tin trao đổi", + "placeholderCommunicationInfo": "Nhập thông tin trao đổi", + "remark": "Ghi chú", + "placeholderRemark": "Nhập ghi chú", + "applyQuery": "Tìm kiếm đăng ký phẫu thuật", + "applyTimeRange": "Khoảng thời gian đăng ký", + "placeholderSurgeon": "Chọn bác sĩ chính", + "confirm": "Xác nhận", + "patientInfo": "Thông tin BN:", + "billingAccount": "Tài khoản viện phí", + "loadingAdvice": "Đang tải dữ liệu y lệnh, vui lòng đợi...", + "surgeryLevel": "Cấp phẫu thuật", + "anesthesiaType": "Phương pháp gây mê", + "exportFilename": "danh_sach_phau_thuat.csv", + "addSchedule": "Thêm lịch phẫu thuật", + "editTitle": "Sửa lịch phẫu thuật", + "viewTitle": "Xem lịch phẫu thuật", + "temporaryMedicalTitle": "Y lệnh tạm thời trong phẫu thuật ngoại trú", + "insurance": "BHYT", + "selfPay": "Tự trả", + "immediate": "Ngay lập tức", + "ivInjection": "Tiêm tĩnh mạch", + "unknownMedicine": "Thuốc chưa xác định", + "msgSelectScheduleDate": "Vui lòng chọn thời gian xếp lịch", + "msgInputSequenceNo": "Vui lòng nhập thứ tự mổ", + "msgSequenceNoNumber": "Thứ tự mổ phải là số", + "msgSelectRoomCode": "Vui lòng chọn số phòng mổ", + "msgSelectTableNo": "Vui lòng chọn bàn mổ", + "msgSelectSurgeryNature": "Vui lòng chọn tính chất phẫu thuật", + "msgSelectSurgerySite": "Vui lòng chọn vị trí phẫu thuật", + "msgSelectAnesMethod": "Vui lòng chọn phương pháp gây mê", + "msgInputPreDiagnosis": "Vui lòng nhập chẩn đoán trước mổ", + "msgSelectSurgeon": "Vui lòng chọn bác sĩ chính", + "msgGetDetailFailed": "Lấy chi tiết lịch phẫu thuật thất bại", + "msgConfirmDelete": "Bạn có chắc muốn hủy lịch phẫu thuật \"{name}\"?", + "msgDeletedSuccess": "Đã hủy lịch phẫu thuật", + "msgSelectForBilling": "Vui lòng chọn lịch phẫu thuật để tính phí", + "msgNoVisitForBilling": "Lịch phẫu thuật chưa liên kết khám bệnh. Vui lòng xác nhận bệnh nhân đã đăng ký.", + "msgGetAccountFailed": "Lấy thông tin tài khoản thất bại. Vui lòng xác nhận khám bệnh đã có tài khoản viện phí.", + "msgGetAccountError": "Lấy thông tin tài khoản thất bại, vui lòng thử lại.", + "chargeDialogTitle": "Viện phí phẫu thuật - {name} - {op}", + "msgSelectForAdvice": "Vui lòng chọn lịch phẫu thuật để tạo y lệnh", + "msgNoVisitForAdvice": "Lịch phẫu thuật chưa liên kết khám bệnh. Vui lòng xác nhận bệnh nhân đã đăng ký.", + "msgRefreshFailed": "Làm mới dữ liệu thất bại, vui lòng thử lại", + "msgAdviceGenerated": "Đã tạo y lệnh tạm thời (đã ký)", + "msgAdviceDeleted": "Đã xóa y lệnh, chuyển về danh sách chờ", + "msgPatientInfoIncomplete": "Thông tin bệnh nhân chưa đầy đủ, vui lòng đóng và mở lại", + "msgTooManyAdvices": "Quá nhiều y lệnh chờ ({count}), chỉ hiển thị {max} đầu tiên", + "msgQuoteSuccess": "Trích dẫn thuốc viện phí thành công!", + "msgGetChargeFailed": "Lấy dữ liệu viện phí thất bại, vui lòng thử lại", + "msgAddSuccess": "Thêm thành công", + "msgAddFailed": "Thêm lịch phẫu thuật thất bại, vui lòng kiểm tra biểu mẫu", + "msgEditSuccess": "Cập nhật thành công", + "msgUpdateFailed": "Cập nhật lịch phẫu thuật thất bại, vui lòng kiểm tra biểu mẫu", + "msgValidateFailed": "Vui lòng kiểm tra biểu mẫu, trường đỏ là bắt buộc", + "msgGetApplyListFailed": "Lấy danh sách đăng ký phẫu thuật thất bại", + "msgSelectApplyRecord": "Vui lòng chọn một bản ghi đăng ký phẫu thuật", + "msgExportConfirm": "Xuất danh sách lịch phẫu thuật với bộ lọc hiện tại?", + "tmp": { + "title": "Y lệnh tạm thời trong phẫu thuật ngoại trú", + "patientLabel": "Bệnh nhân: ", + "cardNoLabel": "Số thẻ: ", + "operCodeLabel": "Số phiếu phẫu thuật: ", + "deptLabel": "Khoa: ", + "doctorLabel": "Bác sĩ: ", + "roleLabel": "Vai trò: ", + "refresh": "Làm mới", + "quoteBilling": "Trích dẫn viện phí", + "sectionBillingTitle": "1. Thuốc viện phí đã trích dẫn (y lệnh chờ tạo)", + "collapse": "Thu gọn", + "expandAll": "Mở rộng tất cả", + "items": " mục", + "colSeq": "STT", + "colMedicineName": "Tên thuốc", + "colSpec": "Quy cách", + "colQuantity": "Số lượng", + "colBatchNo": "Số lô", + "colUnitPrice": "Đơn giá", + "colSubtotal": "Thành tiền", + "colInsurance": "BHYT", + "insuranceIn": "Trong BHYT", + "selfPay": "Tự trả", + "total": "Tổng cộng", + "sectionAdviceTitle": "2. Xem trước y lệnh tạm thời (đã tạo)", + "colAdviceName": "Tên y lệnh", + "colDosage": "Liều lượng", + "colUnit": "Đơn vị", + "colUsage": "Cách dùng", + "colFrequency": "Tần suất", + "immediate": "Ngay lập tức", + "colExecuteTime": "Thời gian thực hiện", + "colAction": "Thao tác", + "edit": "Sửa", + "delete": "Xóa", + "sectionSignatureTitle": "3. Chữ ký điện tử bác sĩ", + "signDoctorLabel": "Bác sĩ ký: ", + "signTimeLabel": "Thời gian ký: ", + "unsigned": "Chưa ký", + "cancel": "Hủy", + "alreadySigned": "Đã ký", + "signAndGenerate": "Ký và tạo y lệnh", + "signDialogTitle": "Mật khẩu chữ ký", + "enterAccountPassword": "Vui lòng nhập mật khẩu tài khoản:", + "placeholderPassword": "Nhập mật khẩu", + "confirm": "Xác nhận", + "editDialogTitle": "Sửa y lệnh", + "placeholderDosage": "Nhập liều lượng", + "placeholderUnit": "Nhập đơn vị", + "placeholderSelectUsage": "Chọn cách dùng", + "loading": "Đang tải...", + "save": "Lưu", + "tip": "Thông báo", + "unknownUser": "Người dùng chưa xác định", + "usageIv": "Tiêm tĩnh mạch", + "usagePo": "Uống", + "usageIm": "Tiêm bắp", + "usageSc": "Tiêm dưới da", + "usageIvgtt": "Truyền tĩnh mạch", + "usageIh": "Hít", + "usageIt": "Ngậm", + "usageIp": "Tiêm phúc mạc", + "usageTop": "Bôi ngoài", + "usagePr": "Đặt hậu môn", + "msgFillDosage": "Vui lòng nhập liều lượng", + "msgDosageMustBeNumber": "Liều lượng phải là số", + "msgFillUsage": "Vui lòng nhập cách dùng", + "msgEditSaved": "Đã lưu chỉnh sửa y lệnh lên máy chủ", + "msgSaveFailedRetry": "Lưu thất bại, vui lòng thử lại", + "msgEnterPassword": "Vui lòng nhập mật khẩu", + "msgSignSuccess": "Ký thành công", + "msgConfirmRollback": "Bạn có chắc muốn hoàn tác y lệnh này?", + "msgRollbackSuccess": "Hoàn tác thành công", + "msgRollbackFailedRetry": "Hoàn tác thất bại, vui lòng thử lại", + "msgSignFirst": "Vui lòng ký điện tử trước", + "msgSubmitting": "Đang gửi y lệnh, vui lòng đợi...", + "msgNoAdviceData": "Không có dữ liệu y lệnh để lưu", + "msgSaveSuccess": "Lưu y lệnh tạm thời thành công", + "msgSaveFailed": "Lưu y lệnh thất bại: ", + "unknownError": "Lỗi không xác định" + }, + "msgGetScheduleListFailed": "Lấy danh sách lịch phẫu thuật thất bại, vui lòng thử lại sau", + "msgTooManyDrafts": "Quá nhiều y lệnh chờ ký ({count}条), chỉ hiển thị {max} đầu tiên", + "placeholderSurgeryRemark": "Nhập ghi chú phẫu thuật", + "scheduleTime": "Thời gian xếp lịch", + "surgeryNameLabel": "Tên phẫu thuật", + "surgeryRemark": "Ghi chú phẫu thuật" + }, + "surgerymanage": { + "surgeryNo": "Số phẫu thuật", + "surgeryName": "Tên phẫu thuật", + "patientName": "Tên bệnh nhân", + "surgeryStatus": "Trạng thái phẫu thuật", + "surgeryType": "Loại phẫu thuật", + "plannedTime": "Thời gian dự kiến", + "rangeSeparator": "đến", + "startDate": "Ngày bắt đầu", + "endDate": "Ngày kết thúc", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "addSurgery": "Thêm phẫu thuật", + "refresh": "Làm mới", + "applyDate": "Ngày đăng ký", + "surgeryOrderNo": "Số phiếu phẫu thuật", + "applyDoctor": "Bác sĩ đăng ký", + "applyDept": "Khoa đăng ký", + "surgeryLevel": "Cấp phẫu thuật", + "emergency": "Cấp cứu", + "yes": "Có", + "no": "Không", + "implantMaterial": "Vật liệu cấy ghép", + "mainSurgeon": "Bác sĩ chính", + "anesthetist": "Bác sĩ gây mê", + "anesthesiaType": "Phương pháp gây mê", + "bodySite": "Vị trí phẫu thuật", + "operatingRoom": "Phòng mổ", + "operatingRoomDept": "Khoa phòng mổ", + "execDept": "Khoa thực hiện", + "status": "Trạng thái", + "actions": "Thao tác", + "view": "Xem", + "edit": "Sửa", + "cancel": "Hủy", + "schedule": "Lịch hẹn", + "start": "Bắt đầu", + "complete": "Hoàn thành", + "currentStatus": "Trạng thái hiện tại", + "viewModeTip": "Chế độ xem: tất cả trường chỉ đọc", + "patient": "Bệnh nhân", + "placeholderPatient": "Chọn bệnh nhân", + "noIdCard": "Không có CCCD", + "editModePatientTip": "Không thể thay đổi bệnh nhân ở chế độ sửa", + "encounterNo": "Số khám bệnh", + "placeholderEncounterNo": "Chọn khám bệnh", + "originalEncounter": "Khám bệnh gốc", + "none": "Không có", + "placeholderAutoDoctor": "Tự động từ tài khoản đăng nhập", + "placeholderAutoDept": "Tự động từ khoa của bác sĩ", + "surgeryCode": "Mã phẫu thuật", + "placeholderSurgeryCode": "Nhập mã phẫu thuật", + "plannedSurgeryTime": "Thời gian phẫu thuật dự kiến", + "placeholderDateTime": "Chọn ngày giờ", + "placeholderBodySite": "Chọn vị trí phẫu thuật", + "surgeryTeam": "Kíp mổ", + "placeholderMainSurgeon": "Chọn bác sĩ chính", + "placeholderAnesthetist": "Chọn bác sĩ gây mê", + "assistant1": "Trợ lý 1", + "placeholderAssistant1": "Chọn trợ lý 1", + "assistant2": "Trợ lý 2", + "placeholderAssistant2": "Chọn trợ lý 2", + "scrubNurse": "Điều dưỡng vòng ngoài", + "placeholderScrubNurse": "Chọn điều dưỡng vòng ngoài", + "placeholderAnesthesiaType": "Chọn phương pháp gây mê", + "placeholderOperatingRoom": "Chọn phòng mổ", + "placeholderExecDept": "Chọn khoa thực hiện", + "diagnosisInfo": "Thông tin chẩn đoán", + "preoperativeDiagnosis": "Chẩn đoán trước mổ", + "placeholderPreoperativeDiagnosis": "Nhập chẩn đoán trước mổ", + "postoperativeDiagnosis": "Chẩn đoán sau mổ", + "placeholderPostoperativeDiagnosis": "Nhập chẩn đoán sau mổ", + "surgeryDescription": "Mô tả phẫu thuật", + "placeholderSurgeryDescription": "Nhập mô tả phẫu thuật", + "postoperativeAdvice": "Y lệnh sau mổ", + "placeholderPostoperativeAdvice": "Nhập y lệnh sau mổ", + "surgeryFee": "Phí phẫu thuật", + "anesthesiaFee": "Phí gây mê", + "totalFee": "Tổng phí", + "incisionLevel": "Mức độ rạch", + "placeholderIncisionLevel": "Chọn mức độ rạch", + "healingLevel": "Mức độ lành", + "placeholderHealingLevel": "Chọn mức độ lành", + "complications": "Biến chứng", + "placeholderComplications": "Nhập mô tả biến chứng", + "emergencyFlag": "Cấp cứu", + "implantFlag": "Cấy ghép vật liệu", + "operatingRoomConfirmUser": "Người xác nhận phòng mổ", + "placeholderOperatingRoomConfirmUser": "Người xác nhận", + "operatingRoomConfirmTime": "Thời gian xác nhận phòng mổ", + "placeholderOperatingRoomConfirmTime": "Chọn thời gian xác nhận", + "remark": "Ghi chú", + "placeholderRemark": "Nhập ghi chú", + "close": "Đóng", + "confirm": "Xác nhận", + "placeholderSurgeryNo": "Nhập số phẫu thuật", + "placeholderSurgeryName": "Nhập tên phẫu thuật", + "placeholderPatientName": "Nhập tên bệnh nhân", + "placeholderSurgeryStatus": "Chọn trạng thái phẫu thuật", + "placeholderSurgeryType": "Chọn loại phẫu thuật", + "statusPending": "Chờ xếp lịch", + "statusScheduled": "Đã xếp lịch", + "statusInProgress": "Đang phẫu thuật", + "statusCompleted": "Hoàn thành", + "statusCancelled": "Đã hủy", + "statusPaused": "Tạm dừng", + "healingGradeA": "Lành loại A", + "healingGradeB": "Lành loại B", + "healingGradeC": "Lành loại C", + "encounterRegistered": "Đã đăng ký", + "encounterInProgress": "Đang khám", + "encounterCompleted": "Hoàn thành", + "encounterCancelled": "Đã hủy", + "unknown": "Không xác định", + "valPatientRequired": "Vui lòng chọn bệnh nhân", + "valSurgeryNameRequired": "Vui lòng nhập tên phẫu thuật", + "valSurgeryTypeRequired": "Vui lòng chọn loại phẫu thuật", + "valSurgeryLevelRequired": "Vui lòng chọn cấp phẫu thuật", + "valPlannedTimeRequired": "Vui lòng chọn thời gian phẫu thuật", + "valMainSurgeonRequired": "Vui lòng chọn bác sĩ chính", + "valAnesthesiaTypeRequired": "Vui lòng chọn phương pháp gây mê", + "valBodySiteRequired": "Vui lòng nhập vị trí phẫu thuật", + "addSurgeryTitle": "Thêm phẫu thuật mới", + "editSurgeryTitle": "Sửa phẫu thuật", + "viewSurgeryTitle": "Xem phẫu thuật", + "errorGetSurgeryList": "Lấy danh sách phẫu thuật thất bại", + "errorGetPatientList": "Lấy danh sách bệnh nhân thất bại", + "warningNoEncounter": "Bệnh nhân chưa có khám bệnh, vui lòng đăng ký trước", + "errorGetEncounterList": "Lấy danh sách khám bệnh thất bại", + "errorGetDoctorList": "Lấy danh sách bác sĩ thất bại", + "errorGetOperatingRoomList": "Lấy danh sách phòng mổ thất bại", + "errorGetNurseList": "Lấy danh sách điều dưỡng thất bại", + "errorGetOrgList": "Lấy danh sách khoa thất bại", + "warningEditNotAllowed": "Trạng thái hiện tại không cho phép sửa", + "errorGetSurgeryInfo": "Lấy thông tin phẫu thuật thất bại", + "infoViewModeNoSubmit": "Chế độ xem, không thể gửi", + "successAdd": "Thêm thành công", + "errorAddSurgery": "Thêm phẫu thuật thất bại, vui lòng kiểm tra biểu mẫu", + "successUpdate": "Cập nhật thành công", + "errorUpdateSurgery": "Cập nhật phẫu thuật thất bại, vui lòng kiểm tra biểu mẫu", + "errorFormValidation": "Vui lòng kiểm tra biểu mẫu, trường đỏ là bắt buộc", + "confirmDelete": "Bạn có chắc muốn xóa phẫu thuật \"{name}\"?", + "successDelete": "Xóa thành công", + "errorDelete": "Xóa thất bại", + "confirmCancel": "Bạn có chắc muốn hủy phẫu thuật \"{name}\"?", + "successCancelled": "Đã hủy phẫu thuật", + "errorCancel": "Hủy thất bại", + "warningCancelNotAllowed": "Trạng thái hiện tại không cho phép hủy", + "warningSelectOperatingRoom": "Vui lòng chọn phòng mổ trước", + "warningSetPlannedTime": "Vui lòng đặt thời gian phẫu thuật trước", + "confirmSchedule": "Bạn có chắc muốn xếp lịch phẫu thuật \"{name}\"?", + "successScheduled": "Đã xếp lịch phẫu thuật", + "errorSchedule": "Xếp lịch thất bại", + "confirmStart": "Bạn có chắc muốn bắt đầu phẫu thuật \"{name}\"?", + "successStarted": "Đã bắt đầu phẫu thuật", + "errorStart": "Bắt đầu phẫu thuật thất bại", + "confirmComplete": "Bạn có chắc muốn hoàn thành phẫu thuật \"{name}\"?", + "successCompleted": "Đã hoàn thành phẫu thuật", + "errorComplete": "Hoàn thành phẫu thuật thất bại", + "infoSelectEncounter": "Vui lòng chọn khám bệnh", + "sun": "CN", + "mon": "T2", + "tue": "T3", + "wed": "T4", + "thu": "T5", + "fri": "T6", + "sat": "T7" + }, + "emr": { + "timeliness": { + "stats": { "pending": "Chờ hoàn thành", "completed": "Đã hoàn thành", "overdue": "Quá hạn", "rate": "Tỷ lệ hoàn thành" }, + "department": "Khoa", + "emrTypeLabel": "Loại bệnh án", + "statusLabel": "Trạng thái", + "all": "Tất cả", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "doctor": "Bác sĩ", + "requiredHours": "Thời gian yêu cầu(h)", + "deadline": "Hạn chót", + "actualCompleteTime": "Thời gian hoàn thành thực tế", + "emrType": { "admission": "Bệnh án nhập viện", "firstCourse": "Diễn biến đầu", "dailyCourse": "Diễn biến hàng ngày", "discharge": "Bệnh án ra viện" }, + "status": { "pending": "Chờ hoàn thành", "completed": "Đã hoàn thành", "overdue": "Quá hạn" } + }, + "sync": { + "title": "Đồng bộ dữ liệu EMR", + "stats": "Thống kê đồng bộ", + "emrCount": "Tổng bệnh án", + "revisionCount": "Lịch sử sửa đổi", + "searchIndexCount": "Chỉ mục tìm kiếm", + "operations": "Thao tác đồng bộ", + "alertMessage": "Đồng bộ sẽ xóa lịch sử sửa đổi và chỉ mục tìm kiếm hiện có, sau đó tạo lại từ bảng bệnh án.", + "syncing": "Đang đồng bộ...", + "startSync": "Bắt đầu đồng bộ", + "refreshStats": "Làm mới thống kê", + "confirmMessage": "Đồng bộ dữ liệu EMR? Thao tác này sẽ xóa lịch sử sửa đổi và chỉ mục tìm kiếm hiện có.", + "confirmTitle": "Xác nhận đồng bộ", + "syncComplete": "Đồng bộ hoàn tất", + "syncFailed": "Đồng bộ thất bại", + "unknownError": "Lỗi không xác định" + }, + "archive": { + "title": "In và lưu trữ bệnh án", + "syncing": "Đang đồng bộ...", + "syncHistory": "Đồng bộ dữ liệu lịch sử", + "refreshStats": "Làm mới thống kê", + "totalRecords": "Tổng bản ghi", + "archived": "Đã lưu trữ", + "pendingArchive": "Chờ lưu trữ", + "archiveRate24h": "Tỷ lệ lưu trữ 24h", + "patientName": "Tên bệnh nhân", + "status": "Trạng thái", + "printed": "Đã in", + "lost": "Mất", + "query": "Tìm kiếm", + "patient": "Bệnh nhân", + "emrType": "Loại bệnh án", + "title_col": "Tiêu đề", + "operation": "Thao tác", + "print": "In", + "archive": "Lưu trữ", + "reprint": "In lại", + "printBy": "Người in", + "printCount": "Số lần in", + "time": "Thời gian", + "archiver": "Người lưu trữ", + "confirmArchive": "Xác nhận lưu trữ", + "archivedSuccess": "Đã lưu trữ", + "reprintAdded": "Đã thêm bản ghi in lại", + "syncConfirmMessage": "Sẽ đồng bộ dữ liệu từ bảng bệnh án đến lịch sử sửa đổi và chỉ mục tìm kiếm. Tiếp tục?", + "syncConfirmTitle": "Xác nhận đồng bộ", + "syncComplete": "Đồng bộ hoàn tất", + "syncFailed": "Đồng bộ thất bại" + }, + "completeness": { + "executeCheck": "Thực hiện kiểm tra tính đầy đủ", + "emrId": "Mã bệnh án", + "emrIdPlaceholder": "Nhập mã bệnh án", + "encounterId": "Mã khám bệnh", + "encounterIdPlaceholder": "Nhập mã khám bệnh", + "totalItems": "Tổng mục kiểm tra", + "requiredTotal": "Tổng bắt buộc", + "requiredPassed": "Bắt buộc đạt", + "isComplete": "Đầy đủ", + "yes": "Có", + "no": "Không", + "failedItemsAlert": "Cảnh báo mục không đạt", + "resultDetail": "Chi tiết kết quả kiểm tra", + "checkItem": "Mục kiểm tra", + "category": "Phân loại", + "required": "Bắt buộc", + "requiredYes": "Bắt buộc", + "requiredNo": "Tùy chọn", + "checkResult": "Kết quả", + "pass": "Đạt", + "fail": "Không đạt", + "detail": "Chi tiết", + "checkTime": "Thời gian kiểm tra", + "categoryBasic": "Thông tin cơ bản", + "categoryExamination": "Khám", + "categoryDiagnosis": "Chẩn đoán", + "categoryTreatment": "Điều trị", + "categorySignature": "Chữ ký", + "enterEmrId": "Vui lòng nhập mã bệnh án", + "enterEncounterId": "Vui lòng nhập mã khám bệnh", + "checkPassed": "Kiểm tra tính đầy đủ bệnh án đạt", + "checkFailed": "Kiểm tra tính đầy đủ bệnh án không đạt, có mục không hợp lệ", + "checkError": "Thực hiện kiểm tra thất bại", + "getResultError": "Lấy kết quả kiểm tra thất bại" + }, + "warehouse": { + "extractTitle": "Trích xuất dữ liệu có cấu trúc", + "emrId": "Mã bệnh án", + "emrIdPlaceholder": "Nhập mã bệnh án", + "extract": "Trích xuất dữ liệu", + "viewTitle": "Xem dữ liệu có cấu trúc", + "encounterId": "Mã khám bệnh", + "encounterIdPlaceholder": "Nhập mã khám bệnh", + "query": "Tìm kiếm", + "dataType": "Loại dữ liệu", + "dataKey": "Khóa dữ liệu", + "dataValue": "Giá trị dữ liệu", + "dataUnit": "Đơn vị", + "recordTime": "Thời gian ghi nhận", + "qualityScore": "Điểm chất lượng", + "calculate": "Tính điểm", + "queryHistory": "Lịch sử tìm kiếm", + "totalScore": "Tổng điểm", + "completenessScore": "Tính đầy đủ", + "timelinessScore": "Tính kịp thời", + "accuracyScore": "Tính chính xác", + "scoreTime": "Thời gian chấm điểm", + "emrType": "Loại bệnh án", + "typeVitalSigns": "Sinh hiệu", + "typeLabResults": "Kết quả xét nghiệm", + "typeDiagnosis": "Chẩn đoán", + "typeMedication": "Thuốc", + "enterEmrId": "Vui lòng nhập mã bệnh án", + "enterEncounterId": "Vui lòng nhập mã khám bệnh", + "extractSuccess": "Trích xuất hoàn tất, {count} bản ghi", + "extractFailed": "Trích xuất thất bại", + "queryFailed": "Tìm kiếm thất bại", + "calculateSuccess": "Tính điểm hoàn tất", + "calculateFailed": "Tính điểm thất bại" + }, + "revision": { + "title": "Lịch sử sửa đổi bệnh án", + "patient": "Bệnh nhân", + "patientName": "Tên bệnh nhân", + "doctor": "Bác sĩ", + "doctorName": "Tên bác sĩ", + "operator": "Người thao tác", + "operatorName": "Tên người thao tác", + "emrType": "Loại bệnh án", + "all": "Tất cả", + "emrTypeAdmission": "Bệnh án nhập viện", + "emrTypeFirstCourse": "Diễn biến đầu", + "emrTypeDailyCourse": "Diễn biến hàng ngày", + "emrTypeDischarge": "Bệnh án ra viện", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "emrTitle": "Tiêu đề bệnh án", + "emrPrefix": "Bệnh án #", + "attendingDoctor": "Bác sĩ điều trị", + "department": "Khoa", + "encounterNo": "Số khám bệnh", + "operationType": "Loại thao tác", + "changeContent": "Nội dung thay đổi", + "time": "Thời gian", + "operation": "Thao tác", + "detail": "Chi tiết", + "revisionDetail": "Chi tiết sửa đổi", + "version": "Phiên bản", + "contentSnapshot": "Ảnh chụp nội dung", + "opCreate": "Tạo", + "opEdit": "Sửa", + "opApprove": "Duyệt", + "opSign": "Ký", + "loadFailed": "Tải thất bại" + } + }, + "surgery": { + "safety": { + "patient": "Bệnh nhân", + "patientName": "Tên bệnh nhân", + "checkPhase": "Giai đoạn kiểm tra", + "all": "Tất cả", + "preOp": "Trước mổ", + "intraOp": "Trong mổ", + "postOp": "Sau mổ", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "add": "Thêm", + "surgeryName": "Tên phẫu thuật", + "surgeon": "Bác sĩ chính", + "anesthesiologist": "Bác sĩ gây mê", + "circulatingNurse": "Điều dưỡng vòng ngoài", + "checkTime": "Thời gian kiểm tra", + "status": "Trạng thái", + "pending": "Chờ kiểm tra", + "inProgress": "Đang kiểm tra", + "completed": "Hoàn thành", + "operation": "Thao tác", + "edit": "Sửa", + "delete": "Xóa", + "addTitle": "Thêm kiểm tra an toàn phẫu thuật", + "editTitle": "Sửa kiểm tra an toàn phẫu thuật", + "operationSuccess": "Thao tác thành công", + "confirmDelete": "Xác nhận xóa?", + "tip": "Thông báo", + "deleteSuccess": "Xóa thành công", + "checkContent": "Nội dung kiểm tra", + "remark": "Ghi chú", + "cancel": "Hủy", + "confirm": "Xác nhận" + } + }, + "operatingroom": { + "name": "Tên phòng mổ", + "placeholderName": "Nhập tên phòng mổ", + "status": "Trạng thái", + "placeholderStatus": "Chọn trạng thái", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "addRoom": "Thêm phòng mổ", + "batchEnable": "Kích hoạt hàng loạt", + "batchDisable": "Vô hiệu hàng loạt", + "seq": "STT", + "roomNo": "Số phòng", + "type": "Loại", + "department": "Khoa", + "location": "Vị trí", + "equipment": "Thiết bị", + "capacity": "Sức chứa", + "enabled": "Kích hoạt", + "disabled": "Vô hiệu", + "displayOrder": "Thứ tự hiển thị", + "actions": "Thao tác", + "edit": "Sửa", + "view": "Xem", + "enable": "Kích hoạt", + "disable": "Vô hiệu", + "placeholderRoomNo": "Nhập số phòng", + "placeholderCapacity": "Nhập sức chứa", + "placeholderType": "Chọn loại", + "placeholderDept": "Chọn khoa", + "placeholderDisplayOrder": "Nhập thứ tự hiển thị", + "placeholderLocation": "Nhập vị trí", + "placeholderEquipment": "Nhập thiết bị, vd: máy gây mê, monitor, bàn mổ...", + "placeholderRemark": "Nhập ghi chú", + "remark": "Ghi chú", + "confirm": "Xác nhận", + "cancel": "Hủy", + "viewTitle": "Chi tiết phòng mổ", + "roomCode": "Mã phòng mổ", + "valRoomNoRequired": "Số phòng không được trống", + "valNameRequired": "Tên phòng không được trống", + "valCapacityRequired": "Sức chứa không được trống", + "valCapacityNumber": "Sức chứa phải là số", + "valDeptRequired": "Vui lòng chọn khoa", + "addTitle": "Thêm phòng mổ", + "editTitle": "Sửa phòng mổ", + "errorGetList": "Lấy danh sách phòng mổ thất bại", + "errorGetListRetry": "Lấy danh sách phòng mổ thất bại, vui lòng thử lại", + "successModify": "Sửa thành công", + "errorModify": "Sửa thất bại", + "errorModifyRetry": "Sửa thất bại, vui lòng thử lại", + "successAdd": "Thêm thành công", + "errorAdd": "Thêm thất bại", + "errorAddRetry": "Thêm thất bại, vui lòng thử lại", + "errorForm": "Vui lòng hoàn thiện biểu mẫu", + "confirmEnable": "Kích hoạt các phòng đã chọn?", + "successEnable": "Kích hoạt thành công", + "confirmDisable": "Vô hiệu các phòng đã chọn?", + "successDisable": "Vô hiệu thành công" + }, + "preopmanage": { + "totalDiscussions": "Tổng thảo luận", + "draft": "Bản nháp", + "pendingSignature": "Chờ ký", + "pendingReview": "Chờ duyệt", + "completed": "Hoàn thành", + "rejected": "Từ chối", + "title": "Quản lý thảo luận trước mổ", + "newDiscussion": "Tạo thảo luận", + "patient": "Bệnh nhân", + "patientName": "Tên bệnh nhân", + "surgeryLevel": "Cấp phẫu thuật", + "all": "Tất cả", + "level1": "Cấp 1", + "level2": "Cấp 2", + "level3": "Cấp 3", + "level4": "Cấp 4", + "statusLabel": "Trạng thái", + "search": "Tìm kiếm", + "reset": "Đặt lại", + "seq": "STT", + "surgeryName": "Tên phẫu thuật", + "level": "Cấp", + "levelSuffix": "", + "host": "Chủ trì", + "conclusion": "Kết luận", + "agreeSurgery": "Đồng ý phẫu thuật", + "needSupplement": "Cần bổ sung", + "noSurgery": "Chưa phẫu thuật", + "createTime": "Thời gian tạo", + "actions": "Thao tác", + "detail": "Chi tiết", + "submit": "Gửi", + "pass": "Duyệt", + "reject": "Từ chối", + "newDialogTitle": "Tạo thảo luận trước mổ", + "encounterId": "Số nhập viện", + "placeholderEncounterId": "Số nhập viện", + "preopDiagnosis": "Chẩn đoán trước mổ", + "placeholderPreopDiagnosis": "Chẩn đoán trước mổ", + "surgeryIndication": "Chỉ định phẫu thuật", + "placeholderSurgeryIndication": "Chỉ định phẫu thuật", + "mainPlan": "Kế hoạch chính", + "placeholderMainPlan": "Kế hoạch phẫu thuật chính", + "backupPlan": "Kế hoạch dự phòng", + "placeholderBackupPlan": "Kế hoạch phẫu thuật dự phòng", + "anesthesiaType": "Phương pháp gây mê", + "placeholderAnesthesiaType": "Phương pháp gây mê", + "discussionType": "Loại thảo luận", + "typeDept": "Trong khoa", + "typeFull": "Toàn khoa", + "typeHospital": "Toàn viện", + "risks": "Rủi ro & Đối sách", + "placeholderRisks": "Rủi ro có thể và đối sách", + "postopNotes": "Ghi chú sau mổ", + "placeholderPostopNotes": "Ghi chú sau phẫu thuật", + "hostName": "Chủ trì", + "placeholderHostName": "Tên chủ trì", + "location": "Địa điểm", + "placeholderLocation": "Địa điểm thảo luận", + "conclusionLabel": "Kết luận", + "needFurtherCheck": "Cần kiểm tra thêm", + "save": "Lưu", + "detailTitle": "Chi tiết thảo luận", + "detailPatient": "Bệnh nhân", + "detailSurgeryName": "Tên phẫu thuật", + "detailSurgeryLevel": "Cấp phẫu thuật", + "detailHost": "Chủ trì", + "detailConclusion": "Kết luận", + "detailStatus": "Trạng thái", + "discussionContent": "Nội dung thảo luận", + "participants": "Người tham gia", + "name": "Họ tên", + "titleProf": "Chức danh", + "role": "Vai trò", + "signature": "Chữ ký", + "signed": "Đã ký", + "unsigned": "Chưa ký", + "signTime": "Thời gian ký", + "valPatientRequired": "Vui lòng nhập tên bệnh nhân", + "valSurgeryNameRequired": "Vui lòng nhập tên phẫu thuật", + "valSurgeryLevelRequired": "Vui lòng chọn cấp phẫu thuật", + "valDiagnosisRequired": "Vui lòng nhập chẩn đoán trước mổ", + "valMainPlanRequired": "Vui lòng nhập kế hoạch chính", + "valHostRequired": "Vui lòng nhập chủ trì", + "submitSuccess": "Đã gửi", + "submitFailed": "Gửi thất bại", + "confirmApprove": "Duyệt thảo luận này?", + "confirmReject": "Từ chối thảo luận này?", + "approveSuccess": "Duyệt thành công", + "rejectSuccess": "Từ chối thành công", + "approveFailed": "Duyệt thất bại", + "rejectFailed": "Từ chối thất bại", + "createSuccess": "Tạo thành công", + "createFailed": "Tạo thất bại" } -} +} \ No newline at end of file diff --git a/healthlink-his-ui/src/i18n/locales/zhCN.json b/healthlink-his-ui/src/i18n/locales/zhCN.json index 9dd8e460c..798e67df7 100644 --- a/healthlink-his-ui/src/i18n/locales/zhCN.json +++ b/healthlink-his-ui/src/i18n/locales/zhCN.json @@ -1363,7 +1363,14 @@ "exportDev": "导出功能开发中", "collectSuccess": "已采集 {count} 项指标", "collectFailed": "采集失败", - "monthLabels": ["1月", "2月", "3月", "4月", "5月", "6月"] + "monthLabels": [ + "1月", + "2月", + "3月", + "4月", + "5月", + "6月" + ] }, "execution": { "title": "住院护士执行", @@ -1568,5 +1575,811 @@ "rollFee": "滚费配置", "medicineReturn": "退药管理" } + }, + "surgicalschedule": { + "operCode": "手术单号", + "placeholderOperCode": "请输入手术单号", + "scheduleDate": "安排时间", + "rangeSeparator": "至", + "startDate": "开始日期", + "endDate": "结束日期", + "orgName": "卫生机构", + "placeholderOrg": "请选择卫生机构", + "applyDept": "申请科室", + "placeholderDept": "请选择申请科室", + "patientNameOrPinyin": "姓名/拼音码", + "placeholderNameOrPinyin": "请输入姓名/拼音码", + "search": "查询", + "reset": "重置", + "add": "新增手术安排", + "billing": "计费", + "medicalAdvice": "医嘱", + "export": "导出表格", + "patientName": "姓名", + "identifierNo": "就诊卡号", + "operName": "手术名称", + "surgeryType": "手术类型", + "surgeryNature": "手术性质", + "surgeonName": "主刀医生", + "anesMethod": "麻醉方法", + "operator": "操作人", + "actions": "操作", + "view": "查看", + "edit": "编辑", + "cancel": "取消", + "find": "查找", + "refresh": "刷新", + "back": "返回", + "save": "保存", + "patientBasicInfo": "病人基本信息", + "patientId": "患者id", + "gender": "性别", + "male": "男", + "female": "女", + "unknown": "未知", + "age": "年龄", + "patientWeight": "病人体重", + "placeholderWeight": "请输入病人体重(kg)", + "patientHeight": "病人身高", + "placeholderHeight": "请输入病人身高(cm)", + "surgeryApplyInfo": "手术申请信息", + "feeType": "费用类别", + "applyTime": "申请时间", + "applyDoctor": "申请医生", + "placeholderSurgeryType": "请选择手术类型", + "surgerySchedule": "手术安排", + "placeholderScheduleDate": "选择安排时间", + "sequenceNo": "手术台次", + "placeholderSequenceNo": "请输入手术台次", + "roomCode": "手术间号", + "placeholderRoomCode": "请选择手术间号", + "tableNo": "手术台", + "placeholderTableNo": "请输入手术台", + "isFirstSurgery": "是否首次手术", + "yes": "是", + "no": "否", + "natureAndSite": "手术性质和部位", + "placeholderSurgeryNature": "请选择手术性质", + "surgerySite": "手术部位", + "placeholderSurgerySite": "请选择手术部位", + "allergyMedication": "过敏药物", + "allergyRemark": "过敏药物备注", + "placeholderAllergyRemark": "请输入过敏药物备注", + "medicalStaff": "医护人员", + "assistant1": "助手1", + "placeholderAssistant1": "请选择助手1", + "assistant2": "助手2", + "placeholderAssistant2": "请选择助手2", + "assistant3": "助手3", + "placeholderAssistant3": "请选择助手3", + "scrubNurse": "洗手护士", + "placeholderScrubNurse": "请选择洗手护士", + "instrumentNurse1": "器械护士1", + "placeholderInstrumentNurse1": "请选择器械护士1", + "instrumentNurse2": "器械护士2", + "placeholderInstrumentNurse2": "请选择器械护士2", + "circulatingNurse1": "巡回护士1", + "placeholderCirculatingNurse1": "请选择巡回护士1", + "placeholderAnesMethod": "请选择麻醉方法", + "circulatingNurse2": "巡回护士2", + "placeholderCirculatingNurse2": "请选择巡回护士2", + "externalExpert": "外请专家", + "externalExpertName": "外请专家姓名", + "placeholderExternalExpertName": "请输入外请专家姓名", + "anesDoctor1": "麻醉医师1", + "placeholderAnesDoctor1": "请选择麻醉医师1", + "anesDoctor2": "麻醉医师2", + "placeholderAnesDoctor2": "请选择麻醉医师2", + "anesDoctor3": "麻醉医师3", + "placeholderAnesDoctor3": "请选择麻醉医师3", + "preDiagnosis": "术前诊断", + "placeholderPreDiagnosis": "请输入术前诊断", + "postDiagnosis": "术后诊断", + "placeholderPostDiagnosis": "请输入术后诊断", + "surgeryProcess": "手术过程", + "admissionTime": "入室时间", + "placeholderAdmissionTime": "选择入室时间", + "entryTime": "进室时间", + "placeholderEntryTime": "选择进室时间", + "anesStartTime": "麻醉开始时间", + "placeholderAnesStartTime": "选择麻醉开始时间", + "startTime": "切开时间", + "placeholderStartTime": "选择切开时间", + "endTime": "手术结束时间", + "placeholderEndTime": "选择手术结束时间", + "anesEndTime": "麻醉结束时间", + "placeholderAnesEndTime": "选择麻醉结束时间", + "incisionType": "切口类型", + "placeholderIncisionType": "请选择切口类型", + "infectionDiagnosis": "感染诊断", + "placeholderInfectionDiagnosis": "请输入感染诊断", + "isolationType": "隔离种类", + "placeholderIsolationType": "请输入隔离种类", + "implantFlag": "是否植入标志", + "implantSerial": "植入物序列号/批号", + "placeholderImplantSerial": "请输入植入物序列号/批号", + "bloodLoss": "出血量", + "placeholderBloodLoss": "请输入出血量", + "bloodTrans": "输血量", + "placeholderBloodTrans": "请输入输血量", + "remarkInfo": "备注信息", + "communicationInfo": "手术相关对话信息", + "placeholderCommunicationInfo": "请输入手术相关对话信息", + "remark": "手术相关备注", + "placeholderRemark": "请输入手术相关备注", + "applyQuery": "手术申请查询", + "applyTimeRange": "申请时间范围", + "placeholderSurgeon": "请选择主刀医生", + "confirm": "确认", + "patientInfo": "患者信息:", + "billingAccount": "计费账号", + "loadingAdvice": "正在加载医嘱数据,请稍候...", + "surgeryLevel": "手术等级", + "anesthesiaType": "麻醉方式", + "exportFilename": "手术安排列表.csv", + "addSchedule": "新增手术安排", + "editTitle": "编辑手术安排", + "viewTitle": "查看手术安排", + "temporaryMedicalTitle": "门诊术中临时医嘱", + "insurance": "医保", + "selfPay": "自费", + "immediate": "立即", + "ivInjection": "静脉注射", + "unknownMedicine": "未知药品", + "msgSelectScheduleDate": "请选择安排时间", + "msgInputSequenceNo": "请输入手术台次", + "msgSequenceNoNumber": "手术台次必须为数字", + "msgSelectRoomCode": "请选择手术间号", + "msgSelectTableNo": "请选择手术台", + "msgSelectSurgeryNature": "请选择手术性质", + "msgSelectSurgerySite": "请选择手术部位", + "msgSelectAnesMethod": "请选择麻醉方法", + "msgInputPreDiagnosis": "请输入术前诊断", + "msgSelectSurgeon": "请选择主刀医生", + "msgGetDetailFailed": "获取手术安排详情失败", + "msgConfirmDelete": "是否确认取消手术安排\"{name}\"?", + "msgDeletedSuccess": "手术安排已取消", + "msgSelectForBilling": "请先选择要计费的手术安排", + "msgNoVisitForBilling": "该手术安排未关联就诊记录,无法计费。请先确认患者已完成就诊登记。", + "msgGetAccountFailed": "获取账户信息失败,请确认该就诊记录是否已建立计费账户。", + "msgGetAccountError": "获取账户信息异常,请稍后重试。", + "chargeDialogTitle": "手术计费 - {name} - {op}", + "msgSelectForAdvice": "请先选择要开具医嘱的手术安排", + "msgNoVisitForAdvice": "该手术安排未关联就诊记录,无法开具医嘱。请先确认患者已完成就诊登记。", + "msgRefreshFailed": "刷新数据失败,请重试", + "msgAdviceGenerated": "临时医嘱已生成(已签发)", + "msgAdviceDeleted": "临时医嘱已删除,已放回待生成列表", + "msgPatientInfoIncomplete": "患者信息不完整,请关闭弹窗重新打开", + "msgTooManyAdvices": "待签发医嘱数量过多({count}条),仅显示前{max}条", + "msgQuoteSuccess": "已成功引用最新计费药品信息!", + "msgGetChargeFailed": "获取计费数据失败,请重试", + "msgAddSuccess": "新增成功", + "msgAddFailed": "新增手术安排失败,请检查表单信息", + "msgEditSuccess": "修改成功", + "msgUpdateFailed": "更新手术安排失败,请检查表单信息", + "msgValidateFailed": "请检查表单信息,标红字段为必填项", + "msgGetApplyListFailed": "获取手术申请列表失败,请稍后重试", + "msgSelectApplyRecord": "请先选择一条手术申请记录", + "msgExportConfirm": "确定要导出当前筛选条件下的手术安排列表吗?", + "tmp": { + "title": "门诊术中临时医嘱", + "patientLabel": "患者:", + "cardNoLabel": "就诊卡号:", + "operCodeLabel": "手术单号:", + "deptLabel": "科室:", + "doctorLabel": "医师:", + "roleLabel": "角色:", + "refresh": "刷新", + "quoteBilling": "引用计费", + "sectionBillingTitle": "一、已引用计费药品(待生成医嘱)", + "collapse": "收起", + "expandAll": "展开全部", + "items": "条", + "colSeq": "序号", + "colMedicineName": "药品名称", + "colSpec": "规格", + "colQuantity": "数量", + "colBatchNo": "批号", + "colUnitPrice": "单价", + "colSubtotal": "小计", + "colInsurance": "医保", + "insuranceIn": "医保内", + "selfPay": "自费", + "total": "总计", + "sectionAdviceTitle": "二、临时医嘱预览(已生成)", + "colAdviceName": "医嘱名称", + "colDosage": "剂量", + "colUnit": "单位", + "colUsage": "用法", + "colFrequency": "频次", + "immediate": "立即", + "colExecuteTime": "执行时间", + "colAction": "操作", + "edit": "编辑", + "delete": "删除", + "sectionSignatureTitle": "三、医师电子签名", + "signDoctorLabel": "签名医师:", + "signTimeLabel": "签名时间:", + "unsigned": "未签名", + "cancel": "取消", + "alreadySigned": "已签发", + "signAndGenerate": "一键签名并生成医嘱", + "signDialogTitle": "弹窗-签名密码", + "enterAccountPassword": "请输入账户密码:", + "placeholderPassword": "请输入密码", + "confirm": "确认", + "editDialogTitle": "编辑医嘱", + "placeholderDosage": "请输入剂量", + "placeholderUnit": "请输入单位", + "placeholderSelectUsage": "请选择用法", + "loading": "加载中...", + "save": "保存", + "tip": "提示", + "unknownUser": "未知用户", + "usageIv": "静脉注射", + "usagePo": "口服", + "usageIm": "肌肉注射", + "usageSc": "皮下注射", + "usageIvgtt": "静脉滴注", + "usageIh": "吸入给药", + "usageIt": "含化", + "usageIp": "腹腔用药", + "usageTop": "局部用药", + "usagePr": "直肠给药", + "msgFillDosage": "请填写剂量", + "msgDosageMustBeNumber": "剂量必须为数字", + "msgFillUsage": "请填写用法", + "msgEditSaved": "医嘱修改已保存到服务器", + "msgSaveFailedRetry": "保存失败,请重试", + "msgEnterPassword": "请输入密码", + "msgSignSuccess": "签名成功", + "msgConfirmRollback": "确定要回退这条医嘱吗?", + "msgRollbackSuccess": "回退成功", + "msgRollbackFailedRetry": "回退失败,请重试", + "msgSignFirst": "请先进行电子签名", + "msgSubmitting": "正在提交医嘱,请稍候...", + "msgNoAdviceData": "没有可保存的医嘱数据", + "msgSaveSuccess": "临时医嘱保存成功", + "msgSaveFailed": "保存医嘱失败:", + "unknownError": "未知错误" + }, + "msgGetScheduleListFailed": "获取手术安排列表失败,请稍后重试", + "msgTooManyDrafts": "待签发医嘱数量过多({count}条),仅显示前{max}条", + "placeholderSurgeryRemark": "请输入手术相关备注", + "scheduleTime": "安排时间", + "surgeryNameLabel": "手术名称", + "surgeryRemark": "手术相关备注" + }, + "surgerymanage": { + "surgeryNo": "手术编号", + "surgeryName": "手术名称", + "patientName": "患者姓名", + "surgeryStatus": "手术状态", + "surgeryType": "手术类型", + "plannedTime": "计划时间", + "rangeSeparator": "至", + "startDate": "开始日期", + "endDate": "结束日期", + "search": "搜索", + "reset": "重置", + "addSurgery": "新增手术", + "refresh": "刷新", + "applyDate": "申请日期", + "surgeryOrderNo": "手术单号", + "applyDoctor": "申请医生", + "applyDept": "申请科室", + "surgeryLevel": "手术等级", + "emergency": "急诊", + "yes": "是", + "no": "否", + "implantMaterial": "植入耗材", + "mainSurgeon": "主刀医生", + "anesthetist": "麻醉医生", + "anesthesiaType": "麻醉方式", + "bodySite": "手术部位", + "operatingRoom": "手术室", + "operatingRoomDept": "手术室科室", + "execDept": "执行科室", + "status": "状态", + "actions": "操作", + "view": "查看", + "edit": "编辑", + "cancel": "取消", + "schedule": "排期", + "start": "开始", + "complete": "完成", + "currentStatus": "当前状态", + "viewModeTip": "当前为查看模式,所有字段均为只读状态", + "patient": "患者", + "placeholderPatient": "请选择患者", + "noIdCard": "无身份证号", + "editModePatientTip": "编辑模式下患者信息不可更改", + "encounterNo": "就诊流水号", + "placeholderEncounterNo": "请选择就诊流水号", + "originalEncounter": "原就诊记录", + "none": "无", + "placeholderAutoDoctor": "系统自动获取当前登录医生", + "placeholderAutoDept": "系统自动获取当前登录医生所属科室", + "surgeryCode": "手术编码", + "placeholderSurgeryCode": "请输入手术编码", + "plannedSurgeryTime": "计划手术时间", + "placeholderDateTime": "选择日期时间", + "placeholderBodySite": "请选择手术部位", + "surgeryTeam": "手术团队", + "placeholderMainSurgeon": "请选择主刀医生", + "placeholderAnesthetist": "请选择麻醉医生", + "assistant1": "助手1", + "placeholderAssistant1": "请选择助手1", + "assistant2": "助手2", + "placeholderAssistant2": "请选择助手2", + "scrubNurse": "巡回护士", + "placeholderScrubNurse": "请选择巡回护士", + "placeholderAnesthesiaType": "请选择麻醉方式", + "placeholderOperatingRoom": "请选择手术室", + "placeholderExecDept": "请选择执行科室", + "diagnosisInfo": "诊断信息", + "preoperativeDiagnosis": "术前诊断", + "placeholderPreoperativeDiagnosis": "请输入术前诊断", + "postoperativeDiagnosis": "术后诊断", + "placeholderPostoperativeDiagnosis": "请输入术后诊断", + "surgeryDescription": "手术经过描述", + "placeholderSurgeryDescription": "请输入手术经过描述", + "postoperativeAdvice": "术后医嘱", + "placeholderPostoperativeAdvice": "请输入术后医嘱", + "surgeryFee": "手术费用", + "anesthesiaFee": "麻醉费用", + "totalFee": "总费用", + "incisionLevel": "切口等级", + "placeholderIncisionLevel": "请选择切口等级", + "healingLevel": "愈合等级", + "placeholderHealingLevel": "请选择愈合等级", + "complications": "并发症描述", + "placeholderComplications": "请输入并发症描述", + "emergencyFlag": "急诊标志", + "implantFlag": "植入高值耗材标志", + "operatingRoomConfirmUser": "手术室确认人", + "placeholderOperatingRoomConfirmUser": "手术室确认人", + "operatingRoomConfirmTime": "手术室确认时间", + "placeholderOperatingRoomConfirmTime": "选择手术室确认时间", + "remark": "备注", + "placeholderRemark": "请输入备注信息", + "close": "关 闭", + "confirm": "确 定", + "placeholderSurgeryNo": "请输入手术编号", + "placeholderSurgeryName": "请输入手术名称", + "placeholderPatientName": "请输入患者姓名", + "placeholderSurgeryStatus": "请选择手术状态", + "placeholderSurgeryType": "请选择手术类型", + "statusPending": "待排期", + "statusScheduled": "已排期", + "statusInProgress": "手术中", + "statusCompleted": "已完成", + "statusCancelled": "已取消", + "statusPaused": "暂停", + "healingGradeA": "甲级愈合", + "healingGradeB": "乙级愈合", + "healingGradeC": "丙级愈合", + "encounterRegistered": "已挂号", + "encounterInProgress": "进行中", + "encounterCompleted": "已完成", + "encounterCancelled": "已退号", + "unknown": "未知", + "valPatientRequired": "请选择患者", + "valSurgeryNameRequired": "请输入手术名称", + "valSurgeryTypeRequired": "请选择手术类型", + "valSurgeryLevelRequired": "请选择手术等级", + "valPlannedTimeRequired": "请选择计划手术时间", + "valMainSurgeonRequired": "请选择主刀医生", + "valAnesthesiaTypeRequired": "请选择麻醉方式", + "valBodySiteRequired": "请输入手术部位", + "addSurgeryTitle": "新增手术", + "editSurgeryTitle": "编辑手术", + "viewSurgeryTitle": "查看手术", + "errorGetSurgeryList": "获取手术列表失败,请稍后重试", + "errorGetPatientList": "获取患者列表失败", + "warningNoEncounter": "该患者暂无就诊记录,请先挂号或办理住院", + "errorGetEncounterList": "获取就诊列表失败", + "errorGetDoctorList": "获取医生列表失败", + "errorGetOperatingRoomList": "获取手术室列表失败", + "errorGetNurseList": "获取护士列表失败", + "errorGetOrgList": "获取执行科室列表失败", + "warningEditNotAllowed": "当前状态不允许编辑手术,仅新开状态可编辑", + "errorGetSurgeryInfo": "获取手术信息失败", + "infoViewModeNoSubmit": "当前为查看模式,无法提交修改", + "successAdd": "新增成功", + "errorAddSurgery": "新增手术失败,请检查表单信息", + "successUpdate": "修改成功", + "errorUpdateSurgery": "更新手术失败,请检查表单信息", + "errorFormValidation": "请检查表单信息,标红字段为必填项", + "confirmDelete": "是否确认删除手术\"{name}\"?", + "successDelete": "删除成功", + "errorDelete": "删除失败", + "confirmCancel": "是否确认取消手术\"{name}\"?", + "successCancelled": "手术已取消", + "errorCancel": "取消失败", + "warningCancelNotAllowed": "当前状态不允许取消手术", + "warningSelectOperatingRoom": "请先选择手术室后再排期", + "warningSetPlannedTime": "请先设置计划手术时间后再排期", + "confirmSchedule": "是否确认排期手术\"{name}\"?", + "successScheduled": "手术已排期", + "errorSchedule": "排期失败", + "confirmStart": "是否确认开始手术\"{name}\"?", + "successStarted": "手术已开始", + "errorStart": "开始手术失败", + "confirmComplete": "是否确认完成手术\"{name}\"?", + "successCompleted": "手术已完成", + "errorComplete": "完成手术失败", + "infoSelectEncounter": "请选择就诊记录", + "sun": "日", + "mon": "一", + "tue": "二", + "wed": "三", + "thu": "四", + "fri": "五", + "sat": "六" + }, + "emr": { + "timeliness": { + "stats": { "pending": "待完成", "completed": "已完成", "overdue": "超时", "rate": "完成率" }, + "department": "科室", + "emrTypeLabel": "病历类型", + "statusLabel": "状态", + "all": "全部", + "search": "搜索", + "reset": "重置", + "doctor": "医生", + "requiredHours": "要求时限(h)", + "deadline": "截止时间", + "actualCompleteTime": "实际完成时间", + "emrType": { "admission": "入院记录", "firstCourse": "首次病程", "dailyCourse": "日常病程", "discharge": "出院记录" }, + "status": { "pending": "待完成", "completed": "已完成", "overdue": "超时" } + }, + "sync": { + "title": "EMR数据同步", + "stats": "同步统计", + "emrCount": "病历总数", + "revisionCount": "修订历史", + "searchIndexCount": "搜索索引", + "operations": "数据同步操作", + "alertMessage": "同步操作将清空现有的修订历史和搜索索引数据,然后从门诊/住院病历表(doc_emr)重新生成。", + "syncing": "同步中...", + "startSync": "开始同步", + "refreshStats": "刷新统计", + "confirmMessage": "确定要同步EMR数据吗?这将清空现有的修订历史和搜索索引,然后从病历表重新生成。", + "confirmTitle": "确认同步", + "syncComplete": "同步完成", + "syncFailed": "同步失败", + "unknownError": "未知错误" + }, + "archive": { + "title": "病历打印归档", + "syncing": "同步中...", + "syncHistory": "同步历史数据", + "refreshStats": "刷新统计", + "totalRecords": "总记录", + "archived": "已归档", + "pendingArchive": "待归档", + "archiveRate24h": "24h归档率", + "patientName": "患者姓名", + "status": "状态", + "printed": "已打印", + "lost": "已遗失", + "query": "查询", + "patient": "患者", + "emrType": "病历类型", + "title_col": "标题", + "operation": "操作", + "print": "打印", + "archive": "归档", + "reprint": "补打", + "printBy": "打印人", + "printCount": "打印次数", + "time": "时间", + "archiver": "归档人", + "confirmArchive": "确认归档", + "archivedSuccess": "已归档", + "reprintAdded": "补打记录已添加", + "syncConfirmMessage": "将从病历表同步数据到修订历史和搜索索引,确定继续?", + "syncConfirmTitle": "确认同步", + "syncComplete": "同步完成", + "syncFailed": "同步失败" + }, + "completeness": { + "executeCheck": "执行完整性检查", + "emrId": "病历ID", + "emrIdPlaceholder": "请输入病历ID", + "encounterId": "就诊ID", + "encounterIdPlaceholder": "请输入就诊ID", + "totalItems": "检查项总数", + "requiredTotal": "必填项总数", + "requiredPassed": "必填项通过", + "isComplete": "是否完整", + "yes": "是", + "no": "否", + "failedItemsAlert": "不合格项提醒", + "resultDetail": "检查结果明细", + "checkItem": "检查项", + "category": "分类", + "required": "是否必填", + "requiredYes": "必填", + "requiredNo": "选填", + "checkResult": "检查结果", + "pass": "通过", + "fail": "不合格", + "detail": "详情", + "checkTime": "检查时间", + "categoryBasic": "基本信息", + "categoryExamination": "检查", + "categoryDiagnosis": "诊断", + "categoryTreatment": "治疗", + "categorySignature": "签名", + "enterEmrId": "请输入病历ID", + "enterEncounterId": "请输入就诊ID", + "checkPassed": "病历完整性检查通过", + "checkFailed": "病历完整性检查未通过,存在不合格项", + "checkError": "执行检查失败", + "getResultError": "获取检查结果失败" + }, + "warehouse": { + "extractTitle": "结构化数据提取", + "emrId": "病历ID", + "emrIdPlaceholder": "请输入病历ID", + "extract": "提取数据", + "viewTitle": "结构化数据查看", + "encounterId": "就诊ID", + "encounterIdPlaceholder": "请输入就诊ID", + "query": "查询", + "dataType": "数据类型", + "dataKey": "数据键", + "dataValue": "数据值", + "dataUnit": "单位", + "recordTime": "记录时间", + "qualityScore": "质控评分", + "calculate": "计算评分", + "queryHistory": "查询历史", + "totalScore": "总分", + "completenessScore": "完整性", + "timelinessScore": "及时性", + "accuracyScore": "准确性", + "scoreTime": "评分时间", + "emrType": "病历类型", + "typeVitalSigns": "生命体征", + "typeLabResults": "检验结果", + "typeDiagnosis": "诊断", + "typeMedication": "用药", + "enterEmrId": "请输入病历ID", + "enterEncounterId": "请输入就诊ID", + "extractSuccess": "提取完成,共 {count} 条数据", + "extractFailed": "提取失败", + "queryFailed": "查询失败", + "calculateSuccess": "评分计算完成", + "calculateFailed": "计算失败" + }, + "revision": { + "title": "病历修改留痕", + "patient": "患者", + "patientName": "患者姓名", + "doctor": "医生", + "doctorName": "医生姓名", + "operator": "操作人", + "operatorName": "操作人", + "emrType": "病历类型", + "all": "全部", + "emrTypeAdmission": "入院记录", + "emrTypeFirstCourse": "首次病程", + "emrTypeDailyCourse": "日常病程", + "emrTypeDischarge": "出院记录", + "search": "搜索", + "reset": "重置", + "emrTitle": "病历标题", + "emrPrefix": "病历 #", + "attendingDoctor": "主治医生", + "department": "科室", + "encounterNo": "就诊号", + "operationType": "操作类型", + "changeContent": "变更内容", + "time": "时间", + "operation": "操作", + "detail": "详情", + "revisionDetail": "修订详情", + "version": "版本", + "contentSnapshot": "内容快照", + "opCreate": "创建", + "opEdit": "编辑", + "opApprove": "审批", + "opSign": "签名", + "loadFailed": "加载失败" + } + }, + "surgery": { + "safety": { + "patient": "患者", + "patientName": "患者姓名", + "checkPhase": "核查阶段", + "all": "全部", + "preOp": "术前", + "intraOp": "术中", + "postOp": "术后", + "search": "搜索", + "reset": "重置", + "add": "新增", + "surgeryName": "手术名称", + "surgeon": "主刀医生", + "anesthesiologist": "麻醉医师", + "circulatingNurse": "巡回护士", + "checkTime": "核查时间", + "status": "状态", + "pending": "待核查", + "inProgress": "核查中", + "completed": "已完成", + "operation": "操作", + "edit": "编辑", + "delete": "删除", + "addTitle": "新增手术安全核查", + "editTitle": "编辑手术安全核查", + "operationSuccess": "操作成功", + "confirmDelete": "确认删除?", + "tip": "提示", + "deleteSuccess": "删除成功", + "checkContent": "核查内容", + "remark": "备注", + "cancel": "取消", + "confirm": "确定" + } + }, + "operatingroom": { + "name": "手术室名称", + "placeholderName": "请输入手术室名称", + "status": "状态", + "placeholderStatus": "请选择状态", + "search": "搜索", + "reset": "重置", + "addRoom": "新增手术室", + "batchEnable": "批量启用", + "batchDisable": "批量停用", + "seq": "序号", + "roomNo": "房间号", + "type": "类型", + "department": "所属科室", + "location": "位置描述", + "equipment": "设备配置", + "capacity": "容纳人数", + "enabled": "启用", + "disabled": "停用", + "displayOrder": "显示顺序", + "actions": "操作", + "edit": "编辑", + "view": "查看", + "enable": "启用", + "disable": "停用", + "placeholderRoomNo": "请输入房间号", + "placeholderCapacity": "请输入容纳人数", + "placeholderType": "请选择类型", + "placeholderDept": "请选择所属科室", + "placeholderDisplayOrder": "请输入显示顺序", + "placeholderLocation": "请输入位置描述", + "placeholderEquipment": "请输入设备配置,如:麻醉机、监护仪、手术台等", + "placeholderRemark": "请输入备注", + "remark": "备注", + "confirm": "确 定", + "cancel": "取 消", + "viewTitle": "手术室详情", + "roomCode": "手术室编码", + "valRoomNoRequired": "房间号不能为空", + "valNameRequired": "手术室名称不能为空", + "valCapacityRequired": "容纳人数不能为空", + "valCapacityNumber": "容纳人数必须为数字", + "valDeptRequired": "请选择所属科室", + "addTitle": "新增手术室", + "editTitle": "编辑手术室", + "errorGetList": "获取手术室列表失败", + "errorGetListRetry": "获取手术室列表失败,请稍后重试", + "successModify": "修改成功", + "errorModify": "修改失败", + "errorModifyRetry": "修改失败,请稍后重试", + "successAdd": "新增成功", + "errorAdd": "新增失败", + "errorAddRetry": "新增失败,请稍后重试", + "errorForm": "请完善表单信息", + "confirmEnable": "是否确认启用选中的手术室?", + "successEnable": "启用成功", + "confirmDisable": "是否确认停用选中的手术室?", + "successDisable": "停用成功" + }, + "preopmanage": { + "totalDiscussions": "总讨论数", + "draft": "草稿", + "pendingSignature": "待签名", + "pendingReview": "待审核", + "completed": "已完成", + "rejected": "已驳回", + "title": "术前讨论管理", + "newDiscussion": "新建讨论", + "patient": "患者", + "patientName": "患者姓名", + "surgeryLevel": "手术级别", + "all": "全部", + "level1": "一级", + "level2": "二级", + "level3": "三级", + "level4": "四级", + "statusLabel": "状态", + "search": "搜索", + "reset": "重置", + "seq": "序号", + "surgeryName": "手术名称", + "level": "级别", + "levelSuffix": "级", + "host": "主持人", + "conclusion": "结论", + "agreeSurgery": "同意手术", + "needSupplement": "需补充检查", + "noSurgery": "暂不手术", + "createTime": "创建时间", + "actions": "操作", + "detail": "详情", + "submit": "提交", + "pass": "通过", + "reject": "驳回", + "newDialogTitle": "新建术前讨论", + "encounterId": "住院号", + "placeholderEncounterId": "住院号", + "preopDiagnosis": "术前诊断", + "placeholderPreopDiagnosis": "术前诊断", + "surgeryIndication": "手术指征", + "placeholderSurgeryIndication": "手术指征", + "mainPlan": "主手术方案", + "placeholderMainPlan": "主手术方案", + "backupPlan": "备选方案", + "placeholderBackupPlan": "备选手术方案", + "anesthesiaType": "麻醉方式", + "placeholderAnesthesiaType": "麻醉方式", + "discussionType": "讨论类型", + "typeDept": "科内讨论", + "typeFull": "全科讨论", + "typeHospital": "全院讨论", + "risks": "风险及对策", + "placeholderRisks": "术中可能风险及对策", + "postopNotes": "术后注意", + "placeholderPostopNotes": "术后注意事项", + "hostName": "主持人", + "placeholderHostName": "主持人姓名", + "location": "讨论地点", + "placeholderLocation": "讨论地点", + "conclusionLabel": "讨论结论", + "needFurtherCheck": "需进一步检查", + "save": "保存", + "detailTitle": "术前讨论详情", + "detailPatient": "患者", + "detailSurgeryName": "手术名称", + "detailSurgeryLevel": "手术级别", + "detailHost": "主持人", + "detailConclusion": "讨论结论", + "detailStatus": "状态", + "discussionContent": "讨论内容", + "participants": "参与者", + "name": "姓名", + "titleProf": "职称", + "role": "角色", + "signature": "签名", + "signed": "已签", + "unsigned": "未签", + "signTime": "签名时间", + "valPatientRequired": "请输入患者姓名", + "valSurgeryNameRequired": "请输入手术名称", + "valSurgeryLevelRequired": "请选择手术级别", + "valDiagnosisRequired": "请输入术前诊断", + "valMainPlanRequired": "请输入主手术方案", + "valHostRequired": "请输入主持人", + "submitSuccess": "已提交", + "submitFailed": "提交失败", + "confirmApprove": "确认通过该讨论?", + "confirmReject": "确认驳回该讨论?", + "approveSuccess": "通过成功", + "rejectSuccess": "驳回成功", + "approveFailed": "通过失败", + "rejectFailed": "驳回失败", + "createSuccess": "创建成功", + "createFailed": "创建失败" } -} +} \ No newline at end of file diff --git a/healthlink-his-ui/src/views/emr/archive/index.vue b/healthlink-his-ui/src/views/emr/archive/index.vue index a7fd170d5..ca1001849 100644 --- a/healthlink-his-ui/src/views/emr/archive/index.vue +++ b/healthlink-his-ui/src/views/emr/archive/index.vue @@ -1,7 +1,7 @@ - 病历打印归档 + {{ t('emr.archive.title') }} - {{ syncing ? '同步中...' : '同步历史数据' }} + {{ syncing ? t('emr.archive.syncing') : t('emr.archive.syncHistory') }} - 刷新统计 + {{ t('emr.archive.refreshStats') }} @@ -29,7 +29,7 @@ {{ stats.total||0 }} - 总记录 + {{ t('emr.archive.totalRecords') }} @@ -40,7 +40,7 @@ {{ stats.archived||0 }} - 已归档 + {{ t('emr.archive.archived') }} @@ -51,7 +51,7 @@ {{ stats.printed||0 }} - 待归档 + {{ t('emr.archive.pendingArchive') }} @@ -65,7 +65,7 @@ > {{ stats.archiveRate24h||0 }}% - 24h归档率 + {{ t('emr.archive.archiveRate24h') }} @@ -74,26 +74,26 @@ @@ -101,7 +101,7 @@ type="primary" @click="loadData" > - 查询 + {{ t('emr.archive.query') }} @@ -136,38 +136,38 @@ type="info" size="small" > - 打印 + {{ t('emr.archive.print') }} - 归档 + {{ t('emr.archive.archive') }} - 补打 + {{ t('emr.archive.reprint') }} @@ -176,14 +176,14 @@ type="success" size="small" > - 已归档 + {{ t('emr.archive.archived') }} - 待归档 + {{ t('emr.archive.pendingArchive') }} @@ -211,7 +211,7 @@ size="small" @click="doArchive(row)" > - 归档 + {{ t('emr.archive.archive') }} - 补打 + {{ t('emr.archive.reprint') }} @@ -235,28 +235,31 @@ diff --git a/healthlink-his-ui/src/views/surgicalschedule/index.vue b/healthlink-his-ui/src/views/surgicalschedule/index.vue index fc57aadf6..3a5513b6c 100755 --- a/healthlink-his-ui/src/views/surgicalschedule/index.vue +++ b/healthlink-his-ui/src/views/surgicalschedule/index.vue @@ -9,38 +9,38 @@ class="query-form" > - 查询 + {{ t('surgicalschedule.search') }} - 重置 + {{ t('surgicalschedule.reset') }} @@ -108,7 +108,7 @@ icon="Plus" @click="handleAdd" > - 新增手术安排 + {{ t('surgicalschedule.add') }} @@ -119,7 +119,7 @@ :disabled="!selectedRow" @click="handleChargeCharge(selectedRow)" > - 计费 + {{ t('surgicalschedule.billing') }} @@ -130,7 +130,7 @@ :disabled="!selectedRow" @click="handleMedicalAdvice(selectedRow)" > - 医嘱 + {{ t('surgicalschedule.medicalAdvice') }} @@ -140,7 +140,7 @@ icon="Download" @click="handleExport" > - 导出表格 + {{ t('surgicalschedule.export') }} @@ -231,7 +231,7 @@ @@ -240,13 +240,13 @@ @@ -255,7 +255,7 @@ - 查看 + {{ t('surgicalschedule.view') }} - 编辑 + {{ t('surgicalschedule.edit') }} - 取消 + {{ t('surgicalschedule.cancel') }} @@ -329,23 +329,23 @@ class="dialog-header-buttons" > - 查找 + {{ t('surgicalschedule.find') }} - 刷新 + {{ t('surgicalschedule.refresh') }} - 返回 + {{ t('surgicalschedule.back') }} - 保存 + {{ t('surgicalschedule.save') }} @@ -359,12 +359,12 @@ > - 病人基本信息 + {{ t('surgicalschedule.patientBasicInfo') }} @@ -438,7 +438,7 @@ @@ -480,12 +480,12 @@ - 手术申请信息 + {{ t('surgicalschedule.surgeryApplyInfo') }} - 手术安排 + {{ t('surgicalschedule.surgerySchedule') }} - 是 + {{ t('surgicalschedule.yes') }} - 否 + {{ t('surgicalschedule.no') }} @@ -694,17 +694,17 @@ - 手术性质和部位 + {{ t('surgicalschedule.natureAndSite') }} - 是 + {{ t('surgicalschedule.yes') }} - 否 + {{ t('surgicalschedule.no') }} @@ -754,13 +754,13 @@ @@ -768,12 +768,12 @@ - 医护人员 + {{ t('surgicalschedule.medicalStaff') }} @@ -811,12 +811,12 @@ @@ -831,12 +831,12 @@ @@ -853,12 +853,12 @@ @@ -873,12 +873,12 @@ @@ -893,12 +893,12 @@ @@ -913,12 +913,12 @@ @@ -935,12 +935,12 @@ @@ -974,27 +974,27 @@ - 是 + {{ t('surgicalschedule.yes') }} - 否 + {{ t('surgicalschedule.no') }} @@ -1002,12 +1002,12 @@ @@ -1022,12 +1022,12 @@ @@ -1042,12 +1042,12 @@ @@ -1063,21 +1063,21 @@ @@ -1085,18 +1085,18 @@ - 手术过程 + {{ t('surgicalschedule.surgeryProcess') }} - 是 + {{ t('surgicalschedule.yes') }} - 否 + {{ t('surgicalschedule.no') }} @@ -1275,31 +1275,31 @@ - 备注信息 + {{ t('surgicalschedule.remarkInfo') }} @@ -1314,13 +1314,13 @@ class="dialog-footer" > - 取消 + {{ t('surgicalschedule.cancel') }} - 保存 + {{ t('surgicalschedule.save') }} @@ -1329,7 +1329,7 @@ - 查询 + {{ t('surgicalschedule.search') }} - 重置 + {{ t('surgicalschedule.reset') }} @@ -1454,32 +1454,32 @@ @@ -1488,7 +1488,7 @@ @@ -1497,7 +1497,7 @@ @@ -1506,7 +1506,7 @@ - 取消 + {{ t('surgicalschedule.cancel') }} - 确认 + {{ t('surgicalschedule.confirm') }} + + + {{ t('surgicalschedule.confirm') }} @@ -1559,7 +1565,7 @@ {{ @@ -1575,19 +1581,37 @@ }} {{ Object.keys(chargePatientInfo).length !== 0 ? formatChargeDate(chargePatientInfo.registerTime) : '-' }} {{ userStore.name }} + {{ chargeSurgeryInfo.surgeryName }} + + + {{ Object.keys(chargePatientInfo).length !== 0 ? formatChargeDate(chargePatientInfo.registerTime) : '-' }} + + + {{ userStore.name }} + + {{ chargeSurgeryInfo.surgeryName }} @@ -1626,7 +1650,7 @@ - 正在加载医嘱数据,请稍候... + {{ t('surgicalschedule.loadingAdvice') }} import { ref, reactive, onMounted, nextTick, computed, watch } from 'vue' import { getCurrentInstance } from 'vue' +import { useI18n } from 'vue-i18n' import { parseTime } from '@/utils/his' import { useDict } from '@/utils/dict' import download from '@/plugins/download' @@ -1711,6 +1736,7 @@ function listOperatingRoomSilent(query) { } const { proxy } = getCurrentInstance() +const { t } = useI18n() const userStore = useUserStore() const loading = ref(true) const showSearch = ref(true) @@ -1801,36 +1827,36 @@ const total = ref(0) const title = ref('') // 表单验证规则 -const rules = reactive({ +const rules = computed(() => ({ scheduleDate: [ - { required: true, message: '请选择安排时间', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectScheduleDate'), trigger: 'change' } ], sequenceNo: [ - { required: true, message: '请输入手术台次', trigger: 'blur' }, - { type: 'number', message: '手术台次必须为数字', trigger: 'blur' } + { required: true, message: t('surgicalschedule.msgInputSequenceNo'), trigger: 'blur' }, + { type: 'number', message: t('surgicalschedule.msgSequenceNoNumber'), trigger: 'blur' } ], roomCode: [ - { required: true, message: '请选择手术间号', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectRoomCode'), trigger: 'change' } ], tableNo: [ - { required: true, message: '请选择手术台', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectTableNo'), trigger: 'change' } ], surgeryNature: [ - { required: true, message: '请选择手术性质', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectSurgeryNature'), trigger: 'change' } ], surgerySite: [ - { required: true, message: '请选择手术部位', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectSurgerySite'), trigger: 'change' } ], anesMethod: [ - { required: true, message: '请选择麻醉方法', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectAnesMethod'), trigger: 'change' } ], preoperativeDiagnosis: [ - { required: true, message: '请输入术前诊断', trigger: 'blur' } + { required: true, message: t('surgicalschedule.msgInputPreDiagnosis'), trigger: 'blur' } ], surgeonCode: [ - { required: true, message: '请选择主刀医生', trigger: 'change' } + { required: true, message: t('surgicalschedule.msgSelectSurgeon'), trigger: 'change' } ] -}) +})) // 手术申请查询弹窗 const showApplyDialog = ref(false) @@ -1849,7 +1875,7 @@ const prescriptionRef = ref() // 临时医嘱弹窗 const showTemporaryMedical = ref(false) -const temporaryMedicalTitle = ref('门诊术中临时医嘱') +const temporaryMedicalTitle = ref(t('surgicalschedule.temporaryMedicalTitle')) const temporaryPatientInfo = ref({}) const temporaryBillingMedicines = ref([]) const temporaryAdvices = ref([]) @@ -2072,7 +2098,7 @@ function getList() { surgeryList.value = res.data.records total.value = res.data.total }).catch(error => { - proxy.$modal.msgError('获取手术安排列表失败,请稍后重试') + proxy.$modal.msgError(t('surgicalschedule.msgGetScheduleListFailed')) surgeryList.value = [] total.value = 0 }).finally(() => { @@ -2107,7 +2133,7 @@ function resetQuery() { // 新增手术安排 function handleAdd() { - title.value = '新增手术安排' + title.value = t('surgicalschedule.addSchedule') isEditMode.value = false isViewMode.value = false resetForm() @@ -2116,7 +2142,7 @@ function handleAdd() { // 编辑手术安排 function handleEdit(row) { - title.value = '编辑手术安排' + title.value = t('surgicalschedule.editTitle') isEditMode.value = true isViewMode.value = false resetForm() @@ -2135,17 +2161,17 @@ function handleEdit(row) { setupAnesDataWatch() } } else { - proxy.$modal.msgError('获取手术安排详情失败') + proxy.$modal.msgError(t('surgicalschedule.msgGetDetailFailed')) } }).catch(() => { - proxy.$modal.msgError('获取手术安排详情失败') + proxy.$modal.msgError(t('surgicalschedule.msgGetDetailFailed')) }) open.value = true } // 查看手术安排 function handleView(row) { - title.value = '查看手术安排' + title.value = t('surgicalschedule.viewTitle') isEditMode.value = false isViewMode.value = true resetForm() @@ -2164,10 +2190,10 @@ function handleView(row) { setupAnesDataWatch() } } else { - proxy.$modal.msgError('获取手术安排详情失败') + proxy.$modal.msgError(t('surgicalschedule.msgGetDetailFailed')) } }).catch(() => { - proxy.$modal.msgError('获取手术安排详情失败') + proxy.$modal.msgError(t('surgicalschedule.msgGetDetailFailed')) }) open.value = true } @@ -2187,11 +2213,11 @@ function handleCurrentChange(args, oldRow) { // 删除手术安排 function handleDelete(row) { - proxy.$modal.confirm('是否确认取消手术安排"' + row.operName + '"?').then(() => { + proxy.$modal.confirm(t('surgicalschedule.msgConfirmDelete', { name: row.operName })).then(() => { return deleteSurgerySchedule(row.scheduleId) }).then(() => { getPageList() - proxy.$modal.msgSuccess('手术安排已取消') + proxy.$modal.msgSuccess(t('surgicalschedule.msgDeletedSuccess')) }).catch(() => { return }) @@ -2206,12 +2232,12 @@ async function handleChargeCharge(row) { // 如果还是没有行数据,显示提示 if (!row) { - proxy.$modal.msgWarning('请先选择要计费的手术安排') + proxy.$modal.msgWarning(t('surgicalschedule.msgSelectForBilling')) return } // 校验就诊ID是否存在(visitId 为空说明手术安排未关联就诊记录,无法计费) if (!row.visitId) { - proxy.$modal.msgError('该手术安排未关联就诊记录,无法计费。请先确认患者已完成就诊登记。') + proxy.$modal.msgError(t('surgicalschedule.msgNoVisitForBilling')) return } @@ -2223,16 +2249,16 @@ async function handleChargeCharge(row) { // 从返回数据中提取accountId - data是数组,取第一个元素的accountId accountId = contractResult.data[0].accountId || contractResult.data[0].id } else { - proxy.$modal.msgError('获取账户信息失败,请确认该就诊记录是否已建立计费账户。') + proxy.$modal.msgError(t('surgicalschedule.msgGetAccountFailed')) return } } catch (error) { - proxy.$modal.msgError('获取账户信息异常,请稍后重试。') + proxy.$modal.msgError(t('surgicalschedule.msgGetAccountError')) return } // 设置计费弹窗数据 - 直接复制划价页面的逻辑 - chargeDialogTitle.value = '手术计费 - ' + row.patientName + ' - ' + row.operName + chargeDialogTitle.value = t('surgicalschedule.chargeDialogTitle', { name: row.patientName, op: row.operName }) // 构建患者信息,传递encounterId和机构ID chargePatientInfo.value = { @@ -2244,7 +2270,7 @@ async function handleChargeCharge(row) { organizationName: row.applyDeptName, registerTime: row.scheduleDate, typeCode_dictText: row.applyDeptName, - genderEnum_enumText: row.gender === 0 ? '男' : row.gender === 1 ? '女' : '未知', + genderEnum_enumText: row.gender === 0 ? t('surgicalschedule.male') : row.gender === 1 ? t('surgicalschedule.female') : t('surgicalschedule.unknown'), // 添加机构ID orgId: userStore.organizationId || userStore.orgId || userStore.tenantId || 1, // 添加账户ID @@ -2295,13 +2321,13 @@ function handleMedicalAdvice(row) { // 如果还是没有行数据,显示提示 if (!row) { - proxy.$modal.msgWarning('请先选择要开具医嘱的手术安排') + proxy.$modal.msgWarning(t('surgicalschedule.msgSelectForAdvice')) return } // 校验就诊ID是否存在(visitId 为空会导致后端 encounterId="undefined" 类型转换异常) if (!row.visitId) { - proxy.$modal.msgError('该手术安排未关联就诊记录,无法开具医嘱。请先确认患者已完成就诊登记。') + proxy.$modal.msgError(t('surgicalschedule.msgNoVisitForAdvice')) return } @@ -2364,7 +2390,7 @@ function handleMedicalAdvice(row) { // 🔧 修复:限制返回数量,最多显示前100条,避免数据过多导致页面卡死 const maxItems = 100 if (draftItems.length > maxItems) { - ElMessage.warning(`待签发医嘱数量过多(${draftItems.length}条),仅显示前${maxItems}条`) + ElMessage.warning(t('surgicalschedule.msgTooManyDrafts', { count: draftItems.length, max: maxItems })) draftItems.length = maxItems } @@ -2375,7 +2401,7 @@ function handleMedicalAdvice(row) { const jsonContent = item.contentJson || item.content_json; const contentData = jsonContent ? JSON.parse(jsonContent) : {}; return { - medicineName: contentData.adviceName || contentData.advice_name || item.adviceName || item.advice_name || item.chargeName || item.charge_name || contentData.itemName || contentData.item_name || '未知药品', + medicineName: contentData.adviceName || contentData.advice_name || item.adviceName || item.advice_name || item.chargeName || item.charge_name || contentData.itemName || contentData.item_name || t('surgicalschedule.unknownMedicine'), specification: contentData.volume || contentData.specification || item.volume || item.specification || '', quantity: contentData.quantity || item.quantity || 0, batchNumber: contentData.lotNumber || contentData.lot_number || item.lotNumber || item.lot_number || '', @@ -2383,7 +2409,7 @@ function handleMedicalAdvice(row) { subtotal: contentData.totalPrice || contentData.total_price || item.totalPrice || item.total_price || (contentData.unitPrice || contentData.unit_price || item.unitPrice || item.unit_price || 0) * (contentData.quantity || item.quantity || 0), - insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? '医保' : (item.insuranceType === 1 || item.insurance_type === 1) ? '医保' : '自费', + insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? t('surgicalschedule.insurance') : (item.insuranceType === 1 || item.insurance_type === 1) ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), // 添加医嘱定义ID和表名,用于库存匹配 adviceDefinitionId: item.adviceDefinitionId || contentData.adviceDefinitionId || item.advice_definition_id || null, adviceTableName: item.adviceTableName || contentData.adviceTableName || item.advice_table_name || null, @@ -2410,7 +2436,7 @@ function handleMedicalAdvice(row) { subtotal: item.totalPrice || item.total_price || (item.unitPrice || item.unit_price || 0) * (item.quantity || item.quantity_value || item.quantityValue || 0), - insuranceType: (item.insuranceType || item.insurance_type) === 1 ? '医保' : '自费', + insuranceType: (item.insuranceType || item.insurance_type) === 1 ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), // 添加医嘱定义ID和表名,用于库存匹配 adviceDefinitionId: item.adviceDefinitionId || item.advice_definition_id || null, adviceTableName: item.adviceTableName || item.advice_table_name || null, @@ -2462,7 +2488,7 @@ function handleMedicalAdvice(row) { unit: specUnit, usage: usageCode, usageLabel, - frequency: '立即', + frequency: t('surgicalschedule.immediate'), // 🔧 BugFix: 执行时间优先从 contentJson 读取,兼容计费弹窗签发时签名字段在顶层的情况 executeTime: contentData.executeTime || contentData.execute_time || contentData.signDate || item.signDate || item.executeTime || item.execute_time || '', @@ -2482,8 +2508,8 @@ function handleMedicalAdvice(row) { return { id: index + 1, adviceName: item.adviceName || item.advice_name || '', - dosage: 1, unit: 'ml', usage: 'iv', usageLabel: '静脉注射', - frequency: '立即', + dosage: 1, unit: 'ml', usage: 'iv', usageLabel: t('surgicalschedule.ivInjection'), + frequency: t('surgicalschedule.immediate'), executeTime: '', signDate: '', signDoctorName: '', @@ -2509,7 +2535,7 @@ function handleMedicalAdvice(row) { temporaryBillingMedicines.value = [] temporaryAdvices.value = [] temporaryMedicalLoading.value = false // 🔧 新增:加载完成(即使失败也要关闭加载状态) - proxy.$modal.msgError('刷新数据失败,请重试') + proxy.$modal.msgError(t('surgicalschedule.msgRefreshFailed')) console.error('Failed to refresh prescription list', error) showTemporaryMedical.value = true }) @@ -2530,7 +2556,7 @@ function handleTemporaryMedicalSubmit(data) { if (data.patientInfo && data.patientInfo.visitId) { const row = { visitId: data.patientInfo.visitId, operCode: data.patientInfo.operCode } temporarySigned.value = true - ElMessage.success('临时医嘱已生成(已签发)') + ElMessage.success(t('surgicalschedule.msgAdviceGenerated')) // 重新拉取最新数据,后端已将 statusEnum 从 1(草稿) 更新为 2(已签发) getPrescriptionList(row.visitId, 6, row.operCode).then((res) => { @@ -2559,7 +2585,7 @@ function handleTemporaryMedicalSubmit(data) { const jsonContent = item.contentJson || item.content_json const contentData = jsonContent ? JSON.parse(jsonContent) : {} return { - medicineName: contentData.adviceName || contentData.advice_name || item.adviceName || item.advice_name || item.chargeName || item.charge_name || contentData.itemName || contentData.item_name || '未知药品', + medicineName: contentData.adviceName || contentData.advice_name || item.adviceName || item.advice_name || item.chargeName || item.charge_name || contentData.itemName || contentData.item_name || t('surgicalschedule.unknownMedicine'), specification: contentData.volume || contentData.specification || item.volume || item.specification || '', quantity: contentData.quantity || item.quantity || 0, batchNumber: contentData.lotNumber || contentData.lot_number || item.lotNumber || item.lot_number || '', @@ -2567,7 +2593,7 @@ function handleTemporaryMedicalSubmit(data) { subtotal: contentData.totalPrice || contentData.total_price || item.totalPrice || item.total_price || (contentData.unitPrice || contentData.unit_price || item.unitPrice || item.unit_price || 0) * (contentData.quantity || item.quantity || 0), - insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? '医保' : (item.insuranceType === 1 || item.insurance_type === 1) ? '医保' : '自费', + insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? t('surgicalschedule.insurance') : (item.insuranceType === 1 || item.insurance_type === 1) ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), adviceDefinitionId: item.adviceDefinitionId || contentData.adviceDefinitionId || item.advice_definition_id || null, adviceTableName: item.adviceTableName || contentData.adviceTableName || item.advice_table_name || null, adviceType: item.adviceType || contentData.adviceType || item.advice_type || null, @@ -2589,7 +2615,7 @@ function handleTemporaryMedicalSubmit(data) { batchNumber: item.lotNumber || item.lot_number || '', unitPrice: item.unitPrice || item.unit_price || 0, subtotal: item.totalPrice || item.total_price || 0, - insuranceType: (item.insuranceType || item.insurance_type) === 1 ? '医保' : '自费', + insuranceType: (item.insuranceType || item.insurance_type) === 1 ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), adviceDefinitionId: item.adviceDefinitionId || item.advice_definition_id || null, adviceTableName: item.adviceTableName || item.advice_table_name || null, adviceType: item.adviceType || item.advice_type || null, @@ -2626,7 +2652,7 @@ function handleTemporaryMedicalSubmit(data) { if (oldToNewUsage2[usageCode]) { usageCode = oldToNewUsage2[usageCode] } return { id: index + 1, adviceName: medicineName, dosage, unit: specUnit, - usage: usageCode, frequency: '立即', + usage: usageCode, frequency: t('surgicalschedule.immediate'), executeTime: contentData.executeTime || contentData.execute_time || contentData.signDate || item.signDate || item.executeTime || item.execute_time || '', signDate: contentData.signDate || item.signDate || '', @@ -2636,7 +2662,7 @@ function handleTemporaryMedicalSubmit(data) { } catch (e) { return { id: index + 1, adviceName: item.adviceName || '', dosage: 1, unit: 'ml', - usage: 'iv', frequency: '立即', executeTime: '', + usage: 'iv', frequency: t('surgicalschedule.immediate'), executeTime: '', signDate: '', signDoctorName: '', originalMedicine: { ...item, medicineName: item.adviceName || '', specification: item.volume || '', quantity: item.quantity || 1, encounterId: row.visitId } } @@ -2682,7 +2708,7 @@ function handleDeleteTemporaryAdvice(index) { temporaryBillingMedicines.value.push(deletedAdvice.originalMedicine) } temporaryAdvices.value.splice(index, 1) - proxy.$modal.msgSuccess('临时医嘱已删除,已放回待生成列表') + proxy.$modal.msgSuccess(t('surgicalschedule.msgAdviceDeleted')) } // 处理刷新按钮点击 @@ -2691,7 +2717,7 @@ function handleTemporaryMedicalRefresh() { if (temporaryPatientInfo.value.visitId) { handleMedicalAdvice(temporaryPatientInfo.value) } else { - proxy.$modal.msgWarning('患者信息不完整,请关闭弹窗重新打开') + proxy.$modal.msgWarning(t('surgicalschedule.msgPatientInfoIncomplete')) } } @@ -2755,7 +2781,7 @@ function handleQuoteBilling() { let usageLabel = getUsageLabel(usageCode) return { id: index + 1, adviceName: medicineName, dosage, unit: specUnit, - usage: usageCode, usageLabel, frequency: '立即', + usage: usageCode, usageLabel, frequency: t('surgicalschedule.immediate'), executeTime: contentData.executeTime || contentData.execute_time || contentData.signDate || item.signDate || item.executeTime || item.execute_time || '', signDate: contentData.signDate || item.signDate || '', @@ -2771,8 +2797,8 @@ function handleQuoteBilling() { } catch (e) { return { id: index + 1, adviceName: item.adviceName || item.advice_name || '', - dosage: 1, unit: 'ml', usage: 'iv', usageLabel: '静脉注射', - frequency: '立即', executeTime: '', + dosage: 1, unit: 'ml', usage: 'iv', usageLabel: t('surgicalschedule.ivInjection'), + frequency: t('surgicalschedule.immediate'), executeTime: '', signDate: '', signDoctorName: '', originalMedicine: { ...item, @@ -2800,7 +2826,7 @@ function handleQuoteBilling() { // 🔧 修复:限制返回数量,最多显示前100条,避免数据过多导致页面卡死 const maxItems = 100 if (filteredItems.length > maxItems) { - ElMessage.warning(`待签发医嘱数量过多(${filteredItems.length}条),仅显示前${maxItems}条`) + ElMessage.warning(t('surgicalschedule.msgTooManyAdvices', { count: filteredItems.length, max: maxItems })) filteredItems.length = maxItems } @@ -2818,7 +2844,7 @@ function handleQuoteBilling() { subtotal: contentData.totalPrice || contentData.total_price || item.totalPrice || item.total_price || (contentData.unitPrice || contentData.unit_price || item.unitPrice || item.unit_price || 0) * (contentData.quantity || item.quantity || item.quantity_value || item.quantityValue || 0), - insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? '医保' : (item.insuranceType === 1 || item.insurance_type === 1) ? '医保' : '自费', + insuranceType: (contentData.insuranceType || contentData.insurance_type) === 1 ? t('surgicalschedule.insurance') : (item.insuranceType === 1 || item.insurance_type === 1) ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), orgId: contentData.orgId || item.orgId || contentData.positionId || item.positionId || userStore.orgId, positionId: contentData.positionId || item.positionId || userStore.orgId, definitionId: contentData.definitionId || item.definitionId, @@ -2840,7 +2866,7 @@ function handleQuoteBilling() { subtotal: item.totalPrice || item.total_price || (item.unitPrice || item.unit_price || 0) * (item.quantity || item.quantity_value || 0), - insuranceType: (item.insuranceType || item.insurance_type) === 1 ? '医保' : '自费', + insuranceType: (item.insuranceType || item.insurance_type) === 1 ? t('surgicalschedule.insurance') : t('surgicalschedule.selfPay'), orgId: item.orgId || item.positionId || userStore.orgId, positionId: item.positionId || userStore.orgId, definitionId: item.definitionId, @@ -2856,22 +2882,22 @@ function handleQuoteBilling() { }) temporaryMedicalLoading.value = false // 🔧 新增:加载完成 - ElMessage.success('已成功引用最新计费药品信息!') + ElMessage.success(t('surgicalschedule.msgQuoteSuccess')) } else { // 如果没有数据或接口调用失败,初始化空列表 temporaryBillingMedicines.value = [] temporaryAdvices.value = [] temporaryMedicalLoading.value = false // 🔧 新增:加载完成(即使失败也要关闭加载状态) - ElMessage.error('获取计费数据失败,请重试') + ElMessage.error(t('surgicalschedule.msgGetChargeFailed')) } }).catch(() => { temporaryBillingMedicines.value = [] temporaryAdvices.value = [] temporaryMedicalLoading.value = false // 🔧 新增:加载完成(即使失败也要关闭加载状态) - ElMessage.error('获取计费数据失败,请重试') + ElMessage.error(t('surgicalschedule.msgGetChargeFailed')) }) } else { - proxy.$modal.msgWarning('患者信息不完整,请关闭弹窗重新打开') + proxy.$modal.msgWarning(t('surgicalschedule.msgPatientInfoIncomplete')) } } @@ -2974,25 +3000,25 @@ function submitForm() { if (!form.scheduleId) { // 新增手术安排 addSurgerySchedule(submitData).then((res) => { - proxy.$modal.msgSuccess('新增成功') + proxy.$modal.msgSuccess(t('surgicalschedule.msgAddSuccess')) queryParams.pageNo = 1 open.value = false getPageList() }).catch(() => { - proxy.$message.error('新增手术安排失败,请检查表单信息') + proxy.$message.error(t('surgicalschedule.msgAddFailed')) }) } else { // 修改手术安排 updateSurgerySchedule(submitData).then((res) => { - proxy.$modal.msgSuccess('修改成功') + proxy.$modal.msgSuccess(t('surgicalschedule.msgEditSuccess')) open.value = false getPageList() }).catch(() => { - proxy.$message.error('更新手术安排失败,请检查表单信息') + proxy.$message.error(t('surgicalschedule.msgUpdateFailed')) }) } } else { - proxy.$message.error('请检查表单信息,标红字段为必填项') + proxy.$message.error(t('surgicalschedule.msgValidateFailed')) } }) } @@ -3030,7 +3056,7 @@ function getSurgicalScheduleList() { applyList.value = responseData.records || [] applyTotal.value = responseData.total || 0 }).catch(() => { - proxy.$modal.msgError('获取手术申请列表失败,请稍后重试') + proxy.$modal.msgError(t('surgicalschedule.msgGetApplyListFailed')) applyList.value = [] applyTotal.value = 0 }) @@ -3154,7 +3180,7 @@ const formattedApplyTime = computed(() => { function confirmApply() { const selectedRows = applyTableRef.value?.getCheckboxRecords ? applyTableRef.value.getCheckboxRecords() : [] if (!selectedRows || selectedRows.length === 0) { - proxy.$modal.msgWarning('请先选择一条手术申请记录') + proxy.$modal.msgWarning(t('surgicalschedule.msgSelectApplyRecord')) return } const selectedRow = selectedRows[0] @@ -3189,8 +3215,8 @@ function confirmApply() { // 导出手术安排列表 function handleExport() { - proxy.$modal.confirm('确定要导出当前筛选条件下的手术安排列表吗?').then(() => { - download.downloadGet('/clinical-manage/surgery-schedule/export', queryParams, '手术安排列表.csv') + proxy.$modal.confirm(t('surgicalschedule.msgExportConfirm')).then(() => { + download.downloadGet('/clinical-manage/surgery-schedule/export', queryParams, t('surgicalschedule.exportFilename')) }).catch(() => { // 取消导出,不做任何操作 }) diff --git a/healthlink-his-ui/src/views/surgicalschedule/temporaryMedical.vue b/healthlink-his-ui/src/views/surgicalschedule/temporaryMedical.vue index aa20dee4b..6216a65a0 100755 --- a/healthlink-his-ui/src/views/surgicalschedule/temporaryMedical.vue +++ b/healthlink-his-ui/src/views/surgicalschedule/temporaryMedical.vue @@ -1,37 +1,37 @@ - + - 门诊术中临时医嘱 + {{ t('surgicalschedule.tmp.title') }} - 患者: + {{ t('surgicalschedule.tmp.patientLabel') }} {{ patientInfo.patientName || '-' }} - 就诊卡号: + {{ t('surgicalschedule.tmp.cardNoLabel') }} {{ patientInfo.identifierNo || '-' }} - 手术单号: + {{ t('surgicalschedule.tmp.operCodeLabel') }} {{ patientInfo.operCode || '-' }} - 科室: + {{ t('surgicalschedule.tmp.deptLabel') }} {{ patientInfo.roomCode || '-' }} - 医师: + {{ t('surgicalschedule.tmp.doctorLabel') }} {{ patientInfo.doctorName || '-' }} - 角色: + {{ t('surgicalschedule.tmp.roleLabel') }} {{ patientInfo.role || '-' }} @@ -41,13 +41,13 @@ class="refresh-btn" @click="handleRefresh" > - ↻ 刷新 + ↻ {{ t('surgicalschedule.tmp.refresh') }} - 引用计费 + {{ t('surgicalschedule.tmp.quoteBilling') }} @@ -55,13 +55,13 @@ - 一、已引用计费药品(待生成医嘱) + {{ t('surgicalschedule.tmp.sectionBillingTitle') }} - {{ billingExpanded ? '收起' : `展开全部(${(billingMedicines || []).length}条)` }} + {{ billingExpanded ? t('surgicalschedule.tmp.collapse') : `${t('surgicalschedule.tmp.expandAll')}(${(billingMedicines || []).length}${t('surgicalschedule.tmp.items')})` }} - 医保内:¥{{ insuranceAmount.toFixed(2) }} + {{ t('surgicalschedule.tmp.insuranceIn') }}:¥{{ insuranceAmount.toFixed(2) }} - 自费:¥{{ selfPayAmount.toFixed(2) }} + {{ t('surgicalschedule.tmp.selfPay') }}:¥{{ selfPayAmount.toFixed(2) }} - 总计:¥{{ totalAmount.toFixed(2) }} + {{ t('surgicalschedule.tmp.total') }}:¥{{ totalAmount.toFixed(2) }} @@ -159,13 +159,13 @@ - 二、临时医嘱预览(已生成) + {{ t('surgicalschedule.tmp.sectionAdviceTitle') }} - {{ advicesExpanded ? '收起' : `展开全部(${(displayAdvices || []).length}条)` }} + {{ advicesExpanded ? t('surgicalschedule.tmp.collapse') : `${t('surgicalschedule.tmp.expandAll')}(${(displayAdvices || []).length}${t('surgicalschedule.tmp.items')})` }} - 立即 + {{ t('surgicalschedule.tmp.immediate') }} @@ -245,14 +245,14 @@ type="primary" @click="handleEditAdvice(rowIndex)" > - 编辑 + {{ t('surgicalschedule.tmp.edit') }} - 删除 + {{ t('surgicalschedule.tmp.delete') }} @@ -262,19 +262,19 @@ - 三、医师电子签名 + {{ t('surgicalschedule.tmp.sectionSignatureTitle') }} - 签名医师: + {{ t('surgicalschedule.tmp.signDoctorLabel') }} {{ isSigned ? signatureDoctor : '未签名' }} + >{{ isSigned ? signatureDoctor : t('surgicalschedule.tmp.unsigned') }} - 签名时间: + {{ t('surgicalschedule.tmp.signTimeLabel') }} {{ signatureTime || '-' }} @@ -284,14 +284,14 @@ class="cancel-btn" @click="handleCancel" > - 取消 + {{ t('surgicalschedule.tmp.cancel') }} - {{ allItemsSubmitted ? '已签发' : '一键签名并生成医嘱' }} + {{ allItemsSubmitted ? t('surgicalschedule.tmp.alreadySigned') : t('surgicalschedule.tmp.signAndGenerate') }} @@ -299,28 +299,28 @@ - 请输入账户密码: + {{ t('surgicalschedule.tmp.enterAccountPassword') }} - 取消 + {{ t('surgicalschedule.tmp.cancel') }} - 确认 + {{ t('surgicalschedule.tmp.confirm') }} @@ -329,7 +329,7 @@ @@ -338,35 +338,35 @@ :model="editForm" label-width="80px" > - + - + @@ -380,10 +380,10 @@ - + - 取消 + {{ t('surgicalschedule.tmp.cancel') }} - 保存 + {{ t('surgicalschedule.tmp.save') }} @@ -409,11 +409,16 @@
请输入账户密码:
{{ t('surgicalschedule.tmp.enterAccountPassword') }}