🔧 悍沃 EPC 系统
{{ user.role==='customer' ? user.customer_code : user.name }} {{ roleName(user.role) }}
{{ t('equip.count', { n: eq.total }) }} 🔍 {{ t('common.fuzzy') }}
{{ t('equip.th.serial') }}{{ t('equip.th.model') }}{{ t('equip.th.region') }}{{ t('equip.th.country') }}{{ t('equip.th.ship') }}{{ t('equip.th.bom') }}{{ t('equip.th.op') }}
{{ r.serial }} {{ r.model }} {{ r.customer_code }} {{ loc(r.region2) }} {{ r.ship_date }} {{ r.has_bom==='是' ? t('common.yes') : t('common.no') }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: eq.page, total: Math.ceil(eq.total/eq.pageSize) }) }}

{{ t('equip.detailTitle', { serial: detail.serial }) }}

{{ detail.model }}
{{ detail.resource_no }}
{{ detail.customer_code }}
{{ detail.manager }}
{{ detail.region2 || detail.region }}
{{ detail.ship_date }}
{{ detail.order_no }}
{{ detail.qty }}
{{ t('equip.bomStruct') }} {{ detail.matched_bom_id }} {{ t('equip.noBom') }}
{{ t('equip.serviceHead', { n: detail.service_history.length }) }}
{{ t('equip.th.date') }}{{ t('equip.th.type') }}{{ t('equip.th.doc') }}{{ t('equip.th.matcode') }}{{ t('equip.th.matname') }}{{ t('equip.th.spec') }}{{ t('equip.th.qty') }}{{ t('equip.th.wh') }}
{{ h.date }}{{ h.out_type }}{{ h.doc_no }} {{ h.material_code }}{{ h.material_name }} {{ h.spec }}{{ h.qty_out }}{{ h.warehouse }}
{{ t('equip.noService') }}
{{ t('parts.count', { n: parts.total }) }} 🔍 {{ t('common.fuzzy') }}
{{ t('parts.th.code') }}{{ t('parts.th.name') }}{{ t('parts.th.nameEn') }}{{ t('parts.th.spec') }}{{ t('parts.th.unit') }}{{ t('parts.th.cat') }}{{ t('partspec.th.w') }}{{ t('partspec.th.l') }}{{ t('partspec.th.wd') }}{{ t('partspec.th.h') }}{{ t('parts.th.price') }}{{ t('orders.th.op') }}
{{ r.code }}{{ r.name }}{{ t('parts.badgeRep') }}{{ r.name_en || '—' }}{{ r.spec }} {{ r.unit }}{{ r.group_name }}{{ t('parts.badgeMaint') }} {{ r.weight!=null ? r.weight : '—' }} {{ r.length!=null ? r.length : '—' }} {{ r.width!=null ? r.width : '—' }} {{ r.height!=null ? r.height : '—' }} {{ r.price!=null ? (r.price + ' ' + r.currency) : '' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: parts.page, total: Math.ceil(parts.total/parts.pageSize) }) }}
{{ t('maint.attrLabel') }}:
{{ t('maint.th.bom') }}{{ t('maint.th.engine') }}{{ t('maint.th.code') }}{{ t('maint.th.name') }}{{ t('parts.th.nameEn') }}{{ t('maint.th.spec') }}{{ t('maint.th.model') }}{{ t('maint.th.w') }}{{ t('maint.th.l') }}{{ t('maint.th.wd') }}{{ t('maint.th.h') }}{{ t('parts.th.price') }}{{ t('maint.th.op') }}
{{ r.engine_supply }}{{ r.engine_code }}{{ r.part_code }}{{ r.name }}{{ t('parts.badgeRep') }}{{ r.name_en || '—' }}{{ r.spec }}{{ r.model_name }} {{ r.weight!=null ? r.weight : '—' }} {{ r.length!=null ? r.length : '—' }} {{ r.width!=null ? r.width : '—' }} {{ r.height!=null ? r.height : '—' }} {{ r.price!=null ? (r.price + ' ' + r.currency) : '' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: maint.page, total: Math.ceil(maint.total/maint.pageSize) }) }}
{{ t('maint.th.bom') }}{{ t('maint.th.code') }}{{ t('maint.th.engine') }}{{ t('maint.th.name') }}{{ t('parts.th.nameEn') }}{{ t('maint.th.spec') }}{{ t('maint.th.w') }}{{ t('maint.th.l') }}{{ t('maint.th.wd') }}{{ t('maint.th.h') }}{{ t('parts.th.price') }}{{ t('orders.th.op') }}
{{ r.engine_supply }}{{ r.part_code }}{{ r.engine_code }}{{ r.name }}{{ t('parts.badgeRep') }}{{ r.name_en || '—' }}{{ r.spec }} {{ r.weight!=null ? r.weight : '—' }} {{ r.length!=null ? r.length : '—' }} {{ r.width!=null ? r.width : '—' }} {{ r.height!=null ? r.height : '—' }} {{ r.price!=null ? (r.price + ' ' + r.currency) : '' }}
{{ t('maint.noMatch') }}
{{ t('pager.page', { cur: maintMachine.page, total: Math.ceil(maintMachine.total/maintMachine.pageSize) }) }}
{{ t('ordercheck.bom') }}: {{ orderCheck.msg }}
{{ t('ordercheck.bomResolved', { n: orderCheck.bomTotal }) }}
{{ t('ordercheck.summary', { n: orderCheck.total, m: orderCheck.matched, u: orderCheck.unmatched }) }}
{{ t('ordercheck.th.seq') }} {{ t('ordercheck.th.code') }} {{ t('ordercheck.th.name') }} {{ t('ordercheck.th.nameEn') }} {{ t('ordercheck.th.spec') }} {{ t('ordercheck.th.qty') }} {{ t('ordercheck.th.result') }}
{{ r.seq }} {{ r.code }} {{ r.name || '—' }} {{ r.std_name_en || r.name_en || '—' }} {{ r.spec || '—' }} {{ r.qty || '—' }} {{ r.result }}
{{ t('ordercheck.noData') }}
{{ t('cat.tabCustom') }}
{{ t('cat.tabPdf') }}
{{ t('cat.pkgNote') }} {{ pkgMsg }}
{{ t('cat.searching') }}
{{ t('cat.pageNo', { n: p.page }) }}
{{ p.snippet }}
{{ t('cat.noResult') }}
{{ t('cat.hint') }}
  • {{ b.bom_id }} {{ b.model_name }}
  • {{ t('bom.noMatch') }}
{{ t('bomtree.count', { n: btree.totalNodes, bom: btree.modelName }) }}
{{ t('bomtree.empty') }}
{{ t('bomtree.hint') }}
{{ t('orders.title') }} · {{ t('orders.th.customer') }}: {{ user.customer_code || '—' }}
{{ t('orders.th.no') }}{{ t('orders.th.customer') }}{{ t('orders.th.created') }}{{ t('orders.th.by') }}{{ t('orders.th.status') }}{{ t('orders.th.op') }}
{{ o.order_no }} {{ o.customer_code }} {{ o.created_at }} {{ o.created_by }} {{ o.status }}
{{ t('orders.empty') }}
{{ t('pager.page', { cur: ord.page, total: Math.ceil(ord.total/ord.pageSize) }) }}

