#
zhou zhou
2026-04-02 333a93571452073a9e628c6256044d345099aa50
rsf-design/src/views/basic-info/warehouse-areas/index.vue
@@ -22,6 +22,21 @@
            >
              批量删除
            </ElButton>
            <ListExportPrint
              class="inline-flex"
              :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>
@@ -59,10 +74,13 @@
<script setup>
  import { computed, onMounted, ref } from 'vue'
  import { ElMessage } from 'element-plus'
  import ListExportPrint from '@/components/biz/list-export-print/index.vue'
  import { useAuth } from '@/hooks/core/useAuth'
  import { useTable } from '@/hooks/core/useTable'
  import { useTableColumns } from '@/hooks/core/useTableColumns'
  import { useUserStore } from '@/store/modules/user'
  import { useCrudPage } from '@/views/system/common/useCrudPage'
  import { usePrintExportPage } from '@/views/system/common/usePrintExportPage'
  import { defaultResponseAdapter } from '@/utils/table/tableUtils'
  import { guardRequestWithMessage } from '@/utils/sys/requestGuard'
  import { fetchDictDataPage } from '@/api/system-manage'
@@ -70,7 +88,9 @@
    fetchCompanysList,
    fetchDeleteWarehouseAreas,
    fetchWarehouseAreasDetail,
    fetchWarehouseAreasMany,
    fetchWarehouseAreasPage,
    fetchExportWarehouseAreasReport,
    fetchSaveWarehouseAreas,
    fetchUpdateWarehouseAreas,
    fetchWarehouseList
@@ -81,10 +101,13 @@
  import {
    buildWarehouseAreasDialogModel,
    buildWarehouseAreasPageQueryParams,
    buildWarehouseAreasPrintRows,
    buildWarehouseAreasSavePayload,
    buildWarehouseAreasSearchParams,
    createWarehouseAreasSearchState,
    getWarehouseAreasPaginationKey,
    WAREHOUSE_AREAS_REPORT_STYLE,
    WAREHOUSE_AREAS_REPORT_TITLE,
    getWarehouseAreasStatusOptions,
    normalizeWarehouseAreasDetailRecord,
    normalizeWarehouseAreasListRow
@@ -93,6 +116,7 @@
  defineOptions({ name: 'WarehouseAreas' })
  const { hasAuth } = useAuth()
  const userStore = useUserStore()
  const searchForm = ref(createWarehouseAreasSearchState())
  const detailDrawerVisible = ref(false)
@@ -164,6 +188,9 @@
      }
    }
  ])
  const reportTitle = WAREHOUSE_AREAS_REPORT_TITLE
  const reportQueryParams = computed(() => buildWarehouseAreasSearchParams(searchForm.value))
  async function openDetail(row) {
    detailDrawerVisible.value = true
@@ -249,6 +276,60 @@
  })
  handleDeleteAction = handleDelete
  const buildPreviewMeta = (rows) => {
    const now = new Date()
    return {
      reportDate: now.toLocaleDateString('zh-CN'),
      printedAt: now.toLocaleString('zh-CN', { hour12: false }),
      operator: userStore.getUserInfo?.name || userStore.getUserInfo?.username || '',
      count: rows.length,
      reportStyle: { ...WAREHOUSE_AREAS_REPORT_STYLE }
    }
  }
  const resolvePrintRecords = async (payload) => {
    if (Array.isArray(payload?.ids) && payload.ids.length > 0) {
      return defaultResponseAdapter(await fetchWarehouseAreasMany(payload.ids)).records
    }
    return defaultResponseAdapter(
      await fetchWarehouseAreasPage({
        ...reportQueryParams.value,
        current: 1,
        pageSize: Number(pagination.total) > 0 ? Number(pagination.total) : Number(payload?.pageSize) || 20
      })
    ).records
  }
  const {
    previewVisible,
    previewRows,
    previewMeta,
    handlePreviewVisibleChange,
    handleExport,
    handlePrint
  } = usePrintExportPage({
    downloadFileName: 'warehouse-areas.xlsx',
    requestExport: (payload) =>
      fetchExportWarehouseAreasReport(payload, {
        headers: {
          Authorization: userStore.accessToken || ''
        }
      }),
    resolvePrintRecords,
    buildPreviewRows: (records) => buildWarehouseAreasPrintRows(records),
    buildPreviewMeta
  })
  const resolvedPreviewMeta = computed(() => ({
    ...previewMeta.value,
    reportTitle,
    count: previewRows.value.length || previewMeta.value?.count || 0,
    reportStyle: {
      ...WAREHOUSE_AREAS_REPORT_STYLE,
      ...(previewMeta.value?.reportStyle || {})
    }
  }))
  function handleSearch(params) {
    replaceSearchParams(buildWarehouseAreasSearchParams(params))
    getData()