| | |
| | | |
| | | <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' |
| | |
| | | buildWaveItemReportMeta, |
| | | buildWaveItemSearchParams, |
| | | createWaveItemSearchState, |
| | | getWaveItemReportTitle, |
| | | normalizeWaveItemRow |
| | | } from './waveItemPage.helpers' |
| | | import { createWaveItemDetailColumns, createWaveItemTableColumns } from './waveItemTable.columns' |
| | |
| | | |
| | | 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) |
| | |
| | | |
| | | 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) { |
| | |
| | | ...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)) : []) |
| | | } |
| | | }) |
| | | |
| | |
| | | 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) { |
| | |
| | | } |
| | | }), |
| | | 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 || '', |
| | |
| | | buildWaveItemReportMeta({ |
| | | previewMeta: rawPreviewMeta.value, |
| | | count: previewRows.value.length, |
| | | orientation: rawPreviewMeta.value?.reportStyle?.orientation || 'landscape' |
| | | orientation: rawPreviewMeta.value?.reportStyle?.orientation || 'landscape', |
| | | t |
| | | }) |
| | | ) |
| | | </script> |