{{ t('orders.detailTitle', { no: ordDetail.order_no }) }}

{{ ordDetail.customer_code }}
{{ ordDetail.created_by }}
{{ ordDetail.created_at }}
{{ ordDetail.status }}
{{ ordDetail.remark }}
{{ t('orders.itemsHead', { n: (ordDetail.items||[]).length }) }}
{{ t('orders.th.partcode') }}{{ t('orders.th.partname') }}{{ t('orders.th.spec') }}{{ t('orders.th.unit') }}{{ t('orders.th.qty') }}{{ t('orders.th.remark') }}
{{ it.part_code }}{{ it.part_name }}{{ it.spec }}{{ it.unit }}{{ it.qty }}{{ it.remark }}
{{ t('common.nodata') }}
{{ t('svc.tabList') }}
{{ t('svc.tabStats') }}
{{ t('svc.tabReport') }}
{{ t('svc.tabRules') }}
{{ t('svc.count', { n: svc.total }) }}
{{ t('svc.th.no') }}{{ t('svc.th.serial') }}{{ t('svc.th.cust') }} {{ t('svc.th.fbdate') }}{{ t('svc.th.country') }} {{ t('svc.th.fault') }}{{ t('svc.th.warranty') }}{{ t('svc.th.status') }} {{ t('svc.th.track') }}{{ t('svc.th.created') }}{{ t('svc.th.op') }}
{{ r.ticket_no }} {{ r.serial || '—' }} {{ r.customer_code }} {{ r.feedback_date || '—' }}
{{ r.use_hours }} h
{{ r.sale_country || '—' }} {{ svcFaultLabel(r.fault_type) }} {{ svcWarrLabel(r.warranty_status) }}
{{ r.warranty_end }}
{{ svcStLabel(r.status) }} {{ r.tracking_no || '—' }} {{ r.created_at }}
{{ t('svc.empty') }}
{{ t('pager.page', { cur: svc.page, total: Math.ceil(svc.total/svc.pageSize) }) }}
{{ svcStats.total }}
{{ t('svc.stat.total') }}
{{ svcStats.shipped }}
{{ t('svc.stat.shipped') }}
{{ svcStats.by_warranty.in_warranty || 0 }}
{{ t('svc.stat.inwarr') }}
{{ svcStats.by_warranty.out_warranty || 0 }}
{{ t('svc.stat.outwarr') }}
{{ t('svc.stat.byStatus') }}
{{ lang==='en' ? s.en : s.zh }} {{ svcStats.by_status[s.key] || 0 }}
{{ t('svc.stat.faultTop') }}
{{ svcFaultLabel(f.fault_type) }}{{ f.n }}
{{ t('common.nodata') }}
{{ t('svc.stat.partTop') }}
{{ p.part_code }} {{ p.part_name }} {{ p.q }}
{{ t('common.nodata') }}
{{ t('svc.rule.title') }}

