feat: add daily manual price review workflow

This commit is contained in:
Wyndham ARR
2026-08-06 22:40:18 +08:00
parent aae3d8e1db
commit ca3e8e18fa
77 changed files with 7750 additions and 602 deletions

View File

@@ -118,6 +118,9 @@
"upload.creating_task": ["正在创建任务", "Creating task", "กำลังสร้างงาน"],
"upload.processing_done": ["处理完成", "Processing complete", "ประมวลผลเสร็จแล้ว"],
"upload.processing_failed": ["处理失败", "Processing failed", "ประมวลผลไม่สำเร็จ"],
"upload.waiting_manual_price": ["等待人工定价", "Waiting for manual pricing", "รอกำหนดราคาด้วยตนเอง"],
"upload.daily_generating": ["日报生成中", "Generating daily report", "กำลังสร้างรายงานรายวัน"],
"upload.review_required": ["发现缺少固定价,请完成人工价格复核。", "Some fixed prices are missing. Complete the manual price review.", "พบราคาคงที่ที่ขาดหาย โปรดตรวจสอบราคาด้วยตนเองให้ครบ"],
"upload.success": ["ARR.XML 已处理并完成入库", "ARR.XML was processed and committed.", "ประมวลผลและบันทึก ARR.XML แล้ว"],
"upload.failure_log": ["ARR.XML 处理失败,请查看任务日志", "ARR.XML processing failed. Check the task log.", "การประมวลผล ARR.XML ไม่สำเร็จ โปรดดูบันทึกงาน"],
"upload.service_unready": ["文件接收服务尚未完成生产接线。", "The file intake service is not ready for production.", "บริการรับไฟล์ยังไม่พร้อมใช้งานจริง"],
@@ -140,6 +143,54 @@
"daily.file": ["文件", "File", "ไฟล์"],
"daily.submitted_at": ["提交时间", "Submitted", "เวลาส่ง"],
"daily.output": ["日报", "Daily report", "รายงานรายวัน"],
"status.needs_review": ["待人工处理", "Manual review", "รอตรวจสอบด้วยตนเอง"],
"daily_review.open": ["打开人工价格复核,已填写 {completed} / {total}", "Open manual price review, {completed} of {total} completed", "เปิดการตรวจสอบราคาด้วยตนเอง กรอกแล้ว {completed} / {total}"],
"daily_review.progress_short": ["复核 {completed} / {total}", "Review {completed} / {total}", "ตรวจสอบ {completed} / {total}"],
"daily_review.step": ["价格复核 / 待处理", "PRICE REVIEW / REQUIRED", "ตรวจสอบราคา / ต้องดำเนินการ"],
"daily_review.title": ["人工价格复核", "Manual price review", "ตรวจสอบราคาด้วยตนเอง"],
"daily_review.default_instruction": ["请为所有缺少固定价的价格键填写每晚价格。相同键只需填写一次。", "Enter a nightly price for every price key missing a fixed price. Enter each identical key only once.", "กรอกราคาต่อคืนสำหรับทุกคีย์ราคาที่ไม่มีราคาคงที่ โดยคีย์เดียวกันกรอกเพียงครั้งเดียว"],
"daily_review.processing_instruction": ["正在使用已冻结的价格清单重放原始 XML此时无法修改。", "The original XML is being replayed with the frozen price list. Prices cannot be changed now.", "กำลังประมวลผล XML ต้นทางซ้ำด้วยรายการราคาที่ตรึงไว้ ขณะนี้ไม่สามารถแก้ไขราคาได้"],
"daily_review.progress_aria": ["人工价格复核进度", "Manual price review progress", "ความคืบหน้าการตรวจสอบราคาด้วยตนเอง"],
"daily_review.completed": ["已填写", "Completed", "กรอกแล้ว"],
"daily_review.pending": ["待处理", "Remaining", "รอดำเนินการ"],
"daily_review.cancel": ["取消本次复核", "Cancel this review", "ยกเลิกการตรวจสอบครั้งนี้"],
"daily_review.finalize": ["确认并生成日报", "Confirm and generate daily report", "ยืนยันและสร้างรายงานรายวัน"],
"daily_review.finalizing": ["正在生成日报…", "Generating daily report…", "กำลังสร้างรายงานรายวัน…"],
"daily_review.retry": ["重试生成日报", "Retry daily report generation", "ลองสร้างรายงานรายวันอีกครั้ง"],
"daily_review.items_aria": ["待人工定价项", "Items awaiting manual pricing", "รายการที่รอกำหนดราคาด้วยตนเอง"],
"daily_review.rate_code": ["Rate Code", "Rate Code", "Rate Code"],
"daily_review.opera_price": ["Opera 价", "Opera price", "ราคา Opera"],
"daily_review.fixed_candidates": ["固定价候选", "Fixed-price candidates", "ตัวเลือกราคาคงที่"],
"daily_review.affected_records": ["影响记录", "Affected records", "รายการที่ได้รับผลกระทบ"],
"daily_review.rooms_nights": ["房数 / 房晚", "Rooms / room nights", "ห้อง / คืนห้องพัก"],
"daily_review.manual_price": ["人工价格", "Manual price", "ราคาที่กำหนดด้วยตนเอง"],
"daily_review.no_candidates": ["暂无同公司 / Rate Code 固定价", "No fixed price for the same company / Rate Code", "ไม่มีราคาคงที่สำหรับบริษัท / Rate Code เดียวกัน"],
"daily_review.price_key": ["价格键", "price key", "คีย์ราคา"],
"daily_review.manual_price_label": ["{company} {rateCode} 的人工价格", "Manual price for {company} {rateCode}", "ราคาที่กำหนดด้วยตนเองสำหรับ {company} {rateCode}"],
"daily_review.saved": ["已暂存", "Saved", "บันทึกแล้ว"],
"daily_review.awaiting_input": ["待填写", "Not entered", "รอกรอก"],
"daily_review.save": ["暂存", "Save", "บันทึก"],
"daily_review.empty": ["没有可显示的待人工定价项。", "No manual-pricing items to display.", "ไม่มีรายการกำหนดราคาด้วยตนเองให้แสดง"],
"daily_review.pagination_aria": ["人工价格复核分页", "Manual price review pagination", "การแบ่งหน้าการตรวจสอบราคาด้วยตนเอง"],
"daily_review.pagination_zero": ["共 0 项", "0 items", "0 รายการ"],
"daily_review.pagination_summary": ["共 {total} 项 · 本页 {start} 至 {end}", "{total} items · Showing {start}{end}", "{total} รายการ · แสดง {start}{end}"],
"daily_review.pagination_page": ["第 {page} / {pages} 页", "Page {page} of {pages}", "หน้า {page} จาก {pages}"],
"daily_review.integer_required": ["人工价格必须是非负整数,例如 0。", "The manual price must be a non-negative integer, such as 0.", "ราคาที่กำหนดต้องเป็นจำนวนเต็มไม่ติดลบ เช่น 0"],
"daily_review.saving": ["正在暂存人工价格…", "Saving the manual price…", "กำลังบันทึกราคาที่กำหนด…"],
"daily_review.saved_message": ["人工价格已暂存。", "Manual price saved.", "บันทึกราคาที่กำหนดแล้ว"],
"daily_review.complete_first": ["请先填写全部缺价项后再确认生成。", "Enter every missing price before generating the report.", "กรอกราคาที่ขาดให้ครบก่อนสร้างรายงาน"],
"daily_review.generation_message": ["正在冻结清单、重放原始 XML 并生成日报…", "Freezing the price list, replaying the original XML and generating the daily report…", "กำลังตรึงรายการราคา ประมวลผล XML ต้นทางซ้ำ และสร้างรายงานรายวัน…"],
"daily_review.success": ["人工价格已验收,正式日报已生成。", "The manual prices were validated and the official daily report was generated.", "ตรวจสอบราคาที่กำหนดแล้วและสร้างรายงานรายวันฉบับทางการเรียบร้อย"],
"daily_review.generation_registered": ["冻结清单已登记,正在生成正式日报。", "The frozen price list was recorded and the official daily report is being generated.", "บันทึกรายการราคาที่ตรึงแล้ว และกำลังสร้างรายงานรายวันฉบับทางการ"],
"daily_review.validation_failed": ["正式日报未通过确定性验收,请重新上传原始 XML。", "The official daily report failed deterministic validation. Upload the original XML again.", "รายงานรายวันฉบับทางการไม่ผ่านการตรวจสอบ โปรดอัปโหลด XML ต้นทางอีกครั้ง"],
"daily_review.cancelling": ["正在取消…", "Cancelling…", "กำลังยกเลิก…"],
"daily_review.cancelling_message": ["正在取消本次复核…", "Cancelling this review…", "กำลังยกเลิกการตรวจสอบครั้งนี้…"],
"daily_review.cancelled": ["本次人工价格复核已取消。", "The manual price review was cancelled.", "ยกเลิกการตรวจสอบราคาด้วยตนเองแล้ว"],
"daily_review.cancel_dialog_title": ["取消人工价格复核", "Cancel manual price review", "ยกเลิกการตรวจสอบราคาด้วยตนเอง"],
"daily_review.cancel_dialog_description": ["确认取消本次人工价格复核?", "Cancel this manual price review?", "ยืนยันยกเลิกการตรวจสอบราคาด้วยตนเองครั้งนี้หรือไม่"],
"daily_review.cancel_dialog_note": ["复核记录会永久保留审计痕迹;如需更正,请重新上传原始 XML。", "The review audit trail will be retained permanently. To correct it, upload the original XML again.", "ประวัติการตรวจสอบจะถูกเก็บไว้อย่างถาวร หากต้องการแก้ไข โปรดอัปโหลด XML ต้นทางอีกครั้ง"],
"daily_review.cancel_dialog_back": ["返回复核", "Return to review", "กลับไปตรวจสอบ"],
"daily_review.cancel_dialog_confirm": ["确认取消", "Confirm cancellation", "ยืนยันการยกเลิก"],
"monthly.processing": ["月报处理", "Monthly processing", "ประมวลผลรายงานประจำเดือน"],
"monthly.auto_update": ["自动更新 · 4 秒", "Auto-refresh · 4 sec", "อัปเดตอัตโนมัติ · 4 วินาที"],
"monthly.loading": ["正在读取月报记录…", "Loading monthly report records…", "กำลังโหลดรายการรายงานประจำเดือน…"],
@@ -368,6 +419,7 @@
"error.unrecognized_response": ["服务返回了无法识别的结果", "The service returned an unrecognized response", "บริการส่งผลลัพธ์ที่ไม่รู้จักกลับมา"],
"error.database_unavailable": ["数据库连接失败", "Database connection failed", "เชื่อมต่อฐานข้อมูลไม่สำเร็จ"],
"error.database_read_unavailable": ["数据库读取服务暂不可用", "Database read service is temporarily unavailable", "บริการอ่านฐานข้อมูลไม่พร้อมใช้งานชั่วคราว"],
"error.database_write_failed": ["数据库写入未完成,已保留当前复核清单,可重试生成", "The database write did not complete. The current review manifest was preserved and can be retried.", "การเขียนฐานข้อมูลไม่เสร็จสมบูรณ์ ระบบเก็บรายการตรวจสอบปัจจุบันไว้และสามารถลองสร้างใหม่ได้"],
"error.query_invalid": ["查询参数无效", "Invalid query parameters", "พารามิเตอร์การค้นหาไม่ถูกต้อง"],
"error.auth_required": ["请先登录", "Please log in first", "กรุณาเข้าสู่ระบบก่อน"],
"error.login_failed": ["用户名或密码不正确", "Incorrect username or password", "ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง"],
@@ -411,6 +463,20 @@
"error.booking_filename": ["请选择 .xlsx 格式的 Excel 文件", "Choose an .xlsx Excel file", "เลือกไฟล์ Excel รูปแบบ .xlsx"],
"error.review_request_invalid": ["人工确认请求无效", "The review request is invalid", "คำขอตรวจสอบไม่ถูกต้อง"],
"error.review_item_invalid": ["待确认记录编号无效", "Invalid review item ID", "รหัสรายการตรวจสอบไม่ถูกต้อง"],
"error.daily_review_request_invalid": ["人工价格复核请求无效", "The manual price review request is invalid", "คำขอตรวจสอบราคาด้วยตนเองไม่ถูกต้อง"],
"error.daily_review_not_found": ["待人工处理任务不存在", "The manual price review task was not found", "ไม่พบงานตรวจสอบราคาด้วยตนเอง"],
"error.daily_review_item_not_found": ["待人工处理项不存在", "The manual pricing item was not found", "ไม่พบรายการกำหนดราคาด้วยตนเอง"],
"error.daily_review_revision_conflict": ["复核清单已被其他会话更新,请刷新后重试", "The review list was updated in another session. Refresh and try again.", "รายการตรวจสอบถูกอัปเดตในเซสชันอื่น โปรดรีเฟรชแล้วลองอีกครั้ง"],
"error.daily_review_immutable": ["复核清单已冻结,不能修改", "The review list is frozen and cannot be changed", "รายการตรวจสอบถูกตรึงแล้วและไม่สามารถแก้ไขได้"],
"error.daily_review_not_open": ["复核任务当前不能确认生成", "This review cannot be finalized in its current state", "ไม่สามารถยืนยันการสร้างจากสถานะการตรวจสอบปัจจุบันได้"],
"error.daily_review_not_cancellable": ["复核任务当前不能取消", "This review cannot be cancelled in its current state", "ไม่สามารถยกเลิกการตรวจสอบในสถานะปัจจุบันได้"],
"error.daily_review_rules_changed": ["处理器或规则已变更,请取消后重新上传", "The processor or rules changed. Cancel this review and upload the original XML again.", "ตัวประมวลผลหรือกฎมีการเปลี่ยนแปลง โปรดยกเลิกการตรวจสอบแล้วอัปโหลด XML ต้นทางอีกครั้ง"],
"error.daily_review_state_invalid": ["人工复核确认状态无效", "The manual review state is invalid", "สถานะการยืนยันการตรวจสอบด้วยตนเองไม่ถูกต้อง"],
"error.daily_review_incomplete": ["请先填写全部缺价项", "Enter every missing price first", "กรอกราคาที่ขาดให้ครบก่อน"],
"error.daily_review_price_invalid": ["人工价格必须是非负整数", "The manual price must be a non-negative integer", "ราคาที่กำหนดต้องเป็นจำนวนเต็มไม่ติดลบ"],
"error.daily_review_page_invalid": ["复核分页参数无效", "The review pagination parameters are invalid", "พารามิเตอร์การแบ่งหน้ารายการตรวจสอบไม่ถูกต้อง"],
"error.daily_review_actor_invalid": ["复核会话用户无效", "The review session user is invalid", "ผู้ใช้ในเซสชันการตรวจสอบไม่ถูกต้อง"],
"error.daily_review_generation_failed": ["正式日报生成暂未完成,可使用同一清单重试", "Daily report generation did not complete. Retry with the same frozen list.", "การสร้างรายงานรายวันยังไม่เสร็จ สามารถลองใหม่ด้วยรายการเดิมที่ตรึงไว้"],
"error.company_request_invalid": ["渠道明细请求字段无效", "Invalid company detail request fields", "ฟิลด์คำขอรายละเอียดบริษัทไม่ถูกต้อง"],
"error.company_source_already_active": ["这份 Excel 已经启用,无需重复提取", "This Excel is already active; no duplicate extraction is needed", "Excel นี้เปิดใช้งานอยู่แล้ว ไม่จำเป็นต้องแยกข้อมูลซ้ำ"],
"error.company_period_invalid": ["期间必须是 01-10、11-20 或 21-month-end", "Period must be 01-10, 11-20 or 21-month-end", "ช่วงเวลาต้องเป็น 01-10, 11-20 หรือ 21-month-end"],
@@ -504,6 +570,7 @@
DATABASE_CONFIG_MISSING: "error.database_read_unavailable",
DATABASE_TARGET_INVALID: "error.database_read_unavailable",
DATABASE_QUERY_FAILED: "error.database_read_unavailable",
DATABASE_WRITE_FAILED: "error.database_write_failed",
DOWNLOAD_NOT_FOUND: "error.download_not_found",
DOWNLOAD_REQUEST_INVALID: "error.download_invalid",
DOWNLOAD_REFERENCE_INVALID: "error.download_invalid",
@@ -534,6 +601,20 @@
BOOKING_EXCEL_FILENAME_INVALID: "error.booking_filename",
BOOKING_EXCEL_REVIEW_REQUEST_INVALID: "error.review_request_invalid",
BOOKING_EXCEL_REVIEW_ITEM_INVALID: "error.review_item_invalid",
REVIEW_REQUEST_INVALID: "error.daily_review_request_invalid",
REVIEW_NOT_FOUND: "error.daily_review_not_found",
REVIEW_ITEM_NOT_FOUND: "error.daily_review_item_not_found",
REVIEW_REVISION_CONFLICT: "error.daily_review_revision_conflict",
REVIEW_IMMUTABLE: "error.daily_review_immutable",
REVIEW_NOT_OPEN: "error.daily_review_not_open",
REVIEW_NOT_CANCELLABLE: "error.daily_review_not_cancellable",
REVIEW_RULESET_CHANGED: "error.daily_review_rules_changed",
REVIEW_STATE_INVALID: "error.daily_review_state_invalid",
REVIEW_INCOMPLETE: "error.daily_review_incomplete",
REVIEW_PRICE_INVALID: "error.daily_review_price_invalid",
REVIEW_PAGE_INVALID: "error.daily_review_page_invalid",
REVIEW_ACTOR_INVALID: "error.daily_review_actor_invalid",
REVIEW_GENERATION_FAILED: "error.daily_review_generation_failed",
COMPANY_REPORT_REQUEST_INVALID: "error.company_request_invalid",
COMPANY_REPORT_PERIOD_INVALID: "error.company_period_invalid",
COMPANY_REPORT_COMPANY_INVALID: "error.invalid_company",