新增房表生成前端页面

This commit is contained in:
andy
2026-07-18 12:58:01 +07:00
parent d3a52e7605
commit 0715e8334f
16 changed files with 1694 additions and 5 deletions

View File

@@ -27,6 +27,7 @@ export default {
orders: 'Order list',
taskQueue: 'Task queue',
manualInvoice: 'Manual invoice',
roomingList: 'Rooming list',
sourceMessages: 'Source messages',
systemStatus: 'System status',
orderDetail: 'Order detail',
@@ -347,6 +348,60 @@ export default {
chargePositive: 'Quantity, rate, and nights must be greater than 0.',
},
},
roomingList: {
eyebrow: 'Reservation tool',
title: 'Generate Rooming List Excel',
subtitle: 'Upload the travel group list, enter rooming defaults, and download the generated hotel import workbook.',
currentHotel: 'Current hotel',
sourceSection: 'Source list and required fields',
targetSection: 'Target Excel defaults',
sourceFile: 'Source Excel file',
sourceFileHint: 'Supports .xls / .xlsx. The frontend does not read or log guest list content.',
noFile: 'Choose a .xls / .xlsx file',
peoplePerRoom: 'People per room',
arrival: 'Arrival',
departure: 'Departure',
roomType: 'Room type',
roomTypePlaceholder: 'e.g. DLX / TWN',
titleColumn: 'Title',
rateCode: 'Rate Code',
adults: 'Adults',
children: 'Children',
paymentType: 'Payment Type',
vip: 'VIP',
nationality: 'Nationality',
email: 'Email',
idType: 'ID Type',
idNumber: 'ID Number',
generate: 'Generate and download Excel',
generating: 'Generating',
validationTitle: 'Please fix the form',
resultSuccess: 'Generation result',
resultDownloaded: 'Excel has been generated and the browser download was triggered.',
downloadedFile: 'Downloaded file',
fieldErrors: {
fileRequired: 'Choose a source Excel file.',
fileType: 'Only .xls / .xlsx files are supported.',
positiveInteger: 'People per room must be greater than 0.',
nonNegativeInteger: 'Must be 0 or a positive integer.',
arrivalRequired: 'Enter arrival date.',
departureRequired: 'Enter departure date.',
dateFormat: 'Date format must be yyyy-MM-dd.',
departureAfterArrival: 'Departure must be later than arrival.',
roomTypeRequired: 'Enter room type.',
invalidEmail: 'Invalid email.',
},
errors: {
FRONTEND_VALIDATION: 'Form validation failed. Check required fields.',
ROOMING_LIST_VALIDATION_FAILED: 'Rooming List field validation failed. Please check the form.',
ROOMING_LIST_SOURCE_FILE_INVALID: 'The source list is invalid. Check the Excel headers and file format.',
FRONTEND_PERMISSION_DENIED: 'Your account does not have Rooming List generation permission.',
HOTEL_ACCESS_DENIED: 'Your account cannot access the selected hotel.',
AUTH_TOKEN_REQUIRED: 'Please sign in before generating a Rooming List.',
AUTH_SESSION_INVALID: 'Your session has expired. Please sign in again.',
UNKNOWN: 'Rooming List generation failed. Please retry later.',
},
},
order: {
summary: 'Order summary',
taskQueue: 'Order task queue',

View File

@@ -27,6 +27,7 @@ export default {
orders: 'รายการออเดอร์',
taskQueue: 'คิวงาน',
manualInvoice: 'ออกใบแจ้งหนี้เอง',
roomingList: 'สร้าง Rooming List',
sourceMessages: 'แหล่งที่มาข้อความ',
systemStatus: 'สถานะระบบ',
orderDetail: 'รายละเอียดออเดอร์',
@@ -347,6 +348,60 @@ export default {
chargePositive: 'Quantity, Rate และ Nights ต้องมากกว่า 0',
},
},
roomingList: {
eyebrow: 'เครื่องมือ Reservation',
title: 'สร้าง Rooming List Excel',
subtitle: 'อัปโหลดรายชื่อกรุ๊ป กรอกจำนวนคนต่อห้องและค่าเริ่มต้น แล้วดาวน์โหลดไฟล์ Excel ที่สร้างแล้ว',
currentHotel: 'โรงแรมปัจจุบัน',
sourceSection: 'ไฟล์รายชื่อและข้อมูลจำเป็น',
targetSection: 'ค่าเริ่มต้นของ Excel ปลายทาง',
sourceFile: 'ไฟล์ Excel ต้นทาง',
sourceFileHint: 'รองรับ .xls / .xlsx และหน้าเว็บจะไม่อ่านหรือบันทึกข้อมูลรายชื่อแขก',
noFile: 'เลือกไฟล์ .xls / .xlsx',
peoplePerRoom: 'จำนวนคนต่อห้อง',
arrival: 'Arrival',
departure: 'Departure',
roomType: 'Room Type',
roomTypePlaceholder: 'เช่น DLX / TWN',
titleColumn: 'Title',
rateCode: 'Rate Code',
adults: 'Adults',
children: 'Children',
paymentType: 'Payment Type',
vip: 'VIP',
nationality: 'Nationality',
email: 'Email',
idType: 'ID Type',
idNumber: 'ID Number',
generate: 'สร้างและดาวน์โหลด Excel',
generating: 'กำลังสร้าง',
validationTitle: 'กรุณาแก้ไขแบบฟอร์ม',
resultSuccess: 'ผลการสร้าง',
resultDownloaded: 'สร้าง Excel แล้ว และเริ่มดาวน์โหลดในเบราว์เซอร์แล้ว',
downloadedFile: 'ไฟล์ที่ดาวน์โหลด',
fieldErrors: {
fileRequired: 'กรุณาเลือกไฟล์ Excel ต้นทาง',
fileType: 'รองรับเฉพาะไฟล์ .xls / .xlsx',
positiveInteger: 'จำนวนคนต่อห้องต้องมากกว่า 0',
nonNegativeInteger: 'ต้องเป็น 0 หรือจำนวนเต็มบวก',
arrivalRequired: 'กรุณากรอก Arrival',
departureRequired: 'กรุณากรอก Departure',
dateFormat: 'รูปแบบวันที่ต้องเป็น yyyy-MM-dd',
departureAfterArrival: 'Departure ต้องอยู่หลัง Arrival',
roomTypeRequired: 'กรุณากรอก Room Type',
invalidEmail: 'รูปแบบ Email ไม่ถูกต้อง',
},
errors: {
FRONTEND_VALIDATION: 'ตรวจสอบแบบฟอร์มไม่ผ่าน กรุณาตรวจฟิลด์ที่จำเป็น',
ROOMING_LIST_VALIDATION_FAILED: 'ตรวจสอบข้อมูล Rooming List ไม่ผ่าน กรุณาตรวจแบบฟอร์ม',
ROOMING_LIST_SOURCE_FILE_INVALID: 'ไฟล์รายชื่อต้นทางไม่ถูกต้อง กรุณาตรวจหัวตารางและรูปแบบไฟล์',
FRONTEND_PERMISSION_DENIED: 'บัญชีนี้ไม่มีสิทธิ์สร้าง Rooming List',
HOTEL_ACCESS_DENIED: 'บัญชีนี้ไม่มีสิทธิ์เข้าถึงโรงแรมที่เลือก',
AUTH_TOKEN_REQUIRED: 'กรุณาเข้าสู่ระบบก่อนสร้าง Rooming List',
AUTH_SESSION_INVALID: 'เซสชันหมดอายุ กรุณาเข้าสู่ระบบใหม่',
UNKNOWN: 'สร้าง Rooming List ไม่สำเร็จ กรุณาลองใหม่ภายหลัง',
},
},
order: {
summary: 'สรุปออเดอร์',
taskQueue: 'คิวงานของออเดอร์นี้',

View File

@@ -27,6 +27,7 @@ export default {
orders: '订单列表',
taskQueue: '任务队列',
manualInvoice: '手工开票',
roomingList: '房表生成',
sourceMessages: '消息来源',
systemStatus: '系统状态',
orderDetail: '订单详情',
@@ -347,6 +348,60 @@ export default {
chargePositive: '费用明细的 Quantity、Rate、Nights 必须大于 0。',
},
},
roomingList: {
eyebrow: '预订工具',
title: '生成 Rooming List Excel',
subtitle: '上传旅行团名单 Excel填写每房人数和目标列默认值生成酒店可导入的 Rooming List。',
currentHotel: '当前酒店',
sourceSection: '来源名单与必填信息',
targetSection: '目标 Excel 默认值',
sourceFile: '来源 Excel 文件',
sourceFileHint: '支持 .xls / .xlsx前端不会读取或记录名单内容。',
noFile: '选择 .xls / .xlsx 文件',
peoplePerRoom: '每间房人数',
arrival: '入住日期',
departure: '离店日期',
roomType: '房型',
roomTypePlaceholder: '例如 DLX / TWN',
titleColumn: '称谓Title',
rateCode: '价格代码Rate Code',
adults: '成人数Adults',
children: '儿童数Children',
paymentType: '付款方式Payment Type',
vip: 'VIP',
nationality: '国籍Nationality',
email: '邮箱Email',
idType: '证件类型ID Type',
idNumber: '证件号码ID Number',
generate: '生成并下载 Excel',
generating: '生成中',
validationTitle: '请先修正表单',
resultSuccess: '生成结果',
resultDownloaded: 'Excel 已生成,并已触发浏览器下载。',
downloadedFile: '下载文件',
fieldErrors: {
fileRequired: '请选择来源 Excel 文件。',
fileType: '仅支持 .xls / .xlsx 文件。',
positiveInteger: '每间房人数必须大于 0。',
nonNegativeInteger: '必须是 0 或正整数。',
arrivalRequired: '请填写入住日期。',
departureRequired: '请填写离店日期。',
dateFormat: '日期格式必须为 yyyy-MM-dd。',
departureAfterArrival: '离店日期必须晚于入住日期。',
roomTypeRequired: '请填写房型。',
invalidEmail: 'Email 格式不正确。',
},
errors: {
FRONTEND_VALIDATION: '表单校验未通过,请检查必填字段。',
ROOMING_LIST_VALIDATION_FAILED: 'Rooming List 字段校验失败,请检查表单内容。',
ROOMING_LIST_SOURCE_FILE_INVALID: '来源名单文件不合法,请检查 Excel 表头和文件格式。',
FRONTEND_PERMISSION_DENIED: '当前账号没有生成 Rooming List 的权限。',
HOTEL_ACCESS_DENIED: '当前账号不能访问所选酒店。',
AUTH_TOKEN_REQUIRED: '请先登录后再生成 Rooming List。',
AUTH_SESSION_INVALID: '登录已失效,请重新登录后再生成。',
UNKNOWN: 'Rooming List 生成失败,请稍后重试。',
},
},
order: {
summary: '订单摘要',
taskQueue: '同订单任务队列',