{{ t('svc.rule.hint') }}

{{ t('svc.rule.scope') }}{{ t('svc.rule.value') }} {{ t('svc.rule.months') }}{{ t('svc.th.op') }}
{{ t('svc.rule.' + r.scope) }} {{ r.scope_value || '—' }} {{ r.months }}
{{ t('common.nodata') }}
{{ t('svc.rule.add') }}

{{ t('svc.newTitle') }}

{{ t('svc.f.parts') }}
{{ t('svc.f.partPh') }} {{ t('svc.th.qty') }}

{{ t('svc.pickTitle') }}

{{ t('svc.th.serial') }}{{ t('svc.th.model') }} {{ t('equip.th.ship') }}{{ t('svc.th.warranty') }}
{{ r.serial }} {{ r.model }} {{ r.ship_date }} {{ svcWarrLabel(r.status) }}
{{ r.warranty_end }}
{{ t('svc.eqNone') }}

{{ t('svc.detailTitle', { no: svcDetail.ticket_no }) }}

{{ svcDetail.customer_code }} {{ svcDetail.customer_name }}
{{ svcDetail.serial || '—' }}
{{ svcDetail.model || '—' }}
{{ svcFaultLabel(svcDetail.fault_type) }}
{{ svcDetail.sale_country || '—' }}
{{ svcDetail.feedback_date || '—' }}
{{ svcDetail.use_hours !== null && svcDetail.use_hours !== undefined ? svcDetail.use_hours + ' h' : '—' }}
{{ svcDetail.ship_date || '—' }}
{{ svcWarrLabel(svcDetail.warranty_status) }} {{ svcWarrDays(svcDetail) }}
{{ svcStLabel(svcDetail.status) }}
{{ svcDetail.created_at }}
{{ svcDetail.handler }}
{{ svcDetail.handle_note }}
{{ svcDetail.fault_desc }}
{{ t('svc.logi') }}
{{ svcDetail.carrier || '—' }}
{{ svcDetail.tracking_no || '—' }}
{{ svcDetail.ship_at || '—' }}
{{ svcDetail.eta || '—' }}
{{ svcCusLabel(svcDetail.customs_status) }}

{{ t('common.nodata') }}

{{ t('svc.itemsHead', { n: (svcDetail.items||[]).length }) }}
{{ t('orders.th.partcode') }} {{ t('svc.th.name') }}{{ t('svc.th.spec') }} {{ t('svc.th.qty') }}{{ t('svc.th.price') }}{{ t('svc.th.charge') }}
{{ it.part_code }} {{ lang==='en' && it.name_en ? it.name_en : it.part_name }} {{ it.spec }} {{ it.qty }} {{ it.unit }} {{ it.price!=null ? it.currency + ' ' + it.price : '—' }} {{ t('svc.charge.' + (it.charge_type||'paid')) }}
{{ t('common.nodata') }}
{{ t('svc.logHead') }}
{{ t('svc.th.created') }}{{ t('svc.logi') }} {{ t('svc.th.status') }}{{ t('svc.kv.handler') }}{{ t('svc.note') }}
{{ l.created_at }} {{ l.action }} {{ l.from_status ? svcStLabel(l.from_status) + ' → ' + svcStLabel(l.to_status) : svcStLabel(l.to_status) }} {{ l.operator }} {{ l.note }}
{{ t('common.nodata') }}

{{ t('svc.review') }}

{{ t('svc.itemsHead', { n: svcReviewForm.items.length }) }}
{{ t('orders.th.partcode') }}{{ t('svc.th.qty') }}{{ t('svc.th.charge') }}
{{ it.part_code }}
{{ it.part_name }}

{{ t('svc.logiTitle') }}

{{ t('svc.addPartTitle') }}

