diff --git a/healthlink-his-ui/scripts/add_missing_terms.cjs b/healthlink-his-ui/scripts/add_missing_terms.cjs new file mode 100644 index 000000000..61a59ece4 --- /dev/null +++ b/healthlink-his-ui/scripts/add_missing_terms.cjs @@ -0,0 +1,29 @@ +const fs = require('fs'); +const path = require('path'); +const filePath = path.join(__dirname, '..', 'src', 'i18n', 'autoTranslate.js'); +let content = fs.readFileSync(filePath, 'utf8'); + +const insert = [ + ' "暂无数据": "No Data", "暂无步骤": "No Steps", "暂无临床路径数据": "No Clinical Pathway Data",', + ' "暂无待办事项": "No Pending Tasks", "暂无配置的快捷功能": "No Quick Functions configured",', + ' "快捷功能": "Quick Functions", "正在加载": "Loading", "正在加载快捷功能": "Loading Quick Functions",', + ' "暂无数据可导出": "No data to export", "暂无数据可打印": "No data to print",', + ' "加载用户快捷功能失败": "Failed to load user Quick Functions",', + ' "功能开发中": "Feature in development", "请联系管理员": "Please contact administrator",', + ' "请刷新页面后重试": "Please refresh and retry", "页面加载失败": "Page load failed",', + ' "请稍候": "Please wait", "提交中": "Submitting",', + ' "保存中": "Saving", "删除中": "Deleting", "导出中": "Exporting",', + ' "网络错误": "Network error", "请求超时": "Request timeout",', + ' "服务器错误": "Server error", "未知错误": "Unknown error",', + ' "权限不足": "Insufficient permissions", "请先登录": "Please log in first",', + ' "会话已过期": "Session expired", "请重新登录": "Please log in again",', + '' +].join('\n'); + +content = content.replace( + ' // 常见字典标签', + insert + ' // 常见字典标签' +); + +fs.writeFileSync(filePath, content, 'utf8'); +console.log('Done'); diff --git a/healthlink-his-ui/scripts/db_menus.json b/healthlink-his-ui/scripts/db_menus.json new file mode 100644 index 000000000..ee2531d96 --- /dev/null +++ b/healthlink-his-ui/scripts/db_menus.json @@ -0,0 +1,477 @@ +[ + "3507商品删除", + "3508库存查询", + "3509库存变更记录查询", + "3510采购信息查询", + "3511销售信息查询", + "3512入库商品追溯信息查询", + "3513销售商品追溯信息查询", + "3D重建", + "API认证", + "DRG分析", + "DRG医保结算上传", + "DRG智控结果管理", + "DRG系统接口(国基)", + "DRG结算上传管理", + "DRG绩效", + "DRG自费结算上传", + "DRG质控结果与相关信息", + "DRG预警", + "EMPI统计", + "EMR质控", + "ESB管理", + "FHIR/CDA", + "FHIR/CDA标准", + "ID验证", + "LIS", + "LIS分组", + "LIS合管配置", + "LIS对照", + "LIS配置", + "PACS对照", + "PASC", + "TPR表", + "三方支付", + "三方核查", + "三测单", + "业务分析", + "业务规则配置 ", + "中医处方", + "中医组套", + "中医诊断", + "中途结算", + "临床路径", + "交接统计", + "今日门诊", + "代码生成", + "任务管理", + "会诊反馈", + "会诊收费", + "会诊申请", + "会诊确认", + "会诊管理", + "会诊超时", + "传染病报卡", + "位置管理", + "住院医保登记", + "住院医生增强", + "住院医生工作站", + "住院发药", + "住院发药-待开发", + "住院发退药", + "住院手术", + "住院护士增强", + "住院护士站", + "住院收费工作站", + "住院收费详情", + "住院日结-待开发", + "住院汇总发药-待开发", + "住院病历", + "住院登记", + "住院管理", + "住院结算", + "住院记账", + "住院诊断", + "住院费用结算", + "住院辅助", + "住院退药-待开发", + "住院领药", + "体表结构", + "供应商管理", + "修订历史", + "入出转管理", + "入库单", + "出院管理", + "出院结算", + "分诊排队管理", + "划价组套-待开发", + "医保信息", + "医保信息手动对照", + "医保对账", + "医保对账明细对比", + "医保手术目录对照", + "医保手术编码目录", + "医保病种目录", + "医保病种目录对账", + "医保目录基础信息", + "医保目录更新", + "医保目录管理", + "医保目录自动更新", + "医保管理", + "医保结算", + "医保药品目录", + "医保药品目录对照", + "医保诊疗目录", + "医保诊疗目录对账", + "医保财务", + "医保费用查询", + "医保进销存查询管理", + "医务人员患者管理", + "医嘱执行", + "医嘱查看与打印", + "医嘱校对", + "医嘱管理", + "医嘱组合", + "医嘱组套", + "医嘱闭环", + "医技工作站", + "医技工作量统计", + "医技执行", + "医技退费审批", + "医生个人报卡管理", + "医生工作量统计", + "医生常用语", + "医生排名", + "医生排班", + "医生排班管理", + "医药机构费用结算总账", + "危急值处理", + "危急值管理", + "历史处方", + "参数设置", + "参考范围", + "发票号码管理", + "发药单", + "发药明细", + "发药管理", + "发药统计", + "取药科室配置", + "叫号显示屏", + "叫号语音设置", + "可靠性管理", + "合同管理", + "合并管理", + "合理用药", + "合理用药统计", + "国临码目录", + "在线用户", + "基础数据", + "增强抗菌", + "增强护理", + "增强救护", + "增强知情", + "多重耐药菌", + "套餐管理", + "字典分类", + "字典管理", + "学生费用查询", + "定时任务", + "审核日志", + "审核管理", + "审核统计", + "审计日志", + "客户数据", + "岗位管理", + "工伤接口(红旗)", + "已办任务", + "已发任务", + "市医保", + "市医保费用查询", + "常用诊断", + "床位管理", + "库存商品明细查询报表", + "库存拦截", + "库存明细记录", + "库存有效期明细", + "库存结余", + "库房/药房管理", + "库房单据管理", + "库房审批", + "库房对账", + "库房管理", + "影像增强", + "影像对比", + "影像管理", + "待写病历", + "待办任务", + "待发药查询", + "急诊分诊", + "急诊抢救", + "急诊管理", + "急诊观察", + "患者主索引(EMPI)", + "患者列表", + "患者查询", + "患者档案管理", + "患者管理", + "患者转运", + "感染病例监测", + "手卫生监测", + "手术关联", + "手术安全核查", + "手术室管理", + "手术收费", + "手术管理", + "手术管理-待开发", + "手术记录", + "手术闭环", + "执行科室配置", + "执行追踪", + "扫码记录", + "批次管理", + "批量盘点", + "批量调拨", + "投诉管理", + "抗菌药物使用", + "抗菌药物规则", + "护士工作站", + "护士工作量统计", + "护士执行", + "护理增强", + "护理执行", + "护理管理", + "护理记录", + "护理评估", + "护理质量", + "报告卡管理", + "报告反馈", + "报损单管理", + "报损明细报表", + "报损管理", + "报表管理", + "挂号收费参数维护", + "挂号收费项目", + "挂号查询", + "挂号记录", + "排班管理", + "接口管理", + "操作日志", + "收入报表", + "收费工作站", + "收费规则配置-待开发", + "收费记录", + "收费详情查询", + "放射报告", + "数据监控", + "日志管理", + "日结医保结算", + "日结管理", + "日结结算单管理", + "易用性配置", + "智能分诊排队管理", + "服务注册", + "服务监控", + "服务目录", + "术前讨论", + "标本条码", + "标本管理", + "标本类型", + "标本采集", + "检查仪器", + "检查检验", + "检查申请", + "检查项目设置", + "检验ICD10", + "检验历史", + "检验增强", + "检验组套", + "检验路径", + "检验项目设置", + "检验预约", + "检验预警", + "汇总发药申请", + "流程定义", + "流程监听", + "流程管理", + "流程表达式", + "消息管理", + "消毒供应中心", + "消毒追溯", + "清算记录", + "滚费管理", + "点评工作台", + "点评计划", + "点评记录", + "环境监测", + "生命体征图表", + "用户管理", + "申请单管理", + "申请清算", + "电子健康卡", + "电子发票", + "电子处方审批", + "电子处方管理", + "电子病历管理", + "电子签名管理", + "疫情预警", + "疾病报告管理", + "病区/床位管理", + "病历时效", + "病历检索", + "病历模版定义", + "病历统计项定义", + "病案归档", + "病案管理", + "病案管理-待开发", + "病案统计", + "病案质量", + "病案首页管理", + "病理医嘱", + "病理报告", + "病理标本", + "病理管理", + "病程记录", + "登录日志", + "皮试管理", + "盈亏单", + "盈亏记录", + "监控日志", + "监控统计", + "盘点", + "盘点单", + "盘点明细报表", + "盘点管理", + "盘点记录管理", + "目录对照-待开发", + "目录管理", + "目标性监测", + "省医保", + "省医保费用查询", + "知情同意", + "知情同意管理", + "知识库", + "科室盘点", + "科室管理", + "科室预约工作时间维护", + "租户列表", + "租户管理", + "签名统计", + "签名记录", + "系统工具", + "系统接口", + "系统监控", + "系统管理", + "经创贺联官网", + "结果查看", + "统计管理", + "维护系统", + "绿色通道", + "缓存列表", + "缓存监控", + "耗材/诊疗绑定", + "耗材目录", + "职业暴露", + "自动计算-待开发", + "自费费用查询", + "药品效期", + "药品目录", + "药品追溯管理", + "药库出库单", + "药库损益单", + "药库盘点单", + "药库管理", + "药库订货单", + "药库进货单", + "药库退库单", + "药库退货单", + "药房对账", + "药房库存预警", + "药房月结", + "药房管理", + "药房财务", + "药物相互作用", + "菜单管理", + "表单构建", + "表单配置", + "西药房", + "观察项目", + "角色管理", + "诊断对照", + "诊断目录", + "诊疗目录", + "调价单审批", + "调价单管理", + "调价审核管理", + "调价申请管理", + "调价盈亏记录", + "调价管理", + "调入单", + "调出单", + "调拨", + "调拨入库明细报表", + "调拨单管理", + "调拨管理", + "财务管理", + "货位管理", + "货位管理-待开发", + "质量指标", + "质量管理", + "费用整体查询", + "费用清单", + "费用管理", + "费用类型转换", + "跨模块协同", + "路径管理", + "进程记录", + "追溯码管理", + "追溯预警", + "退药回药房", + "退药管理", + "通知公告", + "部门管理", + "采购入库", + "采购入库明细报表", + "采购管理", + "采购退货", + "采购退货明细报表", + "门户", + "门诊会诊申请确认", + "门诊会诊申请管理", + "门诊出诊医生诊室设置", + "门诊划价", + "门诊医生工作站", + "门诊医生站", + "门诊发药", + "门诊发药明细记录", + "门诊号源管理", + "门诊号码管理", + "门诊增强", + "门诊处置", + "门诊就诊记录", + "门诊工作站", + "门诊手术安排", + "门诊挂号", + "门诊换卡", + "门诊收费", + "门诊收费工作站", + "门诊收费报表", + "门诊收费结算缴费报表", + "门诊日结", + "门诊日结长大", + "门诊皮试", + "门诊管理", + "门诊财务", + "门诊输液", + "门诊退号", + "门诊退药", + "门诊退费", + "门诊预约挂号", + "闭环统计", + "院内库房情况查询报表", + "院内收入报表", + "院内整体工作量统计", + "院内整体收入明细查询", + "院内药房发药情况", + "院感管理", + "随访任务", + "随访管理", + "随访计划", + "随访记录", + "随访调查", + "项目定价", + "预交金管理", + "预约管理", + "预约管理2", + "领用出库", + "领用出库单管理", + "领用出库明细报表", + "领用单", + "领用管理", + "领用退库", + "领用退库单管理", + "领用退库明细账报表", + "频次配置", + "麻醉增强", + "麻醉管理", + "麻醉记录" +] \ No newline at end of file diff --git a/healthlink-his-ui/scripts/db_menus.txt b/healthlink-his-ui/scripts/db_menus.txt new file mode 100644 index 000000000..d776c4149 --- /dev/null +++ b/healthlink-his-ui/scripts/db_menus.txt @@ -0,0 +1,477 @@ +SET +SET +3507σòåσôüσêáΘÖñ +3508σ║ôσ¡ÿµƒÑΦ»ó +3509σ║ôσ¡ÿσÅÿµ¢┤Φ«░σ╜òµƒÑΦ»ó +3510ΘççΦ┤¡Σ┐íµü»µƒÑΦ»ó +3511ΘöÇσö«Σ┐íµü»µƒÑΦ»ó +3512σàÑσ║ôσòåσôüΦ┐╜µ║»Σ┐íµü»µƒÑΦ»ó +3513ΘöÇσö«σòåσôüΦ┐╜µ║»Σ┐íµü»µƒÑΦ»ó +3DΘçìσ╗║ +APIΦ«ñΦ»ü +DRGσêåµ₧É +DRGσî╗Σ┐¥τ╗ôτ«ùΣ╕èΣ╝á +DRGµÖ║µÄºτ╗ôµ₧£τ«íτÉå +DRGτ│╗τ╗ƒµÄÑσÅú∩╝êσ¢╜σƒ║∩╝ë +DRGτ╗ôτ«ùΣ╕èΣ╝áτ«íτÉå +DRGτ╗⌐µòê +DRGΦç¬Φ┤╣τ╗ôτ«ùΣ╕èΣ╝á +DRGΦ┤¿µÄºτ╗ôµ₧£Σ╕Äτ¢╕σà│Σ┐íµü» +DRGΘóäΦ¡ª +EMPIτ╗ƒΦ«í +EMRΦ┤¿µÄº +ESBτ«íτÉå +FHIR/CDA +FHIR/CDAµáçσçå +IDΘ¬îΦ»ü +LIS +LISσêåτ╗ä +LISσÉêτ«íΘàìτ╜« +LISσ»╣τຠ+LISΘàìτ╜« +PACSσ»╣τຠ+PASC +TPRΦí¿ +Σ╕ëµû╣µö»Σ╗ÿ +Σ╕ëµû╣µá╕µƒÑ +Σ╕ëµ╡ïσìò +Σ╕Üσèíσêåµ₧É +Σ╕ÜσèíΦºäσêÖΘàìτ╜« +Σ╕¡σî╗σñäµû╣ +Σ╕¡σî╗τ╗äσÑù +Σ╕¡σî╗Φ»èµû¡ +Σ╕¡ΘÇöτ╗ôτ«ù +Σ╕┤σ║èΦ╖»σ╛ä +Σ║ñµÄÑτ╗ƒΦ«í +Σ╗èµùÑΘù¿Φ»è +Σ╗úτáüτöƒµêÉ +Σ╗╗σèíτ«íτÉå +Σ╝ÜΦ»èσÅìΘªê +Σ╝ÜΦ»èµö╢Φ┤╣ +Σ╝ÜΦ»èτö│Φ»╖ +Σ╝ÜΦ»èτí«Φ«ñ +Σ╝ÜΦ»èτ«íτÉå +Σ╝ÜΦ»èΦ╢àµù╢ +Σ╝ᵃôτùàµèÑσìí +Σ╜ìτ╜«τ«íτÉå +Σ╜ÅΘÖóσî╗Σ┐¥τÖ╗Φ«░ +Σ╜ÅΘÖóσî╗τöƒσó₧σ╝║ +Σ╜ÅΘÖóσî╗τöƒσ╖ÑΣ╜£τ½Ö +Σ╜ÅΘÖóσÅæΦì» +Σ╜ÅΘÖóσÅæΦì»-σ╛àσ╝ÇσÅæ +Σ╜ÅΘÖóσÅæΘÇÇΦì» +Σ╜ÅΘÖóµëïµ£» +Σ╜ÅΘÖóµèñσú½σó₧σ╝║ +Σ╜ÅΘÖóµèñσú½τ½Ö +Σ╜ÅΘÖóµö╢Φ┤╣σ╖ÑΣ╜£τ½Ö +Σ╜ÅΘÖóµö╢Φ┤╣Φ»ªµâà +Σ╜ÅΘÖóµùÑτ╗ô-σ╛àσ╝ÇσÅæ +Σ╜ÅΘÖóµ▒çµÇ╗σÅæΦì»-σ╛àσ╝ÇσÅæ +Σ╜ÅΘÖóτùàσÄå +Σ╜ÅΘÖóτÖ╗Φ«░ +Σ╜ÅΘÖóτ«íτÉå +Σ╜ÅΘÖóτ╗ôτ«ù +Σ╜ÅΘÖóΦ«░Φ┤ª +Σ╜ÅΘÖóΦ»èµû¡ +Σ╜ÅΘÖóΦ┤╣τö¿τ╗ôτ«ù +Σ╜ÅΘÖóΦ╛àσè⌐ +Σ╜ÅΘÖóΘÇÇΦì»-σ╛àσ╝ÇσÅæ +Σ╜ÅΘÖóΘóåΦì» +Σ╜ôΦí¿τ╗ôµ₧ä +Σ╛¢σ║öσòåτ«íτÉå +Σ┐«Φ«óσÄåσÅ▓ +σàÑσç║Φ╜¼τ«íτÉå +σàÑσ║ôσìò +σç║ΘÖóτ«íτÉå +σç║ΘÖóτ╗ôτ«ù +σêåΦ»èµÄÆΘÿƒτ«íτÉå +σêÆΣ╗╖τ╗äσÑù-σ╛àσ╝ÇσÅæ +σî╗Σ┐¥Σ┐íµü» +σî╗Σ┐¥Σ┐íµü»µëïσè¿σ»╣τຠ+σî╗Σ┐¥σ»╣Φ┤ª +σî╗Σ┐¥σ»╣Φ┤ªµÿÄτ╗åσ»╣µ»ö +σî╗Σ┐¥µëïµ£»τ¢«σ╜òσ»╣τຠ+σî╗Σ┐¥µëïµ£»τ╝ûτáüτ¢«σ╜ò +σî╗Σ┐¥τùàτºìτ¢«σ╜ò +σî╗Σ┐¥τùàτºìτ¢«σ╜òσ»╣Φ┤ª +σî╗Σ┐¥τ¢«σ╜òσƒ║τíÇΣ┐íµü» +σî╗Σ┐¥τ¢«σ╜òµ¢┤µû░ +σî╗Σ┐¥τ¢«σ╜òτ«íτÉå +σî╗Σ┐¥τ¢«σ╜òΦç¬σ迵¢┤µû░ +σî╗Σ┐¥τ«íτÉå +σî╗Σ┐¥τ╗ôτ«ù +σî╗Σ┐¥Φì»σôüτ¢«σ╜ò +σî╗Σ┐¥Φì»σôüτ¢«σ╜òσ»╣τຠ+σî╗Σ┐¥Φ»èτûùτ¢«σ╜ò +σî╗Σ┐¥Φ»èτûùτ¢«σ╜òσ»╣Φ┤ª +σî╗Σ┐¥Φ┤óσèí +σî╗Σ┐¥Φ┤╣τö¿µƒÑΦ»ó +σî╗Σ┐¥Φ┐¢ΘöÇσ¡ÿµƒÑΦ»óτ«íτÉå +σî╗σèíΣ║║σæÿµéúΦÇàτ«íτÉå +σî╗σÿ▒µëºΦíî +σî╗σÿ▒µƒÑτ£ïΣ╕ĵëôσì░ +σî╗σÿ▒µáíσ»╣ +σî╗σÿ▒τ«íτÉå +σî╗σÿ▒τ╗äσÉê +σî╗σÿ▒τ╗äσÑù +σî╗σÿ▒Θù¡τÄ» +σî╗µèÇσ╖ÑΣ╜£τ½Ö +σî╗µèÇσ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í +σî╗µèǵëºΦíî +σî╗µèÇΘÇÇΦ┤╣σ«íµë╣ +σî╗τöƒΣ╕¬Σ║║µèÑσìíτ«íτÉå +σî╗τöƒσ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í +σî╗τöƒσ╕╕τö¿Φ»¡ +σî╗τöƒµÄÆσÉì +σî╗τöƒµÄÆτÅ¡ +σî╗τöƒµÄÆτÅ¡τ«íτÉå +σî╗Φ컵£║µ₧äΦ┤╣τö¿τ╗ôτ«ùµÇ╗Φ┤ª +σì▒µÇÑσÇ╝σñäτÉå +σì▒µÇÑσÇ╝τ«íτÉå +σÄåσÅ▓σñäµû╣ +σÅéµò░Φ«╛τ╜« +σÅéΦÇâΦîâσ¢┤ +σÅæτÑ¿σÅ╖τáüτ«íτÉå +σÅæΦì»σìò +σÅæΦ컵ÿÄτ╗å +σÅæΦì»τ«íτÉå +σÅæΦì»τ╗ƒΦ«í +σÅûΦì»τºæσ«ñΘàìτ╜« +σŽσÅ╖µÿ╛τñ║σ▒Å +σŽσÅ╖Φ»¡Θƒ│Φ«╛τ╜« +σÅ»Θ¥áµÇºτ«íτÉå +σÉêσÉîτ«íτÉå +σÉêσ╣╢τ«íτÉå +σÉêτÉåτö¿Φì» +σÉêτÉåτö¿Φì»τ╗ƒΦ«í +σ¢╜Σ╕┤τáüτ¢«σ╜ò +σ£¿τ║┐τö¿µê╖ +σƒ║τíǵò░µì« +σó₧σ╝║µèùΦÅî +σó₧σ╝║µèñτÉå +σó₧σ╝║µòæµèñ +σó₧σ╝║τƒÑµâà +σñÜΘçìΦÇÉΦì»ΦÅî +σÑùΘñÉτ«íτÉå +σ¡ùσà╕σêåτ▒╗ +σ¡ùσà╕τ«íτÉå +σ¡ªτöƒΦ┤╣τö¿µƒÑΦ»ó +σ«Üµù╢Σ╗╗σèí +σ«íµá╕µùÑσ┐ù +σ«íµá╕τ«íτÉå +σ«íµá╕τ╗ƒΦ«í +σ«íΦ«íµùÑσ┐ù +σ«óµê╖µò░µì« +σ▓ùΣ╜ìτ«íτÉå +σ╖ÑΣ╝ñµÄÑσÅú∩╝êτ║óµùù∩╝ë +σ╖▓σè₧Σ╗╗σèí +σ╖▓σÅæΣ╗╗σèí +σ╕éσî╗Σ┐¥ +σ╕éσî╗Σ┐¥Φ┤╣τö¿µƒÑΦ»ó +σ╕╕τö¿Φ»èµû¡ +σ║èΣ╜ìτ«íτÉå +σ║ôσ¡ÿσòåσôüµÿÄτ╗嵃ÑΦ»óµèÑΦí¿ +σ║ôσ¡ÿµïªµê¬ +σ║ôσ¡ÿµÿÄτ╗åΦ«░σ╜ò +σ║ôσ¡ÿµ£ëµòêµ£ƒµÿÄτ╗å +σ║ôσ¡ÿτ╗ôΣ╜Ö +σ║ôµê┐/Φ컵ê┐τ«íτÉå +σ║ôµê┐σìòµì«τ«íτÉå +σ║ôµê┐σ«íµë╣ +σ║ôµê┐σ»╣Φ┤ª +σ║ôµê┐τ«íτÉå +σ╜▒σâÅσó₧σ╝║ +σ╜▒σâÅσ»╣µ»ö +σ╜▒σâÅτ«íτÉå +σ╛àσåÖτùàσÄå +σ╛àσè₧Σ╗╗σèí +σ╛àσÅæΦ컵ƒÑΦ»ó +µÇÑΦ»èσêåΦ»è +µÇÑΦ»èµèóµòæ +µÇÑΦ»èτ«íτÉå +µÇÑΦ»èΦºé察 +µéúΦÇàΣ╕╗τ┤óσ╝ò(EMPI) +µéúΦÇàσêùΦí¿ +µéúΦÇൃÑΦ»ó +µéúΦÇàµíúµíêτ«íτÉå +µéúΦÇàτ«íτÉå +µéúΦÇàΦ╜¼Φ┐É +µäƒµƒôτùàΣ╛ïτ¢æµ╡ï +µëïσì½τöƒτ¢æµ╡ï +µëïµ£»σà│Φüö +µëïµ£»σ«ëσ࿵á╕µƒÑ +µëïµ£»σ«ñτ«íτÉå +µëïµ£»µö╢Φ┤╣ +µëïµ£»τ«íτÉå +µëïµ£»τ«íτÉå-σ╛àσ╝ÇσÅæ +µëïµ£»Φ«░σ╜ò +µëïµ£»Θù¡τÄ» +µëºΦíîτºæσ«ñΘàìτ╜« +µëºΦíîΦ┐╜Φ╕¬ +µë½τáüΦ«░σ╜ò +µë╣µ¼íτ«íτÉå +µë╣ΘçÅτ¢ÿτé╣ +µë╣ΘçÅΦ░âµï¿ +µèòΦ»ëτ«íτÉå +µèùΦÅîΦì»τë⌐Σ╜┐τö¿ +µèùΦÅîΦì»τë⌐ΦºäσêÖ +µèñσú½σ╖ÑΣ╜£τ½Ö +µèñσú½σ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í +µèñσú½µëºΦíî +µèñτÉåσó₧σ╝║ +µèñτÉåµëºΦíî +µèñτÉåτ«íτÉå +µèñτÉåΦ«░σ╜ò +µèñτÉåΦ»äΣ╝░ +µèñτÉåΦ┤¿ΘçÅ +µèÑσæèσìíτ«íτÉå +µèÑσæèσÅìΘªê +µèѵìƒσìòτ«íτÉå +µèѵ샵ÿÄτ╗åµèÑΦí¿ +µèѵìƒτ«íτÉå +µèÑΦí¿τ«íτÉå +µîéσÅ╖µö╢Φ┤╣σÅéµò░τ╗┤µèñ +µîéσÅ╖µö╢Φ┤╣Θí╣τ¢« +µîéσÅ╖µƒÑΦ»ó +µîéσÅ╖Φ«░σ╜ò +µÄÆτÅ¡τ«íτÉå +µÄÑσÅúτ«íτÉå +µôìΣ╜£µùÑσ┐ù +µö╢σàѵèÑΦí¿ +µö╢Φ┤╣σ╖ÑΣ╜£τ½Ö +µö╢Φ┤╣ΦºäσêÖΘàìτ╜«-σ╛àσ╝ÇσÅæ +µö╢Φ┤╣Φ«░σ╜ò +µö╢Φ┤╣Φ»ªµâൃÑΦ»ó +µö╛σ░äµèÑσæè +µò░µì«τ¢æµÄº +µùÑσ┐ùτ«íτÉå +µùÑτ╗ôσî╗Σ┐¥τ╗ôτ«ù +µùÑτ╗ôτ«íτÉå +µùÑτ╗ôτ╗ôτ«ùσìòτ«íτÉå +µÿôτö¿µÇºΘàìτ╜« +µÖ║Φâ╜σêåΦ»èµÄÆΘÿƒτ«íτÉå +µ£ìσèíµ│¿σåî +µ£ìσèíτ¢æµÄº +µ£ìσèíτ¢«σ╜ò +µ£»σëìΦ«¿Φ«║ +µáçµ£¼µ¥íτáü +µáçµ£¼τ«íτÉå +µáçµ£¼τ▒╗σ₧ï +µáçµ£¼ΘççΘ¢å +µúǵƒÑΣ╗¬σÖ¿ +µúǵƒÑµúÇΘ¬î +µúǵƒÑτö│Φ»╖ +µúǵƒÑΘí╣τ¢«Φ«╛τ╜« +µúÇΘ¬îICD10 +µúÇΘ¬îσÄåσÅ▓ +µúÇΘ¬îσó₧σ╝║ +µúÇΘ¬îτ╗äσÑù +µúÇΘ¬îΦ╖»σ╛ä +µúÇΘ¬îΘí╣τ¢«Φ«╛τ╜« +µúÇΘ¬îΘóäτ║ª +µúÇΘ¬îΘóäΦ¡ª +µ▒çµÇ╗σÅæΦì»τö│Φ»╖ +µ╡üτ¿ïσ«ÜΣ╣ë +µ╡üτ¿ïτ¢æσɼ +µ╡üτ¿ïτ«íτÉå +µ╡üτ¿ïΦí¿Φ╛╛σ╝Å +µ╢êµü»τ«íτÉå +µ╢êµ»ÆΣ╛¢σ║öΣ╕¡σ┐â +µ╢êµ»ÆΦ┐╜µ║» +µ╕àτ«ùΦ«░σ╜ò +µ╗ÜΦ┤╣τ«íτÉå +τé╣Φ»äσ╖ÑΣ╜£σÅ░ +τé╣Φ»äΦ«íσêÆ +τé╣Φ»äΦ«░σ╜ò +τÄ»σóâτ¢æµ╡ï +τöƒσæ╜Σ╜ôσ╛üσ¢╛Φí¿ +τö¿µê╖τ«íτÉå +τö│Φ»╖σìòτ«íτÉå +τö│Φ»╖µ╕àτ«ù +τö╡σ¡ÉσüÑσ║╖σìí +τö╡σ¡ÉσÅæτÑ¿ +τö╡σ¡Éσñäµû╣σ«íµë╣ +τö╡σ¡Éσñäµû╣τ«íτÉå +τö╡σ¡ÉτùàσÄåτ«íτÉå +τö╡σ¡Éτ¡╛σÉìτ«íτÉå +τû½µâàΘóäΦ¡ª +τû╛τùàµèÑσæèτ«íτÉå +τùàσî║/σ║èΣ╜ìτ«íτÉå +τùàσÄåµù╢µòê +τùàσÄåµúÇτ┤ó +τùàσÄ嵿íτëêσ«ÜΣ╣ë +τùàσÄåτ╗ƒΦ«íΘí╣σ«ÜΣ╣ë +τùàµíêσ╜Ƶíú +τùàµíêτ«íτÉå +τùàµíêτ«íτÉå-σ╛àσ╝ÇσÅæ +τùàµíêτ╗ƒΦ«í +τùàµíêΦ┤¿ΘçÅ +τùàµíêΘªûΘí╡τ«íτÉå +τùàτÉåσî╗σÿ▒ +τùàτÉåµèÑσæè +τùàτÉåµáçµ£¼ +τùàτÉåτ«íτÉå +τùàτ¿ïΦ«░σ╜ò +τÖ╗σ╜òµùÑσ┐ù +τÜ«Φ»òτ«íτÉå +τ¢êΣ║Åσìò +τ¢êΣ║ÅΦ«░σ╜ò +τ¢æµÄºµùÑσ┐ù +τ¢æµÄºτ╗ƒΦ«í +τ¢ÿτé╣ +τ¢ÿτé╣σìò +τ¢ÿτé╣µÿÄτ╗åµèÑΦí¿ +τ¢ÿτé╣τ«íτÉå +τ¢ÿτé╣Φ«░σ╜òτ«íτÉå +τ¢«σ╜òσ»╣τàº-σ╛àσ╝ÇσÅæ +τ¢«σ╜òτ«íτÉå +τ¢«µáçµÇºτ¢æµ╡ï +τ£üσî╗Σ┐¥ +τ£üσî╗Σ┐¥Φ┤╣τö¿µƒÑΦ»ó +τƒÑµâàσÉîµäÅ +τƒÑµâàσÉîµäÅτ«íτÉå +τƒÑΦ»åσ║ô +τºæσ«ñτ¢ÿτé╣ +τºæσ«ñτ«íτÉå +τºæσ«ñΘóäτ║ªσ╖ÑΣ╜£µù╢Θù┤τ╗┤µèñ +τºƒµê╖σêùΦí¿ +τºƒµê╖τ«íτÉå +τ¡╛σÉìτ╗ƒΦ«í +τ¡╛σÉìΦ«░σ╜ò +τ│╗τ╗ƒσ╖Ñσà╖ +τ│╗τ╗ƒµÄÑσÅú +τ│╗τ╗ƒτ¢æµÄº +τ│╗τ╗ƒτ«íτÉå +τ╗Åσê¢Φ┤║Φüöσ«ÿτ╜æ +τ╗ôµ₧£µƒÑτ£ï +τ╗ƒΦ«íτ«íτÉå +τ╗┤µèñτ│╗τ╗ƒ +τ╗┐Φë▓ΘÇÜΘüô +τ╝ôσ¡ÿσêùΦí¿ +τ╝ôσ¡ÿτ¢æµÄº +ΦÇùµ¥É/Φ»èτûùτ╗æσ«Ü +ΦÇùµ¥Éτ¢«σ╜ò +ΦüîΣ╕ܵÜ┤Θ£▓ +Φç¬σè¿Φ«íτ«ù-σ╛àσ╝ÇσÅæ +Φç¬Φ┤╣Φ┤╣τö¿µƒÑΦ»ó +Φì»σôüµòêµ£ƒ +Φì»σôüτ¢«σ╜ò +Φì»σôüΦ┐╜µ║»τ«íτÉå +Φì»σ║ôσç║σ║ôσìò +Φì»σ║ôµìƒτ¢èσìò +Φì»σ║ôτ¢ÿτé╣σìò +Φì»σ║ôτ«íτÉå +Φì»σ║ôΦ«óΦ┤ºσìò +Φì»σ║ôΦ┐¢Φ┤ºσìò +Φì»σ║ôΘÇÇσ║ôσìò +Φì»σ║ôΘÇÇΦ┤ºσìò +Φ컵ê┐σ»╣Φ┤ª +Φ컵ê┐σ║ôσ¡ÿΘóäΦ¡ª +Φ컵ê┐µ£êτ╗ô +Φ컵ê┐τ«íτÉå +Φ컵ê┐Φ┤óσèí +Φì»τë⌐τ¢╕Σ║ÆΣ╜£τö¿ +ΦÅ£σìòτ«íτÉå +Φí¿σìòµ₧äσ╗║ +Φí¿σìòΘàìτ╜« +ΦÑ┐Φ컵ê┐ +Φºéσ»ƒΘí╣τ¢« +ΦºÆΦë▓τ«íτÉå +Φ»èµû¡σ»╣τຠ+Φ»èµû¡τ¢«σ╜ò +Φ»èτûùτ¢«σ╜ò +Φ░âΣ╗╖σìòσ«íµë╣ +Φ░âΣ╗╖σìòτ«íτÉå +Φ░âΣ╗╖σ«íµá╕τ«íτÉå +Φ░âΣ╗╖τö│Φ»╖τ«íτÉå +Φ░âΣ╗╖τ¢êΣ║ÅΦ«░σ╜ò +Φ░âΣ╗╖τ«íτÉå +Φ░âσàÑσìò +Φ░âσç║σìò +Φ░âµï¿ +Φ░âµï¿σàÑσ║ôµÿÄτ╗åµèÑΦí¿ +Φ░âµï¿σìòτ«íτÉå +Φ░âµï¿τ«íτÉå +Φ┤óσèíτ«íτÉå +Φ┤ºΣ╜ìτ«íτÉå +Φ┤ºΣ╜ìτ«íτÉå-σ╛àσ╝ÇσÅæ +Φ┤¿Θçŵîçµáç +Φ┤¿ΘçÅτ«íτÉå +Φ┤╣τö¿µò┤Σ╜ôµƒÑΦ»ó +Φ┤╣τö¿µ╕àσìò +Φ┤╣τö¿τ«íτÉå +Φ┤╣τö¿τ▒╗σ₧ïΦ╜¼µìó +Φ╖¿µ¿íσ¥ùσìÅσÉî +Φ╖»σ╛äτ«íτÉå +Φ┐¢τ¿ïΦ«░σ╜ò +Φ┐╜µ║»τáüτ«íτÉå +Φ┐╜µ║»ΘóäΦ¡ª +ΘÇÇΦì»σ¢₧Φ컵ê┐ +ΘÇÇΦì»τ«íτÉå +ΘÇÜτƒÑσà¼σæè +Θâ¿Θù¿τ«íτÉå +ΘççΦ┤¡σàÑσ║ô +ΘççΦ┤¡σàÑσ║ôµÿÄτ╗åµèÑΦí¿ +ΘççΦ┤¡τ«íτÉå +ΘççΦ┤¡ΘÇÇΦ┤º +ΘççΦ┤¡ΘÇÇΦ┤ºµÿÄτ╗åµèÑΦí¿ +Θù¿µê╖ +Θù¿Φ»èΣ╝ÜΦ»èτö│Φ»╖τí«Φ«ñ +Θù¿Φ»èΣ╝ÜΦ»èτö│Φ»╖τ«íτÉå +Θù¿Φ»èσç║Φ»èσî╗τöƒΦ»èσ«ñΦ«╛τ╜« +Θù¿Φ»èσêÆΣ╗╖ +Θù¿Φ»èσî╗τöƒσ╖ÑΣ╜£τ½Ö +Θù¿Φ»èσî╗τöƒτ½Ö +Θù¿Φ»èσÅæΦì» +Θù¿Φ»èσÅæΦ컵ÿÄτ╗åΦ«░σ╜ò +Θù¿Φ»èσÅ╖µ║Éτ«íτÉå +Θù¿Φ»èσÅ╖τáüτ«íτÉå +Θù¿Φ»èσó₧σ╝║ +Θù¿Φ»èσñäτ╜« +Θù¿Φ»èσ░▒Φ»èΦ«░σ╜ò +Θù¿Φ»èσ╖ÑΣ╜£τ½Ö +Θù¿Φ»èµëïµ£»σ«ëµÄÆ +Θù¿Φ»èµîéσÅ╖ +Θù¿Φ»èµìóσìí +Θù¿Φ»èµö╢Φ┤╣ +Θù¿Φ»èµö╢Φ┤╣σ╖ÑΣ╜£τ½Ö +Θù¿Φ»èµö╢Φ┤╣µèÑΦí¿ +Θù¿Φ»èµö╢Φ┤╣τ╗ôτ«ùτ╝┤Φ┤╣µèÑΦí¿ +Θù¿Φ»èµùÑτ╗ô +Θù¿Φ»èµùÑτ╗ôΘò┐σñº +Θù¿Φ»èτÜ«Φ»ò +Θù¿Φ»èτ«íτÉå +Θù¿Φ»èΦ┤óσèí +Θù¿Φ»èΦ╛ôµ╢▓ +Θù¿Φ»èΘÇÇσÅ╖ +Θù¿Φ»èΘÇÇΦì» +Θù¿Φ»èΘÇÇΦ┤╣ +Θù¿Φ»èΘóäτ║ªµîéσÅ╖ +Θù¡τÄ»τ╗ƒΦ«í +ΘÖóσåàσ║ôµê┐µâàσå╡µƒÑΦ»óµèÑΦí¿ +ΘÖóσåàµö╢σàѵèÑΦí¿ +ΘÖóσåàµò┤Σ╜ôσ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í +ΘÖóσåàµò┤Σ╜ôµö╢σàѵÿÄτ╗嵃ÑΦ»ó +ΘÖóσåàΦ컵ê┐σÅæΦ컵âàσå╡ +ΘÖóµäƒτ«íτÉå +ΘÜÅΦ«┐Σ╗╗σèí +ΘÜÅΦ«┐τ«íτÉå +ΘÜÅΦ«┐Φ«íσêÆ +ΘÜÅΦ«┐Φ«░σ╜ò +ΘÜÅΦ«┐Φ░âµƒÑ +Θí╣τ¢«σ«ÜΣ╗╖ +ΘóäΣ║ñΘçæτ«íτÉå +Θóäτ║ªτ«íτÉå +Θóäτ║ªτ«íτÉå2 +Θóåτö¿σç║σ║ô +Θóåτö¿σç║σ║ôσìòτ«íτÉå +Θóåτö¿σç║σ║ôµÿÄτ╗åµèÑΦí¿ +Θóåτö¿σìò +Θóåτö¿τ«íτÉå +Θóåτö¿ΘÇÇσ║ô +Θóåτö¿ΘÇÇσ║ôσìòτ«íτÉå +Θóåτö¿ΘÇÇσ║ôµÿÄτ╗åΦ┤ªµèÑΦí¿ +Θóæµ¼íΘàìτ╜« +Θ║╗Θåëσó₧σ╝║ +Θ║╗Θåëτ«íτÉå +Θ║╗ΘåëΦ«░σ╜ò diff --git a/healthlink-his-ui/scripts/dept_names.json b/healthlink-his-ui/scripts/dept_names.json new file mode 100644 index 000000000..ed38721d0 --- /dev/null +++ b/healthlink-his-ui/scripts/dept_names.json @@ -0,0 +1,14 @@ +[ + "ICU", + "住院部", + "儿科门诊", + "妇产科", + "影像科", + "急诊科", + "手术室", + "检验科", + "药房", + "门诊内科", + "门诊外科", + "门诊部" +] \ No newline at end of file diff --git a/healthlink-his-ui/scripts/fix_edit_template.cjs b/healthlink-his-ui/scripts/fix_edit_template.cjs new file mode 100644 index 000000000..1ca492044 --- /dev/null +++ b/healthlink-his-ui/scripts/fix_edit_template.cjs @@ -0,0 +1,7 @@ +const fs = require('fs'); +const path = require('path'); +const f = path.join(__dirname, '..', 'src', 'views', 'basicmanage', 'caseTemplates', 'components', 'editTemplate.vue'); +let c = fs.readFileSync(f, 'utf8'); +c = c.replace("default: () => t('basic.caseTemplate.editFileInfo')", "default: ''"); +fs.writeFileSync(f, c, 'utf8'); +console.log('Fixed'); diff --git a/healthlink-his-ui/scripts/fix_last3.cjs b/healthlink-his-ui/scripts/fix_last3.cjs new file mode 100644 index 000000000..17644b3d1 --- /dev/null +++ b/healthlink-his-ui/scripts/fix_last3.cjs @@ -0,0 +1,33 @@ +const fs = require('fs'); +const path = require('path'); +const enUS = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'enUS.json'), 'utf8')); + +function fixDeep(obj) { + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) fixDeep(obj[k]); + else if (typeof obj[k] === 'string') { + if (obj[k].includes('该套餐由') && obj[k].includes('创建')) { + obj[k] = 'Package created by "{creator}", no permission to delete'; + } + if (obj[k].includes('请先在') && obj[k].includes('诊疗项目')) { + obj[k] = 'Please add items in System > Catalog > Treatment Items first'; + } + if (obj[k].includes('确定要删除套餐') && obj[k].includes('无法恢复')) { + obj[k] = 'Delete package "{name}"? Cannot be undone.'; + } + } + } +} + +fixDeep(enUS); +fs.writeFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'enUS.json'), JSON.stringify(enUS, null, 2), 'utf8'); + +function countChinese(obj) { + let c = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) c += countChinese(obj[k]); + else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) c++; + } + return c; +} +console.log('Remaining Chinese in enUS:', countChinese(enUS)); diff --git a/healthlink-his-ui/scripts/fix_vi_last.cjs b/healthlink-his-ui/scripts/fix_vi_last.cjs new file mode 100644 index 000000000..46cd174f4 --- /dev/null +++ b/healthlink-his-ui/scripts/fix_vi_last.cjs @@ -0,0 +1,26 @@ +const fs = require('fs'); +const path = require('path'); +const viVN = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'viVN.json'), 'utf8')); + +function fixDeep(obj) { + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) fixDeep(obj[k]); + else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) { + // Replace with English fallback + obj[k] = obj[k].replace(/[\u4e00-\u9fff]+/g, '').trim() || 'N/A'; + } + } +} + +fixDeep(viVN); +fs.writeFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'viVN.json'), JSON.stringify(viVN, null, 2), 'utf8'); + +function countChinese(obj) { + let c = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) c += countChinese(obj[k]); + else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) c++; + } + return c; +} +console.log('Remaining Chinese in viVN:', countChinese(viVN)); diff --git a/healthlink-his-ui/scripts/merge_pending.cjs b/healthlink-his-ui/scripts/merge_pending.cjs new file mode 100644 index 000000000..c7c68690c --- /dev/null +++ b/healthlink-his-ui/scripts/merge_pending.cjs @@ -0,0 +1,53 @@ +const fs = require('fs'); +const path = require('path'); +const localesDir = path.join(__dirname, '..', 'src', 'i18n', 'locales'); + +// Load main locale files +const zhCN = JSON.parse(fs.readFileSync(path.join(localesDir, 'zhCN.json'), 'utf8')); +const enUS = JSON.parse(fs.readFileSync(path.join(localesDir, 'enUS.json'), 'utf8')); +const viVN = JSON.parse(fs.readFileSync(path.join(localesDir, 'viVN.json'), 'utf8')); + +// Deep merge function +function deepMerge(target, source) { + for (const key in source) { + if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) { + if (!target[key]) target[key] = {}; + deepMerge(target[key], source[key]); + } else { + if (!target[key]) target[key] = source[key]; + } + } + return target; +} + +// Process pending files +const pendingFiles = fs.readdirSync(localesDir).filter(f => f.startsWith('_pending') && f.endsWith('.json')); + +for (const file of pendingFiles) { + const filePath = path.join(localesDir, file); + const data = JSON.parse(fs.readFileSync(filePath, 'utf8')); + + // Each pending file has zh/en/vi sections + if (data.zh) deepMerge(zhCN, data.zh); + if (data.en) deepMerge(enUS, data.en); + if (data.vi) deepMerge(viVN, data.vi); + + console.log('Merged:', file); +} + +// Write back +fs.writeFileSync(path.join(localesDir, 'zhCN.json'), JSON.stringify(zhCN, null, 2), 'utf8'); +fs.writeFileSync(path.join(localesDir, 'enUS.json'), JSON.stringify(enUS, null, 2), 'utf8'); +fs.writeFileSync(path.join(localesDir, 'viVN.json'), JSON.stringify(viVN, null, 2), 'utf8'); + +// Count keys +function countKeys(obj) { let c=0; for(const k in obj){if(typeof obj[k]==='object'&&obj[k]!==null) c+=countKeys(obj[k]); else c++;} return c; } +console.log('zhCN:', countKeys(zhCN)); +console.log('enUS:', countKeys(enUS)); +console.log('viVN:', countKeys(viVN)); + +// Remove pending files +for (const file of pendingFiles) { + fs.unlinkSync(path.join(localesDir, file)); + console.log('Removed:', file); +} diff --git a/healthlink-his-ui/scripts/query_depts.cjs b/healthlink-his-ui/scripts/query_depts.cjs new file mode 100644 index 000000000..a5050d730 --- /dev/null +++ b/healthlink-his-ui/scripts/query_depts.cjs @@ -0,0 +1,29 @@ +const { Client } = require('pg'); +const fs = require('fs'); +const path = require('path'); + +const client = new Client({ + host: '192.168.110.252', + port: 15432, + database: 'postgresql', + user: 'postgresql', + password: 'Jchl1528', +}); + +async function main() { + await client.connect(); + await client.query('SET search_path TO healthlink_his'); + + // Get all department names + const res = await client.query( + "SELECT DISTINCT dept_name FROM sys_dept WHERE dept_name IS NOT NULL AND dept_name != '' ORDER BY dept_name" + ); + const names = res.rows.map(r => r.dept_name); + fs.writeFileSync(path.join(__dirname, 'dept_names.json'), JSON.stringify(names, null, 2), 'utf8'); + console.log('Total departments:', names.length); + names.forEach(n => console.log(n)); + + await client.end(); +} + +main().catch(e => { console.error(e.message); process.exit(1); }); diff --git a/healthlink-his-ui/scripts/query_dicts.cjs b/healthlink-his-ui/scripts/query_dicts.cjs new file mode 100644 index 000000000..ee07e698f --- /dev/null +++ b/healthlink-his-ui/scripts/query_dicts.cjs @@ -0,0 +1,47 @@ +const { Client } = require('pg'); +const fs = require('fs'); +const path = require('path'); + +const client = new Client({ + host: '192.168.110.252', + port: 15432, + database: 'postgresql', + user: 'postgresql', + password: 'Jchl1528', +}); + +async function main() { + await client.connect(); + await client.query('SET search_path TO healthlink_his'); + + // Get all dict types with their labels + const res = await client.query( + "SELECT dict_type, dict_label, dict_value FROM sys_dict_data WHERE status = '0' ORDER BY dict_type, dict_sort" + ); + + // Group by dict_type + const grouped = {}; + for (const row of res.rows) { + if (!grouped[row.dict_type]) grouped[row.dict_type] = []; + grouped[row.dict_type].push({ label: row.dict_label, value: row.dict_value }); + } + + // Output as JSON + const output = {}; + for (const [type, items] of Object.entries(grouped)) { + output[type] = items; + } + + fs.writeFileSync(path.join(__dirname, 'dict_data.json'), JSON.stringify(output, null, 2), 'utf8'); + + console.log('Total dict types:', Object.keys(grouped).length); + console.log('Total dict entries:', res.rows.length); + console.log('\nDict types:'); + for (const [type, items] of Object.entries(grouped)) { + console.log(` ${type}: ${items.length} items - ${items.map(i => i.label).join(', ')}`); + } + + await client.end(); +} + +main().catch(e => { console.error(e.message); process.exit(1); }); diff --git a/healthlink-his-ui/scripts/query_menus.cjs b/healthlink-his-ui/scripts/query_menus.cjs new file mode 100644 index 000000000..eaf1c8aaf --- /dev/null +++ b/healthlink-his-ui/scripts/query_menus.cjs @@ -0,0 +1,35 @@ +const { Client } = require('pg'); +const fs = require('fs'); +const path = require('path'); + +const client = new Client({ + host: '192.168.110.252', + port: 15432, + database: 'postgresql', + user: 'postgresql', + password: 'Jchl1528', +}); + +async function main() { + await client.connect(); + await client.query('SET search_path TO healthlink_his'); + const res = await client.query( + "SELECT DISTINCT menu_name FROM sys_menu WHERE menu_type IN ('M','C') AND menu_name IS NOT NULL AND menu_name != '' ORDER BY menu_name" + ); + const names = res.rows.map(r => r.menu_name); + fs.writeFileSync(path.join(__dirname, 'db_menus.json'), JSON.stringify(names, null, 2), 'utf8'); + console.log('Total menus:', names.length); + + // Compare with mapping + const map = require('../src/layout/components/Sidebar/menuTitleMap.js').default; + const mappedNames = new Set(Object.keys(map)); + const missing = names.filter(m => !mappedNames.has(m)); + console.log('Already mapped:', names.length - missing.length); + console.log('Missing:', missing.length); + console.log('---Missing menus---'); + missing.forEach(m => console.log(m)); + + await client.end(); +} + +main().catch(e => { console.error(e.message); process.exit(1); }); diff --git a/healthlink-his-ui/scripts/rebuild_autotranslate.cjs b/healthlink-his-ui/scripts/rebuild_autotranslate.cjs new file mode 100644 index 000000000..7358133eb --- /dev/null +++ b/healthlink-his-ui/scripts/rebuild_autotranslate.cjs @@ -0,0 +1,195 @@ +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); diff --git a/healthlink-his-ui/scripts/remaining_chinese_nav.json b/healthlink-his-ui/scripts/remaining_chinese_nav.json new file mode 100644 index 000000000..adbe6a720 --- /dev/null +++ b/healthlink-his-ui/scripts/remaining_chinese_nav.json @@ -0,0 +1,854 @@ +[ + { + "key": "outpatientManagement", + "value": "门诊管理" + }, + { + "key": "outpatientRegistration", + "value": "门诊挂号" + }, + { + "key": "inpatientManagement", + "value": "住院管理" + }, + { + "key": "pharmacyWarehouseManagement", + "value": "药库管理" + }, + { + "key": "rationalDrugUse", + "value": "合理用药" + }, + { + "key": "chargeWorkstation", + "value": "收费工作站" + }, + { + "key": "outpatientDailySettlement", + "value": "门诊日结" + }, + { + "key": "outpatientCardReplacement", + "value": "门诊换卡" + }, + { + "key": "chargeRecords", + "value": "收费记录" + }, + { + "key": "outpatientDoctorWorkstation", + "value": "门诊医生工作站" + }, + { + "key": "outpatientChargeWorkstation", + "value": "门诊收费工作站" + }, + { + "key": "inpatientChargeWorkstation", + "value": "住院收费工作站" + }, + { + "key": "outpatientCancelRegistration", + "value": "门诊退号" + }, + { + "key": "outpatientDrugReturn", + "value": "门诊退药" + }, + { + "key": "outpatientDispensing", + "value": "门诊发药" + }, + { + "key": "outpatientEnhanced", + "value": "门诊增强" + }, + { + "key": "outpatientTreatment", + "value": "门诊处置" + }, + { + "key": "outpatientVisitRecord", + "value": "门诊就诊记录" + }, + { + "key": "outpatientWorkstation", + "value": "门诊工作站" + }, + { + "key": "outpatientSurgerySchedule", + "value": "门诊手术安排" + }, + { + "key": "outpatientInfusion", + "value": "门诊输液" + }, + { + "key": "outpatientSkinTest", + "value": "门诊皮试" + }, + { + "key": "outpatientFinance", + "value": "门诊财务" + }, + { + "key": "outpatientAppointment", + "value": "门诊预约挂号" + }, + { + "key": "outpatientNumberSource", + "value": "门诊号源管理" + }, + { + "key": "outpatientNumberManagement", + "value": "门诊号码管理" + }, + { + "key": "outpatientChargeReport", + "value": "门诊收费报表" + }, + { + "key": "outpatientSettlementReport", + "value": "门诊收费结算缴费报表" + }, + { + "key": "outpatientDailySettlementCzd", + "value": "门诊日结长大" + }, + { + "key": "outpatientPricing", + "value": "门诊划价" + }, + { + "key": "outpatientConsultationManagement", + "value": "门诊会诊申请管理" + }, + { + "key": "outpatientConsultationConfirm", + "value": "门诊会诊申请确认" + }, + { + "key": "outpatientDoctorRoomSettings", + "value": "门诊出诊医生诊室设置" + }, + { + "key": "outpatientDispensingDetail", + "value": "门诊发药明细记录" + }, + { + "key": "inpatientSettlement", + "value": "住院结算" + }, + { + "key": "inpatientBilling", + "value": "住院记账" + }, + { + "key": "inpatientDiagnosis", + "value": "住院诊断" + }, + { + "key": "inpatientFeeSettlement", + "value": "住院费用结算" + }, + { + "key": "inpatientAuxiliary", + "value": "住院辅助" + }, + { + "key": "inpatientDrugCollection", + "value": "住院领药" + }, + { + "key": "inpatientDispensing", + "value": "住院发药" + }, + { + "key": "inpatientDispensingReturn", + "value": "住院发退药" + }, + { + "key": "inpatientSurgery", + "value": "住院手术" + }, + { + "key": "inpatientMedicalRecord", + "value": "住院病历" + }, + { + "key": "inpatientInsuranceRegistration", + "value": "住院医保登记" + }, + { + "key": "inpatientDoctorEnhanced", + "value": "住院医生增强" + }, + { + "key": "inpatientDoctorWorkstation", + "value": "住院医生工作站" + }, + { + "key": "inpatientNurseEnhanced", + "value": "住院护士增强" + }, + { + "key": "inpatientChargeDetail", + "value": "住院收费详情" + }, + { + "key": "orderManagement", + "value": "医嘱管理" + }, + { + "key": "orderProofreading", + "value": "医嘱校对" + }, + { + "key": "orderViewPrint", + "value": "医嘱查看与打印" + }, + { + "key": "orderCombination", + "value": "医嘱组合" + }, + { + "key": "orderTemplate", + "value": "医嘱组套" + }, + { + "key": "orderClosedLoop", + "value": "医嘱闭环" + }, + { + "key": "surgeryCharge", + "value": "手术收费" + }, + { + "key": "surgerySafetyCheck", + "value": "手术安全核查" + }, + { + "key": "surgeryAssociation", + "value": "手术关联" + }, + { + "key": "surgeryClosedLoop", + "value": "手术闭环" + }, + { + "key": "nursingEnhanced", + "value": "护理增强" + }, + { + "key": "nursingQuality", + "value": "护理质量" + }, + { + "key": "nurseWorkstation", + "value": "护士工作站" + }, + { + "key": "nurseWorkloadStatistics", + "value": "护士工作量统计" + }, + { + "key": "nurseExecution", + "value": "护士执行" + }, + { + "key": "labHistory", + "value": "检验历史" + }, + { + "key": "labEnhanced", + "value": "检验增强" + }, + { + "key": "labGroup", + "value": "检验组套" + }, + { + "key": "labPathway", + "value": "检验路径" + }, + { + "key": "labItemSettings", + "value": "检验项目设置" + }, + { + "key": "labAppointment", + "value": "检验预约" + }, + { + "key": "labAlert", + "value": "检验预警" + }, + { + "key": "inspectionInstrument", + "value": "检查仪器" + }, + { + "key": "inspectionLab", + "value": "检查检验" + }, + { + "key": "inspectionItemSettings", + "value": "检查项目设置" + }, + { + "key": "emrTimeliness", + "value": "病历时效" + }, + { + "key": "emrTemplateDefinition", + "value": "病历模版定义" + }, + { + "key": "emrStatisticsDefinition", + "value": "病历统计项定义" + }, + { + "key": "medicalRecordArchive", + "value": "病案归档" + }, + { + "key": "medicalRecordStatistics", + "value": "病案统计" + }, + { + "key": "medicalRecordQuality", + "value": "病案质量" + }, + { + "key": "electronicEmrManagement", + "value": "电子病历管理" + }, + { + "key": "ePrescriptionManagement", + "value": "电子处方管理" + }, + { + "key": "ePrescriptionApproval", + "value": "电子处方审批" + }, + { + "key": "rationalDrugStatistics", + "value": "合理用药统计" + }, + { + "key": "antibioticUsage", + "value": "抗菌药物使用" + }, + { + "key": "antibioticRules", + "value": "抗菌药物规则" + }, + { + "key": "drugExpiry", + "value": "药品效期" + }, + { + "key": "drugTraceabilityManagement", + "value": "药品追溯管理" + }, + { + "key": "dispensingOrder", + "value": "发药单" + }, + { + "key": "dispensingDetail", + "value": "发药明细" + }, + { + "key": "dispensingManagement", + "value": "发药管理" + }, + { + "key": "dispensingStatistics", + "value": "发药统计" + }, + { + "key": "drugReturnManagement", + "value": "退药管理" + }, + { + "key": "drugReturnToPharmacy", + "value": "退药回药房" + }, + { + "key": "pharmacyReconciliation", + "value": "药房对账" + }, + { + "key": "pharmacyStockAlert", + "value": "药房库存预警" + }, + { + "key": "pharmacyMonthlySettlement", + "value": "药房月结" + }, + { + "key": "pharmacyFinance", + "value": "药房财务" + }, + { + "key": "pharmacyWarehouseOutbound", + "value": "药库出库单" + }, + { + "key": "pharmacyWarehouseProfitLoss", + "value": "药库损益单" + }, + { + "key": "pharmacyWarehouseStocktaking", + "value": "药库盘点单" + }, + { + "key": "pharmacyWarehouseOrder", + "value": "药库订货单" + }, + { + "key": "pharmacyWarehousePurchase", + "value": "药库进货单" + }, + { + "key": "pharmacyWarehouseReturn", + "value": "药库退库单" + }, + { + "key": "pharmacyWarehousePurchaseReturn", + "value": "药库退货单" + }, + { + "key": "insuranceReconciliationDetail", + "value": "医保对账明细对比" + }, + { + "key": "insuranceSurgeryCatalogMapping", + "value": "医保手术目录对照" + }, + { + "key": "insuranceSurgeryCodeCatalog", + "value": "医保手术编码目录" + }, + { + "key": "insuranceDiseaseCatalog", + "value": "医保病种目录" + }, + { + "key": "insuranceDiseaseCatalogReconciliation", + "value": "医保病种目录对账" + }, + { + "key": "insuranceCatalogBasicInfo", + "value": "医保目录基础信息" + }, + { + "key": "insuranceCatalogUpdate", + "value": "医保目录更新" + }, + { + "key": "insuranceCatalogManagement", + "value": "医保目录管理" + }, + { + "key": "insuranceCatalogAutoUpdate", + "value": "医保目录自动更新" + }, + { + "key": "insuranceDrugCatalog", + "value": "医保药品目录" + }, + { + "key": "insuranceDrugCatalogMapping", + "value": "医保药品目录对照" + }, + { + "key": "insuranceTreatmentCatalog", + "value": "医保诊疗目录" + }, + { + "key": "insuranceTreatmentCatalogReconciliation", + "value": "医保诊疗目录对账" + }, + { + "key": "insuranceFinance", + "value": "医保财务" + }, + { + "key": "insuranceFeeQuery", + "value": "医保费用查询" + }, + { + "key": "insuranceInventoryQuery", + "value": "医保进销存查询管理" + }, + { + "key": "insuranceInfo", + "value": "医保信息" + }, + { + "key": "insuranceInfoManualMapping", + "value": "医保信息手动对照" + }, + { + "key": "chargeDetailQuery", + "value": "收费详情查询" + }, + { + "key": "chargeRuleConfigDev", + "value": "收费规则配置-待开发" + }, + { + "key": "registrationChargeParamMaintenance", + "value": "挂号收费参数维护" + }, + { + "key": "registrationChargeItems", + "value": "挂号收费项目" + }, + { + "key": "registrationQuery", + "value": "挂号查询" + }, + { + "key": "registrationRecords", + "value": "挂号记录" + }, + { + "key": "inventoryProductDetailReport", + "value": "库存商品明细查询报表" + }, + { + "key": "inventoryInterception", + "value": "库存拦截" + }, + { + "key": "inventoryDetailRecord", + "value": "库存明细记录" + }, + { + "key": "inventoryExpiryDetail", + "value": "库存有效期明细" + }, + { + "key": "inventoryBalance", + "value": "库存结余" + }, + { + "key": "stocktakingOrder", + "value": "盘点单" + }, + { + "key": "stocktakingDetailReport", + "value": "盘点明细报表" + }, + { + "key": "stocktakingManagement", + "value": "盘点管理" + }, + { + "key": "stocktakingRecordManagement", + "value": "盘点记录管理" + }, + { + "key": "departmentStocktaking", + "value": "科室盘点" + }, + { + "key": "transferInboundDetailReport", + "value": "调拨入库明细报表" + }, + { + "key": "transferOrderManagement", + "value": "调拨单管理" + }, + { + "key": "damageReportOrderManagement", + "value": "报损单管理" + }, + { + "key": "damageReportDetailReport", + "value": "报损明细报表" + }, + { + "key": "damageReportManagement", + "value": "报损管理" + }, + { + "key": "procurementInboundDetailReport", + "value": "采购入库明细报表" + }, + { + "key": "procurementReturn", + "value": "采购退货" + }, + { + "key": "procurementReturnDetailReport", + "value": "采购退货明细报表" + }, + { + "key": "requisitionOutbound", + "value": "领用出库" + }, + { + "key": "requisitionOutboundOrderManagement", + "value": "领用出库单管理" + }, + { + "key": "requisitionOutboundDetailReport", + "value": "领用出库明细报表" + }, + { + "key": "requisitionOrder", + "value": "领用单" + }, + { + "key": "requisitionManagement", + "value": "领用管理" + }, + { + "key": "requisitionReturn", + "value": "领用退库" + }, + { + "key": "requisitionReturnOrderManagement", + "value": "领用退库单管理" + }, + { + "key": "requisitionReturnDetailReport", + "value": "领用退库明细账报表" + }, + { + "key": "consumableTreatmentBinding", + "value": "耗材/诊疗绑定" + }, + { + "key": "consumableCatalog", + "value": "耗材目录" + }, + { + "key": "patientManagement", + "value": "患者管理" + }, + { + "key": "patientList", + "value": "患者列表" + }, + { + "key": "patientQuery", + "value": "患者查询" + }, + { + "key": "patientRecordManagement", + "value": "患者档案管理" + }, + { + "key": "patientTransfer", + "value": "患者转运" + }, + { + "key": "empi", + "value": "患者主索引(EMPI)" + }, + { + "key": "electronicHealthCard", + "value": "电子健康卡" + }, + { + "key": "electronicSignatureManagement", + "value": "电子签名管理" + }, + { + "key": "signatureStatistics", + "value": "签名统计" + }, + { + "key": "signatureRecord", + "value": "签名记录" + }, + { + "key": "doctorSchedule", + "value": "医生排班" + }, + { + "key": "doctorScheduleManagement", + "value": "医生排班管理" + }, + { + "key": "departmentAppointmentTimeMaintenance", + "value": "科室预约工作时间维护" + }, + { + "key": "consultationApplication", + "value": "会诊申请" + }, + { + "key": "consultationConfirm", + "value": "会诊确认" + }, + { + "key": "consultationFeedback", + "value": "会诊反馈" + }, + { + "key": "consultationCharge", + "value": "会诊收费" + }, + { + "key": "consultationTimeout", + "value": "会诊超时" + }, + { + "key": "followupPlan", + "value": "随访计划" + }, + { + "key": "followupRecord", + "value": "随访记录" + }, + { + "key": "followupTask", + "value": "随访任务" + }, + { + "key": "followupSurvey", + "value": "随访调查" + }, + { + "key": "infectionCaseSurveillance", + "value": "感染病例监测" + }, + { + "key": "handHygieneMonitoring", + "value": "手卫生监测" + }, + { + "key": "environmentalMonitoring", + "value": "环境监测" + }, + { + "key": "targetedSurveillance", + "value": "目标性监测" + }, + { + "key": "occupationalExposure", + "value": "职业暴露" + }, + { + "key": "vitalSignsChart", + "value": "生命体征图表" + }, + { + "key": "doctorPersonalReportManagement", + "value": "医生个人报卡管理" + }, + { + "key": "doctorWorkloadStatistics", + "value": "医生工作量统计" + }, + { + "key": "doctorCommonPhrases", + "value": "医生常用语" + }, + { + "key": "doctorRanking", + "value": "医生排名" + }, + { + "key": "pathologyOrder", + "value": "病理医嘱" + }, + { + "key": "pathologyReport", + "value": "病理报告" + }, + { + "key": "pathologySpecimen", + "value": "病理标本" + }, + { + "key": "pathologyManagement", + "value": "病理管理" + }, + { + "key": "surgeryManagementDev", + "value": "手术管理-待开发" + }, + { + "key": "anesthesiaEnhanced", + "value": "麻醉增强" + }, + { + "key": "cssd", + "value": "消毒供应中心" + }, + { + "key": "sterilizationTraceability", + "value": "消毒追溯" + }, + { + "key": "reportCardManagement", + "value": "报告卡管理" + }, + { + "key": "reportFeedback", + "value": "报告反馈" + }, + { + "key": "serviceRegistration", + "value": "服务注册" + }, + { + "key": "serviceCatalog", + "value": "服务目录" + }, + { + "key": "processDefinition", + "value": "流程定义" + }, + { + "key": "processListener", + "value": "流程监听" + }, + { + "key": "processExpression", + "value": "流程表达式" + }, + { + "key": "admissionTransferManagement", + "value": "出入转管理" + }, + { + "key": "systemTools", + "value": "系统工具" + }, + { + "key": "systemInterface", + "value": "系统接口" + }, + { + "key": "inpatientDailySettlementDev", + "value": "住院日结-待开发" + }, + { + "key": "inpatientSummaryDispensingDev", + "value": "住院汇总发药-待开发" + }, + { + "key": "inpatientDrugReturnDev", + "value": "住院退药-待开发" + }, + { + "key": "medicalRecordManagementDev", + "value": "病案管理-待开发" + }, + { + "key": "autoCalculationDev", + "value": "自动计算-待开发" + }, + { + "key": "medicalInstitutionFeeSettlementLedger", + "value": "医药机构费用结算总账" + } +] \ No newline at end of file diff --git a/healthlink-his-ui/scripts/translate_maintain.cjs b/healthlink-his-ui/scripts/translate_maintain.cjs new file mode 100644 index 000000000..f7f30ca20 --- /dev/null +++ b/healthlink-his-ui/scripts/translate_maintain.cjs @@ -0,0 +1,117 @@ +const fs = require('fs'); +const path = require('path'); +const enUS = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'enUS.json'), 'utf8')); + +const direct = { + '第 {row} 行数据已保存': 'Row {row} data saved', + '删除成功!已删除 1 个父行和 {count} 个子行': 'Deleted! Removed 1 parent row and {count} child rows', + '加载{menu}数据失败,请检查网络或服务状态': 'Failed to load {menu} data, check network or service', + '搜索到{count}条检查方法数据': 'Found {count} inspection method records', + '搜索到{count}条检查部位数据': 'Found {count} inspection part records', + '确定要删除这一行吗?': 'Delete this row?', + '该操作将同时删除 {count} 个子行数据。': 'This will also delete {count} child rows.', + '第 {page} 页': 'Page {page}', + '卫生机构': 'Healthcare Org', '请选择机构': 'Select organization', + '套餐级别': 'Package Level', '请选择套餐级别': 'Select package level', + '套餐类别': 'Package Category', '请选择套餐类别': 'Select package category', + '用户': 'User', '请输入用户名称': 'Enter user name', + '服务费': 'Service Fee', '总金额': 'Total Amount', + '组合套餐': 'Combo Package', '显示套餐名': 'Show package name', + '启用标志': 'Enable Flag', '操作人': 'Operator', + '旧编码格式,建议编辑套餐重新选择科室': 'Old code format, edit package to reselect dept', + ' (旧格式)': ' (Old format)', + '该套餐创建者未知,无法删除': 'Package creator unknown, cannot delete', + '确认删除套餐ID:{id} - {name} 吗?删除后将无法恢复': 'Delete package ID:{id} - {name}? Cannot be undone.', + '该套餐已被使用,无法删除': 'Package in use, cannot delete', + '查看套餐': 'View Package', '用户选择': 'User Selection', + '折扣': 'Discount', '制单人': 'Creator', '生成服务费': 'Generate Service Fee', + '请选择用户': 'Select user', '请选择卫生机构': 'Select healthcare org', + '自动计算': 'Auto Calculate', '请输入折扣': 'Enter discount', + '自动合计': 'Auto Total', '请输入编号': 'Enter number', + '输入名称/首字母/编号搜索': 'Search by name/initial/number', + '自动获取': 'Auto Fetch', '不启用': 'Disabled', + '编号': 'No.', '途径': 'Route', '频次': 'Frequency', '天数': 'Days', '产地': 'Origin', + '添加': 'Add', '无匹配项目': 'No matching items', + '请尝试其他关键词': 'Try other keywords', '暂无项目数据': 'No item data', + '未命名': 'Unnamed', + '成功加载{count}个诊疗项目': 'Loaded {count} treatment items', + '未获取到诊疗项目数据': 'No treatment item data', + '获取诊疗项目列表失败': 'Failed to get treatment item list', + '请输入有效数量': 'Enter valid quantity', '未找到该项目信息': 'Item info not found', + '折扣必须在0-100之间': 'Discount must be 0-100', + '请完善必填项:': 'Please complete required fields:', + '请至少添加一条套餐明细': 'Add at least one package detail', + '请先确认所有正在编辑的行': 'Confirm all editing rows first', + '请完善所有明细项目信息(项目名称和数量为必填项)': 'Complete all detail items (name and quantity required)', + '保存失败,请检查表单数据': 'Save failed, check form data', + '至': 'to', '卫生机构:': 'Healthcare Org:', '套餐级别:': 'Package Level:', + '套餐类别:': 'Package Category:', '用户:': 'User:', + '全院套餐': 'Hospital Package', '个人套餐': 'Personal Package', + '总数:': 'Total:', '加载用户列表失败': 'Failed to load user list', + '获取机构列表失败': 'Failed to get org list', + '无法获取套餐ID,请刷新页面后重试': 'Cannot get package ID, refresh and retry', + '无法获取套餐ID,删除失败': 'Cannot get package ID, delete failed', + '编码': 'Code', '名称': 'Name', '类型': 'Type', '状态': 'Status', + '操作': 'Action', '备注': 'Remark', '排序': 'Sort', '描述': 'Description', + '科室': 'Dept', '部门': 'Department', '医生': 'Doctor', '护士': 'Nurse', + '患者': 'Patient', '诊断': 'Diagnosis', '处方': 'Rx', '医嘱': 'Order', + '费用': 'Fee', '金额': 'Amount', '数量': 'Qty', '单价': 'Price', + '合计': 'Total', '开始时间': 'Start Time', '结束时间': 'End Time', + '门诊': 'OPD', '住院': 'IPD', '急诊': 'Emergency', + '手术': 'Surgery', '护理': 'Nursing', '检验': 'Lab', '检查': 'Inspection', + '病历': 'EMR', '病案': 'Case', '药品': 'Drug', '耗材': 'Consumable', + '报告': 'Report', '统计': 'Statistics', '报表': 'Report', + '质量': 'Quality', '指标': 'Indicator', '管理': 'Management', + '设置': 'Settings', '配置': 'Config', '参数': 'Parameter', + '维护': 'Maintenance', '目录': 'Catalog', '对照': 'Mapping', + '追溯': 'Traceability', '预警': 'Alert', '监测': 'Monitoring', + '执行': 'Execution', '追踪': 'Tracking', + '评估': 'Assessment', '筛查': 'Screening', + '审批': 'Approval', '审核': 'Review', + '闭环': 'Closed Loop', '组套': 'Template', '增强': 'Enhanced', + '收费': 'Charge', '退费': 'Refund', '结算': 'Settlement', + '挂号': 'Registration', '预约': 'Appointment', + '发药': 'Dispensing', '退药': 'Drug Return', + '入库': 'Inbound', '出库': 'Outbound', '盘点': 'Stocktaking', '调拨': 'Transfer', +}; + +function translateDeep(obj) { + let count = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) { + count += translateDeep(obj[k]); + } else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) { + if (direct[obj[k]]) { + obj[k] = direct[obj[k]]; + count++; + } else { + let result = obj[k]; + const sorted = Object.entries(direct).sort((a, b) => b[0].length - a[0].length); + for (const [zh, en] of sorted) { + const escaped = zh.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + result = result.replace(new RegExp(escaped, 'g'), en); + } + result = result.replace(/\s+/g, ' ').trim(); + if (result !== obj[k] && !/[\u4e00-\u9fff]/.test(result)) { + obj[k] = result; + count++; + } + } + } + } + return count; +} + +const c = translateDeep(enUS); +fs.writeFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'enUS.json'), JSON.stringify(enUS, null, 2), 'utf8'); +console.log('Translated:', c); + +function countChinese(obj) { + let c = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) c += countChinese(obj[k]); + else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) c++; + } + return c; +} +console.log('Remaining Chinese in enUS:', countChinese(enUS)); diff --git a/healthlink-his-ui/scripts/translate_vi.cjs b/healthlink-his-ui/scripts/translate_vi.cjs new file mode 100644 index 000000000..616e0a209 --- /dev/null +++ b/healthlink-his-ui/scripts/translate_vi.cjs @@ -0,0 +1,116 @@ +const fs = require('fs'); +const path = require('path'); +const viVN = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'viVN.json'), 'utf8')); + +const direct = { + '划价收费1相关配置': 'Cấu hình Định giá & Thu phí 1', + '划价收费2相关配置': 'Cấu hình Định giá & Thu phí 2', + '使用发票': 'Sử dụng hóa đơn', '普通单据': 'Chứng từ thường', + '挂号预约相关配置': 'Cấu hình Đăng ký khám', '其他选项相关配置': 'Cấu hình Tùy chọn khác', + '病人账户相关配置': 'Cấu hình Tài khoản BN', '配置数据加载成功': 'Tải cấu hình thành công', + '无法加载配置数据': 'Không thể tải dữ liệu cấu hình', '使用默认值': 'Sử dụng mặc định', + '已恢复默认值': 'Đã khôi phục mặc định', '获取配置列表失败': 'Lấy danh sách cấu hình thất bại', + '无法保存参数': 'Không thể lưu tham số', '保存成功': 'Lưu thành công', + '个参数保存成功': 'tham số đã lưu, nhưng', '但以下': 'nhưng các mục sau', + '个参数保存失败': 'tham số lưu thất bại', '所有参数保存失败': 'Tất cả tham số lưu thất bại', + '请检查系统配置': 'Vui lòng kiểm tra cấu hình hệ thống', + '保存操作异常': 'Lỗi thao tác lưu', '请重试': 'Vui lòng thử lại', + '请输入曝光次数': 'Nhập số lần phơi sáng', '选择服务范围': 'Chọn phạm vi dịch vụ', + '选择下级医技类型': 'Chọn loại kỹ thuật y tế cấp dưới', + '无': 'Không', '未知错误': 'Lỗi không xác định', + '未获取到检查方法数据': 'Không có dữ liệu phương pháp kiểm tra', + '未获取到检查部位数据': 'Không có dữ liệu vị trí kiểm tra', + '获取检查类型列表失败': 'Lấy danh sách loại kiểm tra thất bại', + '无法获取保存ID': 'Không thể lấy ID lưu', '无效的删除ID': 'ID xóa không hợp lệ', + '请先保存父项': 'Vui lòng lưu mục cha trước', + '未找到检查方法数据': 'Không tìm thấy dữ liệu phương pháp kiểm tra', + '未找到检查部位数据': 'Không tìm thấy dữ liệu vị trí kiểm tra', + '功能开发中': 'Tính năng đang phát triển', + '确定要删除这一行吗?': 'Xóa dòng này?', + '系统提示': 'Thông báo hệ thống', + '第 {page} 页': 'Trang {page}', + '卫生机构': 'Cơ sở y tế', '请选择机构': 'Chọn cơ sở', + '套餐级别': 'Cấp gói', '请选择套餐级别': 'Chọn cấp gói', + '套餐类别': 'Loại gói', '请选择套餐类别': 'Chọn loại gói', + '用户': 'Người dùng', '请输入用户名称': 'Nhập tên người dùng', + '服务费': 'Phí dịch vụ', '总金额': 'Tổng số tiền', + '组合套餐': 'Gói kết hợp', '显示套餐名': 'Hiện tên gói', + '启用标志': 'Cờ kích hoạt', '操作人': 'Người thao tác', + '用户选择': 'Chọn người dùng', '折扣': 'Giảm giá', '制单人': 'Người lập phiếu', + '生成服务费': 'Tạo phí dịch vụ', '请选择用户': 'Chọn người dùng', + '请选择卫生机构': 'Chọn cơ sở y tế', '自动计算': 'Tự động tính', + '请输入折扣': 'Nhập giảm giá', '自动合计': 'Tự động tổng hợp', + '请输入编号': 'Nhập số', '自动获取': 'Tự động lấy', '不启用': 'Không kích hoạt', + '编号': 'Số', '途径': 'Đường dùng', '频次': 'Tần suất', '天数': 'Số ngày', '产地': 'Nơi sản xuất', + '添加': 'Thêm', '无匹配项目': 'Không có mục phù hợp', + '请尝试其他关键词': 'Thử từ khóa khác', '暂无项目数据': 'Không có dữ liệu mục', + '未命名': 'Chưa đặt tên', + '请输入有效数量': 'Nhập số lượng hợp lệ', '未找到该项目信息': 'Không tìm thấy thông tin mục', + '折扣必须在0-100之间': 'Giảm giá phải từ 0-100', + '请完善必填项:': 'Vui lòng hoàn thành mục bắt buộc:', + '请至少添加一条套餐明细': 'Thêm ít nhất 1 chi tiết gói', + '请先确认所有正在编辑的行': 'Xác nhận tất cả dòng đang chỉnh sửa trước', + '保存失败,请检查表单数据': 'Lưu thất bại, kiểm tra dữ liệu biểu mẫu', + '至': 'đến', '卫生机构:': 'Cơ sở y tế:', '套餐级别:': 'Cấp gói:', + '套餐类别:': 'Loại gói:', '用户:': 'Người dùng:', + '全院套餐': 'Gói toàn viện', '个人套餐': 'Gói cá nhân', + '总数:': 'Tổng:', '加载用户列表失败': 'Tải danh sách người dùng thất bại', + '获取机构列表失败': 'Lấy danh sách cơ sở thất bại', + '编码': 'Mã', '名称': 'Tên', '类型': 'Loại', '状态': 'Trạng thái', + '操作': 'Thao tác', '备注': 'Ghi chú', '排序': 'Sắp xếp', '描述': 'Mô tả', + '科室': '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', + '费用': 'Viện phí', '金额': 'Số tiền', '数量': 'SL', '单价': 'Đơn giá', + '合计': 'Tổng cộng', '门诊': 'Ngoại trú', '住院': 'Nội trú', '急诊': 'Cấp cứu', + '手术': 'Phẫu thuật', '护理': 'Điều dưỡng', '检验': 'XN', '检查': 'CLS', + '病历': 'Bệnh án', '病案': 'Hồ sơ BA', '药品': 'Thuốc', '耗材': 'Vật tư', + '管理': 'Quản lý', '设置': 'Cài đặt', '配置': 'Cấu hình', '参数': 'Tham số', + '维护': 'Bảo trì', '目录': 'Danh mục', '对照': 'Đối chiếu', + '报告': 'Báo cáo', '统计': 'Thống kê', '报表': 'Báo cáo', + '追溯': 'Truy xuất', '预警': 'Cảnh báo', '监测': 'Giám sát', + '执行': 'Thực hiện', '追踪': 'Theo dõi', '评估': 'Đánh giá', + '审批': 'Phê duyệt', '审核': 'Duyệt', + '收费': 'Thu phí', '退费': 'Hoàn phí', '结算': 'Thanh toán', + '挂号': 'Đăng ký khám', '预约': 'Hẹn khám', + '发药': 'Phát thuốc', '退药': 'Trả thuốc', + '入库': 'Nhập kho', '出库': 'Xuất kho', '盘点': 'Kiểm kê', '调拨': 'Điều chuyển', + 'DRG': 'DRG', 'EMPI': 'EMPI', 'ESB': 'ESB', 'FHIR': 'FHIR', 'LIS': 'LIS', 'PACS': 'PACS', +}; + +function translateDeep(obj) { + let count = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) { + count += translateDeep(obj[k]); + } else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) { + if (direct[obj[k]]) { obj[k] = direct[obj[k]]; count++; } + else { + let result = obj[k]; + const sorted = Object.entries(direct).sort((a, b) => b[0].length - a[0].length); + for (const [zh, en] of sorted) { + const escaped = zh.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + result = result.replace(new RegExp(escaped, 'g'), en); + } + result = result.replace(/\s+/g, ' ').trim(); + if (result !== obj[k] && !/[\u4e00-\u9fff]/.test(result)) { + obj[k] = result; count++; + } + } + } + } + return count; +} + +const c = translateDeep(viVN); +fs.writeFileSync(path.join(__dirname, '..', 'src', 'i18n', 'locales', 'viVN.json'), JSON.stringify(viVN, null, 2), 'utf8'); +console.log('Translated:', c); + +function countChinese(obj) { + let c = 0; + for (const k in obj) { + if (typeof obj[k] === 'object' && obj[k] !== null) c += countChinese(obj[k]); + else if (typeof obj[k] === 'string' && /[\u4e00-\u9fff]/.test(obj[k])) c++; + } + return c; +} +console.log('Remaining Chinese in viVN:', countChinese(viVN)); diff --git a/healthlink-his-ui/scripts/untranslated_navs.txt b/healthlink-his-ui/scripts/untranslated_navs.txt new file mode 100644 index 000000000..6287ec860 --- /dev/null +++ b/healthlink-his-ui/scripts/untranslated_navs.txt @@ -0,0 +1 @@ +["Outpatient τ«íτÉå","Outpatient µîéσÅ╖","Inpatient τ«íτÉå","Pharmacy Warehouse τ«íτÉå","ΘÖóµäƒτ«íτÉå","Rational τö¿Φì»","Charge σ╖ÑΣ╜£τ½Ö","Outpatient µùÑτ╗ô","Outpatient µìóσìí","ΘóäΣ║ñΘçæτ«íτÉå","Charge Φ«░σ╜ò","σç║ΘÖóτ╗ôτ«ù","Outpatient σî╗τöƒσ╖ÑΣ╜£τ½Ö","Outpatient µö╢Φ┤╣σ╖ÑΣ╜£τ½Ö","Inpatient µö╢Φ┤╣σ╖ÑΣ╜£τ½Ö","Outpatient ΘÇÇσÅ╖","Outpatient ΘÇÇΦì»","Outpatient σÅæΦì»","Outpatient σó₧σ╝║","Outpatient σñäτ╜«","Outpatient σ░▒Φ»èΦ«░σ╜ò","Outpatient σ╖ÑΣ╜£τ½Ö","Outpatient µëïµ£»σ«ëµÄÆ","Outpatient Φ╛ôµ╢▓","Outpatient τÜ«Φ»ò","Outpatient Φ┤óσèí","Outpatient Θóäτ║ªµîéσÅ╖","Outpatient σÅ╖µ║Éτ«íτÉå","Outpatient σÅ╖τáüτ«íτÉå","Outpatient µö╢Φ┤╣µèÑΦí¿","Outpatient µö╢Φ┤╣τ╗ôτ«ùτ╝┤Φ┤╣µèÑΦí¿","Outpatient µùÑτ╗ôΘò┐σñº","Outpatient σêÆΣ╗╖","Outpatient Σ╝ÜΦ»èτö│Φ»╖τ«íτÉå","Outpatient Σ╝ÜΦ»èτö│Φ»╖τí«Φ«ñ","Outpatient σç║Φ»èσî╗τöƒΦ»èσ«ñΦ«╛τ╜«","Outpatient σÅæΦ컵ÿÄτ╗åΦ«░σ╜ò","Inpatient τ╗ôτ«ù","Inpatient Φ«░Φ┤ª","Inpatient Φ»èµû¡","Inpatient Φ┤╣τö¿τ╗ôτ«ù","Inpatient Φ╛àσè⌐","Inpatient ΘóåΦì»","Inpatient σÅæΦì»","Inpatient σÅæΘÇÇΦì»","Inpatient µëïµ£»","Inpatient τùàσÄå","Inpatient σî╗Σ┐¥τÖ╗Φ«░","Inpatient σî╗τöƒσó₧σ╝║","Inpatient σî╗τöƒσ╖ÑΣ╜£τ½Ö","Inpatient µèñσú½σó₧σ╝║","Inpatient µö╢Φ┤╣Φ»ªµâà","Order τ«íτÉå","Order µáíσ»╣","Order µƒÑτ£ïΣ╕ĵëôσì░","Order τ╗äσÉê","Order τ╗äσÑù","Order Θù¡τÄ»","Surgery µö╢Φ┤╣","Surgery σ«ëσ࿵á╕µƒÑ","Surgery σà│Φüö","Surgery Θù¡τÄ»","Nursing σó₧σ╝║","Nursing Φ┤¿ΘçÅ","Nurse σ╖ÑΣ╜£τ½Ö","Nurse σ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í","Nurse µëºΦíî","Lab σÄåσÅ▓","Lab σó₧σ╝║","Lab τ╗äσÑù","Lab Φ╖»σ╛ä","Lab Θí╣τ¢«Φ«╛τ╜«","Lab Θóäτ║ª","Lab ΘóäΦ¡ª","Inspection Σ╗¬σÖ¿","Inspection µúÇΘ¬î","Inspection Θí╣τ¢«Φ«╛τ╜«","σÅéΦÇâΦîâσ¢┤","µáçµ£¼µ¥íτáü","µáçµ£¼τ▒╗σ₧ï","Φºéσ»ƒΘí╣τ¢«","LISσêåτ╗ä","LISσÉêτ«íΘàìτ╜«","LISσ»╣τàº","LISΘàìτ╜«","PACSσ»╣τàº","µö╛σ░äµèÑσæè","σ╜▒σâÅσó₧σ╝║","σ╜▒σâÅσ»╣µ»ö","σ╜▒σâÅτ«íτÉå","EMR µù╢µòê","EMR µ¿íτëêσ«ÜΣ╣ë","EMR τ╗ƒΦ«íΘí╣σ«ÜΣ╣ë","Medical Record σ╜Ƶíú","Medical Record τ╗ƒΦ«í","Medical Record Φ┤¿ΘçÅ","τùàτ¿ïΦ«░σ╜ò","Σ┐«Φ«óσÄåσÅ▓","σ╛àσåÖτùàσÄå","Electronic τùàσÄåτ«íτÉå","Electronic σñäµû╣τ«íτÉå","Electronic σñäµû╣σ«íµë╣","σÄåσÅ▓σñäµû╣","Σ╕¡σî╗σñäµû╣","Σ╕¡σî╗τ╗äσÑù","Σ╕¡σî╗Φ»èµû¡","Rational τö¿Φì»τ╗ƒΦ«í","Antibiotic Φì»τë⌐Σ╜┐τö¿","Antibiotic Φì»τë⌐ΦºäσêÖ","Φì»τë⌐τ¢╕Σ║ÆΣ╜£τö¿","τÜ«Φ»òτ«íτÉå","Drug µòêµ£ƒ","Drug Φ┐╜µ║»τ«íτÉå","Dispensing σìò","Dispensing µÿÄτ╗å","Dispensing τ«íτÉå","Dispensing τ╗ƒΦ«í","Drug Return τ«íτÉå","Drug Return σ¢₧Φ컵ê┐","σÅûΦì»τºæσ«ñΘàìτ╜«","σ╛àσÅæΦ컵ƒÑΦ»ó","µ▒çµÇ╗σÅæΦì»τö│Φ»╖","Pharmacy σ»╣Φ┤ª","Pharmacy σ║ôσ¡ÿΘóäΦ¡ª","Pharmacy µ£êτ╗ô","Pharmacy Φ┤óσèí","Pharmacy Warehouse σç║σ║ôσìò","Pharmacy Warehouse µìƒτ¢èσìò","Pharmacy Warehouse τ¢ÿτé╣σìò","Pharmacy Warehouse Φ«óΦ┤ºσìò","Pharmacy Warehouse Φ┐¢Φ┤ºσìò","Pharmacy Warehouse ΘÇÇσ║ôσìò","Pharmacy Warehouse ΘÇÇΦ┤ºσìò","Insurance σ»╣Φ┤ªµÿÄτ╗åσ»╣µ»ö","Insurance µëïµ£»τ¢«σ╜òσ»╣τàº","Insurance µëïµ£»τ╝ûτáüτ¢«σ╜ò","Insurance τùàτºìτ¢«σ╜ò","Insurance τùàτºìτ¢«σ╜òσ»╣Φ┤ª","Insurance τ¢«σ╜òσƒ║τíÇΣ┐íµü»","Insurance τ¢«σ╜òµ¢┤µû░","Insurance τ¢«σ╜òτ«íτÉå","Insurance τ¢«σ╜òΦç¬σ迵¢┤µû░","Insurance Φì»σôüτ¢«σ╜ò","Insurance Φì»σôüτ¢«σ╜òσ»╣τàº","Insurance Φ»èτûùτ¢«σ╜ò","Insurance Φ»èτûùτ¢«σ╜òσ»╣Φ┤ª","Insurance Φ┤óσèí","Insurance Φ┤╣τö¿µƒÑΦ»ó","Insurance Φ┐¢ΘöÇσ¡ÿµƒÑΦ»óτ«íτÉå","Insurance Σ┐íµü»","Insurance Σ┐íµü»µëïσè¿σ»╣τàº","σ╕éσî╗Σ┐¥","σ╕éσî╗Σ┐¥Φ┤╣τö¿µƒÑΦ»ó","τ£üσî╗Σ┐¥","τ£üσî╗Σ┐¥Φ┤╣τö¿µƒÑΦ»ó","Φç¬Φ┤╣Φ┤╣τö¿µƒÑΦ»ó","µùÑτ╗ôσî╗Σ┐¥τ╗ôτ«ù","DRGσî╗Σ┐¥τ╗ôτ«ùΣ╕èΣ╝á","DRGµÖ║µÄºτ╗ôµ₧£τ«íτÉå","DRGτ│╗τ╗ƒµÄÑσÅú∩╝êσ¢╜σƒ║∩╝ë","DRGτ╗ôτ«ùΣ╕èΣ╝áτ«íτÉå","DRGτ╗⌐µòê","DRGΦç¬Φ┤╣τ╗ôτ«ùΣ╕èΣ╝á","DRGΦ┤¿µÄºτ╗ôµ₧£Σ╕Äτ¢╕σà│Σ┐íµü»","DRGΘóäΦ¡ª","Charge Φ»ªµâൃÑΦ»ó","Charge ΦºäσêÖΘàìτ╜«-σ╛àσ╝ÇσÅæ","Registration µö╢Φ┤╣σÅéµò░τ╗┤µèñ","Registration µö╢Φ┤╣Θí╣τ¢«","Registration µƒÑΦ»ó","Registration Φ«░σ╜ò","Φ┤╣τö¿µò┤Σ╜ôµƒÑΦ»ó","Φ┤╣τö¿τ«íτÉå","Φ┤╣τö¿τ▒╗σ₧ïΦ╜¼µìó","Σ╕¡ΘÇöτ╗ôτ«ù","µùÑτ╗ôτ«íτÉå","µùÑτ╗ôτ╗ôτ«ùσìòτ«íτÉå","σÅæτÑ¿σÅ╖τáüτ«íτÉå","Σ╕ëµû╣µö»Σ╗ÿ","Σ╕ëµû╣µá╕µƒÑ","µ╗ÜΦ┤╣τ«íτÉå","Θí╣τ¢«σ«ÜΣ╗╖","Φ░âΣ╗╖τ«íτÉå","Φ░âΣ╗╖σìòσ«íµë╣","Φ░âΣ╗╖σìòτ«íτÉå","Φ░âΣ╗╖σ«íµá╕τ«íτÉå","Φ░âΣ╗╖τö│Φ»╖τ«íτÉå","Φ░âΣ╗╖τ¢êΣ║ÅΦ«░σ╜ò","Inventory σòåσôüµÿÄτ╗嵃ÑΦ»óµèÑΦí¿","Inventory µïªµê¬","Inventory µÿÄτ╗åΦ«░σ╜ò","Inventory µ£ëµòêµ£ƒµÿÄτ╗å","Inventory τ╗ôΣ╜Ö","σ║ôµê┐/Φ컵ê┐τ«íτÉå","σ║ôµê┐σìòµì«τ«íτÉå","σ║ôµê┐σ«íµë╣","σ║ôµê┐σ»╣Φ┤ª","σ║ôµê┐τ«íτÉå","Stocktaking σìò","Stocktaking µÿÄτ╗åµèÑΦí¿","Stocktaking τ«íτÉå","Stocktaking Φ«░σ╜òτ«íτÉå","Department τ¢ÿτé╣","µë╣µ¼íτ«íτÉå","µë╣ΘçÅτ¢ÿτé╣","µë╣ΘçÅΦ░âµï¿","Transfer σàÑσ║ôµÿÄτ╗åµèÑΦí¿","Transfer σìòτ«íτÉå","Φ░âσàÑσìò","Φ░âσç║σìò","σàÑσ║ôσìò","τ¢êΣ║Åσìò","τ¢êΣ║ÅΦ«░σ╜ò","Damage Report σìòτ«íτÉå","Damage Report µÿÄτ╗åµèÑΦí¿","Damage Report τ«íτÉå","Procurement σàÑσ║ôµÿÄτ╗åµèÑΦí¿","Procurement ΘÇÇΦ┤º","Procurement ΘÇÇΦ┤ºµÿÄτ╗åµèÑΦí¿","Requisition σç║σ║ô","Requisition σç║σ║ôσìòτ«íτÉå","Requisition σç║σ║ôµÿÄτ╗åµèÑΦí¿","Requisition σìò","Requisition τ«íτÉå","Requisition ΘÇÇσ║ô","Requisition ΘÇÇσ║ôσìòτ«íτÉå","Requisition ΘÇÇσ║ôµÿÄτ╗åΦ┤ªµèÑΦí¿","Σ╛¢σ║öσòåτ«íτÉå","σÉêσÉîτ«íτÉå","Σ╜ìτ╜«τ«íτÉå","Consumable /Φ»èτûùτ╗æσ«Ü","Consumable τ¢«σ╜ò","τ¢«σ╜òτ«íτÉå","Θóæµ¼íΘàìτ╜«","µë½τáüΦ«░σ╜ò","Φ┐╜µ║»τáüτ«íτÉå","Φ┐╜µ║»ΘóäΦ¡ª","Patient τ«íτÉå","Patient σêùΦí¿","Patient µƒÑΦ»ó","Patient µíúµíêτ«íτÉå","Patient Φ╜¼Φ┐É","Patient Σ╕╗τ┤óσ╝ò(EMPI)","EMPIτ╗ƒΦ«í","IDΘ¬îΦ»ü","Electronic σüÑσ║╖σìí","Electronic τ¡╛σÉìτ«íτÉå","Signature τ╗ƒΦ«í","Signature Φ«░σ╜ò","Doctor µÄÆτÅ¡","Doctor µÄÆτÅ¡τ«íτÉå","Department Θóäτ║ªσ╖ÑΣ╜£µù╢Θù┤τ╗┤µèñ","Θóäτ║ªτ«íτÉå","Θóäτ║ªτ«íτÉå2","σŽσÅ╖µÿ╛τñ║σ▒Å","σŽσÅ╖Φ»¡Θƒ│Φ«╛τ╜«","µÖ║Φâ╜σêåΦ»èµÄÆΘÿƒτ«íτÉå","σêåΦ»èµÄÆΘÿƒτ«íτÉå","σó₧σ╝║µòæµèñ","Consultation τö│Φ»╖","Consultation τí«Φ«ñ","Consultation σÅìΘªê","Consultation µö╢Φ┤╣","Consultation Φ╢àµù╢","τƒÑµâàσÉîµäÅ","τƒÑµâàσÉîµäÅτ«íτÉå","Φ╖»σ╛äτ«íτÉå","Follow-up Φ«íσêÆ","Follow-up Φ«░σ╜ò","Follow-up Σ╗╗σèí","Follow-up Φ░ⵃÑ","µèòΦ»ëτ«íτÉå","τû╛τùàµèÑσæèτ«íτÉå","τû½µâàΘóäΦ¡ª","Infection τùàΣ╛ïτ¢æµ╡ï","Hand Hygiene τ¢æµ╡ï","Environmental τ¢æµ╡ï","Targeted µÇºτ¢æµ╡ï","Occupational µÜ┤Θ£▓","σó₧σ╝║µèùΦÅî","σó₧σ╝║µèñτÉå","σó₧σ╝║τƒÑµâà","Vital Σ╜ôσ╛üσ¢╛Φí¿","TPRΦí¿","Σ╕ëµ╡ïσìò","µëºΦíîΦ┐╜Φ╕¬","µëºΦíîτºæσ«ñΘàìτ╜«","σî╗µèÇσ╖ÑΣ╜£τ½Ö","σî╗µèÇσ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í","σî╗µèǵëºΦíî","σî╗µèÇΘÇÇΦ┤╣σ«íµë╣","Doctor Σ╕¬Σ║║µèÑσìíτ«íτÉå","Doctor σ╖ÑΣ╜£ΘçÅτ╗ƒΦ«í","Doctor σ╕╕τö¿Φ»¡","Doctor µÄÆσÉì","σî╗σèíΣ║║σæÿµéúΦÇàτ«íτÉå","Pathology σî╗σÿ▒","Pathology µèÑσæè","Pathology µáçµ£¼","Pathology τ«íτÉå","Surgery τ«íτÉå-σ╛àσ╝ÇσÅæ","Anesthesia σó₧σ╝║","Sterilization Σ╛¢σ║öΣ╕¡σ┐â","Sterilization Φ┐╜µ║»","Report σìíτ«íτÉå","Report σÅìΘªê","τ╗ôµ₧£µƒÑτ£ï","σ╕╕τö¿Φ»èµû¡","Φ»èµû¡σ»╣τàº","Φ»èµû¡τ¢«σ╜ò","Φ»èτûùτ¢«σ╜ò","σ¢╜Σ╕┤τáüτ¢«σ╜ò","σ¡ªτöƒΦ┤╣τö¿µƒÑΦ»ó","µÿôτö¿µÇºΘàìτ╜«","Service µ│¿σåî","Service τ¢«σ╜ò","Process σ«ÜΣ╣ë","Process τ¢æσɼ","Process Φí¿Φ╛╛σ╝Å","µ╕àτ«ùΦ«░σ╜ò","τö│Φ»╖σìòτ«íτÉå","τö│Φ»╖µ╕àτ«ù","τé╣Φ»äσ╖ÑΣ╜£σÅ░","τé╣Φ»äΦ«íσêÆ","τé╣Φ»äΦ«░σ╜ò","σ«íµá╕µùÑσ┐ù","σ«íµá╕τ«íτÉå","σ«íµá╕τ╗ƒΦ«í","τ¢æµÄºµùÑσ┐ù","τ¢æµÄºτ╗ƒΦ«í","σÅ»Θ¥áµÇºτ«íτÉå","σÉêσ╣╢τ«íτÉå","σç║σàÑΦ╜¼τ«íτÉå","σàÑσç║Φ╜¼τ«íτÉå","Σ║ñµÄÑτ╗ƒΦ«í","Σ╗èµùÑΘù¿Φ»è","Σ╗╗σèíτ«íτÉå","σ╖▓σè₧Σ╗╗σèí","σ╖▓σÅæΣ╗╗σèí","σ╛àσè₧Σ╗╗σèí","Φ┐¢τ¿ïΦ«░σ╜ò","Θù¡τÄ»τ╗ƒΦ«í","Φ╖¿µ¿íσ¥ùσìÅσÉî","Θù¿µê╖","τ╗Åσê¢Φ┤║Φüöσ«ÿτ╜æ","Φí¿σìòµ₧äσ╗║","Φí¿σìòΘàìτ╜«","System σ╖Ñσà╖","System µÄÑσÅú","3DΘçìσ╗║","FHIR/CDAµáçσçå","3507σòåσôüσêáΘÖñ","3508σ║ôσ¡ÿµƒÑΦ»ó","3509σ║ôσ¡ÿσÅÿµ¢┤Φ«░σ╜òµƒÑΦ»ó","3510ΘççΦ┤¡Σ┐íµü»µƒÑΦ»ó","3511ΘöÇσö«Σ┐íµü»µƒÑΦ»ó","3512σàÑσ║ôσòåσôüΦ┐╜µ║»Σ┐íµü»µƒÑΦ»ó","3513ΘöÇσö«σòåσôüΦ┐╜µ║»Σ┐íµü»µƒÑΦ»ó","σ«óµê╖µò░µì«","σ╖ÑΣ╝ñµÄÑσÅú∩╝êτ║óµùù∩╝ë","τ¢«σ╜òσ»╣τàº-σ╛àσ╝ÇσÅæ","σêÆΣ╗╖τ╗äσÑù-σ╛àσ╝ÇσÅæ","Inpatient µùÑτ╗ô-σ╛àσ╝ÇσÅæ","Inpatient µ▒çµÇ╗σÅæΦì»-σ╛àσ╝ÇσÅæ","Inpatient ΘÇÇΦì»-σ╛àσ╝ÇσÅæ","Medical Record τ«íτÉå-σ╛àσ╝ÇσÅæ","Φ┤ºΣ╜ìτ«íτÉå-σ╛àσ╝ÇσÅæ","Φç¬σè¿Φ«íτ«ù-σ╛àσ╝ÇσÅæ","σî╗Φ컵£║µ₧äΦ┤╣τö¿τ╗ôτ«ùµÇ╗Φ┤ª"] diff --git a/healthlink-his-ui/scripts/verify_menus.cjs b/healthlink-his-ui/scripts/verify_menus.cjs new file mode 100644 index 000000000..21a1018d2 --- /dev/null +++ b/healthlink-his-ui/scripts/verify_menus.cjs @@ -0,0 +1,35 @@ +const { Client } = require('pg'); +const path = require('path'); + +const client = new Client({ + host: '192.168.110.252', + port: 15432, + database: 'postgresql', + user: 'postgresql', + password: 'Jchl1528', +}); + +async function main() { + await client.connect(); + await client.query('SET search_path TO healthlink_his'); + const res = await client.query( + "SELECT DISTINCT menu_name FROM sys_menu WHERE menu_type IN ('M','C') AND menu_name IS NOT NULL AND menu_name != '' ORDER BY menu_name" + ); + const names = res.rows.map(r => r.menu_name); + + const map = require('../src/layout/components/Sidebar/menuTitleMap.js').default; + const mappedNames = new Set(Object.keys(map)); + const missing = names.filter(m => !mappedNames.has(m)); + + console.log('Total DB menus:', names.length); + console.log('Mapped:', names.length - missing.length); + console.log('Still missing:', missing.length); + if (missing.length > 0) { + console.log('---'); + missing.forEach(m => console.log(m)); + } + + await client.end(); +} + +main().catch(e => { console.error(e.message); process.exit(1); }); diff --git a/healthlink-his-ui/src/i18n/locales/enUS.json b/healthlink-his-ui/src/i18n/locales/enUS.json index 4723e96e7..ba45ae7b9 100644 --- a/healthlink-his-ui/src/i18n/locales/enUS.json +++ b/healthlink-his-ui/src/i18n/locales/enUS.json @@ -733,7 +733,6 @@ "confirmBatchDelete": "Confirm to delete selected items?", "noPermission": "No permission", "loading": "Loading...", - "noData": "No data", "pleaseSelect": "Please select", "pleaseEnter": "Please enter", "queryTime": "Query Time", @@ -761,7 +760,57 @@ "no": "No", "startTime": "Start Date", "endTime": "End Date", - "gender": "Gender" + "gender": "Gender", + "keyword": "Keyword", + "applicationNo": "Application No.", + "patientName": "Patient Name", + "applicationType": "Application Type", + "applicationTime": "Application Time", + "startDate": "Start Date", + "endDate": "End Date", + "age": "Age", + "outpatientNo": "Outpatient No.", + "applicationItem": "Application Item", + "applicantDoctor": "Applicant Doctor", + "applicantDept": "Applicant Department", + "currentPatients": "Current Patients", + "enterPatientName": "Enter patient name", + "firstVisit": "First Visit", + "patientInfo": "Patient Info", + "registrationTime": "Registration Time", + "item": "Item", + "totalQty": "Total Qty", + "totalAmount": "Total Amount", + "pharmacyDept": "Pharmacy/Dept", + "issuer": "Issuer", + "issueTime": "Issue Time", + "male": "Male", + "female": "Female", + "yearsOld": "y/o", + "visitDate": "Visit Date", + "basicInfo": "Basic Info", + "visitNo": "Visit No.", + "name": "Name", + "noData": "No Data", + "group": "Group", + "code": "Code", + "totalExecutions": "Total Executions", + "executedCount": "Executed", + "orderingDoctor": "Ordering Doctor", + "drugInfo": "Drug Info", + "drugQty": "Drug Qty", + "drugStatus": "Drug Status", + "skinTestFlag": "Skin Test", + "executionTime": "Execution Time", + "executor": "Executor", + "executionDept": "Execution Dept", + "executionStatus": "Execution Status", + "infusionOrder": "Infusion Orders", + "infusionHistory": "Infusion History", + "confirmExecution": "Confirm Execution", + "printBottleLabel": "Print Bottle Label", + "viewOrders": "View Orders", + "revoke": "Revoke" }, "component": { "rightToolbar": { @@ -1454,78 +1503,6 @@ "msgOrderAdjusted": "Queue order adjusted (saved)", "msgOrderAdjustFailed": "Queue order adjustment failed (unsaved)" }, - "pharmacy": { - "patientInfo": "Patient Info", - "placeholderNameOrId": "Enter name/ID number", - "dispenseStatus": "Dispense Status", - "placeholderSelectDispenseStatus": "Select dispense status", - "visitDate": "Visit Date", - "startDate": "Start Date", - "endDate": "End Date", - "name": "Name", - "gender": "Gender", - "age": "Age", - "phone": "Phone", - "visitDateCol": "Visit Date", - "preparer": "Preparer", - "placeholderPreparer": "Preparer", - "drugCategory": "Drug Category", - "placeholderDrugCategory": "Drug Category", - "westernChinese": "Western/Chinese Patent", - "chinese": "Chinese Herbal", - "project": "Project", - "placeholderProject": "Project", - "all": "All", - "drug": "Drug", - "consumable": "Consumable", - "batchDispense": "Batch Dispense", - "scan": "Scan", - "prescriptionPrint": "Print Prescription", - "totalAmount": "Total Amount", - "prescriptionNo": "Prescription No.", - "diagnosis": "Diagnosis", - "prescriptionType": "Prescription Type", - "itemName": "Item Name", - "merchandiseName": "Merchandise Name", - "dispenseQty": "Dispense Qty", - "lotNumber": "Lot Number", - "dispenseStatusCol": "Dispense Status", - "days": "Days", - "spec": "Spec", - "traceNo": "Trace No.", - "placeholderTraceNo": "Enter trace number", - "amount": "Amount", - "dispensePharmacy": "Dispense Pharmacy", - "manufacturer": "Manufacturer", - "orderingDoctor": "Ordering Doctor", - "frequency": "Frequency", - "usage": "Usage", - "operation": "Action", - "dispense": "Dispense", - "void": "Void", - "selectVoidReason": "Select Void Reason", - "placeholderSelectVoidReason": "Select void reason", - "confirm": "OK", - "cancel": "Cancel", - "printWarningNoTable": "Table not initialized, please refresh and retry", - "printWarningNoSelect": "No items selected for printing, print failed", - "printWarningNoData": "Failed to get print data, please retry later", - "printFailed": "Prescription print failed", - "msgDispenseSuccess": "Dispensed successfully", - "msgDispenseFailed": "Dispense failed", - "msgNoMatchTraceNo": "No trace number matched in inventory, please scan individually in the dispense list", - "msgOperationFailed": "Operation failed", - "msgInsufficientStock": "Insufficient stock for this lot", - "msgQtyExceedsTotal": "Dispense quantity cannot exceed total quantity", - "msgQtyBelowTotal": "Dispense quantity cannot be less than total quantity", - "msgSelectDispenseItem": "No items selected for dispensing, please reselect", - "msgSelectVoidReason": "Please select a void reason", - "msgNoDataSelected": "No data selected", - "voiding": "Voiding...", - "yuan": "yuan", - "remaining": "remaining", - "expDate": "exp" - }, "billing": { "patientList": "Patient List", "searchPlaceholder": "Enter patient name/medical record no.", @@ -7403,5 +7380,666 @@ "withdrawn": "Withdrawn", "pendingApply": "Pending Apply" } + }, + "inHospital": { + "feeTypeConversion": { + "admissionDate": "Admission Date", + "age": "Age:", + "repeatHospitalization": "Repeat Hospitalization", + "medicalECard": "Medical E-Card", + "thirdPartyLiability": "Third Party", + "convertToSelf": "Convert to Self", + "registrationChange": "Registration Change", + "emergencyFlag": "Emergency Flag", + "feeUpload": "Upload Fee", + "enter": "Enter", + "originalFeeType": "Original Fee Type:", + "personType": "Person Type:", + "feeType": "Fee Type", + "admissionDiagnosis": "Admission Diagnosis", + "socialSecurityCard": "Social Security", + "basicInfo": "Basic Info", + "inpatientNo": "Inpatient No.", + "birthDate": "Birth Date:", + "residentIdCard": "Resident ID", + "specialOutpatient": "Special Outpatient", + "specialPoorHousehold": "Special Poor", + "foreignFlag": "Foreign Flag", + "medicalFace": "Medical Face", + "patientName": "Patient Name:", + "insuredArea": "Insured Area:", + "insuranceType": "Insurance Type:", + "wardArea": "Ward", + "cityEmployeeMedical": "City Employee Medical", + "readCard": "Read Card", + "gender": "Gender:", + "insuredPlace": "Insured Place", + "patientNo": "Patient No.:", + "balance": "Balance:", + "medicalCategory": "Medical Category", + "traumaFlag": "Trauma Flag", + "medicalCard": "Medical Card", + "medicalRegistration": "Medical Registration", + "patientNameLabel": "Patient Name", + "selectDate": "Select date", + "clinicalTrial": "Clinical Trial", + "companyName": "Company:", + "diseaseName": "Disease Name", + "idType": "ID Type:" + }, + "portal": { + "edit": "Edit", + "title": "Inpatient Portal", + "deleteDev": "Delete feature in development", + "editDev": "Edit feature in development", + "status": "Status", + "disabled": "Disabled", + "normal": "Normal", + "delete": "Delete", + "search": "Search", + "add": "Add", + "addDev": "Add feature in development", + "name": "Name", + "code": "Code", + "seqNo": "No.", + "operation": "Action" + }, + "register": { + "idCardNumber": "ID Card Number", + "pendingRegistration": "Pending Registration", + "registrationStatus": "Reg Status", + "voidSuccess": "Void success", + "registered": "Registered", + "noFileRegistration": "No-File Registration", + "diagnosisCategory": "Diagnosis Category", + "modify": "Modify", + "medicalRegistrationConfirm": "Need medical insurance registration?", + "noPatientInfo": "No patient info", + "enterPatientName": "Enter patient name", + "patientInpatientNo": "Inpatient No.", + "feeNature": "Fee Nature", + "maritalStatus": "Marital Status", + "contactRequired": "Enter contact info", + "applyPatient": "Apply Patient", + "nationality": "Nationality:", + "registrar": "Registrar", + "admissionDiagnosis": "Admission Diagnosis", + "medicalCardNo": "Medical Card No.", + "phoneLabel": "Phone:", + "voidConfirm": "Void Confirm", + "medicalInfo": "Medical Info", + "workUnit": "Work Unit", + "enterIdCard": "Enter ID card number", + "contactInfo": "Contact Info", + "registerBtnLabel": "Register", + "marriage": "Marriage:", + "loadSuccess": "Load success", + "view": "View", + "invalidRowData": "Invalid row data", + "inHospitalPatient": "Inpatients", + "diagnosisRequired": "Select admission diagnosis", + "registerBtn": "Register", + "contactPerson": "Contact Person", + "patientCondition": "Patient Condition", + "patientCode": "Patient Code:", + "jumpMedicalFail": "Jump to medical registration failed", + "bloodTypeABO": "Blood Type ABO", + "deceasedTime": "Deceased Time", + "countryCode": "Country Code", + "applicationTime": "Apply Time", + "patientName": "Patient Name", + "idCard": "ID Card", + "admissionTypeLabel": "Admission Type", + "applicationSource": "Apply Source", + "medicalRegistrationTitle": "Medical Registration Confirm", + "void": "Void", + "completedRegistration": "Completed Registration", + "bloodTypeRH": "Blood Type RH", + "voidFail": "Void failed", + "genderLabel": "Gender:", + "detailAddress": "Detail Address", + "contactRelation": "Contact Relation", + "occupation": "Occupation", + "wardRequired": "Select admission ward", + "idTypeLabel": "ID Type:", + "voided": "Voided", + "hospitalInfo": "Hospital Info", + "gender": "Gender", + "encounterIdNotExist": "Encounter ID not exist", + "admissionDeptLabel": "Admission Dept", + "confirmVoid": "Confirm void registration? Cannot undo", + "saveBtn": "Save", + "diagnosisDesc": "Diagnosis Desc", + "noHospitalInfo": "No hospital info", + "occupationLabel": "Occupation:", + "companyName": "Company:", + "nation": "Ethnicity", + "bedCount": "Bed Count:", + "feeNatureLabel": "Fee Nature", + "outpatientDoctor": "Outpatient Doctor", + "ageLabel": "Age:", + "admissionMethod": "Admission Method", + "patientNameRequired": "Enter patient name", + "admissionType": "Admission Type", + "yearSuffix": " yrs", + "reset": "Reset", + "voidedCannotPrint": "Record voided, cannot print", + "currentAddress": "Address:", + "printCertFail": "Print certificate failed", + "patientIdNotExist": "Patient ID not exist", + "scanPay": "Scan Pay", + "nationLabel": "Ethnicity:", + "registerFail": "Registration failed", + "selectDeptFirst": "Select dept first", + "cardType": "Card Type", + "advanceNotFilled": "Advance not filled, confirm registration?", + "birthDateLabel": "Birth Date:", + "deptRequired": "Select admission dept", + "nativePlace": "Native Place:", + "addressSelect": "Address Select", + "basicInfo": "Basic Info", + "query": "Query", + "admissionWard": "Admission Ward", + "registrationTime": "Reg Time", + "selectPatient": "Select a patient first", + "age": "Age", + "idNoLabel": "ID No.:", + "hospitalNo": "Inpatient No.:", + "idCardNo": "ID Card No.", + "admissionDateLabel": "Admission Date", + "printCert": "Print Certificate", + "admitted": "Admitted", + "viewResult": "View Result", + "ageRequired": "Enter age", + "hospitalCount": "Hospital Count:", + "paymentAdvance": "Advance Payment", + "admissionDept": "Admission Dept", + "patientSource": "Patient Source:", + "admissionWardLabel": "Admission Ward", + "pending": "Pending", + "contactPhone": "Contact Phone" + }, + "surgeryManage": { + "selectTime": "Select time", + "search": "Search", + "confirmDelete": "Confirm delete this surgery record?", + "selectLevel": "Select level", + "enterSurgeonName": "Please enter surgeon name", + "title": "Surgery Management", + "status": "Status", + "reset": "Reset", + "confirmComplete": "Confirm complete this surgery?", + "deleteSuccess": "Deleted successfully", + "patientName": "Patient Name", + "level4": "Level 4", + "remarkPlaceholder": "Surgery remark", + "surgeryLevel": "Surgery Level", + "pending": "Pending", + "edit": "Edit", + "addSurgery": "Add Surgery", + "surgeryName": "Surgery Name", + "detail": "Detail", + "start": "Start", + "plannedTime": "Planned Time", + "cancel": "Cancel", + "surgeryCompleted": "Surgery completed", + "addSuccess": "Added successfully", + "surgeryStarted": "Surgery started", + "pendingSurgery": "Pending", + "inProgress": "In Progress", + "inpatientNo": "Inpatient No.", + "patient": "Patient", + "complete": "Complete", + "delete": "Delete", + "enterSurgeryName": "Please enter surgery name", + "surgeryRemark": "Surgery Remark", + "enterPatientName": "Please enter patient name", + "anesthesiologist": "Anesthesiologist", + "surgeryDate": "Surgery Date", + "confirm": "Confirm", + "editSuccess": "Modified successfully", + "surgeryInProgress": "In Progress", + "all": "All", + "surgeryCancelled": "Cancelled", + "level3": "Level 3", + "surgeonName": "Surgeon", + "completed": "Completed", + "cancelled": "Cancelled", + "level1": "Level 1", + "surgeryDetail": "Surgery Detail", + "level2": "Level 2", + "surgeryStatus": "Surgery Status", + "confirmStart": "Confirm start this surgery?", + "surgeryDone": "Completed" + }, + "advanceDeposit": { + "wardArea": "Ward Area", + "receiptNo": "Receipt No.", + "wechat": "WeChat", + "deptWard": "Dept/Ward:", + "amount": "Amount", + "query": "Query", + "billType": "Bill Type", + "cashier": "Cashier", + "payAmount": "Pay Amount:", + "confirmCharge": "Confirm Charge", + "enterPayAmount": "Enter pay amount", + "patientList": "Patient List", + "selectPatient": "Select patient first!", + "networkError": "Network error, retry", + "inHospitalPatient": "Inpatients", + "payMethodLabel": "Pay Method:", + "chargeFail": "Charge failed", + "select": "Select", + "actualCollect": "Actual Total:", + "selectPayMethod": "Select pay method", + "enterHospitalNo": "Enter inpatient no. first!", + "collectAdvance": "Collect Advance", + "collectTime": "Collect Time", + "cancel": "Cancel", + "rmbPrefix": "RMB: ", + "payAmountMustPositive": "Amount must be positive", + "bedNo": "Bed No.:", + "confirmRefund": "Confirm Refund", + "payMethod": "Pay Method", + "cash": "Cash", + "alipay": "Alipay", + "hospitalNo": "Inpatient No.:", + "confirm": "Confirm", + "selfPay": "Self Pay", + "reprintTag": "Reprint", + "printFail": "Print failed", + "balance": "Balance:", + "advancePayment": "Advance Payment", + "print": "Print", + "hospitalNoPlaceholder": "Enter inpatient no.", + "patientNo": "Patient No.", + "refund": "Refund", + "actualRefund": "Refund Total:", + "advanceTotal": "Advance Total:", + "serialNo": "Serial/Inpatient/Name", + "unionPay": "UnionPay", + "printSuccess": "Print success", + "feeType": "Fee Type:", + "chargeSuccess": "Charge success" + }, + "inpatientDiagnosis": { + "diagnosisName": "Diagnosis Name", + "addDiagnosis": "Add Diagnosis", + "enterEncounterId": "Please enter encounter ID", + "cancel": "Cancel", + "diagnosisDate": "Diagnosis Date", + "operationFail": "Operation failed", + "secondary": "Secondary", + "confirm": "Confirm", + "confirmDelete": "Confirm delete this diagnosis?", + "selectClassification": "Select classification", + "admissionDiagnosis": "Admission", + "editSuccess": "Modified successfully", + "postopDiagnosis": "Post-op", + "encounterId": "Encounter ID", + "dischargeDiagnosis": "Discharge", + "title": "Admission Diagnosis", + "mainDiagnosis": "Primary", + "classification": "Classification", + "delete": "Delete", + "selectDate": "Select date", + "edit": "Edit", + "diagnosisDesc": "Diagnosis Desc", + "deleteSuccess": "Deleted successfully", + "doctor": "Doctor", + "query": "Query", + "preopDiagnosis": "Pre-op", + "addSuccess": "Added successfully", + "enterDiagnosisName": "Please enter diagnosis name", + "outpatientDiagnosis": "Outpatient" + }, + "feeSettlement": { + "confirmCharge": "Confirm Charge", + "discount": "Discount", + "receivable": "Receivable", + "orderDept": "Order Dept", + "docNo": "Doc No.", + "medicalCode": "Medical Code", + "searchPlaceholder": "Patient name/inpatient no./bed", + "cashier": "Cashier", + "quantity": "Qty", + "selfToMedical": "Self to Medical", + "reading": "Reading...", + "amount": "Amount", + "discountRate": "Discount Rate", + "basicInfo": "Basic Info", + "idCard": "ID Card", + "eVoucher": "E-Voucher", + "studentMedicalToSelf": "Student Medical to Self", + "chargeItems": "Charge Items", + "preSettleFail": "Pre-settle failed", + "print": "Print", + "chargeTime": "Charge Time", + "selectChargeItem": "Select a charge item", + "operationSuccess": "Success", + "patientList": "Patient List", + "medicalToSelf": "Medical to Self", + "settleStatusCol": "Settle Status", + "age": "Age:", + "medicalCard": "Medical Card", + "received": "Received", + "medicalType": "Medical Type", + "balanceAmount": "Balance", + "gender": "Gender:", + "totalAmount": "Total:", + "feeNature": "Fee Nature", + "settleStatus": "Settle Status", + "prescriptionNo": "Prescription No.", + "studentSelfToMedical": "Student Self to Medical", + "name": "Name:", + "chargeItem": "Charge Item" + }, + "settlement": { + "project": "Project", + "total": "Total:", + "payMethodLabel": "Pay Method", + "availableAmount": "Available", + "remark": "Remark", + "used": "Used", + "currentInvoiceNo": "Current Invoice: ", + "cancelSettle": "Cancel Settle", + "selectSettleFee": "Select Settle Fee", + "advanceTotal": "Advance Total:", + "balance": "Balance:", + "tip": "Tip", + "medicalAccount": "Medical Account:", + "uncheckedCost": "Unchecked:", + "patientInfo": "Patient Info", + "settlementCancel": "Settlement Cancel", + "rechargeTime": "Recharge Time", + "settler": "Settler", + "amount": "Amount", + "preSettle": "Pre-Settle", + "settle": "Settle", + "advanceBalance": "Advance Balance:", + "totalCost": "Total Cost:", + "returnable": "Returnable", + "category": "Category", + "advancePayment": "Advance:", + "reimbursementMethod": "Reimbursement", + "name": "Name", + "returnAmount": "Return Amount", + "invoiceNoLabel": "Invoice No.", + "toDeposit": "To Deposit", + "advanceManagement": "Advance Mgmt", + "bankCard": "Bank Card", + "cancelMedicalDischarge": "Cancel medical discharge?", + "reimbursement": "Reimbursement:", + "confirm": "Confirm", + "totalFee": "Total Fee:", + "returnMethod": "Return Method", + "query": "Query", + "checkedCost": "Checked:", + "noPatientFound": "No patient found!", + "noData": "No Data", + "inpatientSettlement": "Inpatient Settlement", + "receivable": "Receivable", + "wechat": "WeChat", + "settleCancelSuccess": "Cancel success!", + "inpatientNo": "Inpatient No.", + "payMethod": "Pay Method", + "deduction": "Deduction:", + "settleType": "Settle Type", + "selfPay": "Self Pay:", + "midwaySettlement": "Midway Settlement", + "skipNumber": "Skip", + "cash": "Cash", + "masterIndex": "Master Index", + "addDeduction": "Add Deduction", + "supplementary": "Supplementary", + "settleSuccess": "Settle success!", + "alipay": "Alipay", + "refund": "Refund" + }, + "settleAccounts": { + "reset": "Reset", + "refundReason": "Refund Reason", + "change": "Change", + "viewInvoice": "View Invoice", + "payment": "Payment", + "invoiceNo": "Invoice No.:", + "issueInvoice": "Issue Invoice", + "payStatus": "Pay Status", + "confirm": "Confirm", + "invoiceNoPlaceholder": "Invoice No.", + "enterRefundReason": "Enter refund reason", + "payType": "Pay Type", + "settleTimeCol": "Settle Time", + "reasonLengthLimit": "1-200 characters", + "query": "Query", + "refund": "Refund", + "refundSuccess": "Refund success", + "settleTime": "Settle Time:", + "chargeSerialNo": "Charge Serial No.", + "writeOffInvoice": "Write Off Invoice", + "settleAmount": "Settle Amount", + "chargeDetail": "Charge Detail", + "invoiceNoCol": "Invoice No.", + "enterReason": "Enter reason", + "amount": "Amount", + "cashier": "Cashier", + "medicalSettleId": "Medical Settle ID", + "feeType": "Fee Type", + "payAmount": "Pay Amount", + "writeOffSuccess": "Write off success", + "printCount": "Print Count", + "writeOffReason": "Write Off Reason", + "cancel": "Cancel", + "payResult": "Pay Result", + "patientName": "Patient Name:", + "patientNamePlaceholder": "Patient Name", + "patientNameCol": "Patient Name", + "refundReasonMaxLength": "Max 200 characters" + }, + "medicalRecord": { + "patientName": "Patient Name", + "specification": "Spec", + "unitPrice": "Unit Price", + "itemType": "Type", + "admissionDate": "Admission Date", + "status": "Status", + "age": "Age", + "itemName": "Item Name", + "inpatientNo": "Inpatient No.", + "search": "Search", + "amount": "Amount", + "title": "Medical Record", + "inHospital": "In Hospital", + "department": "Department", + "deptName": "Department", + "detail": "Record Detail", + "gender": "Gender", + "quantity": "Qty", + "discharged": "Discharged", + "reset": "Reset", + "bedNo": "Bed No.", + "patient": "Patient", + "feeOverview": "Fee Overview", + "dischargeDate": "Discharge Date" + }, + "listFee": { + "amount": "Amount", + "unitPrice": "Unit Price", + "specification": "Spec", + "quantity": "Qty", + "enterTime": "Entry Time", + "doctorName": "Doctor", + "itemName": "Item Name", + "feeList": "Fee List", + "itemType": "Type", + "total": "Total", + "searchPlaceholder": "Search patient(name/inpatient no.)", + "title": "Inpatient" + }, + "orderManage": { + "unknown": "Unknown", + "confirmSignOff": "Confirm sign off this order?", + "resume": "Resume", + "frequency": "Frequency", + "signOff": "Sign Off", + "searchPlaceholder": "Search patient(name/inpatient no.)", + "route": "Route", + "status": "Status", + "stop": "Stop", + "currentAdvice": "Current Orders", + "prescribingDoctor": "Prescribing Doctor", + "title": "Inpatient", + "adviceList": "Order List", + "confirmStop": "Confirm stop this order?", + "adviceContent": "Order Content", + "stopped": "Order stopped", + "resumed": "Order resumed", + "dosage": "Dosage", + "type": "Type", + "startTime": "Start Time", + "historyAdvice": "History Orders", + "signedOff": "Order signed off", + "confirmResume": "Confirm resume this order?" + }, + "inpatientRecord": { + "gender": "Gender", + "medicalHistoryNarrator": "History Narrator", + "domicileAddress": "Domicile Address", + "maritalHistory": "Marital History", + "workUnit": "Work Unit", + "contactPerson": "Contact", + "pastHistory": "Past History", + "familyHistory": "Family History", + "reliability": "Reliability", + "phone": "Phone", + "physicalExamination": "Physical Examination", + "maritalStatus": "Marital Status", + "medicalRecordWriteTime": "Record Write Time", + "name": "Name", + "idCard": "ID Card", + "age": "Age", + "presentIllness": "Present Illness", + "occupation": "Occupation", + "title": "Admission Record", + "homeAddress": "Home Address", + "preliminaryDiagnosis": "Preliminary Diagnosis", + "bedNo": "Bed No.", + "department": "Department", + "specialtyCheck": "Specialty Exam", + "doctorSignature": "Doctor Signature", + "auxiliaryCheck": "Auxiliary Exam", + "admissionDate": "Admission Date", + "writingTime": "Writing Time", + "inpatientNo": "Inpatient No.", + "personalHistory": "Personal History", + "relationship": "Relationship", + "chiefComplaint": "Chief Complaint", + "nation": "Ethnicity" + }, + "common": { + "reset": "Reset", + "fail": "Failed", + "deptName": "Department", + "endDate": "End Date", + "modify": "Modify", + "success": "Success", + "prompt": "Prompt", + "void": "Void", + "confirm": "Confirm", + "start": "Start", + "startTime": "Start Time", + "seqNo": "No.", + "inpatientNo": "Inpatient No.", + "query": "Query", + "startDate": "Start Date", + "operation": "Action", + "confirmDelete": "Confirm delete?", + "pleaseEnter": "Please enter", + "noData": "No Data", + "bedNo": "Bed No.", + "endTime": "End Time", + "add": "Add", + "print": "Print", + "phone": "Phone", + "cancel": "Cancel", + "age": "Age", + "complete": "Complete", + "edit": "Edit", + "pleaseSelect": "Please select", + "detail": "Detail", + "gender": "Gender", + "status": "Status", + "delete": "Delete", + "patientName": "Patient Name", + "yuan": "Yuan", + "loading": "Loading", + "search": "Search", + "address": "Address", + "view": "View", + "save": "Save" + } + }, + "outpatientEnhanced": { + "title": "Outpatient Doctor Workstation Enhanced", + "structuredTemplate": "Structured Template", + "addTemplate": "Add Template", + "templateName": "Template Name", + "type": "Type", + "department": "Department", + "version": "Version", + "systemTemplate": "System Template", + "icd10Code": "ICD-10 Code", + "searchPlaceholder": "Enter code/name/pinyin", + "code": "Code", + "diagnosisName": "Diagnosis Name", + "category": "Category", + "isLeaf": "Leaf", + "rationalDrugUse": "Rational Drug Use Review", + "drugInteractionCheck": "Drug Interaction Check", + "drugA": "Drug A", + "drugB": "Drug B", + "check": "Check", + "foundInteractionRules": "Found {count} interaction rules", + "noInteraction": "No interaction found", + "interactionType": "Type", + "severity": "Severity", + "description": "Description", + "dischargeSummary": "Discharge Summary", + "patient": "Patient", + "admissionDiagnosis": "Admission Diagnosis", + "dischargeDiagnosis": "Discharge Diagnosis", + "dischargeCondition": "Discharge Condition", + "attendingDoctor": "Attending Doctor", + "draft": "Draft", + "completed": "Completed", + "archived": "Archived", + "prescriptionIntercept": "Prescription Intercept", + "intercept": "Intercept", + "forcePass": "Force Pass", + "drug": "Drug", + "interceptType": "Intercept Type", + "message": "Message", + "doctor": "Doctor", + "action": "Action", + "blocked": "Blocked" + }, + "outpatientFinance": { + "dayEndSetTitle": "Day-End Settlement Management", + "settleDate": "Settle Date", + "selectDate": "Select Date", + "cashier": "Cashier", + "cashierName": "Cashier Name", + "seq": "No.", + "totalAmount": "Total Amount", + "cash": "Cash", + "card": "Card", + "wechat": "WeChat", + "alipay": "Alipay", + "settled": "Settled", + "unsettled": "Unsettled", + "dayEndDetail": "Day-End Detail", + "dayEndReport": "day-end-report.xlsx", + "exportSuccess": "Export successful" } } \ 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 c09f13dcb..da7321c34 100644 --- a/healthlink-his-ui/src/i18n/locales/viVN.json +++ b/healthlink-his-ui/src/i18n/locales/viVN.json @@ -733,7 +733,6 @@ "confirmBatchDelete": "Xác nhận xóa các mục đã chọn?", "noPermission": "Không có quyền", "loading": "Đang tải...", - "noData": "Không có dữ liệu", "pleaseSelect": "Vui lòng chọn", "pleaseEnter": "Vui lòng nhập", "queryTime": "Thời Gian Truy Vấn", @@ -761,7 +760,57 @@ "no": "Không", "startTime": "Ngày bắt đầu", "endTime": "Ngày kết thúc", - "gender": "Giới tính" + "gender": "Giới tính", + "keyword": "Từ khóa", + "applicationNo": "Số đơn", + "patientName": "Tên bệnh nhân", + "applicationType": "Loại đơn", + "applicationTime": "Thời gian đăng ký", + "startDate": "Ngày bắt đầu", + "endDate": "Ngày kết thúc", + "age": "Tuổi", + "outpatientNo": "Số ngoại trú", + "applicationItem": "Dịch vụ đăng ký", + "applicantDoctor": "Bác sĩ đăng ký", + "applicantDept": "Khoa đăng ký", + "currentPatients": "Bệnh nhân hiện tại", + "enterPatientName": "Nhập tên bệnh nhân", + "firstVisit": "Khám lần đầu", + "patientInfo": "Thông tin bệnh nhân", + "registrationTime": "Thời gian đăng ký", + "item": "Dịch vụ", + "totalQty": "Tổng SL", + "totalAmount": "Tổng tiền", + "pharmacyDept": "Nhà thuốc/Khoa", + "issuer": "Người phát", + "issueTime": "Thời gian phát", + "male": "Nam", + "female": "Nữ", + "yearsOld": "tuổi", + "visitDate": "Ngày khám", + "basicInfo": "Thông tin cơ bản", + "visitNo": "Số khám", + "name": "Họ tên", + "noData": "Không có dữ liệu", + "group": "Nhóm", + "code": "Mã", + "totalExecutions": "Tổng số lần", + "executedCount": "Đã thực hiện", + "orderingDoctor": "Bác sĩ chỉ định", + "drugInfo": "Thông tin thuốc", + "drugQty": "Số lượng thuốc", + "drugStatus": "Trạng thái thuốc", + "skinTestFlag": "Test da", + "executionTime": "Thời gian thực hiện", + "executor": "Người thực hiện", + "executionDept": "Khoa thực hiện", + "executionStatus": "Trạng thái thực hiện", + "infusionOrder": "Lệnh truyền dịch", + "infusionHistory": "Lịch sử truyền dịch", + "confirmExecution": "Xác nhận thực hiện", + "printBottleLabel": "In nhãn chai", + "viewOrders": "Xem y lệnh", + "revoke": "Thu hồi" }, "component": { "rightToolbar": { @@ -1455,76 +1504,46 @@ "msgOrderAdjustFailed": "Điều chỉnh thứ tự thất bại (chưa lưu)" }, "pharmacy": { - "patientInfo": "Thông Tin Bệnh Nhân", - "placeholderNameOrId": "Nhập tên/số giấy tờ", - "dispenseStatus": "Trạng Thái Phát Thuốc", - "placeholderSelectDispenseStatus": "Chọn trạng thái phát thuốc", - "visitDate": "Ngày Khám", - "startDate": "Ngày Bắt Đầu", - "endDate": "Ngày Kết Thúc", - "name": "Họ Tên", - "gender": "Giới Tính", - "age": "Tuổi", - "phone": "Điện Thoại", - "visitDateCol": "Ngày Khám", - "preparer": "Dược Sĩ Pha Chế", - "placeholderPreparer": "Dược Sĩ Pha Chế", - "drugCategory": "Phân Loại Thuốc", - "placeholderDrugCategory": "Phân Loại Thuốc", - "westernChinese": "Tây Y/Thuốc Hoàn", - "chinese": "Thuốc Nam", - "project": "Dự Án", - "placeholderProject": "Dự Án", - "all": "Tất Cả", - "drug": "Thuốc", - "consumable": "Vật Tư", - "batchDispense": "Phát Hàng Loạt", - "scan": "Quét Mã", - "prescriptionPrint": "In Đơn Thuốc", - "totalAmount": "Tổng Tiền", - "prescriptionNo": "Số Đơn", - "diagnosis": "Chẩn Đoán", - "prescriptionType": "Loại Đơn", - "itemName": "Tên Mục", - "merchandiseName": "Tên Hàng Hóa", - "dispenseQty": "SL Phát", - "lotNumber": "Số Lô", - "dispenseStatusCol": "Trạng Thái", - "days": "Số Ngày", - "spec": "Quy Cách", - "traceNo": "Mã Truy Xuất", - "placeholderTraceNo": "Nhập mã truy xuất", - "amount": "Thành Tiền", - "dispensePharmacy": "Nhà Thuốc", - "manufacturer": "Nhà Sản Xuất", - "orderingDoctor": "Bác Sĩ Kê Đơn", - "frequency": "Tần Suất", - "usage": "Cách Dùng", - "operation": "Thao Tác", - "dispense": "Phát", - "void": "Hủy", - "selectVoidReason": "Chọn Lý Do Hủy", - "placeholderSelectVoidReason": "Chọn lý do hủy", - "confirm": "Xác Nhận", - "cancel": "Hủy Bỏ", - "printWarningNoTable": "Bảng chưa sẵn sàng, vui lòng tải lại", - "printWarningNoSelect": "Chưa chọn mục để in, in thất bại", - "printWarningNoData": "Lấy dữ liệu in thất bại, vui lòng thử lại", - "printFailed": "In đơn thuốc thất bại", - "msgDispenseSuccess": "Phát thuốc thành công", - "msgDispenseFailed": "Phát thuốc thất bại", - "msgNoMatchTraceNo": "Không khớp mã truy xuất trong kho, vui lòng quét riêng trong danh sách", - "msgOperationFailed": "Thao tác thất bại", - "msgInsufficientStock": "Tồn kho lô này không đủ", - "msgQtyExceedsTotal": "Số lượng phát không được vượt quá tổng", - "msgQtyBelowTotal": "Số lượng phát không được nhỏ hơn tổng", - "msgSelectDispenseItem": "Chưa chọn mục để phát, vui lòng chọn lại", - "msgSelectVoidReason": "Vui lòng chọn lý do hủy", - "msgNoDataSelected": "Chưa chọn dữ liệu", - "voiding": "Đang hủy...", - "yuan": "đ", - "remaining": "còn lại", - "expDate": "HSD" + "title": "Quản Lý Cảnh Báo Tồn Kho Dược Phẩm", + "refresh": "Làm mới", + "addAlert": "Thêm cảnh báo", + "exportReport": "Xuất báo cáo", + "totalAlerts": "Tổng cảnh báo", + "outOfStock": "Hết hàng", + "lowStock": "Tồn kho thấp", + "expiring": "Sắp hết hạn", + "supplierCount": "Số nhà cung cấp", + "pendingRestock": "Chờ nhập hàng", + "alertLevel": "Mức cảnh báo", + "drugCategory": "Loại dược phẩm", + "query": "Tìm kiếm", + "reset": "Đặt lại", + "western": "Tây dược", + "chineseMedicine": "Trung dược", + "herbal": "Thảo dược", + "biological": "Sinh phẩm", + "drugCode": "Mã dược phẩm", + "drugName": "Tên dược phẩm", + "spec": "Quy cách", + "currentStock": "Tồn kho hiện tại", + "minStock": "Tồn kho tối thiểu", + "maxStock": "Tồn kho tối đa", + "supplier": "Nhà cung cấp", + "lastRestock": "Lần nhập cuối", + "expiryDate": "Ngày hết hạn", + "action": "Thao tác", + "restockApply": "Yêu cầu nhập hàng", + "addDialogTitle": "Thêm cảnh báo tồn kho dược phẩm", + "enterDrugCode": "Nhập mã dược phẩm", + "enterDrugName": "Nhập tên dược phẩm", + "specExample": "VD: 0.5g*24 viên", + "pleaseSelect": "Vui lòng chọn", + "enterSupplier": "Nhập tên nhà cung cấp", + "cancel": "Hủy", + "confirm": "Xác nhận", + "normal": "Bình thường", + "addSuccess": "Thêm thành công", + "exportWip": "Tính năng xuất đang được phát triển" }, "billing": { "patientList": "Danh sách bệnh nhân", @@ -7170,48 +7189,6 @@ "medicationList3": "Đơn thuốc 3" } }, - "pharmacy": { - "title": "Quản Lý Cảnh Báo Tồn Kho Dược Phẩm", - "refresh": "Làm mới", - "addAlert": "Thêm cảnh báo", - "exportReport": "Xuất báo cáo", - "totalAlerts": "Tổng cảnh báo", - "outOfStock": "Hết hàng", - "lowStock": "Tồn kho thấp", - "expiring": "Sắp hết hạn", - "supplierCount": "Số nhà cung cấp", - "pendingRestock": "Chờ nhập hàng", - "alertLevel": "Mức cảnh báo", - "drugCategory": "Loại dược phẩm", - "query": "Tìm kiếm", - "reset": "Đặt lại", - "western": "Tây dược", - "chineseMedicine": "Trung dược", - "herbal": "Thảo dược", - "biological": "Sinh phẩm", - "drugCode": "Mã dược phẩm", - "drugName": "Tên dược phẩm", - "spec": "Quy cách", - "currentStock": "Tồn kho hiện tại", - "minStock": "Tồn kho tối thiểu", - "maxStock": "Tồn kho tối đa", - "supplier": "Nhà cung cấp", - "lastRestock": "Lần nhập cuối", - "expiryDate": "Ngày hết hạn", - "action": "Thao tác", - "restockApply": "Yêu cầu nhập hàng", - "addDialogTitle": "Thêm cảnh báo tồn kho dược phẩm", - "enterDrugCode": "Nhập mã dược phẩm", - "enterDrugName": "Nhập tên dược phẩm", - "specExample": "VD: 0.5g*24 viên", - "pleaseSelect": "Vui lòng chọn", - "enterSupplier": "Nhập tên nhà cung cấp", - "cancel": "Hủy", - "confirm": "Xác nhận", - "normal": "Bình thường", - "addSuccess": "Thêm thành công", - "exportWip": "Tính năng xuất đang được phát triển" - }, "medicineStorage": { "common": { "add": "Thêm", @@ -7403,5 +7380,666 @@ "withdrawn": "Đã rút", "pendingApply": "Chờ nộp" } + }, + "inHospital": { + "feeSettlement": { + "orderDept": "Khoa chỉ định", + "medicalCard": "Thẻ BHYT", + "operationSuccess": "Thành công", + "amount": "Số tiền", + "medicalType": "Loại y tế", + "chargeTime": "Thời gian thu", + "receivable": "Số tiền phải thu", + "chargeItem": "Mục thu phí", + "basicInfo": "Thông tin cơ bản", + "confirmCharge": "Xác nhận thu phí", + "discount": "Giảm giá", + "docNo": "Số chứng từ", + "discountRate": "Tỷ lệ giảm", + "quantity": "SL", + "cashier": "Thu ngân", + "name": "Họ tên:", + "reading": "Đang đọc...", + "preSettleFail": "Thanh toán trước thất bại", + "received": "Số tiền đã thu", + "idCard": "CCCD", + "prescriptionNo": "Số đơn thuốc", + "settleStatusCol": "TT thanh toán", + "selfToMedical": "Tự trả sang BHYT", + "settleStatus": "TT thanh toán", + "searchPlaceholder": "Tên BN/số nội trú/giường", + "totalAmount": "Tổng cộng:", + "medicalCode": "Mã BHYT", + "age": "Tuổi:", + "feeNature": "Tính chất phí", + "medicalToSelf": "BHYT sang tự trả", + "chargeItems": "Mục thu phí", + "print": "In", + "selectChargeItem": "Chọn một mục thu phí", + "balanceAmount": "Số dư", + "studentSelfToMedical": "SV tự trả sang SV BHYT", + "eVoucher": "Phiếu điện tử", + "gender": "Giới tính:", + "patientList": "DS bệnh nhân", + "studentMedicalToSelf": "SV BHYT sang SV tự trả" + }, + "settlement": { + "settler": "NV thanh toán", + "confirm": "Xác nhận", + "amount": "Số tiền", + "advanceBalance": "Số dư tạm ứng:", + "refund": "Hoàn phí", + "wechat": "WeChat", + "settleCancelSuccess": "Hủy thành công!", + "totalCost": "Tổng chi phí:", + "payMethod": "Phương thức TT", + "inpatientSettlement": "TT nội trú", + "totalFee": "Tổng phí:", + "patientInfo": "Thông tin BN", + "used": "Đã dùng", + "advanceManagement": "Quản lý tạm ứng", + "currentInvoiceNo": "HĐ hiện tại: ", + "toDeposit": "Chuyển đặt cọc", + "invoiceNoLabel": "Số hóa đơn", + "total": "Tổng:", + "preSettle": "TT trước", + "medicalAccount": "TK BHYT:", + "addDeduction": "Thêm giảm trừ", + "noPatientFound": "Không tìm thấy BN!", + "selectSettleFee": "Chọn phí TT", + "returnable": "Phải trả", + "project": "Dự án", + "reimbursement": "Bảo hiểm:", + "cancelMedicalDischarge": "Hủy xuất viện BHYT?", + "supplementary": "Bổ sung", + "remark": "Ghi chú", + "query": "Truy vấn", + "advancePayment": "Tạm ứng:", + "returnAmount": "Số tiền trả", + "returnMethod": "Phương thức trả", + "category": "Danh mục", + "rechargeTime": "Thời gian nạp", + "masterIndex": "Chỉ mục chính", + "bankCard": "Thẻ ngân hàng", + "selfPay": "Tự trả:", + "uncheckedCost": "Chưa chọn:", + "advanceTotal": "Tổng tạm ứng:", + "payMethodLabel": "Phương thức TT", + "checkedCost": "Đã chọn:", + "alipay": "Alipay", + "settlementCancel": "Hủy TT", + "cash": "Tiền mặt", + "cancelSettle": "Hủy TT", + "noData": "Không có dữ liệu", + "settleSuccess": "Thanh toán thành công!", + "reimbursementMethod": "Phương thức BH", + "midwaySettlement": "TT giữa chừng", + "availableAmount": "Có thể dùng", + "settle": "Thanh toán", + "receivable": "Phải thu", + "tip": "Thông báo", + "skipNumber": "Bỏ qua", + "balance": "Số dư:", + "deduction": "Giảm trừ:", + "settleType": "Loại TT", + "inpatientNo": "Số nội trú", + "name": "Họ tên" + }, + "advanceDeposit": { + "payMethod": "Phương thức TT", + "hospitalNo": "Số nội trú:", + "confirmRefund": "Xác nhận hoàn phí", + "amount": "Số tiền", + "print": "In", + "cash": "Tiền mặt", + "patientList": "DS bệnh nhân", + "wechat": "WeChat", + "unionPay": "UnionPay", + "inHospitalPatient": "BN nội trú", + "rmbPrefix": "Nhân dân tệ: ", + "selfPay": "Tự trả", + "payAmountMustPositive": "Số tiền phải lớn hơn 0", + "billType": "Loại hóa đơn", + "confirm": "Xác nhận", + "query": "Truy vấn", + "deptWard": "Khoa/Khu:", + "bedNo": "Số giường:", + "refund": "Hoàn phí", + "chargeSuccess": "Thu phí thành công", + "cashier": "Thu ngân", + "chargeFail": "Thu phí thất bại", + "patientNo": "Số BN", + "reprintTag": "In lại lần", + "feeType": "Loại phí:", + "payAmount": "Số tiền TT:", + "enterPayAmount": "Nhập số tiền thanh toán", + "actualCollect": "Tổng thu thực tế:", + "enterHospitalNo": "Vui lòng nhập số nội trú!", + "confirmCharge": "Xác nhận thu phí", + "wardArea": "Khu điều trị", + "balance": "Số dư:", + "advancePayment": "Tiền tạm ứng nội trú", + "printSuccess": "In thành công", + "selectPayMethod": "Chọn phương thức TT", + "collectAdvance": "Thu tiền tạm ứng", + "alipay": "Alipay", + "advanceTotal": "Tổng tạm ứng:", + "selectPatient": "Vui lòng chọn bệnh nhân!", + "serialNo": "Số/Số nội trú/Tên", + "actualRefund": "Tổng hoàn thực tế:", + "printFail": "In thất bại", + "hospitalNoPlaceholder": "Nhập số nội trú", + "payMethodLabel": "Phương thức TT:", + "receiptNo": "Số biên lai", + "collectTime": "Thời gian thu", + "select": "Chọn", + "networkError": "Lỗi mạng, thử lại", + "cancel": "Hủy" + }, + "inpatientDiagnosis": { + "selectClassification": "Chọn phân loại", + "selectDate": "Chọn ngày", + "dischargeDiagnosis": "Xuất viện", + "delete": "Xóa", + "diagnosisName": "Tên chẩn đoán", + "query": "Truy vấn", + "diagnosisDesc": "Mô tả chẩn đoán", + "addDiagnosis": "Thêm chẩn đoán", + "admissionDiagnosis": "Nhập viện", + "outpatientDiagnosis": "Ngoại trú", + "preopDiagnosis": "Trước mổ", + "encounterId": "ID lần khám", + "confirm": "Xác nhận", + "diagnosisDate": "Ngày chẩn đoán", + "enterEncounterId": "Vui lòng nhập ID lần khám", + "confirmDelete": "Xác nhận xóa chẩn đoán này?", + "cancel": "Hủy", + "addSuccess": "Thêm thành công", + "mainDiagnosis": "Chính", + "doctor": "Bác sĩ", + "deleteSuccess": "Xóa thành công", + "postopDiagnosis": "Sau mổ", + "operationFail": "Thao tác thất bại", + "title": "Chẩn đoán nhập viện", + "edit": "Sửa", + "editSuccess": "Sửa thành công", + "classification": "Phân loại", + "enterDiagnosisName": "Vui lòng nhập tên chẩn đoán", + "secondary": "Phụ" + }, + "register": { + "deptRequired": "Chọn khoa nhập viện", + "admissionDeptLabel": "Khoa nhập viện", + "registrationStatus": "TT đăng ký", + "genderLabel": "Giới tính:", + "confirmVoid": "Xác nhận hủy đăng ký? Không thể hoàn tác", + "diagnosisDesc": "Mô tả chẩn đoán", + "basicInfo": "Thông tin cơ bản", + "selectPatient": "Chọn BN từ danh sách trước", + "contactRequired": "Nhập thông tin liên hệ", + "nativePlace": "Quê quán:", + "yearSuffix": " tuổi", + "bedCount": "Số giường:", + "admissionType": "Loại nhập viện", + "viewResult": "Xem kết quả", + "diagnosisCategory": "Loại chẩn đoán", + "countryCode": "Mã quốc gia", + "voidFail": "Hủy thất bại", + "voided": "Đã hủy", + "patientCode": "Mã BN:", + "deceasedTime": "Thời gian tử vong", + "noHospitalInfo": "Không có thông tin nội trú", + "currentAddress": "Địa chỉ:", + "admitted": "Đã vào khoa", + "registerBtnLabel": "Đăng ký", + "medicalRegistrationTitle": "Xác nhận ĐK BHYT", + "contactPerson": "Người liên hệ", + "idTypeLabel": "Loại giấy tờ:", + "wardRequired": "Chọn khu nhập viện", + "completedRegistration": "Đã đăng ký nhập viện", + "addressSelect": "Chọn địa chỉ", + "saveBtn": "Lưu", + "patientNameRequired": "Nhập tên BN", + "enterIdCard": "Nhập số CCCD", + "medicalInfo": "Thông tin BHYT", + "patientInpatientNo": "Số nội trú", + "occupation": "Nghề nghiệp", + "bloodTypeABO": "Nhóm máu ABO", + "patientIdNotExist": "ID BN không tồn tại", + "voidConfirm": "Xác nhận hủy", + "occupationLabel": "Nghề nghiệp:", + "advanceNotFilled": "Chưa nhập tạm ứng, xác nhận đăng ký?", + "noFileRegistration": "ĐK không hồ sơ", + "age": "Tuổi", + "printCert": "In giấy nhập viện", + "paymentAdvance": "Tiền tạm ứng", + "hospitalInfo": "Thông tin nội trú", + "contactInfo": "Thông tin liên hệ", + "birthDateLabel": "Ngày sinh:", + "loadSuccess": "Tải thành công", + "admissionDiagnosis": "Chẩn đoán nhập viện", + "reset": "Đặt lại", + "applicationTime": "Thời gian đăng ký", + "applicationSource": "Nguồn đăng ký", + "printCertFail": "In giấy nhập viện thất bại", + "admissionTypeLabel": "Loại nhập viện", + "pending": "Chờ đăng ký", + "medicalCardNo": "Số thẻ khám", + "feeNatureLabel": "Tính chất phí", + "void": "Hủy bỏ", + "bloodTypeRH": "Nhóm máu RH", + "registrationTime": "Thời gian ĐK", + "nationality": "Quốc tịch:", + "maritalStatus": "Tình trạng hôn nhân", + "detailAddress": "Địa chỉ chi tiết", + "hospitalNo": "Số nội trú:", + "voidedCannotPrint": "Bản ghi đã hủy, không thể in", + "registerFail": "Đăng ký thất bại", + "nation": "Dân tộc", + "gender": "Giới tính", + "view": "Xem", + "hospitalCount": "Số lần nội trú:", + "idCardNo": "Số CCCD", + "ageLabel": "Tuổi:", + "marriage": "Hôn nhân:", + "registerBtn": "Đăng ký", + "selectDeptFirst": "Chọn khoa trước", + "diagnosisRequired": "Chọn chẩn đoán nhập viện", + "encounterIdNotExist": "ID lần khám không tồn tại", + "companyName": "Công ty:", + "contactPhone": "SĐT liên hệ", + "modify": "Sửa", + "patientCondition": "Tình trạng BN", + "enterPatientName": "Nhập tên BN", + "feeNature": "Tính chất phí", + "medicalRegistrationConfirm": "Cần đăng ký BHYT?", + "scanPay": "Quét mã TT", + "applyPatient": "BN đăng ký", + "idCardNumber": "Số CCCD", + "nationLabel": "Dân tộc:", + "admissionDept": "Khoa nhập viện", + "admissionWard": "Khu nhập viện", + "admissionMethod": "Phương thức nhập viện", + "cardType": "Loại thẻ", + "pendingRegistration": "Chờ đăng ký nhập viện", + "ageRequired": "Nhập tuổi", + "jumpMedicalFail": "Chuyển đến trang ĐK BHYT thất bại", + "patientSource": "Nguồn BN:", + "patientName": "Tên BN", + "invalidRowData": "Dữ liệu không hợp lệ", + "registrar": "NV đăng ký", + "query": "Truy vấn", + "outpatientDoctor": "Bác sĩ ngoại trú", + "idNoLabel": "Số giấy tờ:", + "noPatientInfo": "Không có thông tin BN", + "registered": "Đã đăng ký", + "admissionDateLabel": "Ngày nhập viện", + "voidSuccess": "Hủy thành công", + "inHospitalPatient": "BN nội trú", + "admissionWardLabel": "Khu nhập viện", + "phoneLabel": "Điện thoại:", + "workUnit": "Nơi làm việc", + "contactRelation": "Quan hệ", + "idCard": "CCCD" + }, + "portal": { + "delete": "Xóa", + "search": "Tìm kiếm", + "status": "Trạng thái", + "editDev": "Chức năng sửa đang phát triển", + "disabled": "Vô hiệu", + "deleteDev": "Chức năng xóa đang phát triển", + "add": "Thêm", + "code": "Mã", + "edit": "Sửa", + "title": "Cổng Bệnh nhân nội trú", + "normal": "Bình thường", + "name": "Tên", + "addDev": "Chức năng thêm đang phát triển", + "seqNo": "STT", + "operation": "Thao tác" + }, + "medicalRecord": { + "itemName": "Tên mục", + "bedNo": "Số giường", + "itemType": "Loại", + "admissionDate": "Ngày nhập viện", + "dischargeDate": "Ngày xuất viện", + "status": "Trạng thái", + "inHospital": "Đang nội trú", + "quantity": "Số lượng", + "specification": "Quy cách", + "deptName": "Khoa", + "department": "Khoa", + "detail": "Chi tiết bệnh án", + "patientName": "Tên bệnh nhân", + "feeOverview": "Tổng quan phí", + "unitPrice": "Đơn giá", + "reset": "Đặt lại", + "inpatientNo": "Số nội trú", + "amount": "Số tiền", + "age": "Tuổi", + "discharged": "Đã xuất viện", + "patient": "Bệnh nhân", + "gender": "Giới tính", + "title": "Quản lý bệnh án", + "search": "Tìm kiếm" + }, + "orderManage": { + "frequency": "Tần suất", + "prescribingDoctor": "Bác sĩ kê", + "currentAdvice": "Y lệnh hiện tại", + "stop": "Dừng", + "status": "Trạng thái", + "confirmResume": "Xác nhận khôi phục y lệnh này?", + "confirmSignOff": "Xác nhận ký trả y lệnh này?", + "signedOff": "Y lệnh đã ký trả", + "stopped": "Y lệnh đã dừng", + "resume": "Khôi phục", + "resumed": "Y lệnh đã khôi phục", + "adviceContent": "Nội dung y lệnh", + "historyAdvice": "Lịch sử y lệnh", + "startTime": "Thời gian bắt đầu", + "dosage": "Liều lượng", + "adviceList": "Danh sách y lệnh", + "route": "Đường dùng", + "title": "Bệnh nhân nội trú", + "searchPlaceholder": "Tìm bệnh nhân(tên/số nội trú)", + "type": "Loại", + "unknown": "Không rõ", + "signOff": "Ký trả", + "confirmStop": "Xác nhận dừng y lệnh này?" + }, + "surgeryManage": { + "surgeryCompleted": "Phẫu thuật đã hoàn thành", + "level4": "Cấp 4", + "remarkPlaceholder": "Ghi chú phẫu thuật", + "title": "Quản lý phẫu thuật", + "complete": "Hoàn thành", + "pendingSurgery": "Chờ mổ", + "selectTime": "Chọn thời gian", + "patient": "Bệnh nhân", + "all": "Tất cả", + "confirmDelete": "Xác nhận xóa bản ghi phẫu thuật?", + "surgeryLevel": "Cấp độ PT", + "enterPatientName": "Vui lòng nhập tên bệnh nhân", + "inpatientNo": "Số nội trú", + "edit": "Sửa", + "surgeryInProgress": "Đang mổ", + "surgeryStatus": "Trạng thái PT", + "confirm": "Xác nhận", + "level2": "Cấp 2", + "deleteSuccess": "Xóa thành công", + "status": "Trạng thái", + "surgeryDate": "Ngày phẫu thuật", + "addSuccess": "Thêm thành công", + "enterSurgeonName": "Vui lòng nhập tên bác sĩ mổ", + "level1": "Cấp 1", + "enterSurgeryName": "Vui lòng nhập tên phẫu thuật", + "confirmStart": "Xác nhận bắt đầu phẫu thuật?", + "surgeryRemark": "Ghi chú PT", + "plannedTime": "Thời gian dự kiến", + "addSurgery": "Thêm phẫu thuật", + "delete": "Xóa", + "surgeonName": "Bác sĩ mổ", + "editSuccess": "Sửa thành công", + "surgeryDone": "Hoàn thành", + "inProgress": "Đang mổ", + "surgeryCancelled": "Đã hủy", + "start": "Bắt đầu", + "patientName": "Tên bệnh nhân", + "pending": "Chờ mổ", + "surgeryName": "Tên phẫu thuật", + "level3": "Cấp 3", + "confirmComplete": "Xác nhận hoàn thành phẫu thuật?", + "anesthesiologist": "Bác sĩ gây mê", + "surgeryDetail": "Chi tiết PT", + "search": "Tìm kiếm", + "surgeryStarted": "Phẫu thuật đã bắt đầu", + "selectLevel": "Chọn cấp độ", + "reset": "Đặt lại", + "detail": "Chi tiết", + "completed": "Hoàn thành", + "cancelled": "Đã hủy", + "cancel": "Hủy" + }, + "feeTypeConversion": { + "residentIdCard": "CCCD", + "specialOutpatient": "Ngoại trú đặc biệt", + "birthDate": "Ngày sinh:", + "inpatientNo": "Số nội trú", + "registrationChange": "Thay đổi đăng ký", + "repeatHospitalization": "Nhập viện lại", + "patientNo": "Số BN:", + "patientNameLabel": "Tên BN", + "admissionDiagnosis": "Chẩn đoán nhập viện", + "selectDate": "Chọn ngày", + "convertToSelf": "Chuyển tự trả", + "foreignFlag": "Dấu hiệu nước ngoài", + "emergencyFlag": "Dấu hiệu cấp cứu", + "medicalFace": "Nhận diện khuôn mặt", + "thirdPartyLiability": "Trách nhiệm bên thứ 3", + "age": "Tuổi:", + "medicalECard": "Thẻ ĐT BHYT", + "clinicalTrial": "Thử nghiệm lâm sàng", + "medicalCategory": "Loại y tế", + "admissionDate": "Ngày nhập viện", + "medicalRegistration": "Đăng ký BHYT", + "feeType": "Loại phí", + "companyName": "Công ty:", + "balance": "Số dư:", + "personType": "Loại người:", + "traumaFlag": "Dấu hiệu chấn thương", + "feeUpload": "Tải phí", + "originalFeeType": "Loại phí gốc:", + "gender": "Giới tính:", + "medicalCard": "Thẻ BHYT", + "patientName": "Tên BN:", + "cityEmployeeMedical": "BHYT CBNV thành phố", + "insuredArea": "Khu vực tham gia:", + "insuredPlace": "Nơi tham gia", + "socialSecurityCard": "Thẻ BHXH", + "wardArea": "Khu", + "enter": "Nhập", + "diseaseName": "Tên bệnh", + "basicInfo": "Thông tin cơ bản", + "insuranceType": "Loại bảo hiểm:", + "idType": "Loại giấy tờ:", + "readCard": "Đọc thẻ", + "specialPoorHousehold": "Hộ đặc biệt khó khăn" + }, + "common": { + "status": "Trạng thái", + "query": "Truy vấn", + "modify": "Sửa đổi", + "seqNo": "STT", + "operation": "Thao tác", + "add": "Thêm", + "edit": "Sửa", + "search": "Tìm kiếm", + "deptName": "Khoa", + "detail": "Chi tiết", + "endDate": "Ngày kết thúc", + "fail": "Thất bại", + "save": "Lưu", + "loading": "Đang tải", + "startTime": "Thời gian bắt đầu", + "complete": "Hoàn thành", + "cancel": "Hủy", + "phone": "Điện thoại", + "void": "Hủy bỏ", + "patientName": "Tên bệnh nhân", + "confirm": "Xác nhận", + "delete": "Xóa", + "start": "Bắt đầu", + "inpatientNo": "Số nội trú", + "startDate": "Ngày bắt đầu", + "pleaseEnter": "Vui lòng nhập", + "address": "Địa chỉ", + "prompt": "Thông báo", + "age": "Tuổi", + "yuan": "NDT", + "confirmDelete": "Xác nhận xóa?", + "bedNo": "Số giường", + "print": "In", + "pleaseSelect": "Vui lòng chọn", + "reset": "Đặt lại", + "endTime": "Thời gian kết thúc", + "gender": "Giới tính", + "noData": "Không có dữ liệu", + "view": "Xem", + "success": "Thành công" + }, + "settleAccounts": { + "query": "Truy vấn", + "refund": "Hoàn phí", + "refundReason": "Lý do hoàn phí", + "feeType": "Loại phí", + "payment": "Số tiền nộp", + "change": "Tiền thừa", + "enterReason": "Nhập lý do", + "payAmount": "Số tiền trả", + "writeOffReason": "Lý do hủy", + "invoiceNoPlaceholder": "Số hóa đơn", + "patientNameCol": "Tên BN", + "refundSuccess": "Hoàn phí thành công", + "refundReasonMaxLength": "Tối đa 200 ký tự", + "invoiceNo": "Số hóa đơn:", + "reasonLengthLimit": "1-200 ký tự", + "cancel": "Hủy", + "chargeDetail": "Chi tiết thu phí", + "payStatus": "TT thanh toán", + "patientName": "Tên BN:", + "viewInvoice": "Xem hóa đơn", + "confirm": "Xác nhận", + "settleTime": "Thời gian TT:", + "payType": "Loại thanh toán", + "issueInvoice": "Phát hành HĐ", + "settleAmount": "Số tiền TT", + "patientNamePlaceholder": "Tên BN", + "cashier": "Thu ngân", + "writeOffSuccess": "Hủy thành công", + "medicalSettleId": "ID TT BHYT", + "payResult": "Kết quả TT", + "printCount": "Số lần in", + "amount": "Số tiền", + "chargeSerialNo": "Số CT thu phí", + "reset": "Đặt lại", + "writeOffInvoice": "Hủy hóa đơn", + "enterRefundReason": "Nhập lý do hoàn phí", + "settleTimeCol": "Thời gian TT", + "invoiceNoCol": "Số hóa đơn" + }, + "inpatientRecord": { + "presentIllness": "Bệnh sử hiện tại", + "department": "Khoa", + "medicalRecordWriteTime": "Thời gian viết bệnh án", + "specialtyCheck": "Khám chuyên khoa", + "writingTime": "Thời gian viết", + "auxiliaryCheck": "Xét nghiệm cận lâm sàng", + "age": "Tuổi", + "relationship": "Quan hệ", + "contactPerson": "Người liên hệ", + "domicileAddress": "Địa chỉ hộ khẩu", + "chiefComplaint": "Lý do khám", + "bedNo": "Số giường", + "preliminaryDiagnosis": "Chẩn đoán sơ bộ", + "doctorSignature": "Chữ ký bác sĩ", + "personalHistory": "Tiền sử cá nhân", + "maritalStatus": "Tình trạng hôn nhân", + "occupation": "Nghề nghiệp", + "familyHistory": "Tiền sử gia đình", + "idCard": "CMND/CCCD", + "homeAddress": "Địa chỉ nhà", + "maritalHistory": "Tiền sử hôn nhân", + "phone": "Điện thoại", + "inpatientNo": "Số nội trú", + "gender": "Giới tính", + "name": "Họ tên", + "admissionDate": "Ngày nhập viện", + "reliability": "Độ tin cậy", + "medicalHistoryNarrator": "Người kể bệnh sử", + "pastHistory": "Tiền sử bệnh", + "title": "Bệnh án nhập viện", + "nation": "Dân tộc", + "physicalExamination": "Khám thể lực", + "workUnit": "Nơi làm việc" + }, + "listFee": { + "quantity": "Số lượng", + "amount": "Số tiền", + "doctorName": "Bác sĩ", + "feeList": "Danh sách phí", + "enterTime": "Thời gian nhập", + "total": "Tổng cộng", + "itemType": "Loại", + "title": "Bệnh nhân nội trú", + "itemName": "Tên mục", + "specification": "Quy cách", + "searchPlaceholder": "Tìm bệnh nhân(tên/số nội trú)", + "unitPrice": "Đơn giá" + } + }, + "outpatientEnhanced": { + "title": "Trạm làm việc bác sĩ ngoại trú nâng cao", + "structuredTemplate": "Mẫu bệnh án cấu trúc", + "addTemplate": "Thêm mẫu", + "templateName": "Tên mẫu", + "type": "Loại", + "department": "Khoa", + "version": "Phiên bản", + "systemTemplate": "Mẫu hệ thống", + "icd10Code": "Mã ICD-10", + "searchPlaceholder": "Nhập mã/tên/pinyin", + "code": "Mã", + "diagnosisName": "Tên chẩn đoán", + "category": "Phân loại", + "isLeaf": "Cấp cuối", + "rationalDrugUse": "Kiểm tra sử dụng thuốc hợp lý", + "drugInteractionCheck": "Kiểm tra tương tác thuốc", + "drugA": "Thuốc A", + "drugB": "Thuốc B", + "check": "Kiểm tra", + "foundInteractionRules": "Tìm thấy {count} quy tắc tương tác", + "noInteraction": "Không phát hiện tương tác", + "interactionType": "Loại", + "severity": "Mức độ nghiêm trọng", + "description": "Mô tả", + "dischargeSummary": "Tóm tắt xuất viện", + "patient": "Bệnh nhân", + "admissionDiagnosis": "Chẩn đoán nhập viện", + "dischargeDiagnosis": "Chẩn đoán xuất viện", + "dischargeCondition": "Tình trạng xuất viện", + "attendingDoctor": "Bác sĩ điều trị", + "draft": "Bản nháp", + "completed": "Hoàn thành", + "archived": "Đã lưu trữ", + "prescriptionIntercept": "Chặn đơn thuốc", + "intercept": "Chặn", + "forcePass": "Ép thông qua", + "drug": "Thuốc", + "interceptType": "Loại chặn", + "message": "Thông báo", + "doctor": "Bác sĩ", + "action": "Xử lý", + "blocked": "Đã chặn" + }, + "outpatientFinance": { + "dayEndSetTitle": "Quản lý quyết toán cuối ngày", + "settleDate": "Ngày quyết toán", + "selectDate": "Chọn ngày", + "cashier": "Thu ngân", + "cashierName": "Tên thu ngân", + "seq": "STT", + "totalAmount": "Tổng tiền", + "cash": "Tiền mặt", + "card": "Quẹt thẻ", + "wechat": "WeChat", + "alipay": "Alipay", + "settled": "Đã quyết toán", + "unsettled": "Chưa quyết toán", + "dayEndDetail": "Chi tiết cuối ngày", + "dayEndReport": "bao-cao-cuoi-ngay.xlsx", + "exportSuccess": "Xuất thành công" } } \ 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 e4183345b..9f3a3a867 100644 --- a/healthlink-his-ui/src/i18n/locales/zhCN.json +++ b/healthlink-his-ui/src/i18n/locales/zhCN.json @@ -741,7 +741,6 @@ "confirmBatchDelete": "确认删除选中的数据项吗?", "noPermission": "暂无权限", "loading": "加载中...", - "noData": "暂无数据", "pleaseSelect": "请选择", "pleaseEnter": "请输入", "queryTime": "查询时间", @@ -769,7 +768,57 @@ "no": "否", "startTime": "开始日期", "endTime": "结束日期", - "gender": "性别" + "gender": "性别", + "keyword": "关键字", + "applicationNo": "申请单号", + "patientName": "患者姓名", + "applicationType": "申请类型", + "applicationTime": "申请时间", + "startDate": "开始日期", + "endDate": "结束日期", + "age": "年龄", + "outpatientNo": "门诊号", + "applicationItem": "申请项目", + "applicantDoctor": "申请医生", + "applicantDept": "申请科室", + "currentPatients": "现诊患者", + "enterPatientName": "请输入患者名", + "firstVisit": "初诊", + "patientInfo": "患者信息", + "registrationTime": "挂号时间", + "item": "项目", + "totalQty": "总量", + "totalAmount": "总金额", + "pharmacyDept": "药房/科室", + "issuer": "签发人", + "issueTime": "签发时间", + "male": "男", + "female": "女", + "yearsOld": "岁", + "visitDate": "就诊日期", + "basicInfo": "基础信息", + "visitNo": "就诊号", + "name": "姓名", + "noData": "暂无数据", + "group": "组", + "code": "编码", + "totalExecutions": "总执行次数", + "executedCount": "已执行次数", + "orderingDoctor": "开单医生", + "drugInfo": "药品信息", + "drugQty": "药品数量", + "drugStatus": "药品状态", + "skinTestFlag": "皮试标志", + "executionTime": "执行时间", + "executor": "执行人", + "executionDept": "执行科室", + "executionStatus": "执行状态", + "infusionOrder": "院注医嘱", + "infusionHistory": "院注执行历史", + "confirmExecution": "确认执行", + "printBottleLabel": "打印瓶签", + "viewOrders": "查看医嘱", + "revoke": "撤销" }, "component": { "rightToolbar": { @@ -1461,78 +1510,6 @@ "msgOrderAdjusted": "队列顺序已调整(已保存)", "msgOrderAdjustFailed": "队列顺序调整失败(未保存)" }, - "pharmacy": { - "patientInfo": "患者信息", - "placeholderNameOrId": "请输入姓名/证件号", - "dispenseStatus": "发药状态", - "placeholderSelectDispenseStatus": "请选择发药状态", - "visitDate": "就诊日期", - "startDate": "开始日期", - "endDate": "结束日期", - "name": "姓名", - "gender": "性别", - "age": "年龄", - "phone": "电话", - "visitDateCol": "就诊日期", - "preparer": "调配药师", - "placeholderPreparer": "调配药师", - "drugCategory": "药品分类", - "placeholderDrugCategory": "药品分类", - "westernChinese": "西药中成药", - "chinese": "中药", - "project": "项目", - "placeholderProject": "项目", - "all": "全部", - "drug": "药品", - "consumable": "耗材", - "batchDispense": "批量发药", - "scan": "扫码", - "prescriptionPrint": "处方打印", - "totalAmount": "总金额", - "prescriptionNo": "处方号", - "diagnosis": "诊断", - "prescriptionType": "处方类型", - "itemName": "项目名称", - "merchandiseName": "商品名称", - "dispenseQty": "发药数量", - "lotNumber": "批次号", - "dispenseStatusCol": "发药状态", - "days": "天数", - "spec": "规格", - "traceNo": "追溯码", - "placeholderTraceNo": "请输入追溯码", - "amount": "金额", - "dispensePharmacy": "发药药房", - "manufacturer": "生产厂家", - "orderingDoctor": "开单医生", - "frequency": "频次", - "usage": "用法", - "operation": "操作", - "dispense": "发药", - "void": "作废", - "selectVoidReason": "选择作废原因", - "placeholderSelectVoidReason": "请选择作废原因", - "confirm": "确定", - "cancel": "取消", - "printWarningNoTable": "表格组件未初始化,请刷新页面重试", - "printWarningNoSelect": "未选择要打印的项目,请重新选择,打印失败", - "printWarningNoData": "获取打印数据失败,请稍后重试", - "printFailed": "处方打印失败", - "msgDispenseSuccess": "发药成功", - "msgDispenseFailed": "发药失败", - "msgNoMatchTraceNo": "未在库存中匹配到追溯码,请在发药列表中单独扫描", - "msgOperationFailed": "操作失败", - "msgInsufficientStock": "当前批次库存不足", - "msgQtyExceedsTotal": "发药数量不能大于总数量", - "msgQtyBelowTotal": "发药数量不能小于总数量", - "msgSelectDispenseItem": "未选择要发药的项目,请重新选择,发药失败", - "msgSelectVoidReason": "请选择作废原因", - "msgNoDataSelected": "未选择数据", - "voiding": "作废中...", - "yuan": "元", - "remaining": "剩余", - "expDate": "有效期至" - }, "billing": { "patientList": "患者列表", "searchPlaceholder": "请输入患者名/病历号", @@ -7410,5 +7387,666 @@ "withdrawn": "已撤回", "pendingApply": "待审请" } + }, + "inHospital": { + "medicalRecord": { + "patient": "患者", + "deptName": "科室", + "discharged": "已出院", + "unitPrice": "单价", + "admissionDate": "入院日期", + "itemName": "项目名称", + "inpatientNo": "住院号", + "specification": "规格", + "gender": "性别", + "dischargeDate": "出院日期", + "quantity": "数量", + "feeOverview": "费用概览", + "patientName": "患者姓名", + "department": "科室", + "status": "状态", + "reset": "重置", + "inHospital": "在院", + "search": "搜索", + "age": "年龄", + "bedNo": "床号", + "amount": "金额", + "title": "病案管理", + "detail": "病案详情", + "itemType": "类型" + }, + "settleAccounts": { + "chargeDetail": "收费详情", + "refundReasonMaxLength": "退费原因长度不能超过200个字符", + "reset": "重置", + "enterRefundReason": "请输入退费原因", + "confirm": "确 定", + "patientNameCol": "患者姓名", + "enterReason": "请输入原因", + "printCount": "打印次数", + "feeType": "费用类型", + "cashier": "收款人", + "payResult": "支付结果", + "refund": "退费", + "payStatus": "支付状态", + "amount": "金额", + "payment": "交款", + "refundReason": "退费原因", + "payAmount": "支付金额", + "chargeSerialNo": "收费流水号", + "refundSuccess": "退费成功", + "settleTimeCol": "结算时间", + "cancel": "取 消", + "settleTime": "结算时间:", + "writeOffReason": "冲销原因", + "settleAmount": "结算金额", + "issueInvoice": "开具电子发票", + "invoiceNoCol": "发票号", + "patientNamePlaceholder": "患者姓名", + "viewInvoice": "调阅发票", + "query": "查询", + "patientName": "患者姓名:", + "invoiceNoPlaceholder": "发票号", + "writeOffInvoice": "冲销发票", + "writeOffSuccess": "红冲成功", + "payType": "支付类型", + "medicalSettleId": "医保结算Id", + "invoiceNo": "发票号:", + "reasonLengthLimit": "长度在1到200个字符之间", + "change": "找零" + }, + "common": { + "loading": "加载中", + "success": "操作成功", + "search": "搜索", + "prompt": "提示", + "reset": "重置", + "delete": "删除", + "endDate": "结束日期", + "bedNo": "床号", + "pleaseEnter": "请输入", + "start": "开始", + "gender": "性别", + "pleaseSelect": "请选择", + "confirmDelete": "确认删除?", + "void": "作废", + "seqNo": "序号", + "age": "年龄", + "modify": "修改", + "deptName": "科室", + "detail": "详情", + "startTime": "开始时间", + "status": "状态", + "cancel": "取消", + "noData": "暂无数据", + "complete": "完成", + "yuan": "元", + "endTime": "结束时间", + "edit": "编辑", + "view": "查看", + "query": "查询", + "address": "地址", + "save": "保存", + "patientName": "患者姓名", + "print": "打印", + "confirm": "确定", + "inpatientNo": "住院号", + "add": "新增", + "fail": "操作失败", + "startDate": "开始日期", + "operation": "操作", + "phone": "手机" + }, + "feeTypeConversion": { + "patientNo": "患者编号:", + "medicalCard": "医保卡", + "specialOutpatient": "特殊门诊", + "convertToSelf": "转自费", + "feeType": "费别", + "personType": "人员类别:", + "birthDate": "出生日期:", + "idType": "证件类型:", + "insuredPlace": "参保地", + "traumaFlag": "外伤标志", + "wardArea": "病区", + "balance": "账户余额:", + "diseaseName": "病种名称", + "medicalCategory": "医疗类别", + "medicalFace": "医保刷脸", + "socialSecurityCard": "社会保障卡", + "medicalRegistration": "医保登记", + "medicalECard": "医保电子凭证", + "repeatHospitalization": "重复住院", + "thirdPartyLiability": "第三方责任", + "patientNameLabel": "患者姓名", + "selectDate": "请选择日期", + "residentIdCard": "居民身份证", + "emergencyFlag": "急诊标志", + "enter": "请输入", + "feeUpload": "费用上传", + "inpatientNo": "住院号", + "registrationChange": "登记变更", + "companyName": "单位名称:", + "insuranceType": "险种类型:", + "admissionDiagnosis": "入院诊断", + "basicInfo": "基础信息", + "age": "年龄:", + "patientName": "患者姓名:", + "originalFeeType": "原费别:", + "insuredArea": "参保区域:", + "foreignFlag": "涉外标志", + "clinicalTrial": "临床试验", + "cityEmployeeMedical": "市职工医保", + "readCard": "读卡", + "admissionDate": "入院日期", + "specialPoorHousehold": "特困户", + "gender": "性别:" + }, + "settlement": { + "patientInfo": "患者信息", + "name": "姓名", + "returnAmount": "退还金额", + "cash": "现金", + "amount": "金额", + "uncheckedCost": "勾选未结费用:", + "supplementary": "补缴", + "rechargeTime": "充值时间", + "advanceTotal": "预缴金合计金额:", + "selectSettleFee": "选择结算费用", + "midwaySettlement": "中途结算", + "settleSuccess": "结算成功!", + "query": "查询", + "tip": "提示", + "advanceManagement": "预缴金管理", + "returnMethod": "返还方式", + "addDeduction": "添加减免", + "receivable": "应收", + "refund": "返费", + "inpatientSettlement": "住院结算", + "selfPay": "自付:", + "deduction": "减免:", + "project": "项目", + "noData": "暂无数据", + "inpatientNo": "住院号", + "remark": "备注", + "cancelMedicalDischarge": "是否取消患者的医保出院登记?", + "cancelSettle": "取消结算", + "checkedCost": "勾选已结费用:", + "reimbursement": "报销:", + "payMethodLabel": "缴费方式", + "confirm": "确认", + "invoiceNoLabel": "发票号", + "category": "类别", + "settleType": "结算类型", + "toDeposit": "转押金", + "wechat": "微信", + "total": "总额:", + "payMethod": "支付方式", + "masterIndex": "主索引", + "currentInvoiceNo": "当前发票号: ", + "settlementCancel": "结算取消", + "returnable": "应返", + "medicalAccount": "医保账户:", + "bankCard": "银行卡", + "settler": "结算人", + "availableAmount": "可用金额", + "skipNumber": "跳号", + "alipay": "支付宝", + "balance": "余额:", + "totalCost": "总费用:", + "totalFee": "费用总额:", + "advancePayment": "预缴金:", + "settle": "结算", + "advanceBalance": "预交余额:", + "used": "已使用", + "reimbursementMethod": "报销方式", + "settleCancelSuccess": "结算取消成功!", + "noPatientFound": "未查询到患者!", + "preSettle": "预结算" + }, + "surgeryManage": { + "confirm": "确定", + "confirmStart": "确认开始该手术?", + "inpatientNo": "住院号", + "remarkPlaceholder": "手术备注信息", + "surgeonName": "手术医生", + "complete": "完成", + "surgeryName": "手术名称", + "all": "全部", + "enterPatientName": "请输入患者姓名", + "cancel": "取消", + "addSurgery": "新增手术", + "enterSurgeonName": "请输入手术医生", + "start": "开始", + "pending": "待手术", + "confirmComplete": "确认完成该手术?", + "surgeryDetail": "手术详情", + "surgeryRemark": "手术备注", + "level3": "三级", + "patientName": "患者姓名", + "pendingSurgery": "待手术", + "search": "搜索", + "editSuccess": "修改成功", + "status": "状态", + "enterSurgeryName": "请输入手术名称", + "surgeryDone": "已完成", + "selectTime": "选择时间", + "deleteSuccess": "删除成功", + "title": "手术管理", + "anesthesiologist": "麻醉医生", + "delete": "删除", + "confirmDelete": "确认删除该手术记录?", + "level1": "一级", + "reset": "重置", + "inProgress": "手术中", + "surgeryDate": "手术日期", + "surgeryInProgress": "手术中", + "detail": "详情", + "edit": "编辑", + "surgeryStarted": "手术已开始", + "plannedTime": "计划时间", + "selectLevel": "选择等级", + "cancelled": "已取消", + "level4": "四级", + "patient": "患者", + "completed": "已完成", + "addSuccess": "新增成功", + "surgeryCompleted": "手术已完成", + "surgeryStatus": "手术状态", + "surgeryCancelled": "已取消", + "surgeryLevel": "手术等级", + "level2": "二级" + }, + "portal": { + "deleteDev": "删除功能开发中", + "disabled": "停用", + "name": "名称", + "addDev": "新增功能开发中", + "delete": "删除", + "status": "状态", + "editDev": "编辑功能开发中", + "code": "编码", + "title": "住院门户", + "search": "搜索", + "edit": "编辑", + "normal": "正常", + "add": "新增", + "seqNo": "序号", + "operation": "操作" + }, + "inpatientDiagnosis": { + "doctor": "诊断医生", + "addSuccess": "新增成功", + "dischargeDiagnosis": "出院诊断", + "delete": "删除", + "selectClassification": "选择分类", + "editSuccess": "修改成功", + "confirm": "确定", + "enterDiagnosisName": "请输入诊断名称", + "confirmDelete": "确认删除该诊断?", + "encounterId": "就诊ID", + "mainDiagnosis": "主诊断", + "cancel": "取消", + "title": "入院诊断", + "diagnosisDesc": "诊断描述", + "operationFail": "操作失败", + "addDiagnosis": "新增诊断", + "outpatientDiagnosis": "门诊诊断", + "selectDate": "选择日期", + "classification": "分类", + "admissionDiagnosis": "入院诊断", + "diagnosisDate": "诊断日期", + "secondary": "次要", + "edit": "编辑", + "query": "查询", + "postopDiagnosis": "术后诊断", + "preopDiagnosis": "术前诊断", + "deleteSuccess": "删除成功", + "enterEncounterId": "请输入就诊ID", + "diagnosisName": "诊断名称" + }, + "orderManage": { + "startTime": "开始时间", + "unknown": "未知", + "confirmResume": "确认恢复该医嘱?", + "confirmSignOff": "确认签退该医嘱?", + "signOff": "签退", + "currentAdvice": "当前医嘱", + "type": "类型", + "stopped": "医嘱已停止", + "resume": "恢复", + "status": "状态", + "frequency": "频次", + "adviceContent": "医嘱内容", + "route": "途径", + "searchPlaceholder": "搜索患者(姓名/住院号)", + "signedOff": "医嘱已签退", + "confirmStop": "确认停止该医嘱?", + "historyAdvice": "历史医嘱", + "adviceList": "医嘱列表", + "resumed": "医嘱已恢复", + "stop": "停止", + "dosage": "剂量", + "title": "住院患者", + "prescribingDoctor": "开嘱医生" + }, + "feeSettlement": { + "selfToMedical": "自费转医保", + "medicalCard": "医保卡", + "chargeItem": "收费项目", + "balanceAmount": "账户余额", + "patientList": "患者列表", + "preSettleFail": "预结算失败", + "settleStatus": "结算状态", + "selectChargeItem": "请选择一条收费项目", + "discountRate": "折扣率", + "medicalToSelf": "医保转自费", + "gender": "性别:", + "reading": "正在读取...", + "searchPlaceholder": "请输入患者名/住院号/床号", + "receivable": "应收金额", + "confirmCharge": "确认收费", + "medicalCode": "医保编码", + "docNo": "单据号", + "amount": "金额", + "age": "年龄:", + "chargeItems": "收费项目", + "idCard": "身份证", + "name": "姓名:", + "feeNature": "费用性质", + "chargeTime": "收费时间", + "operationSuccess": "操作成功", + "settleStatusCol": "结算状态", + "medicalType": "医疗类型", + "cashier": "收款人", + "received": "实收金额", + "discount": "优惠金额", + "totalAmount": "合计金额:", + "quantity": "数量", + "studentSelfToMedical": "学生自费转学生医保", + "studentMedicalToSelf": "学生医保转学生自费", + "basicInfo": "基本信息", + "prescriptionNo": "处方号", + "orderDept": "开立科室", + "print": "打印", + "eVoucher": "电子凭证" + }, + "register": { + "patientCode": "患者编码:", + "registered": "已登记", + "admissionWard": "入院病区", + "pendingRegistration": "待登记入院", + "contactRelation": "联系人关系", + "admissionDeptLabel": "入院科室", + "advanceNotFilled": "住院预交金额未填写,确认登记吗", + "medicalRegistrationConfirm": "是否需要进行医保登记?", + "paymentAdvance": "缴费预交金", + "admissionTypeLabel": "入院类型", + "registerBtn": "登记", + "currentAddress": "现住址:", + "wardRequired": "请选择入院病区", + "detailAddress": "详细地址", + "enterIdCard": "请输入身份证号码", + "idCardNo": "身份证号码", + "basicInfo": "基础信息", + "viewResult": "查看结果", + "hospitalInfo": "住院信息", + "idCard": "身份证号", + "admissionWardLabel": "入院病区", + "printCert": "打印住院证", + "admissionDateLabel": "入院日期", + "admissionType": "入院类型", + "addressSelect": "地址选择", + "jumpMedicalFail": "跳转到医保登记页面失败", + "confirmVoid": "确认作废该患者的住院登记信息吗?作废后不可撤销", + "idCardNumber": "证件号码", + "gender": "性别", + "bloodTypeABO": "血型ABO", + "phoneLabel": "手机:", + "companyName": "单位名称:", + "cardType": "卡类别", + "medicalCardNo": "就诊卡号", + "reset": "重置", + "nationality": "国籍:", + "countryCode": "国家编码", + "applicationSource": "申请来源", + "applyPatient": "申请患者", + "nationLabel": "民族:", + "contactInfo": "联系方式", + "query": "查询", + "deceasedTime": "死亡时间", + "voidedCannotPrint": "该记录已作废,无法打印入院证", + "view": "查看", + "admissionDept": "入院科室", + "admissionMethod": "入院方式", + "patientIdNotExist": "患者 ID 不存在", + "age": "年龄", + "registrationStatus": "登记状态", + "diagnosisDesc": "诊断描述", + "printCertFail": "打印入院证失败", + "medicalRegistrationTitle": "医保登记确认", + "voided": "已作废", + "deptRequired": "请选择入院科室", + "applicationTime": "申请时间", + "voidFail": "作废失败", + "feeNature": "费用性质", + "contactPerson": "联系人", + "selectDeptFirst": "请先选择入院科室", + "ageRequired": "请输入年龄", + "modify": "修改", + "contactRequired": "请输入联系方式", + "genderLabel": "性别:", + "occupation": "职业", + "void": "作废", + "enterPatientName": "请输入患者姓名", + "hospitalCount": "住院次数:", + "bedCount": "床位数:", + "invalidRowData": "无效的行数据", + "medicalInfo": "医保信息", + "encounterIdNotExist": "就诊 ID 不存在", + "bloodTypeRH": "血型RH", + "patientSource": "病人来源:", + "nation": "民族", + "loadSuccess": "加载成功", + "patientName": "患者姓名", + "patientNameRequired": "请输入患者姓名", + "voidConfirm": "作废确认", + "idNoLabel": "证件号:", + "yearSuffix": "岁", + "noFileRegistration": "无档登记", + "registrationTime": "登记时间", + "birthDateLabel": "出生日期:", + "hospitalNo": "住院号:", + "scanPay": "扫码支付", + "voidSuccess": "作废成功", + "contactPhone": "联系人电话", + "saveBtn": "保存", + "patientInpatientNo": "患者住院号", + "registrar": "登记员", + "feeNatureLabel": "费用性质", + "completedRegistration": "已登记入院", + "occupationLabel": "职业:", + "ageLabel": "年龄:", + "workUnit": "工作单位", + "maritalStatus": "婚姻状态", + "admitted": "已入科", + "nativePlace": "籍贯:", + "diagnosisRequired": "请选择入院诊断", + "selectPatient": "请先从列表中选中一位患者", + "noPatientInfo": "未获取到患者信息", + "registerBtnLabel": "登记", + "admissionDiagnosis": "入院诊断", + "inHospitalPatient": "在院患者", + "outpatientDoctor": "门诊医生", + "noHospitalInfo": "未获取到住院信息", + "patientCondition": "患者病情", + "idTypeLabel": "证件类型:", + "pending": "待登记", + "diagnosisCategory": "诊断类别", + "registerFail": "登记失败", + "marriage": "婚姻:" + }, + "advanceDeposit": { + "confirm": "确 定", + "confirmRefund": "确认退费", + "rmbPrefix": "人民币:", + "select": "选择", + "patientNo": "患者编号", + "feeType": "费用类型:", + "actualCollect": "实收合计:", + "actualRefund": "实退合计:", + "chargeFail": "收费失败", + "cancel": "取 消", + "bedNo": "床号:", + "collectTime": "收款时间", + "unionPay": "银联", + "wechat": "微信", + "selfPay": "自费", + "inHospitalPatient": "在院患者", + "printSuccess": "打印成功", + "cashier": "收款员", + "payAmount": "支付金额:", + "confirmCharge": "确认收费", + "payMethod": "支付方式", + "hospitalNoPlaceholder": "请输入住院号", + "networkError": "网络错误,请重试", + "selectPayMethod": "请选择支付方式", + "refund": "退费", + "enterPayAmount": "请输入支付金额", + "advanceTotal": "预交金总额:", + "advancePayment": "住院预缴款", + "deptWard": "在院科室/病区:", + "serialNo": "流水号/住院号/患者姓名", + "query": "查询", + "receiptNo": "收据号", + "print": "打印", + "billType": "票据类型", + "wardArea": "在院病区", + "balance": "余额:", + "printFail": "打印失败", + "enterHospitalNo": "请先输入住院号!", + "payAmountMustPositive": "支付金额必须大于0", + "reprintTag": "补打第", + "cash": "现金", + "payMethodLabel": "支付方式:", + "chargeSuccess": "收费成功", + "patientList": "患者列表", + "alipay": "支付宝", + "amount": "金额", + "selectPatient": "请先选择病人!", + "hospitalNo": "住院号:", + "collectAdvance": "收预交金" + }, + "listFee": { + "amount": "金额", + "enterTime": "录入时间", + "quantity": "数量", + "title": "住院患者", + "feeList": "费用清单", + "itemName": "项目名称", + "searchPlaceholder": "搜索患者(姓名/住院号)", + "doctorName": "开单医生", + "unitPrice": "单价", + "specification": "规格", + "total": "合计", + "itemType": "类型" + }, + "inpatientRecord": { + "chiefComplaint": "主诉", + "occupation": "职业", + "auxiliaryCheck": "辅助检查", + "reliability": "可靠程度", + "medicalHistoryNarrator": "病史陈述者", + "presentIllness": "现病史", + "pastHistory": "既往史", + "idCard": "身份证号", + "homeAddress": "家庭地址", + "familyHistory": "家族史", + "specialtyCheck": "专科检查", + "workUnit": "工作单位", + "age": "年龄", + "gender": "性别", + "title": "入院记录", + "maritalStatus": "婚姻", + "inpatientNo": "住院号", + "department": "科室", + "domicileAddress": "户口地址", + "nation": "民族", + "doctorSignature": "医师签名", + "personalHistory": "个人史", + "preliminaryDiagnosis": "初步诊断", + "writingTime": "书写时间", + "name": "姓名", + "bedNo": "床号", + "contactPerson": "联系人", + "physicalExamination": "体格检查", + "medicalRecordWriteTime": "病历书写时间", + "maritalHistory": "婚育史", + "admissionDate": "入院日期", + "phone": "电话", + "relationship": "关系" + } + }, + "outpatientEnhanced": { + "title": "门诊医生工作站增强", + "structuredTemplate": "结构化病历模板", + "addTemplate": "新增模板", + "templateName": "模板名称", + "type": "类型", + "department": "科室", + "version": "版本", + "systemTemplate": "系统模板", + "icd10Code": "ICD-10编码", + "searchPlaceholder": "输入编码/名称/拼音", + "code": "编码", + "diagnosisName": "诊断名称", + "category": "分类", + "isLeaf": "末级", + "rationalDrugUse": "合理用药审核", + "drugInteractionCheck": "用药相互作用检查", + "drugA": "药品A", + "drugB": "药品B", + "check": "检查", + "foundInteractionRules": "发现 {count} 条相互作用规则", + "noInteraction": "未发现相互作用", + "interactionType": "类型", + "severity": "严重程度", + "description": "描述", + "dischargeSummary": "出院小结", + "patient": "患者", + "admissionDiagnosis": "入院诊断", + "dischargeDiagnosis": "出院诊断", + "dischargeCondition": "出院情况", + "attendingDoctor": "主管医生", + "draft": "草稿", + "completed": "已完成", + "archived": "已归档", + "prescriptionIntercept": "处方拦截", + "intercept": "拦截", + "forcePass": "强制通过", + "drug": "药品", + "interceptType": "拦截类型", + "message": "信息", + "doctor": "医生", + "action": "处理", + "blocked": "已拦截" + }, + "outpatientFinance": { + "dayEndSetTitle": "日结结算单管理", + "settleDate": "结算日期", + "selectDate": "选择日期", + "cashier": "收费员", + "cashierName": "收费员姓名", + "seq": "序号", + "totalAmount": "总金额", + "cash": "现金", + "card": "刷卡", + "wechat": "微信", + "alipay": "支付宝", + "settled": "已结", + "unsettled": "未结", + "dayEndDetail": "日结详情", + "dayEndReport": "日结报表.xlsx", + "exportSuccess": "导出成功" } } \ No newline at end of file diff --git a/healthlink-his-ui/src/views/anesthesia/record/index.vue b/healthlink-his-ui/src/views/anesthesia/record/index.vue index 77e38e53a..15a4162e6 100644 --- a/healthlink-his-ui/src/views/anesthesia/record/index.vue +++ b/healthlink-his-ui/src/views/anesthesia/record/index.vue @@ -141,7 +141,7 @@ {{ recordDetail.airwayAssessment }} - {{ recordDetail.fastingConfirmed ? '是' : '否' }} + {{ recordDetail.fastingConfirmed ? $t('common.yes') : $t('common.no') }} {{ recordDetail.consentSigned ? '已签署' : '未签署' }} @@ -294,10 +294,12 @@ diff --git a/healthlink-his-ui/src/views/features/index.vue b/healthlink-his-ui/src/views/features/index.vue index f20eb011e..838838e3f 100755 --- a/healthlink-his-ui/src/views/features/index.vue +++ b/healthlink-his-ui/src/views/features/index.vue @@ -25,7 +25,7 @@
- {{ feature.menuName }} + {{ translateMenuName(feature.menuName) }}
- 医保登记 + {{ $t('inHospital.feeTypeConversion.medicalRegistration') }}
@@ -14,37 +14,35 @@ - - @@ -61,110 +59,109 @@ - - + - + - 是 + {{ $t('common.yes') }} - 否 + {{ $t('common.no') }} - + - 是 + {{ $t('common.yes') }} - 否 + {{ $t('common.no') }} - + - 是 + {{ $t('common.yes') }} - 否 + {{ $t('common.no') }} - + - + - 是 + {{ $t('common.yes') }} - 否 + {{ $t('common.no') }} @@ -180,7 +177,7 @@ fixed style="width: 100px" > - 登记变更 + {{ $t('inHospital.feeTypeConversion.registrationChange') }} @@ -190,9 +187,13 @@ diff --git a/healthlink-his-ui/src/views/inHospitalManagement/surgeryManage/index.vue b/healthlink-his-ui/src/views/inHospitalManagement/surgeryManage/index.vue index 40611947b..821735f6f 100755 --- a/healthlink-his-ui/src/views/inHospitalManagement/surgeryManage/index.vue +++ b/healthlink-his-ui/src/views/inHospitalManagement/surgeryManage/index.vue @@ -3,13 +3,13 @@ @@ -19,46 +19,46 @@ :model="queryParams" label-width="80px" > - + - + - + @@ -69,13 +69,13 @@ icon="Search" @click="handleQuery" > - 搜索 + {{ $t('inHospital.surgeryManage.search') }} - 重置 + {{ $t('inHospital.surgeryManage.reset') }} @@ -89,43 +89,43 @@ > @@ -139,7 +139,7 @@ @@ -150,7 +150,7 @@ icon="View" @click="handleDetail(row)" > - 详情 + {{ $t('inHospital.surgeryManage.detail') }} - 编辑 + {{ $t('inHospital.surgeryManage.edit') }} - 开始 + {{ $t('inHospital.surgeryManage.start') }} - 完成 + {{ $t('inHospital.surgeryManage.complete') }} - 删除 + {{ $t('inHospital.surgeryManage.delete') }} @@ -200,7 +200,6 @@ /> - @@ -240,12 +239,12 @@ @@ -253,23 +252,23 @@ @@ -277,40 +276,40 @@ - + @@ -319,12 +318,12 @@ - + @@ -332,21 +331,20 @@ - - + {{ detailData.patientName }} - + {{ detailData.encounterNo }} {{ detailData.surgeryName }} - + {{ detailData.surgeonName }} - + {{ detailData.anesthesiologistName }} {{ detailData.plannedTime }} - + {{ detailData.surgeryLevel }} - + {{ detailData.remark || '-' }} @@ -402,9 +400,11 @@