From 33bd4dd1f0e41131cd8e5bbf87204a1f0b72bb08 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期六, 11 四月 2026 07:45:59 +0800
Subject: [PATCH] #页面优化
---
rsf-design/src/views/orders/wave/index.vue | 241 +++++++++++++++++++++++++++++++++++++++++------
1 files changed, 208 insertions(+), 33 deletions(-)
diff --git a/rsf-design/src/views/orders/wave/index.vue b/rsf-design/src/views/orders/wave/index.vue
index 7b2a419..5c36af9 100644
--- a/rsf-design/src/views/orders/wave/index.vue
+++ b/rsf-design/src/views/orders/wave/index.vue
@@ -11,20 +11,44 @@
<ElCard class="art-table-card">
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
<template #left>
- <ListExportPrint
- :preview-visible="previewVisible"
- @update:previewVisible="handlePreviewVisibleChange"
- :report-title="reportTitle"
- :selected-rows="selectedRows"
- :query-params="reportQueryParams"
- :columns="columns"
- :preview-rows="previewRows"
- :preview-meta="resolvedPreviewMeta"
- :total="pagination.total"
- :disabled="loading"
- @export="handleExport"
- @print="handlePrint"
- />
+ <ElSpace wrap>
+ <ElButton
+ type="primary"
+ :loading="batchTaskSubmitting"
+ :disabled="loading || batchTaskSubmitting || !selectedRows.length"
+ @click="handleBatchPublicTask"
+ >
+ {{ t('pages.orders.wave.buttons.batchPublicTask') }}
+ </ElButton>
+ <ElButton
+ :loading="autoExceSubmitting"
+ :disabled="loading || autoExceSubmitting || autoExce"
+ @click="toggleAutoExce(true)"
+ >
+ {{ t('pages.orders.wave.buttons.autoStart') }}
+ </ElButton>
+ <ElButton
+ :loading="autoExceSubmitting"
+ :disabled="loading || autoExceSubmitting || !autoExce"
+ @click="toggleAutoExce(false)"
+ >
+ {{ t('pages.orders.wave.buttons.autoPause') }}
+ </ElButton>
+ <ListExportPrint
+ :preview-visible="previewVisible"
+ @update:previewVisible="handlePreviewVisibleChange"
+ :report-title="reportTitle"
+ :selected-rows="selectedRows"
+ :query-params="reportQueryParams"
+ :columns="columns"
+ :preview-rows="previewRows"
+ :preview-meta="resolvedPreviewMeta"
+ :total="pagination.total"
+ :disabled="loading"
+ @export="handleExport"
+ @print="handlePrint"
+ />
+ </ElSpace>
</template>
</ArtTableHeader>
@@ -68,8 +92,8 @@
</template>
<script setup>
- import { computed, reactive, ref } from 'vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
+ import { computed, onMounted, reactive, ref } from 'vue'
+ import { ElButton, ElMessage, ElMessageBox, ElSpace } from 'element-plus'
import { useI18n } from 'vue-i18n'
import { useUserStore } from '@/store/modules/user'
import { useTable } from '@/hooks/core/useTable'
@@ -101,7 +125,10 @@
fetchGetWaveMany,
fetchPauseWave,
fetchPublicWaveTask,
+ fetchSelectWaveTask,
fetchStopWave,
+ fetchUpdateWaveAutoExceFlag,
+ fetchWaveAutoExceFlag,
fetchWavePage,
fetchWavePreviewPage
} from '@/api/wave'
@@ -125,6 +152,9 @@
const publicTaskSubmitting = ref(false)
const publicTaskWave = ref({})
const publicTaskRows = ref([])
+ const autoExce = ref(false)
+ const batchTaskSubmitting = ref(false)
+ const autoExceSubmitting = ref(false)
const detailPagination = reactive({
current: 1,
@@ -142,7 +172,9 @@
const detailColumns = computed(() => createWaveDetailItemColumns(t))
const publicTaskColumns = computed(() => createWavePreviewItemColumns(t))
const publicTaskCanSubmit = computed(
- () => publicTaskRows.value.length > 0 && publicTaskRows.value.every((row) => row.stockLocsText && row.stockLocsText !== '[]')
+ () =>
+ publicTaskRows.value.length > 0 &&
+ publicTaskRows.value.every((row) => row.stockLocsText && row.stockLocsText !== '[]')
)
const publicTaskWarningText = computed(() => t('pages.orders.wave.messages.publicTaskWarning'))
const searchItems = computed(() => [
@@ -185,6 +217,36 @@
}
},
{
+ label: t('pages.orders.wave.search.anfme'),
+ key: 'anfme',
+ type: 'inputNumber',
+ props: {
+ clearable: true,
+ controlsPosition: 'right',
+ placeholder: t('pages.orders.wave.search.anfmePlaceholder')
+ }
+ },
+ {
+ label: t('pages.orders.wave.search.qty'),
+ key: 'qty',
+ type: 'inputNumber',
+ props: {
+ clearable: true,
+ controlsPosition: 'right',
+ placeholder: t('pages.orders.wave.search.qtyPlaceholder')
+ }
+ },
+ {
+ label: t('pages.orders.wave.search.orderNum'),
+ key: 'orderNum',
+ type: 'inputNumber',
+ props: {
+ clearable: true,
+ controlsPosition: 'right',
+ placeholder: t('pages.orders.wave.search.orderNumPlaceholder')
+ }
+ },
+ {
label: t('pages.orders.wave.search.status'),
key: 'status',
type: 'select',
@@ -202,8 +264,18 @@
type: 'input',
props: { clearable: true, placeholder: t('pages.orders.wave.search.memoPlaceholder') }
},
- { label: t('pages.orders.wave.search.timeStart'), key: 'timeStart', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } },
- { label: t('pages.orders.wave.search.timeEnd'), key: 'timeEnd', type: 'date', props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' } }
+ {
+ label: t('pages.orders.wave.search.timeStart'),
+ key: 'timeStart',
+ type: 'date',
+ props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' }
+ },
+ {
+ label: t('pages.orders.wave.search.timeEnd'),
+ key: 'timeEnd',
+ type: 'date',
+ props: { clearable: true, type: 'date', valueFormat: 'YYYY-MM-DD' }
+ }
])
function updatePaginationState(target, response, fallbackCurrent, fallbackSize) {
@@ -254,11 +326,15 @@
return
}
if (action.key === 'stop') {
- await ElMessageBox.confirm(t('pages.orders.wave.messages.stopConfirm', { code: row.code || '' }), t('pages.orders.wave.messages.stopTitle'), {
- confirmButtonText: t('common.confirm'),
- cancelButtonText: t('common.cancel'),
- type: 'warning'
- })
+ await ElMessageBox.confirm(
+ t('pages.orders.wave.messages.stopConfirm', { code: row.code || '' }),
+ t('pages.orders.wave.messages.stopTitle'),
+ {
+ confirmButtonText: t('common.confirm'),
+ cancelButtonText: t('common.cancel'),
+ type: 'warning'
+ }
+ )
await fetchStopWave(row.id)
ElMessage.success(t('pages.orders.wave.messages.stopSuccess'))
await refreshData()
@@ -288,7 +364,8 @@
columnsFactory: () => createWaveTableColumns({ handleActionClick, t })
},
transform: {
- dataTransformer: (records) => (Array.isArray(records) ? records.map((item) => normalizeWaveRow(item, t)) : [])
+ dataTransformer: (records) =>
+ Array.isArray(records) ? records.map((item) => normalizeWaveRow(item, t)) : []
}
})
@@ -300,16 +377,33 @@
detailLoading.value = true
try {
const [detailResponse, previewResponse] = await Promise.all([
- guardRequestWithMessage(fetchGetWaveDetail(activeWaveId.value), {}, { timeoutMessage: t('pages.orders.wave.messages.detailTimeout') }),
guardRequestWithMessage(
- fetchWavePreviewPage(buildWaveDetailQueryParams({ waveId: activeWaveId.value, current: detailPagination.current, pageSize: detailPagination.size })),
+ fetchGetWaveDetail(activeWaveId.value),
+ {},
+ { timeoutMessage: t('pages.orders.wave.messages.detailTimeout') }
+ ),
+ guardRequestWithMessage(
+ fetchWavePreviewPage(
+ buildWaveDetailQueryParams({
+ waveId: activeWaveId.value,
+ current: detailPagination.current,
+ pageSize: detailPagination.size
+ })
+ ),
{ records: [], total: 0, current: detailPagination.current, size: detailPagination.size },
{ timeoutMessage: t('pages.orders.wave.messages.previewTimeout') }
)
])
detailData.value = normalizeWaveRow(detailResponse, t)
- detailTableData.value = Array.isArray(previewResponse?.records) ? previewResponse.records.map((item) => normalizeWaveItemRow(item, t)) : []
- updatePaginationState(detailPagination, previewResponse, detailPagination.current, detailPagination.size)
+ detailTableData.value = Array.isArray(previewResponse?.records)
+ ? previewResponse.records.map((item) => normalizeWaveItemRow(item, t))
+ : []
+ updatePaginationState(
+ detailPagination,
+ previewResponse,
+ detailPagination.current,
+ detailPagination.size
+ )
} finally {
detailLoading.value = false
}
@@ -323,12 +417,30 @@
publicTaskLoading.value = true
try {
const previewResponse = await guardRequestWithMessage(
- fetchWavePreviewPage(buildWaveDetailQueryParams({ waveId: publicTaskWave.value.id, current: publicTaskPagination.current, pageSize: publicTaskPagination.size })),
- { records: [], total: 0, current: publicTaskPagination.current, size: publicTaskPagination.size },
+ fetchWavePreviewPage(
+ buildWaveDetailQueryParams({
+ waveId: publicTaskWave.value.id,
+ current: publicTaskPagination.current,
+ pageSize: publicTaskPagination.size
+ })
+ ),
+ {
+ records: [],
+ total: 0,
+ current: publicTaskPagination.current,
+ size: publicTaskPagination.size
+ },
{ timeoutMessage: t('pages.orders.wave.messages.publicTaskTimeout') }
)
- publicTaskRows.value = Array.isArray(previewResponse?.records) ? previewResponse.records.map((item) => normalizeWaveItemRow(item, t)) : []
- updatePaginationState(publicTaskPagination, previewResponse, publicTaskPagination.current, publicTaskPagination.size)
+ publicTaskRows.value = Array.isArray(previewResponse?.records)
+ ? previewResponse.records.map((item) => normalizeWaveItemRow(item, t))
+ : []
+ updatePaginationState(
+ publicTaskPagination,
+ previewResponse,
+ publicTaskPagination.current,
+ publicTaskPagination.size
+ )
} finally {
publicTaskLoading.value = false
}
@@ -355,6 +467,65 @@
ElMessage.error(error?.message || t('pages.orders.wave.messages.publicTaskFailed'))
} finally {
publicTaskSubmitting.value = false
+ }
+ }
+
+ async function handleBatchPublicTask() {
+ if (!selectedRows.value.length) {
+ ElMessage.warning(t('pages.orders.wave.messages.batchPublicTaskSelect'))
+ return
+ }
+ try {
+ await ElMessageBox.confirm(
+ t('pages.orders.wave.messages.batchPublicTaskConfirm', {
+ count: selectedRows.value.length
+ }),
+ t('pages.orders.wave.messages.batchPublicTaskTitle'),
+ {
+ confirmButtonText: t('common.confirm'),
+ cancelButtonText: t('common.cancel'),
+ type: 'warning'
+ }
+ )
+ batchTaskSubmitting.value = true
+ await fetchSelectWaveTask({
+ ids: selectedRows.value.map((item) => item.id)
+ })
+ ElMessage.success(t('pages.orders.wave.messages.batchPublicTaskSuccess'))
+ selectedRows.value = []
+ await refreshData()
+ } catch (error) {
+ if (error === 'cancel' || error?.message === 'cancel') return
+ ElMessage.error(error?.message || t('pages.orders.wave.messages.batchPublicTaskFailed'))
+ } finally {
+ batchTaskSubmitting.value = false
+ }
+ }
+
+ async function toggleAutoExce(enabled) {
+ try {
+ autoExceSubmitting.value = true
+ await fetchUpdateWaveAutoExceFlag(enabled)
+ autoExce.value = !!enabled
+ ElMessage.success(
+ enabled
+ ? t('pages.orders.wave.messages.autoStartSuccess')
+ : t('pages.orders.wave.messages.autoPauseSuccess')
+ )
+ } catch (error) {
+ ElMessage.error(error?.message || t('pages.orders.wave.messages.autoUpdateFailed'))
+ } finally {
+ autoExceSubmitting.value = false
+ }
+ }
+
+ async function loadAutoExceFlag() {
+ try {
+ const response = await fetchWaveAutoExceFlag()
+ const rawVal = response?.val ?? response?.value ?? false
+ autoExce.value = rawVal === true || rawVal === 'true'
+ } catch {
+ autoExce.value = false
}
}
@@ -446,4 +617,8 @@
t
})
)
+
+ onMounted(() => {
+ loadAutoExceFlag()
+ })
</script>
--
Gitblit v1.9.1