{{ t('svc.f.partPh') }}{{ t('svc.th.qty') }}{{ t('svc.th.charge') }}
🤖
🤖 {{ t('ai.title') }}
{{ t('inv.tabAlerts') }}
{{ t('inv.tabList') }}
{{ t('inv.tabLogs') }}
{{ t('inv.tabConfig') }}
{{ invStats.counts.total || 0 }}
{{ t('inv.kpi.total') }}
{{ invStats.counts.maintained || 0 }}
{{ t('inv.kpi.maintained') }}
{{ invStats.counts.unset || 0 }}
{{ t('inv.kpi.unset') }}
{{ invStats.alert_count || 0 }}
{{ t('inv.kpi.alert') }}
{{ invStats.counts.dormant || 0 }}
{{ t('inv.kpi.dormant') }}
{{ invMoney(invStats.amount) }}
{{ t('inv.kpi.amount') }}
{{ t('inv.count', { n: invList.total }) }}
{{ t('inv.th.code') }}{{ t('inv.th.name') }}{{ t('inv.th.spec') }} {{ t('inv.th.stock') }}{{ t('inv.th.safety') }}{{ t('inv.th.state') }} {{ t('inv.th.avg') }}{{ t('inv.th.lastOut') }} {{ t('inv.th.price') }}{{ t('inv.th.amount') }} {{ t('inv.th.suggest') }}{{ t('inv.th.op') }}
{{ r.code }} {{ lang==='en' ? (r.name_en || r.name) : r.name }} {{ r.spec }} {{ invNum(r.stock) }} {{ r.safety }} {{ invStLabel(r.state) }} {{ r.avg_month }} {{ r.last_out || t('inv.na') }} {{ invMoney(r.price) }} {{ invMoney(r.amount) }} {{ r.suggest }}{{ t('inv.na') }}
{{ invTab==='alerts' ? t('inv.emptyAlert') : t('inv.empty') }}
{{ t('pager.page', { cur: invList.page, total: Math.ceil(invList.total/invList.pageSize) }) }}
{{ t('inv.count', { n: invLogs.total }) }}
{{ t('inv.th.time') }}{{ t('inv.th.code') }}{{ t('inv.th.name') }} {{ t('inv.th.type') }}{{ t('inv.th.qty') }} {{ t('inv.th.before') }}{{ t('inv.th.after') }} {{ t('inv.th.reason') }}{{ t('inv.th.ref') }}{{ t('inv.th.operator') }}
{{ r.created_at }} {{ r.part_code }} {{ lang==='en' ? (r.name_en || r.name) : r.name }} {{ invTypeLabel(r.change_type) }} {{ r.qty }} {{ r.before_qty }} {{ r.after_qty }} {{ r.reason }} {{ r.ref_no }} {{ r.operator }}
{{ t('inv.empty') }}
{{ t('pager.page', { cur: invLogs.page, total: Math.ceil(invLogs.total/invLogs.pageSize) }) }}
{{ t('inv.cfg.hint') }}
~
{{ rptNum(rptOv.current.doc_count) }}
{{ t('rpt.kpi.doc') }}
{{ t('rpt.vsPrev') }} {{ rptDelta(rptOv.delta.doc_count) }}
{{ rptNum(rptOv.current.qty) }}
{{ t('rpt.kpi.qty') }}
{{ t('rpt.vsPrev') }} {{ rptDelta(rptOv.delta.qty) }}
{{ rptMoney(rptOv.current.amount) }}
{{ t('rpt.kpi.amount') }}
{{ t('rpt.vsPrev') }} {{ rptDelta(rptOv.delta.amount) }}
{{ rptNum(rptOv.current.customers) }}
{{ t('rpt.kpi.cust') }}
{{ rptNum(rptOv.current.parts) }}
{{ t('rpt.kpi.part') }}
{{ rptNum(rptOv.current.countries) }}
{{ t('rpt.kpi.country') }}
{{ t('rpt.prevRange', { f: rptOv.prev_range.from, t: rptOv.prev_range.to }) }}
{{ t('rpt.trend') }}
{{ t('rpt.groupMonth') }}
{{ t('rpt.groupQuarter') }}
{{ t('rpt.groupYear') }}
{{ t('rpt.top') }} {{ rptTop.total_groups }} {{ lang==='en' ? 'groups' : '个分组' }}
{{ t('rpt.th.rank') }}{{ t('rpt.th.item') }} {{ t('rpt.th.orders') }}{{ t('rpt.th.qty') }} {{ t('rpt.th.amount') }}{{ t('rpt.th.share') }}{{ t('inv.th.op') }}
{{ i+1 }} {{ r.name || r.key }} {{ r.doc_count }} {{ rptNum(r.qty) }} {{ rptMoney(r.amount) }} {{ r.share }}%
{{ t('rpt.empty') }}
{{ t('rpt.detail') }} {{ rptDimLabel(rptDet.dim) }}: {{ rptDet.dim_key }} {{ t('rpt.totalQty', { n: rptNum(rptDet.sum_qty) }) }} · {{ t('rpt.totalAmt', { n: rptMoney(rptDet.sum_amount) }) }}
{{ t('rpt.th.date') }}{{ t('rpt.th.type') }}{{ t('rpt.th.docNo') }} {{ t('rpt.th.country') }}{{ t('rpt.th.cust') }}{{ t('rpt.th.sales') }} {{ t('rpt.th.code') }}{{ t('rpt.th.name') }} {{ t('rpt.th.qty') }}{{ t('rpt.th.amount') }}{{ t('rpt.th.warehouse') }}
{{ r.date }} {{ r.out_type }} {{ r.doc_no }} {{ loc(r.country) }} {{ r.customer_name }} {{ r.salesperson }} {{ r.material_code }} {{ r.material_name }} {{ r.qty }} {{ rptMoney(r.amount) }} {{ r.warehouse }}
{{ t('rpt.empty') }}
{{ t('pager.page', { cur: rptDet.page, total: Math.ceil(rptDet.total/rptDet.pageSize) }) }}
{{ stats.kpi.equipment || 0 }}
{{ t('stats.kpi.equipment') }}
{{ stats.kpi.models || 0 }}
{{ t('stats.kpi.models') }}
{{ stats.kpi.parts || 0 }}
{{ t('stats.kpi.parts') }}
{{ stats.kpi.albums || 0 }}
{{ t('stats.kpi.albums') }}
{{ stats.kpi.customers || 0 }}
{{ t('stats.kpi.customers') }}
{{ stats.kpi.sales || 0 }}
{{ t('stats.kpi.sales') }}

