- 将医保模拟接口从通用路由改为具体功能路由 - 新增签到、取消门诊登记、预结算等功能接口 - 统一返回格式为 code/message/result 结构 - 移除旧版医保接口路由兼容处理 - 更新前端国际化配置文件中的医保相关词条 - 删除重复的无数据提示词条并补充新的字段翻译 - 移除药房模块独立词条合并至通用配置中 - 新增住院管理模块的完整国际化词条配置
196 lines
11 KiB
JavaScript
196 lines
11 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Build clean English dictionary
|
|
const en = {
|
|
'新增':'Add','编辑':'Edit','删除':'Delete','查询':'Search','重置':'Reset',
|
|
'确定':'Confirm','取消':'Cancel','保存':'Save','提交':'Submit','关闭':'Close',
|
|
'导出':'Export','导入':'Import','刷新':'Refresh','打印':'Print','复制':'Copy',
|
|
'返回':'Back','完成':'Finish','查看':'View','详情':'Detail','明细':'Detail','列表':'List',
|
|
'操作':'Action','状态':'Status','排序':'Sort',
|
|
'启用':'Enabled','停用':'Disabled','正常':'Normal','异常':'Abnormal',
|
|
'是':'Yes','否':'No','有':'Yes','无':'None',
|
|
'成功':'Success','失败':'Failed','警告':'Warning','提示':'Tip','错误':'Error',
|
|
'加载中':'Loading','暂无数据':'No Data','请选择':'Please select','请输入':'Please enter',
|
|
'确认删除':'Confirm Delete','操作成功':'Operation successful','操作失败':'Operation failed',
|
|
'保存成功':'Saved','删除成功':'Deleted','新增成功':'Added','修改成功':'Modified',
|
|
'序号':'No.','编号':'No.','编码':'Code','名称':'Name','姓名':'Name',
|
|
'性别':'Gender','年龄':'Age','类型':'Type','级别':'Level',
|
|
'日期':'Date','时间':'Time','创建时间':'Create Time','更新时间':'Update Time',
|
|
'备注':'Remark','描述':'Description','创建人':'Creator','更新人':'Updater',
|
|
'数量':'Qty','金额':'Amount','单价':'Price','总价':'Total','价格':'Price',
|
|
'费用':'Fee','规格':'Spec','单位':'Unit','批号':'Batch No.',
|
|
'科室':'Dept','部门':'Department','医生':'Doctor','护士':'Nurse',
|
|
'患者':'Patient','患者姓名':'Patient Name','患者ID':'Patient ID',
|
|
'病历号':'MRN','住院号':'Admission No.','门诊号':'OPD No.',
|
|
'诊断':'Diagnosis','处方':'Rx','医嘱':'Order',
|
|
'药品':'Drug','剂量':'Dosage','用法':'Usage','频次':'Frequency',
|
|
'开始时间':'Start Time','结束时间':'End Time',
|
|
'联系电话':'Phone','手机号':'Phone','地址':'Address',
|
|
'身份证号':'ID No.','就诊卡号':'Visit Card','卡号':'Card No.',
|
|
'来源':'Source','结果':'Result','参考值':'Ref Value','参考范围':'Ref Range',
|
|
'项目':'Item','耗材':'Consumable','库存':'Stock','入库':'Inbound','出库':'Outbound',
|
|
'供应商':'Supplier','生产商':'Manufacturer','有效期':'Expiry',
|
|
'发票号':'Invoice No.','单据号':'Document No.',
|
|
'结算':'Settlement','支付方式':'Payment Method',
|
|
'合计':'Total','总计':'Grand Total','小计':'Subtotal',
|
|
'应收':'Receivable','实收':'Actual','欠费':'Arrears','找零':'Change',
|
|
'退费':'Refund','待处理':'Pending','处理中':'Processing','已完成':'Completed',
|
|
'已取消':'Cancelled','已确认':'Confirmed','已审核':'Reviewed',
|
|
'已批准':'Approved','已拒绝':'Rejected','待审核':'Pending Review',
|
|
'已签到':'Checked In','已就诊':'Consulted','已退号':'Cancelled',
|
|
'全部':'All','其他':'Other','男':'Male','女':'Female','未知':'Unknown',
|
|
'元':'Yuan','次':'Times','天':'Days','小时':'Hours','分钟':'Minutes',
|
|
'系统':'System','设置':'Settings','配置':'Configuration',
|
|
'权限':'Permission','角色':'Role','菜单':'Menu','字典':'Dictionary',
|
|
'用户':'User','密码':'Password','登录':'Login','退出':'Logout',
|
|
'首页':'Home','仪表盘':'Dashboard','个人中心':'Profile',
|
|
'医院信息管理系统':'Hospital HIS','经创贺联':'HealthLink',
|
|
'门诊':'OPD','住院':'IPD','急诊':'Emergency',
|
|
'外科':'Surgery','内科':'Internal Medicine','妇产科':'OB/GYN',
|
|
'儿科':'Pediatrics','骨科':'Orthopedics','眼科':'Ophthalmology',
|
|
'耳鼻喉':'ENT','口腔':'Dental','皮肤科':'Dermatology',
|
|
'中医':'TCM','康复':'Rehabilitation','放射':'Radiology','超声':'Ultrasound',
|
|
'病理':'Pathology','输血':'Blood Transfusion','透析':'Dialysis',
|
|
'重症':'ICU','新生儿':'Neonatal','产科':'Obstetrics',
|
|
'ICU':'ICU','住院部':'Inpatient Dept','儿科门诊':'Pediatric OPD',
|
|
'影像科':'Radiology Dept','急诊科':'Emergency Dept',
|
|
'手术室':'Operating Room','检验科':'Lab Dept','药房':'Pharmacy',
|
|
'门诊内科':'Internal Medicine OPD','门诊外科':'Surgery OPD','门诊部':'OPD Dept',
|
|
'康复科':'Rehab Dept','药剂科':'Pharmacy Dept','设备科':'Equipment Dept',
|
|
'信息科':'IT Dept','财务科':'Finance Dept','人事科':'HR Dept',
|
|
'医务科':'Medical Affairs Dept','护理部':'Nursing Dept',
|
|
'质控科':'Quality Control Dept','院感科':'Infection Control Dept',
|
|
'病案室':'Medical Record Room','挂号处':'Registration','收费处':'Cashier',
|
|
'药库':'Pharmacy Warehouse','中药房':'Chinese Pharmacy','西药房':'Western Pharmacy',
|
|
'门诊药房':'OPD Pharmacy','住院药房':'IPD Pharmacy','急诊药房':'Emergency Pharmacy',
|
|
'工作站':'Workstation','日结':'Daily Settlement','换卡':'Card Replacement',
|
|
'预交金':'Prepayment','收费':'Charge','划价':'Pricing','发药':'Dispensing','退药':'Drug Return',
|
|
'闭环':'Closed Loop','组套':'Template','增强':'Enhanced','质量':'Quality',
|
|
'维护':'Maintenance','目录':'Catalog','对照':'Mapping',
|
|
'追溯':'Traceability','预警':'Alert','监测':'Monitoring',
|
|
'床位':'Bed','分诊':'Triage','抢救':'Rescue','绿色通道':'Green Channel',
|
|
'知情同意':'Informed Consent','临床路径':'Clinical Pathway',
|
|
'随访':'Follow-up','会诊':'Consultation','传染病':'Infectious Disease',
|
|
'抗菌':'Antibiotic','手术':'Surgery','护理':'Nursing','检验':'Lab Test','检查':'Examination',
|
|
'病历':'Medical Record','病案':'Case Record','报告':'Report',
|
|
'DRG':'DRG','EMPI':'EMPI','ESB':'ESB','FHIR':'FHIR','LIS':'LIS','PACS':'PACS',
|
|
};
|
|
|
|
// Build clean Vietnamese dictionary
|
|
const vi = {
|
|
'新增':'Thêm','编辑':'Sửa','删除':'Xóa','查询':'Tìm kiếm','重置':'Đặt lại',
|
|
'确定':'Xác nhận','取消':'Hủy','保存':'Lưu','提交':'Gửi','关闭':'Đóng',
|
|
'导出':'Xuất','导入':'Nhập','刷新':'Làm mới','打印':'In','复制':'Sao chép',
|
|
'返回':'Quay lại','完成':'Hoàn thành','查看':'Xem','详情':'Chi tiết','列表':'Danh sách',
|
|
'操作':'Thao tác','状态':'Trạng thái','排序':'Sắp xếp',
|
|
'启用':'Kích hoạt','停用':'Vô hiệu','正常':'Bình thường','异常':'Bất thường',
|
|
'是':'Có','否':'Không','有':'Có','无':'Không',
|
|
'成功':'Thành công','失败':'Thất bại','警告':'Cảnh báo','提示':'Thông báo','错误':'Lỗi',
|
|
'加载中':'Đang tải','暂无数据':'Không có dữ liệu',
|
|
'请选择':'Vui lòng chọn','请输入':'Vui lòng nhập',
|
|
'男':'Nam','女':'Nữ','未知':'Không xác định',
|
|
'序号':'STT','编号':'Số','编码':'Mã','名称':'Tên','姓名':'Họ tên',
|
|
'性别':'Giới tính','年龄':'Tuổi','类型':'Loại','级别':'Cấp',
|
|
'日期':'Ngày','时间':'Thời gian','创建时间':'TG tạo','更新时间':'TG cập nhật',
|
|
'备注':'Ghi chú','描述':'Mô tả',
|
|
'数量':'SL','金额':'Số tiền','单价':'Đơn giá','价格':'Giá',
|
|
'规格':'Quy cách','单位':'Đơn vị','批号':'Số lô',
|
|
'科室':'Khoa','部门':'Phòng ban','医生':'Bác sĩ','护士':'Điều dưỡng',
|
|
'患者':'Bệnh nhân','诊断':'Chẩn đoán','处方':'Đơn thuốc','医嘱':'Y lệnh',
|
|
'药品':'Thuốc','费用':'Viện phí','合计':'Tổng cộng',
|
|
'库存':'Tồn kho','入库':'Nhập kho','出库':'Xuất kho',
|
|
'结算':'Thanh toán','支付方式':'PT thanh toán',
|
|
'门诊':'Ngoại trú','住院':'Nội trú','急诊':'Cấp cứu',
|
|
'外科':'Ngoại khoa','内科':'Nội khoa','妇产科':'Sản phụ khoa',
|
|
'儿科':'Nhi khoa','骨科':'Chỉnh hình','眼科':'Mắt',
|
|
'耳鼻喉':'TMH','口腔':'RHM','皮肤科':'Da liễu',
|
|
'中医':'YHCT','康复':'PHCN','放射':'X quang','超声':'Siêu âm',
|
|
'病理':'Bệnh lý','输血':'Truyền máu','透析':'Lọc máu',
|
|
'重症':'HSCC','新生儿':'Sơ sinh','产科':'Sản khoa',
|
|
'ICU':'ICU','住院部':'Khoa Nội trú','儿科门诊':'PK Nhi',
|
|
'影像科':'Khoa CĐHA','急诊科':'Khoa Cấp cứu',
|
|
'手术室':'Phòng mổ','检验科':'Khoa Xét nghiệm','药房':'Nhà thuốc',
|
|
'门诊内科':'PK Nội','门诊外科':'PK Ngoại','门诊部':'Khoa Khám bệnh',
|
|
'全部':'Tất cả','其他':'Khác',
|
|
'保存':'Lưu','确定':'OK','新增':'Thêm','编辑':'Sửa','删除':'Xóa',
|
|
'查看':'Xem','查询':'Tìm kiếm','重置':'Đặt lại','导出':'Xuất','导入':'Nhập',
|
|
'刷新':'Làm mới','提交':'Gửi','审核':'Duyệt',
|
|
'系统':'Hệ thống','设置':'Cài đặt','权限':'Phân quyền','角色':'Vai trò',
|
|
'用户':'Người dùng','密码':'Mật khẩu','登录':'Đăng nhập','退出':'Đăng xuất',
|
|
'首页':'Trang chủ','仪表盘':'Bảng điều khiển',
|
|
'元':'đồng','次':'lần','天':'ngày',
|
|
'待处理':'Chờ xử lý','处理中':'Đang xử lý','已完成':'Hoàn thành','已取消':'Đã hủy',
|
|
'待审核':'Chờ duyệt','已审核':'Đã duyệt','已拒绝':'Đã từ chối',
|
|
'手术':'Phẫu thuật','护理':'Điều dưỡng','检验':'Xét nghiệm','检查':'Khám',
|
|
'病历':'Bệnh án','病案':'Hồ sơ bệnh án','报告':'Báo cáo',
|
|
};
|
|
|
|
// Build the file
|
|
const content = `/**
|
|
* Offline auto-translate plugin
|
|
* When $t() can't find a translation, auto-lookup from preset dictionary
|
|
*/
|
|
import Cookies from 'js-cookie'
|
|
|
|
// Preset translation dictionary - Chinese to each language
|
|
const translationDict = {
|
|
'en': ${JSON.stringify(en, null, 2)},
|
|
'vi': ${JSON.stringify(vi, null, 2)}
|
|
}
|
|
|
|
// Current language
|
|
function getCurrentLang() {
|
|
return Cookies.get('lang') || localStorage.getItem('lang') || 'zh-CN'
|
|
}
|
|
|
|
// Auto-translate function
|
|
export function autoTranslate(chineseText) {
|
|
const lang = getCurrentLang()
|
|
if (lang === 'zh-CN') return chineseText
|
|
|
|
const langKey = lang === 'en' ? 'en' : lang === 'vi' ? 'vi' : null
|
|
if (!langKey) return chineseText
|
|
|
|
const dict = translationDict[langKey]
|
|
if (!dict) return chineseText
|
|
|
|
// Exact match
|
|
if (dict[chineseText]) return dict[chineseText]
|
|
|
|
// Try compound translation
|
|
let result = chineseText
|
|
const sorted = Object.entries(dict).sort((a, b) => b[0].length - a[0].length)
|
|
for (const [zh, en] of sorted) {
|
|
result = result.replace(new RegExp(zh, 'g'), en)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// Vue plugin
|
|
export const AutoTranslatePlugin = {
|
|
install(app) {
|
|
if (import.meta.env.DEV) {
|
|
const originalT = app.config.globalProperties.$t
|
|
if (originalT) {
|
|
app.config.globalProperties.$t = function(key, ...args) {
|
|
const result = originalT.call(this, key, ...args)
|
|
if (result === key && /[\\u4e00-\\u9fff]/.test(key)) {
|
|
return autoTranslate(key)
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default { autoTranslate, AutoTranslatePlugin }
|
|
`;
|
|
|
|
fs.writeFileSync(path.join(__dirname, '..', 'src', 'i18n', 'autoTranslate.js'), content, 'utf8');
|
|
console.log('Rebuilt autoTranslate.js');
|
|
console.log('en keys:', Object.keys(en).length);
|
|
console.log('vi keys:', Object.keys(vi).length);
|