zhou zhou
2 天以前 50e95b985a72fcec4a93a2470e9efdfb2620148a
rsf-design/src/views/orders/wave-item/index.vue
@@ -45,6 +45,7 @@
<script setup>
  import { computed, ref } from 'vue'
  import { useI18n } from 'vue-i18n'
  import { useUserStore } from '@/store/modules/user'
  import { useTable } from '@/hooks/core/useTable'
  import { usePrintExportPage } from '@/views/system/common/usePrintExportPage'
@@ -57,6 +58,7 @@
    buildWaveItemReportMeta,
    buildWaveItemSearchParams,
    createWaveItemSearchState,
    getWaveItemReportTitle,
    normalizeWaveItemRow
  } from './waveItemPage.helpers'
  import { createWaveItemDetailColumns, createWaveItemTableColumns } from './waveItemTable.columns'
@@ -65,8 +67,9 @@
  defineOptions({ name: 'WaveItemOrder' })
  const { t } = useI18n()
  const userStore = useUserStore()
  const reportTitle = '波次明细报表'
  const reportTitle = computed(() => getWaveItemReportTitle(t))
  const searchForm = ref(createWaveItemSearchState())
  const selectedRows = ref([])
  const detailDrawerVisible = ref(false)
@@ -75,16 +78,16 @@
  const reportQueryParams = computed(() => buildWaveItemSearchParams(searchForm.value))
  const searchItems = computed(() => [
    { label: '关键字', key: 'condition', type: 'input', props: { clearable: true, placeholder: '请输入波次单号/物料编码/物料名称' } },
    { label: '波次单号', key: 'waveCode', type: 'input', props: { clearable: true, placeholder: '请输入波次单号' } },
    { label: '单据编码', key: 'orderCode', type: 'input', props: { clearable: true, placeholder: '请输入单据编码' } },
    { label: '物料编码', key: 'matnrCode', type: 'input', props: { clearable: true, placeholder: '请输入物料编码' } },
    { label: '物料名称', key: 'maktx', type: 'input', props: { clearable: true, placeholder: '请输入物料名称' } },
    { label: '批次', key: 'batch', type: 'input', props: { clearable: true, placeholder: '请输入批次' } },
    { label: '供应商批次', key: 'splrBatch', type: 'input', props: { clearable: true, placeholder: '请输入供应商批次' } },
    { label: '动态字段索引', key: 'fieldsIndex', type: 'input', props: { clearable: true, placeholder: '请输入动态字段索引' } },
    { label: '开始时间', key: 'timeStart', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } },
    { label: '结束时间', key: 'timeEnd', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } }
    { label: t('pages.orders.waveItem.search.condition'), key: 'condition', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.conditionPlaceholder') } },
    { label: t('pages.orders.waveItem.search.waveCode'), key: 'waveCode', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.waveCodePlaceholder') } },
    { label: t('pages.orders.waveItem.search.orderCode'), key: 'orderCode', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.orderCodePlaceholder') } },
    { label: t('pages.orders.waveItem.search.matnrCode'), key: 'matnrCode', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.matnrCodePlaceholder') } },
    { label: t('pages.orders.waveItem.search.maktx'), key: 'maktx', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.maktxPlaceholder') } },
    { label: t('pages.orders.waveItem.search.batch'), key: 'batch', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.batchPlaceholder') } },
    { label: t('pages.orders.waveItem.search.splrBatch'), key: 'splrBatch', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.splrBatchPlaceholder') } },
    { label: t('pages.orders.waveItem.search.fieldsIndex'), key: 'fieldsIndex', type: 'input', props: { clearable: true, placeholder: t('pages.orders.waveItem.search.fieldsIndexPlaceholder') } },
    { label: t('pages.orders.waveItem.search.timeStart'), key: 'timeStart', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } },
    { label: t('pages.orders.waveItem.search.timeEnd'), key: 'timeEnd', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } }
  ])
  async function openDetail(row) {
@@ -112,10 +115,10 @@
        ...searchForm.value,
        pageSize: 20
      }),
      columnsFactory: () => createWaveItemTableColumns({ handleActionClick: openDetail })
      columnsFactory: () => createWaveItemTableColumns({ handleActionClick: openDetail, t })
    },
    transform: {
      dataTransformer: (records) => (Array.isArray(records) ? records.map((item) => normalizeWaveItemRow(item)) : [])
      dataTransformer: (records) => (Array.isArray(records) ? records.map((item) => normalizeWaveItemRow(item, t)) : [])
    }
  })
@@ -124,8 +127,8 @@
      return
    }
    const detailResponse = await guardRequestWithMessage(fetchGetWaveItemDetail(activeItemId.value), {}, { timeoutMessage: '波次明细详情加载超时,已停止等待' })
    detailData.value = normalizeWaveItemRow(detailResponse)
    const detailResponse = await guardRequestWithMessage(fetchGetWaveItemDetail(activeItemId.value), {}, { timeoutMessage: t('pages.orders.waveItem.messages.detailTimeout') })
    detailData.value = normalizeWaveItemRow(detailResponse, t)
  }
  function handleSelectionChange(rows) {
@@ -172,11 +175,11 @@
        }
      }),
    resolvePrintRecords,
    buildPreviewRows: (records) => buildWaveItemPrintRows(records),
    buildPreviewRows: (records) => buildWaveItemPrintRows(records, t),
    buildPreviewMeta: (rows) => {
      const now = new Date()
      return {
        reportTitle,
        reportTitle: reportTitle.value,
        reportDate: now.toLocaleDateString('zh-CN'),
        printedAt: now.toLocaleString('zh-CN', { hour12: false }),
        operator: userStore.getUserInfo?.name || userStore.getUserInfo?.username || '',
@@ -196,7 +199,8 @@
    buildWaveItemReportMeta({
      previewMeta: rawPreviewMeta.value,
      count: previewRows.value.length,
      orientation: rawPreviewMeta.value?.reportStyle?.orientation || 'landscape'
      orientation: rawPreviewMeta.value?.reportStyle?.orientation || 'landscape',
      t
    })
  )
</script>