{{ t('stats.chart.country') }}

{{ t('stats.chart.model') }}

{{ t('stats.chart.trend') }}

{{ t('stats.chart.parts') }}

{{ t('stats.chart.album') }}

{{ t('stats.loading') }}

{{ t('admin.tabEquip') }}
{{ t('admin.tabBom') }}
{{ t('admin.tabCust') }}
{{ t('pm.title') }}
{{ t('rep.title') }}
{{ t('admin.tabMaint') }}
{{ t('bomclean.title') }}
{{ t('partspec.title') }}
{{ t('nav.sales') }}
{{ t('price.title') }}
{{ t('config.title') }}
{{ t('term.title') }}
{{ t('logs.title') }}
⚠ {{ t('stock.title') }}
🏭 {{ t('supplier.title') }}
📈 {{ t('report.title') }}
{{ t('admin.count', { n: ae.total }) }}
{{ t('admin.th.serial') }}{{ t('admin.th.model') }}{{ t('admin.th.custCode') }}{{ t('admin.th.region') }}{{ t('admin.th.ship') }}{{ t('admin.th.op') }}
{{ r.serial }} {{ r.model }} {{ r.customer_code }} {{ r.region }} {{ r.ship_date }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: ae.page, total: Math.ceil(ae.total/ae.pageSize) }) }}
{{ t('admin.custCount', { n: ac.total }) }}
{{ t('admin.thc.code') }}{{ t('admin.thc.country') }}{{ t('admin.thc.manager') }}{{ t('admin.thc.phone') }}
{{ r.code }} {{ loc(r.country) }} {{ r.manager }} {{ r.phone }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: ac.page, total: Math.ceil(ac.total/ac.pageSize) }) }}
{{ t('admin.countModel', { n: ab.rows.length }) }}
{{ t('admin.th.bomcode') }}{{ t('admin.th.bomname') }}{{ t('admin.th.parts') }}{{ t('admin.th.op') }}
{{ b.bom_id }} {{ b.model_name }} {{ b.items }}
{{ t('common.nodata') }}
{{ t('pm.count', { n: pm.total }) }}
{{ t('pm.th.code') }}{{ t('pm.th.name') }}{{ t('pm.th.nameEn') }}{{ t('pm.th.spec') }}{{ t('pm.th.unit') }}{{ t('pm.th.oe') }}{{ t('pm.th.drawing') }}{{ t('pm.th.material') }}{{ t('pm.th.type') }}{{ t('pm.th.attr') }}{{ t('pm.th.brand') }}{{ t('pm.th.group') }}{{ t('pm.th.remark') }}{{ t('pm.th.op') }}
{{ r.code }}{{ r.name }}{{ r.name_en || '—' }}{{ r.spec }}{{ r.unit }} {{ r.oe_no }}{{ r.drawing_no }}{{ r.material }}{{ r.ptype }}{{ r.attr }}{{ r.brand }}{{ r.group_name }}{{ r.remark }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: pm.page, total: Math.ceil(pm.total/pm.pageSize) }) }}
{{ t('rep.count', { n: rep.total }) }}
{{ t('rep.th.id') }}{{ t('rep.th.old') }}{{ t('rep.th.new') }}{{ t('rep.th.type') }}{{ t('rep.th.eff') }}{{ t('rep.th.exp') }}{{ t('rep.fitment') }}{{ t('common.status') }}{{ t('rep.th.note') }}{{ t('rep.th.caution') }}{{ t('rep.th.op') }}
{{ r.id }}{{ r.old_no }}{{ r.new_no }} {{ r.replace_type }}{{ r.eff_date }}{{ r.exp_date }} {{ expStatus(r) }} {{ r.note }}{{ r.caution }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: rep.page, total: Math.ceil(rep.total/rep.pageSize) }) }}
  • {{ b.bom_id }} {{ b.model_name }}
  • 无匹配,将按输入值 «{{ maintAdmin.bom }}» 查询
{{ t('maint.count', { n: maintAdmin.total }) }}
{{ t('maint.stats', { t: maintAdmin.stats.total, d: maintAdmin.stats.distinct }) }}
{{ t('maint.th.bom') }}{{ t('maint.th.engine') }}{{ t('maint.th.code') }}{{ t('maint.th.name') }}{{ t('parts.th.nameEn') }}{{ t('maint.th.spec') }}{{ t('maint.th.unit') }}{{ t('maint.th.attr') }}{{ t('maint.th.brand') }}{{ t('maint.th.group') }}{{ t('maint.th.remark') }}{{ t('maint.th.w') }}{{ t('maint.th.l') }}{{ t('maint.th.wd') }}{{ t('maint.th.h') }}{{ t('maint.th.op') }}
{{ r.engine_supply }}{{ r.engine_code }}{{ r.part_code }}{{ r.name }}{{ r.name_en || '—' }}{{ r.spec }}{{ r.unit }} {{ r.attr }} {{ r.brand }} {{ r.ptype }} {{ r.remark }} {{ r.weight!=null ? r.weight : '—' }} {{ r.length!=null ? r.length : '—' }} {{ r.width!=null ? r.width : '—' }} {{ r.height!=null ? r.height : '—' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: maintAdmin.page, total: Math.ceil(maintAdmin.total/maintAdmin.pageSize) }) }}
  • {{ b.bom_id }} {{ b.model_name }} · {{ b.items }}项
  • 无匹配,将按输入值 «{{ bomClean.bomId }}» 查询
{{ t('bomclean.report', { total: bomClean.result.total, spare: bomClean.result.spare_total, noise: bomClean.result.noise_dropped, dup: bomClean.result.dup_dropped, um: bomClean.result.unmatched_dropped }) }}
{{ t('bomclean.savedHint', { n: bomClean.result.saved_spare }) }}

