From 34fa8e23c12a590143af45bd5ad4be3caaf646cc Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Wed, 11 Nov 2026 15:05:44 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E6=AF=9B=E5=88=A9=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bms-front/src/views/report/profit/index.vue | 58 ++++++++++++++++----- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/bms-front/src/views/report/profit/index.vue b/bms-front/src/views/report/profit/index.vue index 59f75d8e..26b39f9d 100644 --- a/bms-front/src/views/report/profit/index.vue +++ b/bms-front/src/views/report/profit/index.vue @@ -5,13 +5,13 @@ - + - + - + - + @@ -142,7 +142,7 @@ icon="Download" v-hasPermi="['report:profit:export']" :loading="exporting" - :disabled="!hasProfitRule()" + :disabled="!hasProfitRule() || !hasSearched" @click="handleExport" >导出当前维度 @@ -199,7 +199,7 @@ - + @@ -339,6 +339,7 @@ let summaryRequestVersion = 0 const rows = ref([]) let rowsRequestVersion = 0 const loading = ref(false) +const hasSearched = ref(false) const exporting = ref(false) const exportLogVisible = ref(false) const exportLogLoading = ref(false) @@ -427,8 +428,24 @@ function hasProfitRule() { return hasCustomerArea() && !!currentRule.value } +function hasCompleteDateRange() { + return Array.isArray(dateRange.value) && !!dateRange.value[0] && !!dateRange.value[1] +} + +function validateRequiredFilters(showMessage = true) { + if (!hasCompleteDateRange()) { + if (showMessage) ElMessage.warning('请选择完整的计费日期') + return false + } + if (!query.customerCode) { + if (showMessage) ElMessage.warning('请选择客户名称') + return false + } + return true +} + function loadSummary() { - if (!hasProfitRule() || !validateMultiValueFilters(false)) return Promise.resolve() + if (!hasSearched.value || !validateRequiredFilters(false) || !hasProfitRule() || !validateMultiValueFilters(false)) return Promise.resolve() const requestVersion = ++summaryRequestVersion summaryLoaded.value = false return listProfitSummary(buildQuery(false)).then(res => { @@ -439,7 +456,7 @@ function loadSummary() { } function loadRows() { - if (!hasProfitRule() || !validateMultiValueFilters()) return Promise.resolve() + if (!hasSearched.value || !validateRequiredFilters(false) || !hasProfitRule() || !validateMultiValueFilters()) return Promise.resolve() const requestVersion = ++rowsRequestVersion const requestDimension = dimension.value loading.value = true @@ -454,6 +471,7 @@ function loadRows() { } function clearReportResults() { + hasSearched.value = false summaryRequestVersion++ rowsRequestVersion++ orderListRequestVersion++ @@ -471,7 +489,9 @@ function clearReportResults() { function handleSearch() { clearReportResults() + if (!validateRequiredFilters()) return if (!hasProfitRule() || !validateMultiValueFilters()) return + hasSearched.value = true pageNum.value = 1 Promise.all([loadSummary(), loadRows()]) } @@ -481,7 +501,8 @@ function handleReset() { query.customerArea = customer_area.value[0]?.value ?? '' arBillStatus.value = '' dateRange.value = [formatLocalDate(-30), formatLocalDate(0)] - handleSearch() + hasSearched.value = false + clearReportResults() } function handleDimensionChange() { @@ -489,10 +510,12 @@ function handleDimensionChange() { pageNum.value = 1 rows.value = [] total.value = 0 + if (!hasSearched.value || !validateRequiredFilters(false)) return Promise.all([loadSummary(), loadRows()]) } function openOrderList(row) { + if (!hasSearched.value || !validateRequiredFilters()) return if (!validateMultiValueFilters()) return if (!row.orderCount) return orderListTitle.value = '订单列表' @@ -511,7 +534,7 @@ function openOrderList(row) { function loadOrderList() { if (!orderListContext.value) return - if (!hasProfitRule() || !validateMultiValueFilters()) return + if (!hasSearched.value || !validateRequiredFilters(false) || !hasProfitRule() || !validateMultiValueFilters()) return const requestVersion = ++orderListRequestVersion orderListLoading.value = true const params = { @@ -565,6 +588,7 @@ function arBillStatusLabel(value) { } async function handleExport() { + if (!hasSearched.value || !validateRequiredFilters()) return if (!hasProfitRule() || !validateMultiValueFilters()) return exporting.value = true const exporter = dimension.value === 'product' ? exportProfitProducts : exportProfitOrders @@ -679,7 +703,6 @@ function handleDeleteRate(row) { listProfitAreaRules().then(res => { areaRules.value = res.data || {} - handleSearch() }).catch(() => { areaRules.value = {} areaRulesFailed.value = true @@ -694,9 +717,20 @@ watch(customer_area, options => { } if (!options.some(area => area.value === query.customerArea)) { query.customerArea = options[0].value - handleSearch() } }, { immediate: true }) + +watch(() => [ + query.customerArea, + query.orderNo, + query.customerCode, + query.belongSalerCode, + query.productCode, + dateRange.value?.[0], + dateRange.value?.[1] +], () => { + if (hasSearched.value) clearReportResults() +})