zhang_nuo
2026-08-26 9b25e5c7a4e2e300b213ad4d5fb4d4b72cdced39
src/views/procurementManagement/procurementReport/index.vue
@@ -48,11 +48,15 @@
          <div class="summary-stats">
            <div class="stat-item">
              <span class="stat-label">采购总额:</span>
              <span class="stat-value">¥{{ businessSummaryStats.totalAmount.toLocaleString() }}</span>
              <span class="stat-value">¥{{ formatStatAmount(businessSummaryStats.totalAmount) }}</span>
            </div>
            <div class="stat-item">
              <span class="stat-label">商品种类:</span>
              <span class="stat-value">{{ businessSummaryStats.productTypes }}</span>
            </div>
            <div class="stat-item">
              <span class="stat-label">退款总额:</span>
              <span class="stat-value">¥{{ formatStatAmount(businessSummaryStats.returnAmount) }}</span>
            </div>
          </div>
        </div>
@@ -73,12 +77,14 @@
</template>
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { ref, reactive, onMounted, getCurrentInstance } from 'vue'
import { ElMessage } from 'element-plus'
import { Download } from '@element-plus/icons-vue'
import PIMTable from '@/components/PIMTable/PIMTable.vue'
import { procurementBusinessSummaryListPage } from '@/api/procurementManagement/procurementReport'
import { productTreeList } from '@/api/basicData/product'
const { proxy } = getCurrentInstance()
// 响应式数据
const loading = ref(false)
@@ -95,36 +101,57 @@
// 统计数据
const businessSummaryStats = ref({
  totalAmount: 0,
  productTypes: 0,
  supplierCount: 0
  returnAmount: 0,
  productTypes: 0
})
// 汇总金额展示,保留6位小数
const formatStatAmount = (val) => {
  return Number(val || 0).toLocaleString('zh-CN', {
    minimumFractionDigits: 6,
    maximumFractionDigits: 6
  })
}
// 表格列配置(根据后端字段定义)
const tableColumns = ref([
  {
    label: '产品大类',
    prop: 'productCategory',
    width: 150,
  },
  {
    label: '规格型号',
    prop: 'specificationModel',
    width: 180
  },
  {
    label: '采购数量',
    prop: 'purchaseNum',
    width: 120,
    formatData: (val) => {
      return val ? parseFloat(val).toLocaleString() : '0'
      return val ? parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 6, maximumFractionDigits: 6 }) : '0'
    }
  },
  {
    label: '采购金额',
    prop: 'purchaseAmount',
    width: 140,
    label: '退货数量',
    prop: 'returnQuantity',
    width: 120,
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '¥0.00'
      return val ? parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 6, maximumFractionDigits: 6 }) : '0'
    }
  },
  {
    label: '退货金额',
    prop: 'returnAmount',
    width: 120,
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 6, maximumFractionDigits: 6 })}` : '¥0.000000'
    }
  },
  {
    label: '退款储量',
    prop: 'purchaseAmount',
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 6, maximumFractionDigits: 6 })}` : '¥0.000000'
    }
  },
  {
@@ -137,13 +164,12 @@
    prop: 'averagePrice',
    width: 120,
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toFixed(2)}` : '¥0.00'
      return val ? `¥${parseFloat(val).toFixed(6)}` : '¥0.000000'
    }
  },
  {
    label: '供应商名称',
    prop: 'supplierName',
    width: 200
  },
  {
    label: '录入日期',
@@ -242,13 +268,15 @@
        businessSummaryStats.value.totalAmount = businessSummaryData.value.reduce((sum, item) => {
          return sum + (parseFloat(item.purchaseAmount) || 0)
        }, 0)
        businessSummaryStats.value.productTypes = new Set(businessSummaryData.value.map(item => item.productCategory)).size
        businessSummaryStats.value.supplierCount = new Set(businessSummaryData.value.map(item => item.supplierName).filter(Boolean)).size
        businessSummaryStats.value.returnAmount = businessSummaryData.value.reduce((sum, item) => {
          return sum + (parseFloat(item.returnAmount) || 0)
        }, 0)
        businessSummaryStats.value.productTypes = businessSummaryData.value.length
      } else {
        businessSummaryStats.value = {
          totalAmount: 0,
          productTypes: 0,
          supplierCount: 0
          returnAmount: 0,
          productTypes: 0
        }
      }
    }
@@ -276,7 +304,23 @@
}
const exportReport = () => {
  ElMessage.success('导出功能开发中...')
  const params = {}
  // 时间范围
  if (searchForm.dateRange && searchForm.dateRange.length === 2) {
    params.entryDateStart = searchForm.dateRange[0]
    params.entryDateEnd = searchForm.dateRange[1]
  }
  // 产品类别
  if (searchForm.productCategory) {
    const categoryName = findNodeLabelById(productOptions.value, searchForm.productCategory)
    if (categoryName) {
      params.productCategory = categoryName
    }
  }
  proxy.download("/procurementBusinessSummary/export", params, "采购业务汇总表.xlsx")
}
@@ -300,12 +344,6 @@
</script>
<style scoped>
.app-container {
  padding: 20px;
  background-color: #f5f7fa;
  min-height: 100vh;
}
.page-header {
  text-align: center;
  margin-bottom: 20px;