{{ t('bomclean.noiseTitle') }}({{ bomClean.result.noise_count }})

{{ t('bomclean.thCode') }}{{ t('bomclean.thName') }}{{ t('bomclean.thSpec') }}
{{ r.code }}{{ r.name }}{{ r.spec }}
{{ t('common.nodata') }}

{{ t('bomclean.dupTitle') }}({{ bomClean.result.dup_count }})

{{ t('bomclean.thCode') }}{{ t('bomclean.thName') }}{{ t('bomclean.thSpec') }}
{{ r.code }}{{ r.name }}{{ r.spec }}
{{ t('common.nodata') }}

{{ t('bomclean.spareTitle') }}({{ bomClean.result.spare_total }})

{{ t('bomclean.thCode') }}{{ t('bomclean.thName') }}{{ t('bomclean.thNameEn') }}{{ t('bomclean.thSpec') }}{{ t('bomclean.thRemark') }}
{{ r.code }}{{ r.name }}{{ r.name_en || '—' }}{{ r.spec }}{{ r.remark }}
{{ t('common.nodata') }}

{{ t('bomclean.rulesTitle') }}

{{ t('bomclean.rulesDesc', { noise: bomClean.rules.noise.length, dedup: bomClean.rules.dedup.length }) }}

{{ bomClean.rulesFile.name }}
{{ bomClean.rulesMsg }}
{{ t('partspec.count', { n: partSpec.total }) }} {{ partSpec.msg }}
{{ t('partspec.th.code') }}{{ t('partspec.th.name') }}{{ t('partspec.th.w') }}{{ t('partspec.th.l') }}{{ t('partspec.th.wd') }}{{ t('partspec.th.h') }}{{ t('maint.th.op') }}
{{ r.material_code }}{{ r.name }} {{ r.weight!=null ? r.weight : '' }} {{ r.length!=null ? r.length : '' }} {{ r.width!=null ? r.width : '' }} {{ r.height!=null ? r.height : '' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: partSpec.page, total: Math.ceil(partSpec.total/partSpec.pageSize) }) }}
{{ t('sales.count', { n: sl.total, q: sl.sum_qty }) }}
{{ t('sales.th.date') }}{{ t('sales.th.type') }}{{ t('sales.th.doc') }}{{ t('sales.th.country') }} {{ t('sales.th.matcode') }}{{ t('sales.th.matname') }}{{ t('sales.th.spec') }}{{ t('sales.th.qty') }}{{ t('sales.th.wh') }}
{{ r.date }}{{ r.out_type }}{{ r.doc_no }}{{ loc(r.country) }} {{ r.material_code }}{{ r.material_name }} {{ r.spec }}{{ r.qty_out }}{{ r.warehouse }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: sl.page, total: Math.ceil(sl.total/sl.pageSize) }) }}
{{ t('price.count', { n: pr.total }) }}
{{ t('pm.th.code') }}{{ t('pm.th.name') }}{{ t('pm.th.nameEn') }} {{ t('price.th.currency') }}{{ t('price.th.price') }} {{ t('price.th.type') }}{{ t('price.th.supplier') }} {{ t('price.th.moq') }}{{ t('price.th.lead') }} {{ t('price.th.eff') }}{{ t('pm.th.remark') }}{{ t('pm.th.op') }}
{{ r.part_code }}{{ r.name }}{{ r.name_en || '—' }} {{ r.currency }}{{ r.price!=null ? r.price.toFixed(2) : '—' }} {{ r.price_type }}{{ r.supplier || '—' }} {{ r.moq!=null ? r.moq : '—' }} {{ r.lead_time_days!=null ? r.lead_time_days : '—' }} {{ r.effective_date || '—' }} {{ r.remark || '—' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: pr.page, total: Math.ceil(pr.total/pr.pageSize) }) }}
{{ t('config.th.key') }}{{ t('config.th.value') }}{{ t('config.th.desc') }}{{ t('config.th.time') }}{{ t('pm.th.op') }}
{{ r.key }}{{ r.value }}{{ r.description || '—' }}{{ r.updated_at || '—' }}
{{ t('common.nodata') }}

