export default { app: { name: 'Hotel OMS', theme: '主题', language: '语言', navigationAria: '预订订单导航', healthUp: '后端已连接', healthDown: '后端未连接', healthChecking: '检查中', }, auth: { loginTitle: '登录系统', loginSubtitle: '使用系统账号进入 TH Hotel 预订处理工作台。', username: '用户名', password: '密码', loginSubmit: '登录', loggingIn: '登录中', loginFailed: '用户名或密码错误。', logout: '退出登录', currentUser: '当前用户', currentHotel: '当前酒店', unauthorizedTitle: '没有访问权限', unauthorizedMessage: '当前账号没有访问这个页面或操作的权限,请联系管理员调整角色权限。', backHome: '返回可访问页面', }, nav: { orders: '订单列表', taskQueue: '任务队列', manualInvoice: '手工开票', sourceMessages: '消息来源', systemStatus: '系统状态', orderDetail: '订单详情', taskDetail: '任务详情', sourceMessageConversation: '邮件会话', debugEml: 'Debug EML', systemSettings: '系统设置', systemUsers: '用户管理', systemRoles: '角色权限', systemMenus: '菜单管理', systemHotels: '酒店管理', systemAudits: '管理审计', }, common: { loading: '加载中', noData: '暂无数据', endpointPending: '接口待接入', endpointMissing: '接口待补', all: '全部', unknownStatus: '未知状态', unknownTaskType: '未知任务类型', unknownTaskSubtype: '未知任务细分', unknownReadonlyReason: '暂不可处理', unknownActorType: '未知操作者', unknownAuditAction: '未知操作', unknownOperation: '未知操作', previousPage: '上一页', nextPage: '下一页', pageStatus: '第 {current} / {total} 页', pageSize: '每页', refresh: '刷新', saving: '保存中', cancel: '取消', }, notFound: { title: '页面不可用', message: '当前菜单或链接对应的前端页面尚未接入。', backHome: '返回可访问页面', }, systemAdmin: { title: '系统设置', subtitle: '维护用户、角色权限、菜单和酒店资料', navigationAria: '系统设置导航', common: { keyword: '关键词', viewDetail: '查看详情', selectRow: '选择一行查看详情', create: '新增', save: '保存', edit: '编辑', yes: '是', no: '否', }, status: { ACTIVE: '启用', DISABLED: '禁用', }, users: { title: '用户筛选', tableTitle: '用户数据', detailTitle: '用户详情', createTitle: '新增用户', totalSuffix: '个用户', keywordPlaceholder: '用户名 / 展示名 / 邮箱', userStatus: '用户状态', username: '用户名', initialPassword: '初始密码', displayName: '展示名称', email: '邮箱', phone: '手机号', roles: '角色', hotels: '授权酒店', defaultHotel: '默认酒店', saveRoles: '保存角色', saveHotels: '保存酒店授权', resetPassword: '重置密码', temporaryPassword: '临时密码:', created: '用户已创建', columns: { user: '用户', status: '状态', roles: '角色', defaultHotel: '默认酒店', }, }, roles: { title: '角色筛选', tableTitle: '角色数据', detailTitle: '角色详情', createTitle: '新增自定义角色', totalSuffix: '个角色', keywordPlaceholder: '角色代码 / 角色名称', roleStatus: '角色状态', roleCode: '角色代码', roleName: '角色名称', builtinReadonly: '内置角色由系统启动矩阵维护,不能在页面修改。', savePermissions: '保存权限', columns: { role: '角色', status: '状态', builtin: '内置', permissions: '权限', users: '用户数', }, }, menus: { title: '菜单筛选', managementTitle: '菜单管理', managementHint: '维护侧边栏菜单的父子层级、排序、可见性和权限入口。', createTitle: '新增菜单', editTitle: '编辑菜单', tableTitle: '菜单数据', totalSuffix: '个菜单', keywordPlaceholder: '菜单代码 / 名称 / 路由', menuStatus: '菜单状态', visibleOnly: '只看可见菜单', treeWarningTitle: '菜单树存在异常配置', treeWarningHint: '后端已返回菜单树,但以下配置需要管理员确认。', treeTitle: '菜单树', treeDirty: '树结构有未保存调整', treeDirtyActionBlocked: '请先保存树结构后再继续操作。', treeWarningSaveBlocked: '请先处理菜单树异常,确认父级关系正确后再保存树结构。', saveTreeOrder: '保存树结构', menuCode: '菜单代码', menuName: '菜单名称', parentMenu: '上级菜单', rootMenu: '根菜单', componentKey: '组件标识', iconKey: '图标标识', unknownRoute: '未知路由', unknownRouteHint: '当前路由未被前端识别,菜单可能会进入未接入页面。', permissionLoadFailed: '权限列表加载失败,权限选择和菜单配置保存暂不可用。', moveUp: '上移', moveDown: '下移', columns: { menu: '菜单', route: '路由', permission: '权限码', visible: '可见', status: '状态', sort: '排序', knownRoute: '已知路由', }, }, hotels: { title: '酒店筛选', createTitle: '新增酒店', editTitle: '编辑酒店', tableTitle: '酒店数据', totalSuffix: '家酒店', keywordPlaceholder: '酒店 ID / 酒店名称', hotelStatus: '酒店状态', hotelId: '酒店 ID', hotelName: '酒店名称', saveStatus: '保存状态', singleActiveRule: '单酒店阶段只允许一家 ACTIVE 酒店;新增酒店默认禁用。', columns: { hotel: '酒店', status: '状态', timeZone: '时区', authorizedUsers: '授权用户', sort: '排序', }, }, audits: { title: '审计筛选', tableTitle: '管理审计数据', totalSuffix: '条审计记录', targetType: '对象类型', targetId: '对象 ID', action: '操作类型', columns: { action: '操作', target: '对象', actor: '操作者', occurredAt: '发生时间', }, }, }, workbench: { title: '订单工作台', subtitle: '查看、筛选和处理预订订单任务', filters: '筛选条件', dateRange: '日期范围', businessKey: '业务号 / 临时单号', orderStatus: '订单状态', taskStatus: '任务状态', taskCardType: '任务卡类型', reset: '重置', tableTitle: '订单 / 任务列表', columns: { businessKey: '业务号', orderStatus: '订单状态', currentTask: '当前任务', taskStatus: '任务状态', updatedAt: '最近更新', operation: '操作', }, view: '查看', totalPrefix: '共', totalSuffix: '条任务线索', }, orderList: { title: '订单列表', subtitle: '按订单查看预订处理入口', keyword: '团队号 / 确认号', keywordPlaceholder: '团队号 / 确认号', groupCode: '团队号', groupCodePlaceholder: '输入团队号', confirmationNumber: '确认号', confirmationNumberPlaceholder: '输入确认号', tableTitle: '订单数据', totalSuffix: '条订单', viewDetail: '查看详情', continueTask: '继续处理', noOpenTask: '无待处理任务', endpointPending: '订单列表接口待后端接入,当前不展示假数据。', columns: { order: '订单', status: '状态', openTasks: '未关闭任务', createdAt: '创建时间', }, }, manualInvoice: { title: '手工开票', createTitle: '创建 Invoice', subtitle: '无订单、无任务时,手工填写 Proforma Invoice 字段并生成 PDF。', sourceBadge: '手工生成', independentHint: '本页第一版不关联订单或任务,生成记录和审计由后端统一落库。', documentSection: '单据信息', recipientSection: '收件方', bookingSection: '预订信息', chargesSection: '费用明细', previewSection: '金额预览', resultSection: '生成结果', invoiceDate: '开票日期(Invoice Date)', bookingDate: '预订日期(Booking Date)', dueDate: '付款截止日期(Due Date)', companySeed: '选择公司(Company)', contactSeed: '选择收件人(Attention)', selectCompany: '请选择公司', selectContact: '请选择收件人', company: '公司(Company)', attention: '收件人(Attention)', address: '地址(Address)', companyInputPlaceholder: '输入公司名称', attentionInputPlaceholder: '输入收件人', addressInputPlaceholder: '输入客户完整账单地址', telephone: 'Tel', email: 'Email', groupName: '团队名称(Group Name)', arrivalDate: '到店日期(Arrival Date)', departureDate: '离店日期(Departure Date)', roomRateNote: '房价备注(Room Rate Note)', roomRateNotePlaceholder: '例如 including BF', extraBedRate: '加床价格(Extra Bed Rate)', description: '费用描述(Description)', roomType: '房型(Room Type)', quantity: '数量(Quantity)', rate: '单价(Rate)', nights: '晚数(Nights)', amount: 'Amount', subtotal: 'Sub-Total', vat: 'VAT 7%', total: 'Total', addCharge: '新增一行', removeCharge: '删除', chargeLineLabel: '第 {index} 行', removeChargeLineAria: '删除第 {index} 行', maxChargesReached: '第一版最多支持 10 条费用明细。', previewDisclaimer: '前端仅做金额预览,最终金额以后端返回 totals 为准。', manualOverrideHint: '选择 Company / Attention 后会自动带出资料,带出的文本仍可手工覆盖。', generate: '确认并生成 PDF', generating: '生成中', openPdf: '打开 PDF', downloadPdf: '下载 PDF', downloadingPdf: '下载中', downloadFallback: '浏览器未能直接下载,已尝试打开 PDF 页面。', technicalDetails: '技术详情', generationId: '生成记录 ID', generationStatus: '生成状态', pdfUrl: 'PDF 链接', hotelId: '酒店 ID', templateCode: '模板', createdAt: '创建时间', noPdfUrl: '后端未返回 PDF 链接。', backendTotals: '后端返回金额', validationTitle: '请先修正表单', fieldErrors: { required: '必填', invalidEmail: 'Email 格式不正确', dateOrder: '日期顺序不正确', positiveNumber: '必须大于 0', nonNegativeNumber: '不能小于 0', }, statuses: { SUCCEEDED: '已生成', GENERATED: '已生成', FAILED: '生成失败', PROCESSING: '生成中', }, errors: { FRONTEND_VALIDATION: '表单校验未通过,请检查必填字段和费用明细。', RESERVATION_INVOICE_VALIDATION_FAILED: 'Invoice 字段校验失败,请检查表单内容。', RESERVATION_INVOICE_CONTEXT_MISMATCH: '订单或任务上下文不匹配。', DOCUMENT_CONVERSION_FAILED: 'PDF 生成失败,请稍后重试或联系管理员。', DOCUMENT_CONVERSION_TIMEOUT: 'PDF 生成超时,请稍后重试。', AUTH_401: '登录已失效,请重新登录后再生成。', AUTH_403: '当前账号没有手工开票权限。', UNKNOWN: '生成失败,请稍后重试。', requiredFields: '请补充日期、收件方、预订信息和至少一条有效费用明细。', invalidEmail: 'Email 格式不正确。', dueDateBeforeBookingDate: 'Due Date 不能早于 Booking 日期。', departureBeforeArrival: 'Departure Date 必须晚于 Arrival Date。', extraBedNegative: '加床价格不能小于 0。', chargePositive: '费用明细的 Quantity、Rate、Nights 必须大于 0。', }, }, order: { summary: '订单摘要', taskQueue: '同订单任务队列', sourceMessage: '来源消息', businessKeySource: '业务号来源', updatedAt: '最近更新', guestName: '客人', arrivalDate: '入住日期', roomType: '房型', amount: '金额', openTask: '处理任务', groupCode: '团队号(Group Code)', confirmationNumber: '确认号(Confirmation No.)', temporaryOrderNo: '临时单号', blockCode: '团队预留号(Block Code)', createdAt: '创建时间', conversationMessageCount: '会话邮件数', sourceSummaryPending: '订单详情任务时间线的来源邮件摘要字段待后端补充;请从具体任务进入后查看。', }, taskList: { title: '任务列表', subtitle: '按任务查看预订待处理队列', keyword: '订单 / 邮件关键词', keywordPlaceholder: '订单号 / 邮件关键词', taskType: '任务类型', taskSubtype: '任务细分', tableTitle: '任务数据', totalSuffix: '条任务', noSourceSubject: '暂无来源主题', sourceReceivedAt: '来源时间', canProcess: '可处理', cannotProcess: '不可处理', queueParticipation: '是否参与队列', queueAll: '全部队列状态', queueIncluded: '参与队列', queueExcluded: '不参与队列', viewTask: '查看任务', viewOrder: '查看订单', viewConversation: '查看邮件会话', sourceOnlyOrderLabel: '来源消息只读', hiddenTechnicalOrder: '不关联可见订单', columns: { task: '任务', order: '订单', card: '任务卡', status: '状态', source: '来源邮件', queue: '队列', }, }, task: { title: '任务卡', fieldContract: '字段契约', evidence: '证据区', saveDraft: '保存草稿', confirm: '确认任务', blocked: '阻塞中', readOnly: '只读', operaOperations: 'OPERA 模拟操作', audits: '审计时间线', noOperations: '确认任务后生成 OPERA 模拟操作。', noAudits: '暂无审计记录。', execute: '执行', retry: '重试', simulateFailure: '模拟失败', fieldNotes: '字段备注', emptyValue: '未填写', attachments: '附件', fieldAreaFallback: '基础信息', savedLocally: '草稿已保存', confirmedLocally: '任务已确认', validationFailed: '请先修正字段', validation: { required: '{field}为必填项', enum: '{field}必须来自可选项', date: '{field}日期格式必须为 YYYY-MM-DD', number: '{field}必须是数字', }, viewOrder: '查看订单', viewConversation: '查看邮件会话', parentGroup: 'Parent Group', sourceMessageId: '来源消息编号(ID)', sourceSubject: '来源主题', sourceSender: '发件人', sourceReceivedAt: '接收时间', sourceSummaryPending: '来源邮件摘要字段待后端补充', sourceEmailPreview: '来源邮件预览', sourceEmailExcerpt: '邮件片段', sourceEmailAttachments: '相关附件', sourceEmailNoExcerpt: '暂无邮件片段', sourceEmailNoAttachments: '无附件', sourceEmailFullConversation: '查看完整邮件会话', sourceOnlyResult: '来源消息入口结果', sourceOnlyReadonly: '该任务仅用于展示来源消息入口结果,不进入订单处理、字段编辑或 OPERA 操作。', sourceOnlyNoOpera: '该类任务不涉及 OPERA 操作。', routeInfo: '路由与处理信息', resultType: '识别结果类型', aiTaskType: 'AI 任务类型', systemTaskType: '系统任务类型', taskCardType: '任务卡类型', taskSubtype: '任务细分', routeCode: '路由代码', systemProcessCategory: '系统处理分类', reviewStatus: '复核状态', entryResultCode: '入口结果码', entryResultMeaning: '结果含义', entryResultDescription: '结果说明', entryResultSourceMessageId: '结果来源消息编号', rawAnswer: 'SuperAgent 原始回答', agentAssessment: 'AI 原始字段', sourceNotification: '来源消息通知', manualReviewData: '人工复核信息', manualReviewEvidence: '人工复核证据', manualReviewEvidenceFallback: '请根据来源邮件和候选信息确认 Parent Group 身份。', manualReviewMissingFields: '缺失字段', manualReviewBlockingPoints: '阻塞点', manualReviewConflictingPoints: '冲突点', manualReviewSuggestedActions: '建议动作', manualReviewEvidenceToCheck: '建议核对证据', parentIdentityCandidates: 'Parent Group 候选', parentIdentityCandidate: '候选项', noParentIdentityCandidates: '暂无 Parent Group 候选;需要后端透出 context_used.parent_identity_candidates。', adapterContractErrors: '适配契约异常', unhandledIntents: '未处理意图', noSourceOnlyResult: '暂无来源消息入口结果。', manualResolution: { title: '人工复核解阻', description: '在原任务卡上补齐缺失字段,提交后由后端校验并解除阻塞。', pendingStatus: '待复核', resolvedTitle: '复核已完成', reasonCode: '复核原因代码', reviewInstruction: '复核说明', confirmedOrderId: '确认订单编号', fieldValuePlaceholder: '填写确认后的值', noSupportedMissingFields: '当前缺失字段暂不支持前端解阻,请联系后端确认字段映射。', unopenedFieldsTitle: '未开放编辑字段', fieldBackendUnopened: '当前字段后端未开放编辑', fieldRequired: '请填写缺失字段和确认订单编号', reason: '处理说明', reasonPlaceholder: '可选,说明人工判断依据', submit: '提交复核结果', succeeded: '人工复核已解阻,任务状态已刷新。', }, manualConversion: { title: '人工转换', description: '将人工复核任务转换为可处理的预订任务。', targetTaskType: '目标任务类型', targetOrder: '目标订单', targetOrderHelp: '修改或取消预订必须选择一个未删除订单。', targetOrderKeyword: '目标订单搜索', targetOrderKeywordPlaceholder: '团队号、确认号或订单关键词', searchTargetOrders: '搜索订单', noTargetOrderCandidates: '请输入关键词并搜索目标订单', orderDeletedDisabled: '已删除订单不可选', newBookingHint: '转为新预订时不强制选择目标订单,后端会按当前任务重新归属。', reason: '转换原因', reasonPlaceholder: '可选,说明人工判断依据', submit: '转换任务', targetOrderRequired: '请选择目标订单', succeeded: '人工转换已完成:{taskType},目标订单 {orderId}', orderId: '订单编号', }, }, conversation: { title: '邮件会话详情', subtitle: '查看来源邮件所在会话下的全部历史邮件和回复', endpointPending: '邮件会话详情接口待后端接入,当前不展示假数据。', subject: '会话主题', messageCount: '邮件数', channel: '渠道', firstReceivedAt: '首次接收', lastReceivedAt: '最近接收', emptyBody: '邮件正文为空', attachments: '附件 / 内嵌图片', unnamedAttachment: '未命名附件', relatedOrders: '关联订单', relatedTasks: '关联任务', }, debugEml: { title: 'Debug EML 调试上传', subtitle: '上传单封 .eml 邮件并查看 SourceMessage 与 SuperAgent 调试结果', uploadConfig: '上传配置', hotelId: '酒店 ID', debugUploadKey: 'Debug 上传口令', runLabel: '运行标签', emlFile: '.eml 文件', submit: '提交调试', submitting: '等待 SuperAgent 返回', executionStatus: '执行状态', status: '状态', debugRunId: 'Debug 运行 ID', backendStatus: '后端状态', backendMessage: '后端消息', waitingSuperAgent: '正在解析邮件并等待 SuperAgent 返回', systemStages: '本系统处理阶段', superAgentTrace: 'SuperAgent Trace', traceToolName: '工具', traceInputSummary: '入参摘要', traceOutputSummary: '出参摘要', traceStatus: '状态', traceTime: '时间', sourceTrace: 'SourceMessage 追溯', sourceMessageId: 'SourceMessage ID', sourceProvider: '来源 Provider', externalMessageId: '外部消息 ID', externalConversationId: '外部会话 ID', mailPreview: '邮件内容预览', noSafeHtml: '当前没有可安全渲染的 HTML 正文', uploadedMedia: '上传媒体', unnamedMedia: '未命名媒体', rawHtml: '原始处理 HTML', superAgentResult: 'SuperAgent 结果', superAgentSessionId: 'SuperAgent Session ID', superAgentRunId: 'SuperAgent Run ID', parsedJson: '解析 JSON', rawAnswer: '原始回答', warnings: '警告', debugPayload: '调试 Payload', statuses: { idle: '待上传', uploading: '执行中', succeeded: '成功', failed: '失败', }, errors: { REQUEST_FIELD_REQUIRED: '缺少必填字段,请检查酒店 ID、文件或请求参数', EML_FILE_REQUIRED: '请选择 .eml 邮件文件', EML_FILE_TOO_LARGE: '邮件文件超过后端限制', INVALID_FILE_TYPE: '只支持 .eml 邮件文件', DEBUG_UPLOAD_KEY_INVALID: '调试上传口令缺失或错误', EML_PARSE_FAILED: '邮件文件无法解析', OSS_UPLOAD_FAILED: 'OSS 上传失败,请联系后端排查', SUPERAGENT_OPEN_API_FAILED: 'SuperAgent 调用失败,SourceMessage 可能已经写入', DEBUG_EML_RUN_FAILED: 'Debug EML 链路内部失败', UNKNOWN: 'Debug EML 调试失败', }, }, status: { TEMPORARY: '临时', ACTIVE: '有效', ENDED: '已结束', LOGIC_DELETED: '已删除', PENDING_CONFIRM: '待确认', READY: '待执行', EXECUTING: '执行中', FAILED: '失败', COMPLETED: '已完成', PENDING: '待执行', SUCCEEDED: '成功', BLOCKED: '阻塞', SKIPPED: '跳过', }, cardType: { NEW_BOOKING: '新预订', UPDATE_BOOKING: '修改预订', CANCEL_BOOKING: '取消预订', CANCEL_ALLOTMENT: '取消 Parent Group 配额', VOUCHER: '凭证', ROOMING_LIST: '房表', AMEND_GROUP_CODE: '修改团队号', TRACE_NOTE: '追踪备注(Trace)', TA_RECORD: '旅行社记录', MESSAGE_NOTIFICATION: '消息通知', INFORMATIONAL_MESSAGE: '消息通知(历史 Message Notification)', SOURCE_MESSAGE_REVIEW_NOTIFICATION: '来源消息通知', SOURCE_MESSAGE_ONLY: '来源消息只读', MANUAL_REVIEW: '人工复核', FALLBACK_REVIEW: '人工复核', }, taskSubtype: { NEW_BOOKING: '新预订', UPDATE_BOOKING: '修改预订', CANCEL_BOOKING: '取消预订', RATE_CHANGE: '价格调整', UPDATE_STAY_DATES: '修改入住日期', UPDATE_ROOM_TYPE: '修改房型', UPDATE_FIX_CHARGE: '修改固定收费', CANCEL_ALLOTMENT_CONTROL_BLOCK: '取消 Parent Group 整块配额', NEW_GROUP_BLOCK: '新团队预留', NEW_FIT_RESERVATION: '新散客预订', MANUAL_REVIEW: '人工复核', S10: '纯信息类邮件(S10)', S99: '无法形成业务素材包(S99)', S000: '纯信息类邮件', S999: '无法形成业务素材包', }, resultType: { NORMAL_TASK: '普通任务', MANUAL_REVIEW: '人工复核', SOURCE_MESSAGE_REVIEW_NOTIFICATION: '来源消息通知', ADAPTER_CONTRACT_ERROR: '适配契约异常', UNHANDLED_CURRENT_INTENT: '未处理意图', }, systemProcessCategory: { BUSINESS_TASK: '业务任务', SOURCE_MESSAGE_NOTIFICATION: '来源消息通知', ADAPTER_CONTRACT_ERROR: '适配契约异常', UNHANDLED_CURRENT_INTENT: '未处理意图', }, readonlyReason: { PROCESSABLE: '可处理', PREVIOUS_TASK_NOT_FINISHED: '前序任务未完成', TASK_FINISHED: '任务已结束', TASK_READ_ONLY: '任务只读', ORDER_CLOSED: '订单已关闭', QUEUE_EXCLUDED: '未参与队列', BLOCKED: '阻塞中', MANUAL_REVIEW_REQUIRED: '需要人工复核', }, actorType: { USER: '人工用户', SYSTEM: '系统', AI: 'AI', AGENT: '外部助手', BACKEND: '后端服务', }, auditAction: { TASK_CREATED: '任务创建', TASK_LOADED: '任务读取', TASK_CONFIRMED: '任务确认', TASK_CONFIRM: '任务确认', DRAFT_SAVED: '草稿保存', TASK_UPDATED: '任务更新', OPERA_EXECUTED: 'OPERA 执行', OPERA_RETRIED: 'OPERA 重试', MANUAL_REVIEW_CREATED: '创建人工复核', MANUAL_REVIEW_CONVERT: '人工转换', MANUAL_REVIEW_RESOLVED: '人工复核解阻', }, operaOperation: { CREATE_RESERVATION: '创建预订', UPDATE_RESERVATION: '更新预订', CANCEL_RESERVATION: '取消预订', UPDATE_ROOMING_LIST: '更新房表', ADD_TRACE_NOTE: '添加追踪备注', }, }