From 9fe040c5fc22f3f4f4b3904df59fb0ab47ddb924 Mon Sep 17 00:00:00 2001 From: Lewis_yan Date: Wed, 8 Apr 2026 23:05:31 +0800 Subject: [PATCH] feat(i18n): complete i18n adaptation for basicinfo modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add missing createTime/updateTime keys to company, supplierUser, emailnotice - Add statusValid, statusInvalid, autoFillNote, roleQuote to supplierUser - Add general label to systemNo - Fix systemno → systemNo key naming consistency in crud.tsx - Sync menu i18n keys across en/zh-tw --- web/src/i18n/pages/basicinfo/en.ts | 13 ++ web/src/i18n/pages/basicinfo/zh-cn.ts | 13 ++ web/src/i18n/pages/basicinfo/zh-tw.ts | 13 ++ web/src/i18n/pages/menu/en.ts | 1 + web/src/i18n/pages/menu/zh-tw.ts | 1 + .../views/pisadmin/basicinfo/company/crud.tsx | 4 +- .../pisadmin/basicinfo/emailnotice/crud.tsx | 2 +- .../pisadmin/basicinfo/supplier_user/crud.tsx | 4 +- .../pisadmin/basicinfo/systemno/crud.tsx | 71 ++++--- .../miscprocurement/cost_template/crud.tsx | 186 +++++++++--------- 10 files changed, 172 insertions(+), 136 deletions(-) diff --git a/web/src/i18n/pages/basicinfo/en.ts b/web/src/i18n/pages/basicinfo/en.ts index ecc3472..f5c0be2 100644 --- a/web/src/i18n/pages/basicinfo/en.ts +++ b/web/src/i18n/pages/basicinfo/en.ts @@ -64,6 +64,8 @@ export default { status: 'Status', createTime: 'Create Time', updateTime: 'Update Time', + createUser: 'Creator', + updateUser: 'Modifier', }, emailnotice: { title: 'Email Notification Log', @@ -85,6 +87,8 @@ export default { statusFailed: 'Failed', resend: 'Resend', selectOrSearch: 'Select or search', + createTime: 'Create Time', + updateTime: 'Update Time', }, supplierUser: { title: 'Supplier User', @@ -95,6 +99,12 @@ export default { userName: 'Contact Person', userPhone: 'Contact Phone', status: 'Status', + statusValid: 'Valid', + statusInvalid: 'Invalid', + autoFillNote: 'Auto-fill', + roleQuote: 'Quote', + createTime: 'Create Time', + updateTime: 'Update Time', }, systemNo: { title: 'Document Number Rule', @@ -114,6 +124,9 @@ export default { seqLength: 'Sequence Length', createUser: 'Creator', updateUser: 'Modifier', + createTime: 'Create Time', + updateTime: 'Update Time', + general: 'General', sequenceDate: 'Sequence Date', prevSequence: 'Previous Sequence', currentSequence: 'Current Sequence', diff --git a/web/src/i18n/pages/basicinfo/zh-cn.ts b/web/src/i18n/pages/basicinfo/zh-cn.ts index 6397af9..06ee787 100644 --- a/web/src/i18n/pages/basicinfo/zh-cn.ts +++ b/web/src/i18n/pages/basicinfo/zh-cn.ts @@ -64,6 +64,8 @@ export default { status: '状态', createTime: '创建时间', updateTime: '更新时间', + createUser: '单据创建人', + updateUser: '单据修改人', }, supplierUser: { title: '供应商用户', @@ -74,6 +76,12 @@ export default { userName: '联络人', userPhone: '联络人电话', status: '状态', + statusValid: '有效', + statusInvalid: '无效', + autoFillNote: '自动带出', + roleQuote: '报价', + createTime: '创建时间', + updateTime: '更新时间', }, emailnotice: { title: '邮件通知记录', @@ -95,6 +103,8 @@ export default { statusFailed: '发送失败', resend: '重送', selectOrSearch: '请选择或搜索', + createTime: '创建时间', + updateTime: '更新时间', }, systemNo: { title: '单据编号规则', @@ -114,6 +124,9 @@ export default { seqLength: '流水码长度', createUser: '单据创建人', updateUser: '单据修改人', + createTime: '创建时间', + updateTime: '更新时间', + general: '通用', sequenceDate: '流水日期', prevSequence: '上一流水码', currentSequence: '下一流水码', diff --git a/web/src/i18n/pages/basicinfo/zh-tw.ts b/web/src/i18n/pages/basicinfo/zh-tw.ts index 642e146..cc23e0e 100644 --- a/web/src/i18n/pages/basicinfo/zh-tw.ts +++ b/web/src/i18n/pages/basicinfo/zh-tw.ts @@ -64,6 +64,8 @@ export default { status: '狀態', createTime: '創建時間', updateTime: '更新時間', + createUser: '單據創建人', + updateUser: '單據修改人', }, emailnotice: { title: '郵件通知記錄', @@ -85,6 +87,8 @@ export default { statusFailed: '發送失敗', resend: '重送', selectOrSearch: '請選擇或搜尋', + createTime: '創建時間', + updateTime: '更新時間', }, supplierUser: { title: '供應商用戶', @@ -95,6 +99,12 @@ export default { userName: '聯絡人', userPhone: '聯絡人電話', status: '狀態', + statusValid: '有效', + statusInvalid: '無效', + autoFillNote: '自動帶出', + roleQuote: '報價', + createTime: '創建時間', + updateTime: '更新時間', }, systemNo: { title: '單據編號規則', @@ -114,6 +124,9 @@ export default { seqLength: '流水碼長度', createUser: '單據創建人', updateUser: '單據修改人', + createTime: '創建時間', + updateTime: '更新時間', + general: '通用', sequenceDate: '流水日期', prevSequence: '上一流水碼', currentSequence: '下一流水碼', diff --git a/web/src/i18n/pages/menu/en.ts b/web/src/i18n/pages/menu/en.ts index 020ebd8..cf09ba5 100644 --- a/web/src/i18n/pages/menu/en.ts +++ b/web/src/i18n/pages/menu/en.ts @@ -99,6 +99,7 @@ export default { permissionNameRequired: 'Permission name is required', permissionValueRequired: 'Permission key is required', batchGenerate: 'Batch Generate', + alreadyExists: ' already exists and cannot be duplicated', }, dialog: { columnPermission: 'Column Permission', diff --git a/web/src/i18n/pages/menu/zh-tw.ts b/web/src/i18n/pages/menu/zh-tw.ts index 878209b..7bf8a58 100644 --- a/web/src/i18n/pages/menu/zh-tw.ts +++ b/web/src/i18n/pages/menu/zh-tw.ts @@ -99,6 +99,7 @@ export default { permissionNameRequired: '權限名稱必填', permissionValueRequired: '權限標識必填', batchGenerate: '批量生成', + alreadyExists: '已存在,不可重複', }, dialog: { columnPermission: '字段權限', diff --git a/web/src/views/pisadmin/basicinfo/company/crud.tsx b/web/src/views/pisadmin/basicinfo/company/crud.tsx index e9cd9d7..46f549e 100644 --- a/web/src/views/pisadmin/basicinfo/company/crud.tsx +++ b/web/src/views/pisadmin/basicinfo/company/crud.tsx @@ -114,13 +114,13 @@ export const createCrudOptions = function ({ crudExpose }: Partial ({ - company_code: SYSTEMNO_GENERAL_COMPANY_CODE, - company_short_name: '通用' -}) - -const loadCompanyOptions = async () => { +const loadCompanyOptions = async (generalLabel: string) => { try { const res = await GetCompanies({ page: 1, page_size: 1000, pageSize: 1000 }) const list = @@ -33,10 +28,10 @@ const loadCompanyOptions = async () => { company_short_name: c.company_short_name || c.company_code || c.company_name })) .filter((c: { company_code: string }) => c.company_code !== SYSTEMNO_GENERAL_COMPANY_CODE) - return [generalCompanyOption(), ...fromApi] + return [{ company_code: SYSTEMNO_GENERAL_COMPANY_CODE, company_short_name: generalLabel }, ...fromApi] } catch (e) { console.warn('加载公司列表失败', e) - return [generalCompanyOption()] + return [{ company_code: SYSTEMNO_GENERAL_COMPANY_CODE, company_short_name: generalLabel }] } } @@ -51,18 +46,18 @@ export const createCrudOptions = function ({ crudExpose }: Partial { @@ -80,7 +75,7 @@ export const createCrudOptions = function ({ crudExpose }: Partial item.company_code === companyCode && item.rule_code === ruleCode) : null if (exists && (!currentId || exists.id !== currentId)) { - throw new Error(t('message.pages.basicinfo.systemno.companyCode') + t('message.pages.basicinfo.systemno.ruleCode') + t('message.pages.menu.validation.alreadyExists')) + throw new Error(t('message.pages.basicinfo.systemNo.companyCode') + t('message.pages.basicinfo.systemNo.ruleCode') + t('message.pages.menu.validation.alreadyExists')) } } @@ -132,32 +127,32 @@ export const createCrudOptions = function ({ crudExpose }: Partial loadCompanyOptions() + getData: async () => loadCompanyOptions(t('message.pages.basicinfo.systemNo.general')) }), search: { show: true }, form: { value: SYSTEMNO_GENERAL_COMPANY_CODE, - rules: [{ required: true, message: t('message.pages.basicinfo.systemno.companyCode') + ' ' + t('message.pages.menu.validation.fieldNameRequired') }] + rules: [{ required: true, message: t('message.pages.basicinfo.systemNo.companyCode') + ' ' + t('message.pages.menu.validation.fieldNameRequired') }] }, column: { minWidth: 160, showOverflowTooltip: true } }, rule_code: { - title: t('message.pages.basicinfo.systemno.ruleCode'), + title: t('message.pages.basicinfo.systemNo.ruleCode'), type: 'dict-select', dict: dict({ data: ruleCodeDict }), search: { show: true, - component: { props: { placeholder: t('message.pages.menu.select'), clearable: true } } + component: { props: { placeholder: t('message.pages.menu.buttons.select'), clearable: true } } }, form: { - rules: [{ required: true, message: t('message.pages.basicinfo.systemno.ruleCode') + ' ' + t('message.pages.menu.validation.fieldNameRequired') }], - component: { props: { placeholder: t('message.pages.menu.select'), filterable: true } } + rules: [{ required: true, message: t('message.pages.basicinfo.systemNo.ruleCode') + ' ' + t('message.pages.menu.validation.fieldNameRequired') }], + component: { props: { placeholder: t('message.pages.menu.buttons.select'), filterable: true } } }, column: { minWidth: 140, @@ -169,78 +164,78 @@ export const createCrudOptions = function ({ crudExpose }: Partial { @@ -620,47 +620,47 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp // i18n-aware field factories const makeMaterialsFieldsMisc = () => [ - createField(t('message.pages.miscprocurement.cost_template.material'), 'material', 'text'), - createField(t('message.pages.miscprocurement.cost_template.length'), 'length', 'number'), - createField(t('message.pages.miscprocurement.cost_template.width'), 'width', 'number'), - createField(t('message.pages.miscprocurement.cost_template.height'), 'height', 'number'), - createField(t('message.pages.miscprocurement.cost_template.specificgravity'), 'specificgravity', 'number', t('message.pages.miscprocurement.cost_template.autoByMaterial'), { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.qty'), 'qty', 'number', '', { supplierRequired: true }), - createField(t('message.pages.miscprocurement.cost_template.weight'), 'weight', 'number', t('message.pages.miscprocurement.cost_template.lengthWidthHeightSpecificgravityQty'), { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.unitPrice'), 'unitPrice', 'number'), - createField(t('message.pages.miscprocurement.cost_template.materialCost'), 'material_cost', 'number', t('message.pages.miscprocurement.cost_template.weightTimesUnitPrice'), { supplierEditable: false }) + createField(t('message.pages.miscprocurement.costTemplate.material'), 'material', 'text'), + createField(t('message.pages.miscprocurement.costTemplate.length'), 'length', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.width'), 'width', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.height'), 'height', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.specificgravity'), 'specificgravity', 'number', t('message.pages.miscprocurement.costTemplate.autoByMaterial'), { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.qty'), 'qty', 'number', '', { supplierRequired: true }), + createField(t('message.pages.miscprocurement.costTemplate.weight'), 'weight', 'number', t('message.pages.miscprocurement.costTemplate.lengthWidthHeightSpecificgravityQty'), { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.unitPrice'), 'unitPrice', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.materialCost'), 'material_cost', 'number', t('message.pages.miscprocurement.costTemplate.weightTimesUnitPrice'), { supplierEditable: false }) ] const makeMaterialsFieldsStrategic = () => [ - createField(t('message.pages.miscprocurement.cost_template.material'), 'material', 'text'), - createField(t('message.pages.miscprocurement.cost_template.weightUsage'), 'weight', 'number'), - createField(t('message.pages.miscprocurement.cost_template.unitPrice'), 'unitPrice', 'number'), - createField(t('message.pages.miscprocurement.cost_template.unit'), 'unit', 'text'), - createField(t('message.pages.miscprocurement.cost_template.lossRate'), 'loss_rate', 'number'), - createField(t('message.pages.miscprocurement.cost_template.materialCost'), 'material_cost', 'number', t('message.pages.miscprocurement.cost_template.weightTimesUnitPrice'), { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.remark'), 'remark', 'text') + createField(t('message.pages.miscprocurement.costTemplate.material'), 'material', 'text'), + createField(t('message.pages.miscprocurement.costTemplate.weightUsage'), 'weight', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.unitPrice'), 'unitPrice', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.unit'), 'unit', 'text'), + createField(t('message.pages.miscprocurement.costTemplate.lossRate'), 'loss_rate', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.materialCost'), 'material_cost', 'number', t('message.pages.miscprocurement.costTemplate.weightTimesUnitPrice'), { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.remark'), 'remark', 'text') ] const makeGetMaterialsFields = () => (procurementCategory?: string) => procurementCategory === '1' ? makeMaterialsFieldsStrategic() : makeMaterialsFieldsMisc() const makeProcessFieldsMisc = () => [ - createField(t('message.pages.miscprocurement.cost_template.processStation'), 'process_station', 'select'), - createField(t('message.pages.miscprocurement.cost_template.unit'), 'unit', 'text', '', { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.unitrate'), 'unitrate', 'number', t('message.pages.miscprocurement.cost_template.autoByStation'), { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.processqty'), 'processqty', 'number'), - createField(t('message.pages.miscprocurement.cost_template.processprice'), 'processprice', 'number', t('message.pages.miscprocurement.cost_template.unitrateTimesProcessqty'), { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.remark'), 'remark', 'text', '', { supplierEditable: false }) + createField(t('message.pages.miscprocurement.costTemplate.processStation'), 'process_station', 'select'), + createField(t('message.pages.miscprocurement.costTemplate.unit'), 'unit', 'text', '', { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.unitrate'), 'unitrate', 'number', t('message.pages.miscprocurement.costTemplate.autoByStation'), { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.processqty'), 'processqty', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.processprice'), 'processprice', 'number', t('message.pages.miscprocurement.costTemplate.unitrateTimesProcessqty'), { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.remark'), 'remark', 'text', '', { supplierEditable: false }) ] const makeProcessFieldsStrategic = () => [ - createField(t('message.pages.miscprocurement.cost_template.processStation'), 'process_station', 'select'), - createField(t('message.pages.miscprocurement.cost_template.processTime'), 'process_time', 'number'), - createField(t('message.pages.miscprocurement.cost_template.unitPrice'), 'unit_price', 'number'), - createField(t('message.pages.miscprocurement.cost_template.unit'), 'unit', 'text', '', { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.lossRate'), 'loss_rate', 'number', '', { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.processCost'), 'process_cost', 'number', '', { supplierEditable: false }), - createField(t('message.pages.miscprocurement.cost_template.remark'), 'remark', 'text', '', { supplierEditable: false }) + createField(t('message.pages.miscprocurement.costTemplate.processStation'), 'process_station', 'select'), + createField(t('message.pages.miscprocurement.costTemplate.processTime'), 'process_time', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.unitPrice'), 'unit_price', 'number'), + createField(t('message.pages.miscprocurement.costTemplate.unit'), 'unit', 'text', '', { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.lossRate'), 'loss_rate', 'number', '', { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.processCost'), 'process_cost', 'number', '', { supplierEditable: false }), + createField(t('message.pages.miscprocurement.costTemplate.remark'), 'remark', 'text', '', { supplierEditable: false }) ] const makeGetProcessFields = () => (procurementCategory?: string) => @@ -671,13 +671,13 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp const getProcessFields = makeGetProcessFields() const sections = Object.values(baseSections).map((s) => deepCopy(s)) sections.forEach((sec) => { - if (sec.id === 'productDetail') sec.title = t('message.pages.miscprocurement.cost_template.productDetail') - else if (sec.id === 'materials') sec.title = t('message.pages.miscprocurement.cost_template.materials') - else if (sec.id === 'process') sec.title = t('message.pages.miscprocurement.cost_template.process') - else if (sec.id === 'sgna') sec.title = t('message.pages.miscprocurement.cost_template.sgna') - else if (sec.id === 'others') sec.title = t('message.pages.miscprocurement.cost_template.others') - else if (sec.id === 'profit') sec.title = t('message.pages.miscprocurement.cost_template.profit') - else if (sec.id === 'tax') sec.title = t('message.pages.miscprocurement.cost_template.tax') + if (sec.id === 'productDetail') sec.title = t('message.pages.miscprocurement.costTemplate.productDetail') + else if (sec.id === 'materials') sec.title = t('message.pages.miscprocurement.costTemplate.materials') + else if (sec.id === 'process') sec.title = t('message.pages.miscprocurement.costTemplate.process') + else if (sec.id === 'sgna') sec.title = t('message.pages.miscprocurement.costTemplate.sgna') + else if (sec.id === 'others') sec.title = t('message.pages.miscprocurement.costTemplate.others') + else if (sec.id === 'profit') sec.title = t('message.pages.miscprocurement.costTemplate.profit') + else if (sec.id === 'tax') sec.title = t('message.pages.miscprocurement.costTemplate.tax') if (sec.id === 'materials') { sec.fields = deepCopy(getMaterialsFields()) } else if (sec.id === 'process') { @@ -696,12 +696,12 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp const doVisibleTitles = (procurementCategory?: string, enableCostStructure?: boolean) => { if (procurementCategory === '2') { return enableCostStructure - ? [t('message.pages.miscprocurement.cost_template.materials'), t('message.pages.miscprocurement.cost_template.process'), t('message.pages.miscprocurement.cost_template.others'), t('message.pages.miscprocurement.cost_template.profit'), t('message.pages.miscprocurement.cost_template.tax')] - : [t('message.pages.miscprocurement.cost_template.productDetail'), t('message.pages.miscprocurement.cost_template.profit'), t('message.pages.miscprocurement.cost_template.tax')] + ? [t('message.pages.miscprocurement.costTemplate.materials'), t('message.pages.miscprocurement.costTemplate.process'), t('message.pages.miscprocurement.costTemplate.others'), t('message.pages.miscprocurement.costTemplate.profit'), t('message.pages.miscprocurement.costTemplate.tax')] + : [t('message.pages.miscprocurement.costTemplate.productDetail'), t('message.pages.miscprocurement.costTemplate.profit'), t('message.pages.miscprocurement.costTemplate.tax')] } return enableCostStructure - ? [t('message.pages.miscprocurement.cost_template.materials'), t('message.pages.miscprocurement.cost_template.process'), t('message.pages.miscprocurement.cost_template.others'), t('message.pages.miscprocurement.cost_template.sgna'), t('message.pages.miscprocurement.cost_template.profit'), t('message.pages.miscprocurement.cost_template.tax')] - : [t('message.pages.miscprocurement.cost_template.productDetail'), t('message.pages.miscprocurement.cost_template.profit'), t('message.pages.miscprocurement.cost_template.tax')] + ? [t('message.pages.miscprocurement.costTemplate.materials'), t('message.pages.miscprocurement.costTemplate.process'), t('message.pages.miscprocurement.costTemplate.others'), t('message.pages.miscprocurement.costTemplate.sgna'), t('message.pages.miscprocurement.costTemplate.profit'), t('message.pages.miscprocurement.costTemplate.tax')] + : [t('message.pages.miscprocurement.costTemplate.productDetail'), t('message.pages.miscprocurement.costTemplate.profit'), t('message.pages.miscprocurement.costTemplate.tax')] } // i18n-aware validation @@ -722,14 +722,14 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp const cnt = new Map() for (const k of keys) cnt.set(k, (cnt.get(k) || 0) + 1) const dups = [...cnt.entries()].filter(([, c]) => c > 1).map(([k]) => k) - if (dups.length) msgs.push(`${t('message.pages.miscprocurement.cost_template.duplicateFieldKey', { title })}:${dups.join('、')}`) + if (dups.length) msgs.push(`${t('message.pages.miscprocurement.costTemplate.duplicateFieldKey', { title })}:${dups.join('、')}`) } return msgs } const merged = new Set([...scan(latestSectionDraft), ...scan(form?.sections)]) const parts = [...merged].filter(Boolean) if (parts.length) { - return { ok: false, message: `${parts.join(';')},${t('message.pages.miscprocurement.cost_template.pleaseModifyAndSave')}` } + return { ok: false, message: `${parts.join(';')},${t('message.pages.miscprocurement.costTemplate.pleaseModifyAndSave')}` } } return { ok: true } } @@ -746,13 +746,13 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp for (const f of sec.fields || []) { if (!fieldDisplayNameCn(f)) { const k = String(f?.key ?? '').trim() - badKeys.push(k || `(${t('message.pages.miscprocurement.cost_template.keyNotFilled')})`) + badKeys.push(k || `(${t('message.pages.miscprocurement.costTemplate.keyNotFilled')})`) } } - if (badKeys.length) msgs.push(`${t('message.pages.miscprocurement.cost_template.fieldNameNotFilled', { title })}(${t('message.pages.miscprocurement.cost_template.fieldKey')}: ${badKeys.join('、')})`) + if (badKeys.length) msgs.push(`${t('message.pages.miscprocurement.costTemplate.fieldNameNotFilled', { title })}(${t('message.pages.miscprocurement.costTemplate.fieldKey')}: ${badKeys.join('、')})`) } if (msgs.length) { - return { ok: false, message: `${msgs.join(';')},${t('message.pages.miscprocurement.cost_template.pleaseCompleteAndSave')}` } + return { ok: false, message: `${msgs.join(';')},${t('message.pages.miscprocurement.costTemplate.pleaseCompleteAndSave')}` } } return { ok: true } } @@ -760,11 +760,11 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp const doValidateCostTemplateBeforeSubmit = (form: any): { ok: true } | { ok: false; message: string } => { const issues: string[] = [] const dup = doValidateDuplicateFieldKeys(form) - if (!dup.ok) issues.push(dup.message.replace(new RegExp(`,${t('message.pages.miscprocurement.cost_template.pleaseModifyAndSave')}$`), '')) + if (!dup.ok) issues.push(dup.message.replace(new RegExp(`,${t('message.pages.miscprocurement.costTemplate.pleaseModifyAndSave')}$`), '')) const cn = doValidateItemNamesCn(form) - if (!cn.ok) issues.push(cn.message.replace(new RegExp(`,${t('message.pages.miscprocurement.cost_template.pleaseCompleteAndSave')}$`), '')) + if (!cn.ok) issues.push(cn.message.replace(new RegExp(`,${t('message.pages.miscprocurement.costTemplate.pleaseCompleteAndSave')}$`), '')) if (issues.length) { - return { ok: false, message: `${issues.join(';')},${t('message.pages.miscprocurement.cost_template.pleaseModifyAndSave')}` } + return { ok: false, message: `${issues.join(';')},${t('message.pages.miscprocurement.costTemplate.pleaseModifyAndSave')}` } } return { ok: true } } @@ -790,12 +790,12 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp }) const arr = Array.from(map.values()) // Always replace built-in materials/process fields by procurement category - const materials = arr.find((s: any) => s?.title === t('message.pages.miscprocurement.cost_template.materials')) + const materials = arr.find((s: any) => s?.title === t('message.pages.miscprocurement.costTemplate.materials')) if (materials) { const getMaterialsFields = makeGetMaterialsFields() replaceBuiltInFields(materials, deepCopy(getMaterialsFields(procurementCategory))) } - const process = arr.find((s: any) => s?.title === t('message.pages.miscprocurement.cost_template.process')) + const process = arr.find((s: any) => s?.title === t('message.pages.miscprocurement.costTemplate.process')) if (process) { const getProcessFields = makeGetProcessFields() replaceBuiltInFields(process, deepCopy(getProcessFields(procurementCategory))) @@ -819,8 +819,8 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } const procurementDictLocalized = [ - { value: '1', label: t('message.pages.miscprocurement.cost_template.procurementStrategic') }, - { value: '2', label: t('message.pages.miscprocurement.cost_template.procurementMisc') } + { value: '1', label: t('message.pages.miscprocurement.costTemplate.procurementStrategic') }, + { value: '2', label: t('message.pages.miscprocurement.costTemplate.procurementMisc') } ] return { @@ -836,15 +836,15 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp group: { type: 'tab', base: { - label: t('message.pages.miscprocurement.cost_template.basicInfo'), + label: t('message.pages.miscprocurement.costTemplate.basicInfo'), columns: ['template_name', 'procurement_category', 'version', 'template_desc'] }, controls: { - label: t('message.pages.miscprocurement.cost_template.controls'), + label: t('message.pages.miscprocurement.costTemplate.controls'), columns: ['acti', 'is_bom'] }, sections: { - label: t('message.pages.miscprocurement.cost_template.sections'), + label: t('message.pages.miscprocurement.costTemplate.sections'), columns: ['sections'] } }, @@ -887,7 +887,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } } } catch (e) { - console.warn(t('message.pages.miscprocurement.cost_template.loadDetailFailed'), e) + console.warn(t('message.pages.miscprocurement.costTemplate.loadDetailFailed'), e) } } }, @@ -972,32 +972,32 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp show: false }, confirm: { - text: t('message.pages.miscprocurement.cost_template.confirm'), - title: t('message.pages.miscprocurement.cost_template.confirm'), + text: t('message.pages.miscprocurement.costTemplate.confirm'), + title: t('message.pages.miscprocurement.costTemplate.confirm'), type: 'success', order: 4, show: compute(({ row }) => templateStatusUnconfirmed(row)), async click({ row }: { row: any }) { try { - await ElMessageBox.confirm(t('message.pages.miscprocurement.cost_template.confirmStatusTip'), t('message.pages.miscprocurement.cost_template.confirm'), { + await ElMessageBox.confirm(t('message.pages.miscprocurement.costTemplate.confirmStatusTip'), t('message.pages.miscprocurement.costTemplate.confirm'), { type: 'warning', - confirmButtonText: t('message.pages.miscprocurement.cost_template.confirmButtonText'), - cancelButtonText: t('message.pages.miscprocurement.cost_template.cancelButtonText') + confirmButtonText: t('message.pages.miscprocurement.costTemplate.confirmButtonText'), + cancelButtonText: t('message.pages.miscprocurement.costTemplate.cancelButtonText') }) const cres: any = await api.ConfirmObj(row.id) - const okMsg = cres?.data?.msg || cres?.msg || t('message.pages.miscprocurement.cost_template.confirmSuccess') + const okMsg = cres?.data?.msg || cres?.msg || t('message.pages.miscprocurement.costTemplate.confirmSuccess') ElMessage.success(okMsg) crudExpose?.doRefresh?.() } catch (e: any) { if (e === 'cancel' || e === 'close') return - const msg = e?.response?.data?.msg || e?.message || t('message.pages.miscprocurement.cost_template.confirmFailed') + const msg = e?.response?.data?.msg || e?.message || t('message.pages.miscprocurement.costTemplate.confirmFailed') ElMessage.error(msg) } } }, newVersion: { - text: t('message.pages.miscprocurement.cost_template.newVersion'), - title: t('message.pages.miscprocurement.cost_template.newVersion'), + text: t('message.pages.miscprocurement.costTemplate.newVersion'), + title: t('message.pages.miscprocurement.costTemplate.newVersion'), type: 'primary', order: 5, show: compute(({ row }) => templateStatusConfirmed(row)), @@ -1006,7 +1006,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp const res: any = await api.GetObj(row.id) const detail = res?.data?.data || res?.data || res if (!detail || typeof detail !== 'object') { - ElMessage.error(t('message.pages.miscprocurement.cost_template.loadDetailFailed')) + ElMessage.error(t('message.pages.miscprocurement.costTemplate.loadDetailFailed')) return } const nextV = Number(detail.version) + 1 @@ -1042,10 +1042,10 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp items: itemsStripped } }, - { title: t('message.pages.miscprocurement.cost_template.newVersion') } + { title: t('message.pages.miscprocurement.costTemplate.newVersion') } ) } catch (e: any) { - const msg = e?.response?.data?.msg || e?.message || t('message.pages.miscprocurement.cost_template.newVersionFailed') + const msg = e?.response?.data?.msg || e?.message || t('message.pages.miscprocurement.costTemplate.newVersionFailed') ElMessage.error(msg) } } @@ -1054,32 +1054,32 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp }, columns: { template_name: { - title: t('message.pages.miscprocurement.cost_template.templateName'), + title: t('message.pages.miscprocurement.costTemplate.templateName'), type: 'input', search: { show: true, component: { - props: { placeholder: t('message.pages.miscprocurement.cost_template.inputTemplateName'), clearable: true } + props: { placeholder: t('message.pages.miscprocurement.costTemplate.inputTemplateName'), clearable: true } } }, form: { col: { span: 12 }, - rules: [{ required: true, message: t('message.pages.miscprocurement.cost_template.inputTemplateName') }] + rules: [{ required: true, message: t('message.pages.miscprocurement.costTemplate.inputTemplateName') }] }, column: { minWidth: 160 } }, template_no: { - title: t('message.pages.miscprocurement.cost_template.templateNo'), + title: t('message.pages.miscprocurement.costTemplate.templateNo'), type: 'input', search: { show: true, - component: { props: { placeholder: t('message.pages.miscprocurement.cost_template.templateNo'), clearable: true } } + component: { props: { placeholder: t('message.pages.miscprocurement.costTemplate.templateNo'), clearable: true } } }, form: { show: false }, column: { width: 160, showOverflowTooltip: true } }, procurement_category: { - title: t('message.pages.miscprocurement.cost_template.procurementCategory'), + title: t('message.pages.miscprocurement.costTemplate.procurementCategory'), type: 'dict-select', dict: dict({ data: procurementDictLocalized }), column: { width: 120 }, @@ -1087,7 +1087,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp form: { col: { span: 12 }, value: '2', - rules: [{ required: true, message: t('message.pages.miscprocurement.cost_template.selectProcurementCategory') }], + rules: [{ required: true, message: t('message.pages.miscprocurement.costTemplate.selectProcurementCategory') }], valueChange({ form, value }) { doRefreshSectionsIfNeeded(form, { procurement_category: value }) logPT('onChange procurement_category', value, { visibleTitles: form.__visibleTitles }) @@ -1099,22 +1099,22 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } }, acti: { - title: t('message.pages.miscprocurement.cost_template.acti'), + title: t('message.pages.miscprocurement.costTemplate.acti'), type: 'dict-select', dict: dict({ data: [ - { value: 'Y', label: t('message.pages.miscprocurement.cost_template.actiYes') }, - { value: 'N', label: t('message.pages.miscprocurement.cost_template.actiNo') } + { value: 'Y', label: t('message.pages.miscprocurement.costTemplate.actiYes') }, + { value: 'N', label: t('message.pages.miscprocurement.costTemplate.actiNo') } ] }), column: { width: 90 }, search: { show: true }, form: { value: 'Y' } }, is_bom: { - title: t('message.pages.miscprocurement.cost_template.isBom'), + title: t('message.pages.miscprocurement.costTemplate.isBom'), type: 'dict-select', dict: dict({ data: [ - { value: 'Y', label: t('message.pages.miscprocurement.cost_template.bomYes') }, - { value: 'N', label: t('message.pages.miscprocurement.cost_template.bomNo') } + { value: 'Y', label: t('message.pages.miscprocurement.costTemplate.bomYes') }, + { value: 'N', label: t('message.pages.miscprocurement.costTemplate.bomNo') } ] }), column: { width: 100 }, search: { show: true }, @@ -1128,7 +1128,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } }, template_desc: { - title: t('message.pages.miscprocurement.cost_template.templateDesc'), + title: t('message.pages.miscprocurement.costTemplate.templateDesc'), type: 'textarea', column: { minWidth: 180, showOverflowTooltip: true }, form: { @@ -1137,7 +1137,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } }, version: { - title: t('message.pages.miscprocurement.cost_template.version'), + title: t('message.pages.miscprocurement.costTemplate.version'), type: 'number', column: { width: 100 }, form: { @@ -1149,18 +1149,18 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } }, status: { - title: t('message.pages.miscprocurement.cost_template.status'), + title: t('message.pages.miscprocurement.costTemplate.status'), type: 'dict-select', dict: dict({ data: [ - { value: '0', label: t('message.pages.miscprocurement.cost_template.statusUnconfirmed') }, - { value: '1', label: t('message.pages.miscprocurement.cost_template.statusConfirmed') }, - { value: '2', label: t('message.pages.miscprocurement.cost_template.statusCancelled') } + { value: '0', label: t('message.pages.miscprocurement.costTemplate.statusUnconfirmed') }, + { value: '1', label: t('message.pages.miscprocurement.costTemplate.statusConfirmed') }, + { value: '2', label: t('message.pages.miscprocurement.costTemplate.statusCancelled') } ] }), search: { show: true, - component: { props: { clearable: true, placeholder: t('message.pages.miscprocurement.cost_template.statusPlaceholder') } } + component: { props: { clearable: true, placeholder: t('message.pages.miscprocurement.costTemplate.statusPlaceholder') } } }, form: { show: false }, column: { width: 100 } @@ -1242,7 +1242,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp } }, update_time: { - title: t('message.pages.miscprocurement.cost_template.updateTime'), + title: t('message.pages.miscprocurement.costTemplate.updateTime'), type: 'datetime', form: { show: false }, column: { width: 180 }