{{ t('ai.cfgTitle') }}

{{ t('ai.cfgStatus') }}: {{ llmStatus.configured ? t('ai.configured') : t('ai.notConfig') }} ({{ llmStatus.provider }})

{{ t('ai.cfgHint') }}

{{ t('backup.title') }}

{{ t('backup.hint') }}
{{ t('backup.th.file') }}{{ t('backup.th.time') }}{{ t('backup.th.size') }}{{ t('pm.th.op') }}
{{ b.file }}{{ b.time }}{{ fmtSize(b.size) }}
{{ t('common.nodata') }}
{{ t('term.count', { n: tm.total }) }}
{{ t('term.th.zh') }}{{ t('term.th.en') }}{{ t('term.th.domain') }}{{ t('term.th.time') }}{{ t('pm.th.op') }}
{{ r.zh_term }}{{ r.en_term }}{{ r.domain }}{{ r.created_at || '—' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: tm.page, total: Math.ceil(tm.total/tm.pageSize) }) }}
{{ t('logs.count', { n: logs.total }) }}
{{ t('logs.th.time') }}{{ t('logs.th.user') }}{{ t('logs.th.role') }}{{ t('logs.th.action') }}{{ t('logs.th.target') }}{{ t('logs.th.detail') }}{{ t('logs.th.ip') }}
{{ r.created_at }} {{ r.username }}{{ r.role }} {{ r.action }}{{ r.target || '—' }} {{ r.detail || '—' }}{{ r.ip || '—' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: logs.page, total: Math.ceil(logs.total/logs.pageSize) }) }}
{{ t('stock.count', { n: stock.total }) }} {{ t('stock.hint') }}
{{ t('pm.th.code') }}{{ t('pm.th.name') }}{{ t('pm.th.nameEn') }}{{ t('pm.th.spec') }}{{ t('pm.th.brand') }}{{ t('stock.th.stock') }}{{ t('stock.th.safety') }}{{ t('stock.th.status') }}
{{ r.code }}{{ r.name }}{{ r.name_en || '—' }} {{ r.spec || '—' }}{{ r.brand || '—' }} {{ r.stock_qty!=null?r.stock_qty:'未录入' }} {{ r.safety_stock!=null?r.safety_stock:'—' }} {{ t('stock.alert') }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: stock.page, total: Math.ceil(stock.total/stock.pageSize) }) }}

{{ t('stock.tip') }}

