实现 M009 手工开票前端页面

This commit is contained in:
andy
2026-07-17 11:57:26 +07:00
parent 11478c6913
commit 72fee44a68
16 changed files with 2032 additions and 3 deletions

View File

@@ -26,6 +26,7 @@ export default {
nav: {
orders: 'Order list',
taskQueue: 'Task queue',
manualInvoice: 'Manual invoice',
sourceMessages: 'Source messages',
systemStatus: 'System status',
orderDetail: 'Order detail',
@@ -250,6 +251,84 @@ export default {
createdAt: 'Created at',
},
},
manualInvoice: {
title: 'Manual invoice',
subtitle: 'Generate a Proforma Invoice PDF by entering fields manually without an order or task.',
sourceBadge: 'Manual generation',
independentHint: 'This V1 page is not linked to an order or task. The backend records generation and audit data.',
documentSection: 'Document',
recipientSection: 'Recipient',
bookingSection: 'Booking',
chargesSection: 'Charges',
previewSection: 'Amount preview',
resultSection: 'Generation result',
invoiceDate: 'Invoice date',
bookingDate: 'Booking date',
dueDate: 'Due date',
companySeed: 'Select company',
contactSeed: 'Select attention',
selectCompany: 'Select company',
selectContact: 'Select attention',
company: 'Company',
attention: 'Attention',
address: 'Address',
telephone: 'Tel',
email: 'Email',
groupName: 'Group name',
arrivalDate: 'Arrival date',
departureDate: 'Departure date',
roomRateNote: 'Room rate note',
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: 'Add charge',
removeCharge: 'Remove',
maxChargesReached: 'V1 supports up to 10 charge lines.',
previewDisclaimer: 'The frontend only previews amounts. Backend totals are authoritative.',
manualOverrideHint: 'Selecting company and attention fills contact details; every text field remains editable.',
generate: 'Generate PDF',
generating: 'Generating',
openPdf: 'Open PDF',
downloadPdf: 'Download PDF',
generationId: 'Generation ID',
generationStatus: 'Status',
pdfUrl: 'PDF URL',
hotelId: 'Hotel ID',
templateCode: 'Template',
createdAt: 'Created at',
noPdfUrl: 'The backend did not return a PDF URL.',
backendTotals: 'Backend totals',
validationTitle: 'Please fix the form',
statuses: {
SUCCEEDED: 'Generated',
GENERATED: 'Generated',
FAILED: 'Failed',
PROCESSING: 'Generating',
},
errors: {
FRONTEND_VALIDATION: 'Form validation failed. Check required fields and charge lines.',
RESERVATION_INVOICE_VALIDATION_FAILED: 'Invoice field validation failed. Please check the form.',
RESERVATION_INVOICE_CONTEXT_MISMATCH: 'The order or task context does not match.',
DOCUMENT_CONVERSION_FAILED: 'PDF generation failed. Please retry or contact an administrator.',
DOCUMENT_CONVERSION_TIMEOUT: 'PDF generation timed out. Please retry later.',
AUTH_401: 'Your session has expired. Please sign in again.',
AUTH_403: 'Your account does not have manual invoice permission.',
UNKNOWN: 'Generation failed. Please retry later.',
requiredFields: 'Complete dates, recipient, booking details, and at least one valid charge line.',
invalidEmail: 'Email format is invalid.',
dueDateBeforeBookingDate: 'Due date cannot be earlier than booking date.',
departureBeforeArrival: 'Departure date must be later than arrival date.',
extraBedNegative: 'Extra bed rate cannot be less than 0.',
chargePositive: 'Quantity, rate, and nights must be greater than 0.',
},
},
order: {
summary: 'Order summary',
taskQueue: 'Order task queue',