From 03814018e6197be9fba922e8697798129e580233 Mon Sep 17 00:00:00 2001 From: zichun Date: Fri, 10 Apr 2026 17:33:14 +0800 Subject: [PATCH] feat(web): i18n for remaining edit pages (Location, SO, PO, WO) --- web/src/i18n/messages.ts | 32 ++++++++++++++++++++++++++++++++ web/src/pages/EditLocationPage.tsx | 14 ++++++++------ web/src/pages/EditPurchaseOrderPage.tsx | 15 ++++++++------- web/src/pages/EditSalesOrderPage.tsx | 15 ++++++++------- web/src/pages/EditWorkOrderPage.tsx | 18 ++++++++++-------- 5 files changed, 66 insertions(+), 28 deletions(-) diff --git a/web/src/i18n/messages.ts b/web/src/i18n/messages.ts index 189e50d..49be1b9 100644 --- a/web/src/i18n/messages.ts +++ b/web/src/i18n/messages.ts @@ -448,6 +448,22 @@ export const en = { // ─── User status labels ─────────────────────────────────── 'label.activeStatus': 'Active', 'label.disabled': 'Disabled', + + // ─── Edit order pages ───────────────────────────────────── + 'page.editLocation.title': 'Edit {code}', + 'page.editLocation.subtitle': 'Type: {type} (read-only after creation)', + 'page.editSalesOrder.title': 'Edit {code}', + 'page.editSalesOrder.subtitle': 'Customer: {partner}', + 'page.editSalesOrder.readOnlyHint': 'Order code, partner, lines, and currency are read-only after creation. Use this form to update custom fields.', + 'page.editSalesOrder.notEditable': 'This sales order is in {status} status and cannot be edited. Only DRAFT orders are editable.', + 'page.editPurchaseOrder.title': 'Edit {code}', + 'page.editPurchaseOrder.subtitle': 'Supplier: {partner}', + 'page.editPurchaseOrder.readOnlyHint': 'Order code, partner, lines, and currency are read-only after creation. Use this form to update custom fields.', + 'page.editPurchaseOrder.notEditable': 'This purchase order is in {status} status and cannot be edited. Only DRAFT orders are editable.', + 'page.editWorkOrder.title': 'Edit {code}', + 'page.editWorkOrder.subtitle': 'Output: {item}', + 'page.editWorkOrder.readOnlyHint': 'Order code, output item, BOM inputs, and routing operations are read-only after creation.', + 'page.editWorkOrder.notEditable': 'This work order is in {status} status and cannot be edited. Only DRAFT orders are editable.', } as const export const zhCN: Record = { @@ -887,6 +903,22 @@ export const zhCN: Record = { // ─── 用户状态标签 ──────────────────────────────────────── 'label.activeStatus': '已启用', 'label.disabled': '已禁用', + + // ─── 编辑订单页面 ──────────────────────────────────────── + 'page.editLocation.title': '编辑 {code}', + 'page.editLocation.subtitle': '类型: {type}(创建后只读)', + 'page.editSalesOrder.title': '编辑 {code}', + 'page.editSalesOrder.subtitle': '客户: {partner}', + 'page.editSalesOrder.readOnlyHint': '订单编码、合作伙伴、行项目和币种创建后只读。使用此表单更新自定义字段。', + 'page.editSalesOrder.notEditable': '此销售订单处于 {status} 状态,无法编辑。只有草稿状态的订单可编辑。', + 'page.editPurchaseOrder.title': '编辑 {code}', + 'page.editPurchaseOrder.subtitle': '供应商: {partner}', + 'page.editPurchaseOrder.readOnlyHint': '订单编码、合作伙伴、行项目和币种创建后只读。使用此表单更新自定义字段。', + 'page.editPurchaseOrder.notEditable': '此采购订单处于 {status} 状态,无法编辑。只有草稿状态的订单可编辑。', + 'page.editWorkOrder.title': '编辑 {code}', + 'page.editWorkOrder.subtitle': '产出: {item}', + 'page.editWorkOrder.readOnlyHint': '工单编码、产出物料、BOM 投入和工艺路线创建后只读。', + 'page.editWorkOrder.notEditable': '此工单处于 {status} 状态,无法编辑。只有草稿状态的工单可编辑。', } export const locales = { diff --git a/web/src/pages/EditLocationPage.tsx b/web/src/pages/EditLocationPage.tsx index 2594e19..c5479ae 100644 --- a/web/src/pages/EditLocationPage.tsx +++ b/web/src/pages/EditLocationPage.tsx @@ -6,10 +6,12 @@ import { PageHeader } from '@/components/PageHeader' import { Loading } from '@/components/Loading' import { ErrorBox } from '@/components/ErrorBox' import { DynamicExtFields } from '@/components/DynamicExtFields' +import { useT } from '@/i18n/LocaleContext' export function EditLocationPage() { const { id = '' } = useParams<{ id: string }>() const navigate = useNavigate() + const t = useT() const [location, setLocation] = useState(null) const [name, setName] = useState('') const [active, setActive] = useState(true) @@ -53,25 +55,25 @@ export function EditLocationPage() { return (
navigate('/locations')}>Cancel} + title={t('page.editLocation.title').replace('{code}', location.code)} + subtitle={t('page.editLocation.subtitle').replace('{type}', location.type)} + actions={} />
- + setName(e.target.value)} className="mt-1 w-full rounded-md border border-slate-300 px-3 py-2 text-sm" />
setActive(e.target.checked)} className="rounded border-slate-300" id="active" /> - +
setExt(prev => ({ ...prev, [k]: v }))} /> {error && }
diff --git a/web/src/pages/EditPurchaseOrderPage.tsx b/web/src/pages/EditPurchaseOrderPage.tsx index 765406c..85b4229 100644 --- a/web/src/pages/EditPurchaseOrderPage.tsx +++ b/web/src/pages/EditPurchaseOrderPage.tsx @@ -6,10 +6,12 @@ import { PageHeader } from '@/components/PageHeader' import { Loading } from '@/components/Loading' import { ErrorBox } from '@/components/ErrorBox' import { DynamicExtFields } from '@/components/DynamicExtFields' +import { useT } from '@/i18n/LocaleContext' export function EditPurchaseOrderPage() { const { id = '' } = useParams<{ id: string }>() const navigate = useNavigate() + const t = useT() const [order, setOrder] = useState(null) const [loading, setLoading] = useState(true) const [ext, setExt] = useState>({}) @@ -50,24 +52,23 @@ export function EditPurchaseOrderPage() { return (
navigate(`/purchase-orders/${id}`)}>Cancel} + title={t('page.editPurchaseOrder.title').replace('{code}', order.code)} + subtitle={`${t('page.editPurchaseOrder.subtitle').replace('{partner}', order.partnerCode)} \u00B7 ${order.orderDate} \u00B7 ${order.currencyCode}`} + actions={} /> {!editable ? (
- +
) : (
- Order code, partner, lines, and currency are read-only after creation. - Use this form to update custom fields. + {t('page.editPurchaseOrder.readOnlyHint')}
setExt(prev => ({ ...prev, [k]: v }))} /> {error && } )} diff --git a/web/src/pages/EditSalesOrderPage.tsx b/web/src/pages/EditSalesOrderPage.tsx index 3b6a9dd..866291b 100644 --- a/web/src/pages/EditSalesOrderPage.tsx +++ b/web/src/pages/EditSalesOrderPage.tsx @@ -6,10 +6,12 @@ import { PageHeader } from '@/components/PageHeader' import { Loading } from '@/components/Loading' import { ErrorBox } from '@/components/ErrorBox' import { DynamicExtFields } from '@/components/DynamicExtFields' +import { useT } from '@/i18n/LocaleContext' export function EditSalesOrderPage() { const { id = '' } = useParams<{ id: string }>() const navigate = useNavigate() + const t = useT() const [order, setOrder] = useState(null) const [loading, setLoading] = useState(true) const [ext, setExt] = useState>({}) @@ -50,24 +52,23 @@ export function EditSalesOrderPage() { return (
navigate(`/sales-orders/${id}`)}>Cancel} + title={t('page.editSalesOrder.title').replace('{code}', order.code)} + subtitle={`${t('page.editSalesOrder.subtitle').replace('{partner}', order.partnerCode)} \u00B7 ${order.orderDate} \u00B7 ${order.currencyCode}`} + actions={} /> {!editable ? (
- +
) : (
- Order code, partner, lines, and currency are read-only after creation. - Use this form to update custom fields. + {t('page.editSalesOrder.readOnlyHint')}
setExt(prev => ({ ...prev, [k]: v }))} /> {error && } )} diff --git a/web/src/pages/EditWorkOrderPage.tsx b/web/src/pages/EditWorkOrderPage.tsx index e2086e4..c09ef0d 100644 --- a/web/src/pages/EditWorkOrderPage.tsx +++ b/web/src/pages/EditWorkOrderPage.tsx @@ -6,10 +6,12 @@ import { PageHeader } from '@/components/PageHeader' import { Loading } from '@/components/Loading' import { ErrorBox } from '@/components/ErrorBox' import { DynamicExtFields } from '@/components/DynamicExtFields' +import { useT } from '@/i18n/LocaleContext' export function EditWorkOrderPage() { const { id = '' } = useParams<{ id: string }>() const navigate = useNavigate() + const t = useT() const [order, setOrder] = useState(null) const [outputQuantity, setOutputQuantity] = useState('') const [dueDate, setDueDate] = useState('') @@ -56,28 +58,28 @@ export function EditWorkOrderPage() { return (
navigate(`/work-orders/${id}`)}>Cancel} + title={t('page.editWorkOrder.title').replace('{code}', order.code)} + subtitle={t('page.editWorkOrder.subtitle').replace('{item}', order.outputItemCode)} + actions={} /> {!editable ? (
- +
) : (
- Order code, output item, BOM inputs, and routing operations are read-only after creation. + {t('page.editWorkOrder.readOnlyHint')}
- + setOutputQuantity(e.target.value)} className="mt-1 w-full rounded-md border border-slate-300 px-3 py-2 text-sm" />
- + setDueDate(e.target.value)} className="mt-1 w-full rounded-md border border-slate-300 px-3 py-2 text-sm" />
@@ -85,7 +87,7 @@ export function EditWorkOrderPage() { setExt(prev => ({ ...prev, [k]: v }))} /> {error && } )} -- libgit2 0.22.2