{{ t('supplier.count', { n: suppliers.total }) }}
{{ t('supplier.th.name') }}{{ t('supplier.th.country') }}{{ t('supplier.th.contact') }}{{ t('supplier.th.lead') }}{{ t('supplier.th.remark') }}{{ t('pm.th.op') }}
{{ s.name }}{{ s.country || '—' }}{{ s.contact || '—' }} {{ s.lead_time_days!=null?s.lead_time_days:'—' }}{{ s.remark || '—' }}
{{ t('common.nodata') }}
{{ t('pager.page', { cur: suppliers.page, total: Math.ceil(suppliers.total/suppliers.pageSize) }) }}

{{ t('supplier.aggTitle') }}

{{ t('supplier.th.name') }}{{ t('supplier.th.cnt') }}{{ t('supplier.th.min') }}{{ t('supplier.th.max') }}{{ t('supplier.th.avg') }}
{{ a.supplier }}{{ a.part_cnt }} {{ a.min_price!=null?a.min_price.toFixed(2):'—' }} {{ a.max_price!=null?a.max_price.toFixed(2):'—' }} {{ a.avg_price!=null?a.avg_price.toFixed(2):'—' }}
{{ t('common.nodata') }}

{{ report.title }}

{{ h }}
{{ v }}
{{ t('common.nodata') }}
🛒{{ cart.length }}
{{ cartMsg }}

{{ t('cart.title') }}({{ cart.length }})

{{ orderCountry }}
{{ t('orders.th.partcode') }}{{ t('orders.th.partname') }}{{ t('cart.qty') }}{{ t('cart.remove') }}
{{ x.code }}{{ x.name }}
{{ t('cart.empty') }}
{{ t('acct.count', { n: acct.rows.length }) }}
{{ t('acct.th.user') }}{{ t('acct.th.role') }}{{ t('acct.th.code') }}{{ t('acct.th.name') }}{{ t('acct.th.created') }}{{ t('acct.th.op') }}
{{ u.username }} {{ roleName(u.role) }} {{ u.customer_code || '—' }} {{ u.display_name }} {{ u.created_at || '—' }}
{{ t('common.nodata') }}
{{ t('consign.tabPlace') }}
{{ t('consign.tabStock') }}
{{ t('consign.tabIssue') }}
{{ consignStats.placed||0 }}
{{ t('consign.kpi.placed') }}
{{ consignStats.issued||0 }}
{{ t('consign.kpi.issued') }}
{{ consignStats.remain||0 }}
{{ t('consign.kpi.remain') }}
{{ consignStats.wh_count||0 }}
{{ t('consign.kpi.wh') }}
{{ t('consign.count',{n:placeTotal}) }}
{{ t('consign.th.batchNo') }}{{ t('consign.th.wh') }}{{ t('consign.th.country') }} {{ t('consign.th.date') }}{{ t('consign.th.placed') }}{{ t('consign.th.issued') }} {{ t('consign.th.remain') }}{{ t('consign.th.remark') }}{{ t('consign.th.op') }}
{{ r.batch_no }}{{ r.wh_cust_name }}{{ r.country }} {{ r.place_date }}{{ r.qty_placed }}{{ r.qty_issued }} {{ r.qty_remain }}{{ r.remark }}
{{ t('consign.empty') }}
{{ t('pager.page',{cur:placePage,total:Math.ceil(placeTotal/placePageSize)}) }}
{{ t('consign.count',{n:stockTotal}) }}
{{ t('consign.th.wh') }}{{ t('consign.th.country') }}{{ t('consign.th.code') }} {{ t('consign.th.name') }}{{ t('consign.th.spec') }}{{ t('consign.th.unit') }} {{ t('consign.th.remain') }}{{ t('consign.th.safety') }}{{ t('consign.th.low') }}
{{ r.wh_cust_name }}{{ r.country }}{{ r.material_code }} {{ lang==='en'?(r.name_en||r.name):r.name }}{{ r.spec }}{{ r.unit }} {{ r.remain }}{{ r.safety }} {{ t('consign.low') }}
{{ t('consign.empty') }}
{{ t('pager.page',{cur:stockPage,total:Math.ceil(stockTotal/stockPageSize)}) }}
{{ t('consign.count',{n:issueTotal}) }}
{{ t('consign.th.issueNo') }}{{ t('consign.th.wh') }}{{ t('consign.th.reqCust') }} {{ t('consign.th.type') }}{{ t('consign.th.qty') }}{{ t('consign.th.date') }}{{ t('consign.th.ticket') }}
{{ r.issue_no }}{{ r.wh_cust_name }}{{ r.req_cust_name }} {{ consignTypeLabel(r.issue_type) }} {{ r.qty_total }}{{ r.issue_date }}{{ r.ticket_no }}
{{ t('consign.empty') }}
{{ t('pager.page',{cur:issuePage,total:Math.ceil(issueTotal/issuePageSize)}) }}