From 51ba2a9f70863036c720156cd8b9e0c2be08139b Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期二, 24 三月 2026 18:37:48 +0800
Subject: [PATCH] Revert "#打印+导出"

---
 rsf-admin/src/page/components/MyExportButton.jsx                                                        |   87 ++--
 /dev/null                                                                                               |  107 -----
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java                             |  354 -------------------
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java          |    7 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java    |   97 +---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java |   35 -
 rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx                                        |  385 +++++++++++---------
 7 files changed, 280 insertions(+), 792 deletions(-)

diff --git a/rsf-admin/src/page/components/MyExportButton.jsx b/rsf-admin/src/page/components/MyExportButton.jsx
index 1e132f1..a684e47 100644
--- a/rsf-admin/src/page/components/MyExportButton.jsx
+++ b/rsf-admin/src/page/components/MyExportButton.jsx
@@ -1,4 +1,5 @@
 import * as React from "react";
+import { useCallback } from "react";
 import DownloadIcon from "@mui/icons-material/GetApp";
 import {
   Button,
@@ -7,11 +8,6 @@
   useListContext,
   useUnselectAll,
 } from "react-admin";
-import { useListReportActionParams } from "./listReport/useListReportOutput";
-import {
-  downloadBlobFile,
-  resolveReportMeta,
-} from "./listReport/listReportUtils";
 
 const MyExportButton = (props) => {
   const {
@@ -22,73 +18,62 @@
     icon = defaultIcon,
     exporter: customExporter,
     meta,
-    reportConfig,
-    onExport,
-    loading = false,
-    filename,
     ...rest
   } = props;
 
   const { filter, selectedIds, filterValues, resource, sort, total } = useListContext();
-  const { visibleColumns, params } = useListReportActionParams(reportConfig, { ids });
   const unSelect = useUnselectAll(resource);
   const dataProvider = useDataProvider();
   const notify = useNotify();
-  const handleClick = async (event) => {
-    try {
-      const hasReportConfig = Boolean(reportConfig?.resource && Array.isArray(reportConfig?.columns));
-      if (hasReportConfig) {
-        const actionParams = {
-          ...params,
-          columns: visibleColumns,
-        };
-        if (typeof onExport === "function") {
-          await onExport(actionParams, event);
-        } else {
-          const resolvedResource = reportConfig.resource || params.resource;
-          const response = await dataProvider.export(resolvedResource, {
-            sort: actionParams.sort,
-            ids: actionParams.ids,
-            filter: actionParams.filter
-              ? { ...actionParams.filterValues, ...actionParams.filter }
-              : actionParams.filterValues,
-            pagination: { page: 1, perPage: maxResults },
-            meta,
-            columns: visibleColumns,
-            reportMeta: resolveReportMeta(reportConfig, actionParams),
-          });
-          downloadBlobFile(
-            response,
-            filename || reportConfig.exportFileName || `${resolvedResource}.xlsx`,
-          );
-        }
-      } else {
-        const response = await dataProvider.export(resource, {
+  const handleClick = 
+  // useCallback(
+    (event) => {
+      dataProvider
+        .export(resource, {
           sort,
-          ids: ids ?? selectedIds,
+          ids: selectedIds,
           filter: filter ? { ...filterValues, ...filter } : filterValues,
           pagination: { page: 1, perPage: maxResults },
           meta,
+        })
+        .then((res) => {
+          const url = window.URL.createObjectURL(
+            new Blob([res.data], { type: res.headers["content-type"] }),
+          );
+          const link = document.createElement("a");
+          link.href = url;
+          link.setAttribute("download", `${resource}.xlsx`);
+          document.body.appendChild(link);
+          link.click();
+          link.remove();
+          unSelect();
+        })
+        .catch((error) => {
+          console.error(error);
+          notify("ra.notification.http_error", { type: "error" });
         });
-        downloadBlobFile(response, filename || `${resource}.xlsx`);
-      }
-      unSelect();
       if (typeof onClick === "function") {
         onClick(event);
       }
-    } catch (error) {
-      console.error(error);
-      notify("ra.notification.http_error", { type: "error" });
     }
-  };
-
-  const disabled = total === 0 || loading || (reportConfig?.columns && visibleColumns.length === 0);
+    // [
+    //   dataProvider,
+    //   filter,
+    //   filterValues,
+    //   maxResults,
+    //   notify,
+    //   onClick,
+    //   resource,
+    //   sort,
+    //   meta,
+    // ],
+  // );
 
   return (
     <Button
       onClick={handleClick}
       label={label}
-      disabled={disabled}
+      disabled={total === 0}
       {...sanitizeRestProps(rest)}
     >
       {icon}
diff --git a/rsf-admin/src/page/components/listReport/ListReportActions.jsx b/rsf-admin/src/page/components/listReport/ListReportActions.jsx
deleted file mode 100644
index c87b95f..0000000
--- a/rsf-admin/src/page/components/listReport/ListReportActions.jsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import React from "react";
-import { FilterButton, SelectColumnsButton, TopToolbar } from "react-admin";
-import MyExportButton from "@/page/components/MyExportButton";
-import MyPrintButton from "./MyPrintButton";
-
-export const ListReportActions = ({
-    reportConfig,
-    loading = false,
-    onExport,
-    onPrintPreview,
-    showFilterButton = true,
-    showSelectColumnsButton = true,
-    children,
-}) => (
-    <TopToolbar>
-        {showFilterButton && <FilterButton />}
-        {showSelectColumnsButton && reportConfig?.preferenceKey && (
-            <SelectColumnsButton preferenceKey={reportConfig.preferenceKey} />
-        )}
-        {reportConfig?.enablePrint && (
-            <MyPrintButton
-                reportConfig={reportConfig}
-                onPrintPreview={onPrintPreview}
-                loading={loading}
-            />
-        )}
-        <MyExportButton
-            reportConfig={reportConfig}
-            onExport={onExport}
-            loading={loading}
-        />
-        {children}
-    </TopToolbar>
-);
-
-export const ListReportBulkActions = ({
-    reportConfig,
-    loading = false,
-    onExport,
-    onPrintPreview,
-}) => (
-    <>
-        {reportConfig?.enablePrint && (
-            <MyPrintButton
-                reportConfig={reportConfig}
-                onPrintPreview={onPrintPreview}
-                loading={loading}
-            />
-        )}
-        <MyExportButton
-            reportConfig={reportConfig}
-            onExport={onExport}
-            loading={loading}
-        />
-    </>
-);
-
-export default ListReportActions;
diff --git a/rsf-admin/src/page/components/listReport/ListReportPreviewDialog.jsx b/rsf-admin/src/page/components/listReport/ListReportPreviewDialog.jsx
deleted file mode 100644
index 1c95531..0000000
--- a/rsf-admin/src/page/components/listReport/ListReportPreviewDialog.jsx
+++ /dev/null
@@ -1,607 +0,0 @@
-import React, { useEffect, useMemo, useRef, useState } from "react";
-import { useTranslate } from "react-admin";
-import {
-    Box,
-    Button,
-    CircularProgress,
-    Dialog,
-    DialogActions,
-    DialogContent,
-    DialogTitle,
-    ToggleButton,
-    ToggleButtonGroup,
-    Typography,
-} from "@mui/material";
-import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined";
-import { useReactToPrint } from "react-to-print";
-import DialogCloseButton from "@/page/components/DialogCloseButton";
-import { getListReportCellValue } from "./listReportUtils";
-
-const PREVIEW_LAYOUT = {
-    landscape: {
-        width: "297mm",
-        height: "210mm",
-    },
-    portrait: {
-        width: "210mm",
-        height: "297mm",
-    },
-};
-
-const PRINT_PAGE_MARGIN = "12mm";
-
-const buildPrintPageStyle = orientation => `
-@page {
-    size: A4 ${orientation};
-    margin: 0;
-}
-@media print {
-    html, body {
-        width: auto;
-        min-height: auto;
-        height: auto;
-        margin: 0 !important;
-        padding: 0 !important;
-        -webkit-print-color-adjust: exact;
-        print-color-adjust: exact;
-        background: #ffffff;
-    }
-    table {
-        width: 100%;
-        border-collapse: collapse;
-    }
-    thead {
-        display: table-header-group;
-    }
-    .list-report-print-shell {
-        display: block !important;
-        padding: 0 !important;
-        width: 100% !important;
-        max-width: none !important;
-        margin: 0 auto !important;
-    }
-    .list-report-print-live-root {
-        position: static !important;
-        left: auto !important;
-        top: auto !important;
-        visibility: visible !important;
-        background: #ffffff !important;
-    }
-    .list-report-print-page {
-        box-shadow: none !important;
-        border: none !important;
-        margin: 0 auto !important;
-        break-after: page;
-        page-break-after: always;
-        overflow: hidden !important;
-        box-sizing: border-box !important;
-    }
-    .list-report-print-page:last-child {
-        break-after: auto;
-        page-break-after: auto;
-    }
-    .list-report-print-header {
-        page-break-inside: avoid !important;
-        break-inside: avoid !important;
-    }
-    .list-report-print-table-wrap {
-        overflow: visible !important;
-    }
-    .list-report-print-table {
-        width: 100% !important;
-        table-layout: fixed !important;
-    }
-    .list-report-print-table thead {
-        display: table-header-group !important;
-    }
-    .list-report-print-table tr {
-        page-break-inside: avoid !important;
-        break-inside: avoid !important;
-    }
-}
-`;
-
-const getPageBoxSx = (paperSize, printable = false) => ({
-    display: "flex",
-    flexDirection: "column",
-    width: paperSize.width,
-    height: paperSize.height,
-    maxWidth: "100%",
-    mx: "auto",
-    p: PRINT_PAGE_MARGIN,
-    backgroundColor: "#fff",
-    boxShadow: printable ? "none" : "0 8px 24px rgba(15, 23, 42, 0.08)",
-    border: printable ? "none" : "1px solid #d7dce2",
-    boxSizing: "border-box",
-    overflow: "hidden",
-});
-
-const ReportHeader = ({ printedAt, reportMeta, totalCount }) => (
-    <>
-        <Box className="list-report-print-header" sx={{ borderBottom: "2px solid #111", pb: 1.25 }}>
-            <Typography
-                variant="h5"
-                sx={{
-                    textAlign: "center",
-                    fontWeight: 700,
-                    letterSpacing: ".02em",
-                    color: "#111827",
-                }}
-            >
-                {reportMeta?.title || "鎶ヨ〃"}
-            </Typography>
-        </Box>
-
-        <Box
-            className="list-report-print-header"
-            sx={{
-                display: "flex",
-                justifyContent: "space-between",
-                gap: 2,
-                flexWrap: "wrap",
-                borderBottom: "1px solid #111",
-                pb: 1,
-                color: "#111827",
-                fontSize: 14,
-            }}
-        >
-            <Typography variant="body2">鎶ヨ〃鏃ユ湡锛歿reportMeta?.reportDate || printedAt}</Typography>
-            <Typography variant="body2">鎵撳嵃浜猴細{reportMeta?.printedBy || "-"}</Typography>
-            <Typography variant="body2">鎵撳嵃鏃堕棿锛歿printedAt}</Typography>
-            <Typography variant="body2">璁板綍鏁帮細{totalCount}</Typography>
-        </Box>
-    </>
-);
-
-const ReportTable = ({ displayColumns, pageRows, renderRow, tableWrapRef, theadRef, tbodyRef }) => (
-    <Box ref={tableWrapRef} className="list-report-print-table-wrap" sx={{ overflow: "hidden", flex: 1 }}>
-        <table
-            className="list-report-print-table"
-            style={{
-                width: "100%",
-                borderCollapse: "collapse",
-                tableLayout: "fixed",
-                fontSize: "12px",
-            }}
-        >
-            <thead ref={theadRef}>
-                <tr>
-                    {displayColumns.map(column => (
-                        <th
-                            key={column.key}
-                            style={{
-                                padding: "8px 8px",
-                                backgroundColor: "#f1f3f5",
-                                textAlign: "center",
-                                whiteSpace: "normal",
-                                fontWeight: 700,
-                                color: "#111827",
-                            }}
-                        >
-                            {column.label}
-                        </th>
-                    ))}
-                </tr>
-            </thead>
-            <tbody ref={tbodyRef}>
-                {pageRows.map(renderRow)}
-            </tbody>
-        </table>
-    </Box>
-);
-
-const ReportPageFrame = ({ children, paperSize, printable = false }) => (
-    <Box className="list-report-print-page" sx={getPageBoxSx(paperSize, printable)}>
-        <Box sx={{ display: "flex", flexDirection: "column", gap: 2, width: "100%", height: "100%" }}>
-            {children}
-        </Box>
-    </Box>
-);
-
-const ListReportPreviewDialog = ({
-    open,
-    onClose,
-    rows = [],
-    columns = [],
-    reportMeta,
-    totalRows = 0,
-    loading = false,
-    allRowsLoaded = false,
-    loadedTransportPages = 0,
-    totalTransportPages = 0,
-    prefetching = false,
-    dialogTitle = "鎵撳嵃棰勮",
-    defaultOrientation = "landscape",
-    getCellValue = getListReportCellValue,
-}) => {
-    const translate = useTranslate();
-    const printContentRef = useRef(null);
-    const measurePageRef = useRef(null);
-    const measureContentRef = useRef(null);
-    const measureTableWrapRef = useRef(null);
-    const measureTheadRef = useRef(null);
-    const measureBodyRef = useRef(null);
-    const measureFooterRef = useRef(null);
-    const [orientation, setOrientation] = useState(defaultOrientation);
-    const [currentPage, setCurrentPage] = useState(1);
-    const [isPreparingPrint, setIsPreparingPrint] = useState(false);
-    const [measuring, setMeasuring] = useState(false);
-    const [paginatedRows, setPaginatedRows] = useState([]);
-
-    const printedAt = useMemo(
-        () =>
-            new Date().toLocaleString("zh-CN", {
-                hour12: false,
-            }),
-        [open]
-    );
-
-    const previewPaperSize = useMemo(
-        () => PREVIEW_LAYOUT[orientation] || PREVIEW_LAYOUT.landscape,
-        [orientation]
-    );
-
-    const displayColumns = useMemo(
-        () => [{ key: "__serialNo", label: "搴忓彿", source: "__serialNo" }, ...columns],
-        [columns]
-    );
-
-    const totalCount = totalRows || rows.length;
-    const currentPageRows = paginatedRows[Math.max(currentPage - 1, 0)] || [];
-
-    useEffect(() => {
-        if (!open) {
-            setCurrentPage(1);
-            setPaginatedRows([]);
-            setIsPreparingPrint(false);
-            setOrientation(defaultOrientation);
-        }
-    }, [defaultOrientation, open]);
-
-    useEffect(() => {
-        if (currentPage > paginatedRows.length) {
-            setCurrentPage(Math.max(paginatedRows.length, 1));
-        }
-    }, [currentPage, paginatedRows.length]);
-
-    useEffect(() => {
-        if (!open) {
-            return undefined;
-        }
-        if (rows.length === 0 || columns.length === 0) {
-            setPaginatedRows([]);
-            setMeasuring(false);
-            return undefined;
-        }
-
-        setMeasuring(true);
-        const frameId = requestAnimationFrame(() => {
-            const pageElement = measurePageRef.current;
-            const contentElement = measureContentRef.current;
-            const tableWrapElement = measureTableWrapRef.current;
-            const tableHeadElement = measureTheadRef.current;
-            const tableBodyElement = measureBodyRef.current;
-            const footerElement = measureFooterRef.current;
-
-            if (!pageElement || !contentElement || !tableWrapElement || !tableHeadElement || !tableBodyElement || !footerElement) {
-                setPaginatedRows([rows]);
-                setMeasuring(false);
-                return;
-            }
-
-            const availableBodyHeight = Math.max(
-                contentElement.clientHeight -
-                    tableWrapElement.offsetTop -
-                    tableHeadElement.offsetHeight -
-                    footerElement.offsetHeight,
-                80
-            );
-
-            const rowHeights = Array.from(tableBodyElement.querySelectorAll("tr")).map(
-                row => row.getBoundingClientRect().height || row.offsetHeight || 24
-            );
-
-            const nextPages = [];
-            let pageRows = [];
-            let usedHeight = 0;
-
-            rows.forEach((record, index) => {
-                const rowHeight = rowHeights[index] || 24;
-                const exceedsCurrentPage =
-                    pageRows.length > 0 && usedHeight + rowHeight > availableBodyHeight;
-
-                if (exceedsCurrentPage) {
-                    nextPages.push(pageRows);
-                    pageRows = [record];
-                    usedHeight = rowHeight;
-                    return;
-                }
-
-                pageRows.push(record);
-                usedHeight += rowHeight;
-            });
-
-            if (pageRows.length > 0) {
-                nextPages.push(pageRows);
-            }
-
-            setPaginatedRows(nextPages);
-            setMeasuring(false);
-        });
-
-        return () => cancelAnimationFrame(frameId);
-    }, [columns.length, defaultOrientation, open, orientation, reportMeta?.printedBy, reportMeta?.reportDate, reportMeta?.title, rows]);
-
-    const handlePrint = useReactToPrint({
-        content: () => printContentRef.current,
-        documentTitle: reportMeta?.title || dialogTitle,
-        pageStyle: buildPrintPageStyle(orientation),
-        onAfterPrint: () => {
-            setIsPreparingPrint(false);
-        },
-    });
-
-    useEffect(() => {
-        if (!isPreparingPrint || paginatedRows.length === 0) {
-            return undefined;
-        }
-
-        const firstFrame = requestAnimationFrame(() => {
-            const secondFrame = requestAnimationFrame(() => {
-                handlePrint();
-            });
-            return () => cancelAnimationFrame(secondFrame);
-        });
-
-        return () => cancelAnimationFrame(firstFrame);
-    }, [handlePrint, isPreparingPrint, paginatedRows]);
-
-    const renderDataRow = (record, rowIndex, serialStart, keyPrefix) => (
-        <tr key={record.id ?? `${keyPrefix}-row-${rowIndex}`}>
-            {displayColumns.map(column => (
-                <td
-                    key={`${record.id ?? keyPrefix}-${column.key}-${rowIndex}`}
-                    style={{
-                        padding: "6px 8px",
-                        verticalAlign: "top",
-                        whiteSpace: "normal",
-                        wordBreak: "break-word",
-                        textAlign: column.key === "__serialNo" ? "center" : "left",
-                        color: "#111827",
-                    }}
-                >
-                    {column.key === "__serialNo"
-                        ? String(serialStart + rowIndex + 1).padStart(3, "0")
-                        : String(getCellValue(record, column.source))}
-                </td>
-            ))}
-        </tr>
-    );
-
-    const renderPage = (pageRows, pageIndex, pageCount, printable = false) => {
-        const serialStart = paginatedRows.slice(0, pageIndex).reduce((sum, page) => sum + page.length, 0);
-        return (
-            <ReportPageFrame key={`preview-page-${pageIndex + 1}`} paperSize={previewPaperSize} printable={printable}>
-                <ReportHeader printedAt={printedAt} reportMeta={reportMeta} totalCount={totalCount} />
-                <ReportTable
-                    displayColumns={displayColumns}
-                    pageRows={pageRows}
-                    renderRow={(record, rowIndex) =>
-                        renderDataRow(record, rowIndex, serialStart, `page-${pageIndex + 1}`)
-                    }
-                />
-                <Box
-                    sx={{
-                        display: "flex",
-                        justifyContent: "flex-end",
-                        color: "#6b7280",
-                        fontSize: 12,
-                    }}
-                >
-                    绗� {pageIndex + 1} / {pageCount} 椤�
-                </Box>
-            </ReportPageFrame>
-        );
-    };
-
-    const printDisabled =
-        loading ||
-        prefetching ||
-        measuring ||
-        isPreparingPrint ||
-        !allRowsLoaded ||
-        paginatedRows.length === 0 ||
-        columns.length === 0;
-
-    const printButtonLabel = (() => {
-        if (isPreparingPrint) {
-            return "鍑嗗鎵撳嵃涓�...";
-        }
-        if (prefetching || !allRowsLoaded) {
-            return `鍔犺浇鎵撳嵃鏁版嵁涓�... ${loadedTransportPages}/${Math.max(totalTransportPages, 1)}`;
-        }
-        if (measuring) {
-            return "鍒嗛〉璁$畻涓�...";
-        }
-        return translate("toolbar.print");
-    })();
-
-    return (
-        <Dialog open={open} onClose={onClose} fullWidth maxWidth="xl">
-            <DialogTitle
-                sx={{
-                    position: "sticky",
-                    top: 0,
-                    backgroundColor: "background.paper",
-                    zIndex: 1,
-                    textAlign: "center",
-                }}
-            >
-                {dialogTitle}
-                <Box sx={{ position: "absolute", right: 8, top: 8 }}>
-                    <DialogCloseButton onClose={onClose} />
-                </Box>
-            </DialogTitle>
-            <DialogContent dividers>
-                {loading ? (
-                    <Box
-                        sx={{
-                            minHeight: 280,
-                            display: "flex",
-                            alignItems: "center",
-                            justifyContent: "center",
-                        }}
-                    >
-                        <CircularProgress size={28} />
-                    </Box>
-                ) : (
-                    <Box
-                        className="list-report-print-shell"
-                        sx={{
-                            display: "flex",
-                            flexDirection: "column",
-                            gap: 2,
-                            alignItems: "center",
-                            py: 3,
-                        }}
-                    >
-                        {paginatedRows.length > 0
-                            ? renderPage(
-                                  currentPageRows,
-                                  Math.max(currentPage - 1, 0),
-                                  Math.max(paginatedRows.length, 1)
-                              )
-                            : (
-                                  <Box
-                                      sx={{
-                                          minHeight: 280,
-                                          display: "flex",
-                                          alignItems: "center",
-                                          justifyContent: "center",
-                                          color: "#6b7280",
-                                      }}
-                                  >
-                                      {prefetching || measuring ? "姝e湪鐢熸垚棰勮..." : "鏆傛棤鍙墦鍗版暟鎹�"}
-                                  </Box>
-                              )}
-                    </Box>
-                )}
-            </DialogContent>
-            <DialogActions sx={{ px: 3, py: 2, justifyContent: "space-between", gap: 2, flexWrap: "wrap" }}>
-                <Box sx={{ display: "flex", gap: 2, alignItems: "center", flexWrap: "wrap" }}>
-                    <ToggleButtonGroup
-                        value={orientation}
-                        exclusive
-                        size="small"
-                        onChange={(_, value) => {
-                            if (value) {
-                                setCurrentPage(1);
-                                setOrientation(value);
-                            }
-                        }}
-                    >
-                        <ToggleButton value="landscape">妯増</ToggleButton>
-                        <ToggleButton value="portrait">绔栫増</ToggleButton>
-                    </ToggleButtonGroup>
-                    <Button
-                        size="small"
-                        onClick={() => setCurrentPage(page => Math.max(1, page - 1))}
-                        disabled={loading || currentPage <= 1}
-                    >
-                        涓婁竴椤�
-                    </Button>
-                    <Typography variant="body2" sx={{ minWidth: 104, textAlign: "center" }}>
-                        绗� {paginatedRows.length === 0 ? 0 : currentPage} / {paginatedRows.length} 椤�
-                    </Typography>
-                    <Button
-                        size="small"
-                        onClick={() => setCurrentPage(page => Math.min(paginatedRows.length, page + 1))}
-                        disabled={loading || paginatedRows.length === 0 || currentPage >= paginatedRows.length}
-                    >
-                        涓嬩竴椤�
-                    </Button>
-                    {(prefetching || measuring) && (
-                        <Typography variant="body2" sx={{ color: "#6b7280" }}>
-                            {prefetching
-                                ? `姝e湪鍔犺浇瀹屾暣鎵撳嵃鏁版嵁 ${loadedTransportPages}/${Math.max(totalTransportPages, 1)}`
-                                : "姝e湪鎸夌焊寮犲昂瀵搁噸鏂板垎椤�"}
-                        </Typography>
-                    )}
-                </Box>
-                <Button
-                    variant="contained"
-                    startIcon={
-                        isPreparingPrint || prefetching || measuring
-                            ? <CircularProgress size={16} color="inherit" />
-                            : <PrintOutlinedIcon />
-                    }
-                    onClick={() => setIsPreparingPrint(true)}
-                    disabled={printDisabled}
-                >
-                    {printButtonLabel}
-                </Button>
-            </DialogActions>
-
-            {open && rows.length > 0 && columns.length > 0 && (
-                <Box
-                    sx={{
-                        position: "fixed",
-                        left: "-20000px",
-                        top: 0,
-                        visibility: "hidden",
-                        pointerEvents: "none",
-                        backgroundColor: "#fff",
-                    }}
-                >
-                    <ReportPageFrame paperSize={previewPaperSize} printable>
-                        <Box ref={measurePageRef} sx={{ width: "100%", height: "100%" }}>
-                            <Box ref={measureContentRef} sx={{ display: "flex", flexDirection: "column", gap: 2, width: "100%", height: "100%" }}>
-                                <ReportHeader printedAt={printedAt} reportMeta={reportMeta} totalCount={totalCount} />
-                                <ReportTable
-                                    displayColumns={displayColumns}
-                                    pageRows={rows}
-                                    renderRow={(record, rowIndex) => renderDataRow(record, rowIndex, 0, "measure")}
-                                    tableWrapRef={measureTableWrapRef}
-                                    theadRef={measureTheadRef}
-                                    tbodyRef={measureBodyRef}
-                                />
-                                <Box
-                                    ref={measureFooterRef}
-                                    sx={{
-                                        display: "flex",
-                                        justifyContent: "flex-end",
-                                        color: "#6b7280",
-                                        fontSize: 12,
-                                    }}
-                                >
-                                    绗� 1 / 1 椤�
-                                </Box>
-                            </Box>
-                        </Box>
-                    </ReportPageFrame>
-                </Box>
-            )}
-
-            {isPreparingPrint && (
-                <Box
-                    ref={printContentRef}
-                    className="list-report-print-shell list-report-print-live-root"
-                    sx={{
-                        position: "fixed",
-                        left: "-10000px",
-                        top: 0,
-                        backgroundColor: "#fff",
-                        px: 3,
-                        py: 3,
-                    }}
-                >
-                    {paginatedRows.map((pageRows, pageIndex) =>
-                        renderPage(pageRows, pageIndex, paginatedRows.length, true)
-                    )}
-                </Box>
-            )}
-        </Dialog>
-    );
-};
-
-export default ListReportPreviewDialog;
diff --git a/rsf-admin/src/page/components/listReport/MyPrintButton.jsx b/rsf-admin/src/page/components/listReport/MyPrintButton.jsx
deleted file mode 100644
index 038b48f..0000000
--- a/rsf-admin/src/page/components/listReport/MyPrintButton.jsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import React from "react";
-import PrintOutlinedIcon from "@mui/icons-material/PrintOutlined";
-import { Button } from "react-admin";
-import { useListReportActionParams } from "./useListReportOutput";
-
-const MyPrintButton = ({
-    reportConfig,
-    onPrintPreview,
-    label = "toolbar.print",
-    icon = <PrintOutlinedIcon />,
-    loading = false,
-    disabled,
-    ...rest
-}) => {
-    const { visibleColumns, params } = useListReportActionParams(reportConfig);
-    const resolvedDisabled = disabled ?? (
-        params.total === 0 ||
-        loading ||
-        visibleColumns.length === 0
-    );
-
-    if (!reportConfig?.enablePrint) {
-        return null;
-    }
-
-    return (
-        <Button
-            onClick={() => onPrintPreview({ ...params, columns: visibleColumns })}
-            label={label}
-            disabled={resolvedDisabled}
-            {...rest}
-        >
-            {icon}
-        </Button>
-    );
-};
-
-export default MyPrintButton;
diff --git a/rsf-admin/src/page/components/listReport/listReportUtils.js b/rsf-admin/src/page/components/listReport/listReportUtils.js
deleted file mode 100644
index e938b5e..0000000
--- a/rsf-admin/src/page/components/listReport/listReportUtils.js
+++ /dev/null
@@ -1,162 +0,0 @@
-import * as Common from "@/utils/common";
-
-export const DEFAULT_PRINT_PREVIEW_FETCH_PAGE_SIZE = 100;
-
-export const downloadBlobFile = (response, filename) => {
-    const blob = new Blob([response.data], { type: response.headers["content-type"] });
-    const url = window.URL.createObjectURL(blob);
-    const link = document.createElement("a");
-    link.href = url;
-    link.setAttribute("download", filename);
-    document.body.appendChild(link);
-    link.click();
-    link.remove();
-    window.URL.revokeObjectURL(url);
-};
-
-export const buildDefaultReportMeta = title => {
-    let user = null;
-    try {
-        const persistedUser = localStorage.getItem("user");
-        user = persistedUser ? JSON.parse(persistedUser) : null;
-    } catch (error) {
-        console.warn("Failed to parse persisted user", error);
-    }
-
-    const tenant = user?.tenant || {};
-    const now = new Date();
-    const year = now.getFullYear();
-    const month = `${now.getMonth() + 1}`.padStart(2, "0");
-    const day = `${now.getDate()}`.padStart(2, "0");
-
-    return {
-        companyName:
-            tenant?.name ||
-            tenant?.tenantName ||
-            tenant?.label ||
-            user?.fullName ||
-            "RSF",
-        printedBy: user?.fullName || user?.username || "绯荤粺鐢ㄦ埛",
-        reportDate: `${year}骞�${month}鏈�${day}鏃,
-        reportDateValue: `${year}-${month}-${day}`,
-        title,
-    };
-};
-
-export const buildListReportRequestPayload = ({
-    filter,
-    filterValues,
-    sort,
-    ids,
-    columns,
-    reportMeta,
-    extraPayload = {},
-}) => ({
-    ...Common.integrateParams({
-        sort,
-        filter: filter ? { ...filterValues, ...filter } : filterValues,
-    }),
-    ids: ids?.length ? ids : undefined,
-    columns,
-    reportMeta,
-    ...extraPayload,
-});
-
-const getColumnToken = column => column?.key || column?.source;
-
-const resolveColumnByToken = (columnDefs, token) => {
-    if (typeof token === "number" || /^\d+$/.test(String(token))) {
-        return columnDefs[Number(token)];
-    }
-
-    if (typeof token === "string") {
-        return columnDefs.find(column => column.key === token || column.source === token);
-    }
-
-    if (token && typeof token === "object") {
-        if ("index" in token) {
-            return columnDefs[Number(token.index)];
-        }
-        if ("source" in token) {
-            return columnDefs.find(column => column.source === token.source);
-        }
-        if ("key" in token) {
-            return columnDefs.find(column => column.key === token.key);
-        }
-        if ("id" in token) {
-            return columnDefs.find(column => column.key === token.id || column.source === token.id);
-        }
-    }
-
-    return undefined;
-};
-
-const buildDefaultVisibleColumns = (columnDefs, omitSet) =>
-    columnDefs.filter(column => !omitSet.has(column.source) && !omitSet.has(column.key));
-
-export const resolveVisibleColumns = ({
-    columnDefs = [],
-    storedColumns = [],
-    availableColumns = [],
-    storedOmit = [],
-    omit = [],
-}) => {
-    if (!Array.isArray(columnDefs) || columnDefs.length === 0) {
-        return [];
-    }
-
-    const omitSet = new Set([...(omit || []), ...(storedOmit || [])]);
-    const fallbackColumns = buildDefaultVisibleColumns(columnDefs, omitSet);
-    const storedOrder = Array.isArray(storedColumns) && storedColumns.length > 0
-        ? storedColumns
-        : Array.isArray(availableColumns) && availableColumns.length > 0
-            ? availableColumns
-            : [];
-
-    const resolvedColumns = storedOrder
-        .map(token => resolveColumnByToken(columnDefs, token))
-        .filter(Boolean)
-        .filter(column => !omitSet.has(column.source) && !omitSet.has(column.key));
-
-    const visibleColumns = resolvedColumns.length > 0 ? resolvedColumns : fallbackColumns;
-
-    return visibleColumns.map(column => ({
-        key: column.key,
-        source: column.source,
-        label: column.label,
-        isExtendField: Boolean(column.isExtendField),
-    }));
-};
-
-const getNestedValue = (record, source) =>
-    source.split(".").reduce((accumulator, segment) => {
-        if (accumulator == null) {
-            return undefined;
-        }
-        return accumulator[segment];
-    }, record);
-
-export const getListReportCellValue = (record, source) => {
-    if (!record || !source) {
-        return "";
-    }
-
-    const extendFieldMatch = source.match(/^extendFields\.\[(.+)\]$/);
-    if (extendFieldMatch) {
-        return record?.extendFields?.[extendFieldMatch[1]] ?? "";
-    }
-
-    if (Object.prototype.hasOwnProperty.call(record, source)) {
-        return record[source] ?? "";
-    }
-
-    const value = source.includes(".") ? getNestedValue(record, source) : record[source];
-    return value ?? "";
-};
-
-export const resolveReportMeta = (reportConfig, params) => {
-    if (typeof reportConfig?.buildReportMeta === "function") {
-        return reportConfig.buildReportMeta(params);
-    }
-    return reportConfig?.reportMeta || null;
-};
diff --git a/rsf-admin/src/page/components/listReport/useListReportOutput.js b/rsf-admin/src/page/components/listReport/useListReportOutput.js
deleted file mode 100644
index 6f9950b..0000000
--- a/rsf-admin/src/page/components/listReport/useListReportOutput.js
+++ /dev/null
@@ -1,292 +0,0 @@
-import { useCallback, useMemo, useRef, useState } from "react";
-import { useListContext, useStore } from "react-admin";
-import request from "@/utils/request";
-import {
-    DEFAULT_PRINT_PREVIEW_FETCH_PAGE_SIZE,
-    downloadBlobFile,
-    resolveReportMeta,
-    resolveVisibleColumns,
-} from "./listReportUtils";
-
-const getPreferencePath = (preferenceKey, field) =>
-    `preferences.${preferenceKey || "__listReport__"}.${field}`;
-
-export const useListReportActionParams = (reportConfig, options = {}) => {
-    const { ids: explicitIds } = options;
-    const { filter, filterValues, resource, selectedIds, sort, total } = useListContext();
-    const [storedColumns] = useStore(
-        getPreferencePath(reportConfig?.preferenceKey, "columns"),
-        []
-    );
-    const [availableColumns] = useStore(
-        getPreferencePath(reportConfig?.preferenceKey, "availableColumns"),
-        []
-    );
-    const [storedOmit] = useStore(
-        getPreferencePath(reportConfig?.preferenceKey, "omit"),
-        []
-    );
-
-    const visibleColumns = useMemo(
-        () =>
-            resolveVisibleColumns({
-                columnDefs: reportConfig?.columns,
-                storedColumns,
-                availableColumns,
-                storedOmit,
-                omit: reportConfig?.omit,
-            }),
-        [availableColumns, reportConfig?.columns, reportConfig?.omit, storedColumns, storedOmit]
-    );
-
-    return {
-        visibleColumns,
-        params: {
-            filter,
-            filterValues,
-            ids: explicitIds ?? selectedIds,
-            resource: reportConfig?.resource || resource,
-            sort,
-            total,
-        },
-    };
-};
-
-export const useListReportOutput = ({
-    reportConfig,
-    buildRequestPayload,
-    notify,
-}) => {
-    const [exportLoading, setExportLoading] = useState(false);
-    const [previewOpen, setPreviewOpen] = useState(false);
-    const [previewRows, setPreviewRows] = useState([]);
-    const [previewColumns, setPreviewColumns] = useState([]);
-    const [previewMeta, setPreviewMeta] = useState(null);
-    const [previewDataset, setPreviewDataset] = useState({
-        loadedPages: 0,
-        transportPages: 0,
-        pageSize: reportConfig?.previewPageSize || DEFAULT_PRINT_PREVIEW_FETCH_PAGE_SIZE,
-        total: 0,
-        fullyLoaded: false,
-    });
-    const [previewLoading, setPreviewLoading] = useState(false);
-    const [previewPrefetching, setPreviewPrefetching] = useState(false);
-    const requestIdRef = useRef(0);
-    const cacheRef = useRef(new Map());
-
-    const previewPageSize = reportConfig?.previewPageSize || DEFAULT_PRINT_PREVIEW_FETCH_PAGE_SIZE;
-
-    const buildPayload = useCallback(
-        params => {
-            const payload = typeof buildRequestPayload === "function"
-                ? buildRequestPayload(params)
-                : {};
-            if (payload.reportMeta) {
-                return payload;
-            }
-            return {
-                ...payload,
-                reportMeta: resolveReportMeta(reportConfig, params),
-            };
-        },
-        [buildRequestPayload, reportConfig]
-    );
-
-    const resetPreviewCache = useCallback(() => {
-        cacheRef.current = new Map();
-        setPreviewRows([]);
-        setPreviewColumns([]);
-        setPreviewMeta(null);
-        setPreviewDataset({
-            loadedPages: 0,
-            transportPages: 0,
-            pageSize: previewPageSize,
-            total: 0,
-            fullyLoaded: false,
-        });
-    }, [previewPageSize]);
-
-    const fetchPreviewPage = useCallback(
-        async ({ payload, current }) => {
-            const { data: { code, data, msg } } = await request.post(
-                `/${reportConfig.resource}/print/query`,
-                {
-                    ...payload,
-                    current,
-                    pageSize: previewPageSize,
-                }
-            );
-
-            if (code !== 200) {
-                throw new Error(msg || "Print preview query failed");
-            }
-
-            return data || {};
-        },
-        [previewPageSize, reportConfig.resource]
-    );
-
-    const syncPreviewCache = useCallback(
-        ({ totalPages, totalRows }) => {
-            const nextRows = [];
-            for (let pageIndex = 1; pageIndex <= totalPages; pageIndex += 1) {
-                const pageRows = cacheRef.current.get(pageIndex);
-                if (Array.isArray(pageRows)) {
-                    nextRows.push(...pageRows);
-                }
-            }
-
-            setPreviewRows(nextRows);
-            setPreviewDataset({
-                loadedPages: cacheRef.current.size,
-                transportPages: totalPages,
-                pageSize: previewPageSize,
-                total: totalRows,
-                fullyLoaded: cacheRef.current.size >= totalPages,
-            });
-        },
-        [previewPageSize]
-    );
-
-    const applyPreviewPage = useCallback(
-        ({ data, payload, openPreview = false }) => {
-            const current = Number(data.current) || 1;
-            const totalPages = Number(data.pages) || 0;
-            const totalRows = Number(data.total) || 0;
-
-            setPreviewColumns(payload.columns || []);
-            setPreviewMeta(payload.reportMeta || null);
-            cacheRef.current.set(current, Array.isArray(data.records) ? data.records : []);
-            syncPreviewCache({ totalPages, totalRows });
-
-            if (openPreview) {
-                setPreviewOpen(true);
-            }
-        },
-        [syncPreviewCache]
-    );
-
-    const prefetchPreviewPages = useCallback(
-        async ({ payload, totalPages, totalRows, requestId }) => {
-            if (totalPages <= 1) {
-                setPreviewPrefetching(false);
-                return;
-            }
-
-            setPreviewPrefetching(true);
-            const pendingPages = Array.from({ length: totalPages - 1 }, (_, index) => index + 2);
-            const workerCount = Math.min(3, pendingPages.length);
-            let hasErrored = false;
-
-            const worker = async () => {
-                while (pendingPages.length > 0 && requestIdRef.current === requestId) {
-                    const nextPage = pendingPages.shift();
-                    if (!nextPage) {
-                        return;
-                    }
-
-                    try {
-                        const data = await fetchPreviewPage({ payload, current: nextPage });
-                        if (requestIdRef.current !== requestId) {
-                            return;
-                        }
-                        cacheRef.current.set(nextPage, Array.isArray(data.records) ? data.records : []);
-                        syncPreviewCache({ totalPages, totalRows });
-                    } catch (error) {
-                        if (!hasErrored && requestIdRef.current === requestId) {
-                            hasErrored = true;
-                            console.error(error);
-                            notify(error.message || "ra.notification.http_error", { type: "error" });
-                        }
-                        return;
-                    }
-                }
-            };
-
-            await Promise.all(Array.from({ length: workerCount }, () => worker()));
-            if (requestIdRef.current === requestId) {
-                setPreviewPrefetching(false);
-            }
-        },
-        [fetchPreviewPage, notify, syncPreviewCache]
-    );
-
-    const openPrintPreview = useCallback(
-        async params => {
-            if (!reportConfig?.enablePrint) {
-                return;
-            }
-            setPreviewLoading(true);
-            try {
-                requestIdRef.current += 1;
-                const requestId = requestIdRef.current;
-                resetPreviewCache();
-                const payload = buildPayload(params);
-                const data = await fetchPreviewPage({ payload, current: 1 });
-                applyPreviewPage({ data, payload, openPreview: true });
-                prefetchPreviewPages({
-                    payload,
-                    totalPages: Number(data.pages) || 0,
-                    totalRows: Number(data.total) || 0,
-                    requestId,
-                });
-            } catch (error) {
-                console.error(error);
-                notify(error.message || "ra.notification.http_error", { type: "error" });
-            } finally {
-                setPreviewLoading(false);
-            }
-        },
-        [
-            applyPreviewPage,
-            buildPayload,
-            fetchPreviewPage,
-            notify,
-            prefetchPreviewPages,
-            reportConfig?.enablePrint,
-            resetPreviewCache,
-        ]
-    );
-
-    const closePrintPreview = useCallback(() => {
-        requestIdRef.current += 1;
-        setPreviewPrefetching(false);
-        setPreviewOpen(false);
-    }, []);
-
-    const exportReport = useCallback(
-        async params => {
-            setExportLoading(true);
-            try {
-                const payload = buildPayload(params);
-                const response = await request.post(`/${reportConfig.resource}/export`, payload, {
-                    responseType: "blob",
-                });
-                downloadBlobFile(
-                    response,
-                    reportConfig.exportFileName || `${reportConfig.resource}.xlsx`
-                );
-            } catch (error) {
-                console.error(error);
-                notify("ra.notification.http_error", { type: "error" });
-            } finally {
-                setExportLoading(false);
-            }
-        },
-        [buildPayload, notify, reportConfig.exportFileName, reportConfig.resource]
-    );
-
-    return {
-        exportLoading,
-        previewOpen,
-        previewRows,
-        previewColumns,
-        previewMeta,
-        previewDataset,
-        previewLoading,
-        previewPrefetching,
-        openPrintPreview,
-        closePrintPreview,
-        exportReport,
-    };
-};
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
index b12e6e7..3e6af78 100644
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
+++ b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemList.jsx
@@ -1,228 +1,267 @@
-import React, { useEffect, useMemo, useState } from "react";
+import React, { useState, useRef, useEffect, useMemo, useCallback } from "react";
+import { useNavigate } from 'react-router-dom';
 import {
-    DatagridConfigurable,
     List,
-    useListContext,
-    useNotify,
+    DatagridConfigurable,
+    SearchInput,
+    TopToolbar,
+    SelectColumnsButton,
+    EditButton,
+    FilterButton,
+    CreateButton,
+    ExportButton,
+    BulkDeleteButton,
+    WrapperField,
+    useRecordContext,
     useTranslate,
-} from "react-admin";
-import { Box, LinearProgress } from "@mui/material";
-import { styled } from "@mui/material/styles";
-import { DEFAULT_PAGE_SIZE } from "@/config/setting";
-import ListReportActions, {
-    ListReportBulkActions,
-} from "@/page/components/listReport/ListReportActions";
-import ListReportPreviewDialog from "@/page/components/listReport/ListReportPreviewDialog";
-import { useListReportOutput } from "@/page/components/listReport/useListReportOutput";
-import { buildListReportRequestPayload } from "@/page/components/listReport/listReportUtils";
-import request from "@/utils/request";
-import WarehouseIsptResult from "./WarehouseIsptResult";
-import {
-    buildWarehouseAreasItemBaseFilters,
-    buildWarehouseAreasItemDynamicFilters,
-    buildWarehouseAreasItemReportConfig,
-} from "./warehouseAreasItemOutputUtils.jsx";
+    useNotify,
+    useListContext,
+    FunctionField,
+    TextField,
+    NumberField,
+    DateField,
+    BooleanField,
+    ReferenceField,
+    TextInput,
+    DateTimeInput,
+    DateInput,
+    SelectInput,
+    NumberInput,
+    ReferenceInput,
+    ReferenceArrayInput,
+    useRefresh,
+    AutocompleteInput,
+    DeleteButton,
+} from 'react-admin';
+import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material';
+import { styled } from '@mui/material/styles';
+import WarehouseAreasItemCreate from "./WarehouseAreasItemCreate";
+import WarehouseAreasItemPanel from "./WarehouseAreasItemPanel";
+import EmptyData from "../components/EmptyData";
+import request from '@/utils/request';
+import MyCreateButton from "../components/MyCreateButton";
+import MyExportButton from '../components/MyExportButton';
+import PageDrawer from "../components/PageDrawer";
+import MyField from "../components/MyField";
+import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting';
+import * as Common from '@/utils/common';
+import WarehouseIsptResult from "./WarehouseIsptResult"
 
-const StyledDatagrid = styled(DatagridConfigurable)(() => ({
-    "& .css-1vooibu-MuiSvgIcon-root": {
-        height: ".9em",
+
+const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({
+    '& .css-1vooibu-MuiSvgIcon-root': {
+        height: '.9em'
     },
-    "& .RaDatagrid-row": {
-        cursor: "auto",
+    '& .RaDatagrid-row': {
+        cursor: 'auto'
     },
-    "& .opt": {
-        width: 200,
+    '& .column-name': {
     },
-    "& .MuiTableCell-root": {
-        whiteSpace: "nowrap",
-        overflow: "visible",
-        textOverflow: "unset",
+    '& .opt': {
+        width: 200
     },
+    '& .MuiTableCell-root': {
+    whiteSpace: 'nowrap',
+    overflow: 'visible',
+    textOverflow: 'unset'
+  }
 }));
+
+const filters = [
+    <SearchInput source="condition" alwaysOn />,
+    <NumberInput source="areaId" label="table.field.warehouseAreasItem.areaId" />,
+    <TextInput source="asnCode" label="table.field.warehouseAreasItem.asnCode" />,
+    <TextInput source="areaName" label="table.field.warehouseAreasItem.areaName" />,
+    <NumberInput source="matnrId" label="table.field.warehouseAreasItem.matnrId" />,
+    <TextInput source="matnrName" label="table.field.warehouseAreasItem.matnrName" />,
+    <TextInput source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />,
+    <TextInput source="barcode" label="table.field.warehouseAreasItem.barcode" />,
+    <NumberInput source="anfme" label="table.field.warehouseAreasItem.anfme" />,
+    <TextInput source="batch" label="table.field.warehouseAreasItem.batch" />,
+    <TextInput source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
+    <TextInput source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
+    <TextInput source="projectCode" label="table.field.asnOrderItem.projectCode" />,
+    <TextInput source="unit" label="table.field.warehouseAreasItem.unit" />,
+    <TextInput source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />,
+    <TextInput source="brand" label="table.field.warehouseAreasItem.brand" />,
+    <ReferenceInput source="shipperId" label="table.field.warehouseAreasItem.shipperId" reference="companys">
+        <AutocompleteInput label="table.field.warehouseAreasItem.shipperId" optionText="name" filterToQuery={(val) => ({ name: val })} />
+    </ReferenceInput>,
+    <TextInput source="splrId" label="table.field.warehouseAreasItem.splrId" />,
+    <NumberInput source="weight" label="table.field.warehouseAreasItem.weight" />,
+    <TextInput source="prodTime" label="table.field.warehouseAreasItem.prodTime" />,
+    <TextInput source="splrBtch" label="table.field.warehouseAreasItem.splrBtch" />,
+
+    <TextInput label="common.field.memo" source="memo" />,
+    <SelectInput
+        label="common.field.status"
+        source="status"
+        choices={[
+            { id: '1', name: 'common.enums.statusTrue' },
+            { id: '0', name: 'common.enums.statusFalse' },
+        ]}
+        resettable
+    />,
+]
 
 const WarehouseAreasItemList = () => {
     const translate = useTranslate();
-    const notify = useNotify();
-    const [itemInfo] = useState({});
+    const [itemInfo, setItemInfo] = useState({})
+    const [createDialog, setCreateDialog] = useState(false);
     const [drawerVal, setDrawerVal] = useState(false);
-    const { dynamicFields, dynamicFieldsLoading } = useWarehouseAreasItemDynamicFields(notify);
-
-    const filters = useMemo(
-        () => [
-            ...buildWarehouseAreasItemBaseFilters(),
-            ...buildWarehouseAreasItemDynamicFilters(dynamicFields),
-        ],
-        [dynamicFields]
-    );
-
-    const reportConfig = useMemo(
-        () => buildWarehouseAreasItemReportConfig(translate, dynamicFields),
-        [dynamicFields, translate]
-    );
-
-    const buildOutputPayload = params => buildListReportRequestPayload({
-        ...params,
-        reportMeta: reportConfig.buildReportMeta?.(params),
-    });
-
-    const {
-        exportLoading,
-        previewOpen,
-        previewRows,
-        previewColumns,
-        previewMeta,
-        previewDataset,
-        previewLoading,
-        previewPrefetching,
-        openPrintPreview,
-        closePrintPreview,
-        exportReport,
-    } = useListReportOutput({
-        reportConfig,
-        buildRequestPayload: buildOutputPayload,
-        notify,
-    });
-
-    const reportLoading = dynamicFieldsLoading || exportLoading || previewLoading;
 
     return (
         <Box display="flex">
             <List
-                title="menu.warehouseAreasItem"
+                title={"menu.warehouseAreasItem"}
                 empty={false}
                 filters={filters}
                 sort={{ field: "create_time", order: "desc" }}
                 sx={{
                     flexGrow: 1,
-                    transition: theme =>
-                        theme.transitions.create(["all"], {
+                    transition: (theme) =>
+                        theme.transitions.create(['all'], {
                             duration: theme.transitions.duration.enteringScreen,
                         }),
                 }}
                 actions={(
-                    <ListReportActions
-                        reportConfig={reportConfig}
-                        loading={reportLoading}
-                        onExport={exportReport}
-                        onPrintPreview={openPrintPreview}
-                    />
+                    <TopToolbar>
+                        <FilterButton />
+                        <SelectColumnsButton preferenceKey='warehouseAreasItem' />
+                        <MyExportButton />
+                    </TopToolbar>
                 )}
                 perPage={DEFAULT_PAGE_SIZE}
             >
                 <DynamicFields
-                    reportConfig={reportConfig}
-                    loading={dynamicFieldsLoading}
-                    onExport={exportReport}
-                    onPrintPreview={openPrintPreview}
-                />
+                    drawerVal={drawerVal}
+                    setDrawerVal={setDrawerVal}
+                    itemInfo={itemInfo}
+                    setItemInfo={setItemInfo} />
             </List>
-
+            <WarehouseAreasItemCreate
+                open={createDialog}
+                setOpen={setCreateDialog}
+            />
             <WarehouseIsptResult
                 record={itemInfo}
                 drawerVal={drawerVal}
                 from="warehosueItem"
                 setDrawerVal={setDrawerVal}
-            />
-
-            <ListReportPreviewDialog
-                open={previewOpen}
-                onClose={closePrintPreview}
-                rows={previewRows}
-                columns={previewColumns}
-                reportMeta={previewMeta}
-                totalRows={previewDataset.total}
-                loading={previewLoading}
-                allRowsLoaded={previewDataset.fullyLoaded}
-                loadedTransportPages={previewDataset.loadedPages}
-                totalTransportPages={previewDataset.transportPages}
-                prefetching={previewPrefetching}
-                dialogTitle="鏀惰揣搴撳瓨鎵撳嵃棰勮"
-                defaultOrientation={reportConfig.defaultOrientation}
-            />
+            >
+            </WarehouseIsptResult>
+            {/* <PageDrawer
+                title='WarehouseAreasItem Detail'
+                drawerVal={drawerVal}
+                setDrawerVal={setDrawerVal}
+            >
+            </PageDrawer> */}
         </Box>
-    );
-};
+    )
+}
 
 export default WarehouseAreasItemList;
 
-const DynamicFields = ({ reportConfig, loading, onExport, onPrintPreview }) => {
+
+const DynamicFields = (props) => {
+    const { drawerVal, setDrawerVal, itemInfo, setItemInfo } = props
+    const translate = useTranslate();
+    const notify = useNotify();
+    const [columns, setColumns] = useState([]);
     const { isLoading } = useListContext();
+    const refresh = useRefresh();
+    useEffect(() => {
+        getDynamicFields();
+    }, []);
+
+    const getDynamicFields = async () => {
+        const { data: { code, data, msg }, } = await request.get("/fields/enable/list");
+        if (code == 200) {
+            const arr = [
+                <NumberField key="id" source="id" />,
+                // <NumberField key="areaId" source="areaId" label="table.field.warehouseAreasItem.areaId" />,
+                <TextField key="areaName" source="areaName" label="鏀惰揣鍖哄悕绉�" />,    //table.field.warehouseAreasItem.areaName
+                <TextField key="asnCode" source="asnCode" label="table.field.warehouseAreasItem.asnCode" />,
+                <TextField source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />, 
+                <TextField source="platItemId" label="table.field.deliveryItem.platItemId" />, 
+                <NumberField key="matnrId" source="matnrId" label="table.field.warehouseAreasItem.matnrId" />,
+                <TextField key="matnrCode" source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />,
+                <TextField key="maktx" source="maktx" label="table.field.warehouseAreasItem.matnrName" />,
+                <TextField key="splrBatch" source="splrBatch" label="table.field.warehouseAreasItem.splrBtch" />,
+                <TextField key="batch" source="batch" label="table.field.warehouseAreasItem.batch" />,
+                <TextField key="trackCode" source="trackCode" label="table.field.warehouseAreasItem.barcode" />,
+                <TextField key="unit" source="unit" label="table.field.warehouseAreasItem.unit" />,
+                <NumberField key="anfme" source="anfme" label="table.field.warehouseAreasItem.anfme" />,
+                <NumberField key="workQty" source="workQty" label="table.field.warehouseAreasItem.workQty" />,
+                <NumberField key="ableQty" source="ableQty" label="table.field.warehouseAreasItem.qty" />,
+                <TextField source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,                
+                <TextField source="projectCode" label="table.field.asnOrderItem.projectCode" />,
+                // <MyField source="isptQty" label="table.field.qlyIsptItem.anfme"
+                //     onClick={(event, record, val) => {
+                //         event.stopPropagation();
+                //         setItemInfo(record)
+                //         setDrawerVal(!!drawerVal && drawerVal === val ? null : val);
+                //     }}
+                // />,
+                                
+                
+                // <TextField key="stockUnit" source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />,
+                <TextField key="brand" source="brand" label="table.field.warehouseAreasItem.brand" />,
+                <TextField key="shipperId" source="shipperId" label="table.field.warehouseAreasItem.shipperId" />,
+                <TextField key="splrId" source="splrId" label="table.field.warehouseAreasItem.splrId" />,
+                <TextField key="isptResult" source="isptResult$" label="table.field.warehouseAreasItem.isptResult" sortable={false} />,
+                <NumberField key="weight" source="weight" label="table.field.warehouseAreasItem.weight" />,
+                <TextField key="prodTime" source="prodTime" label="table.field.warehouseAreasItem.prodTime" />,
+            ]
+            const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />)
+            const lastArr = [
+                <TextField key="updateBy" source="updateBy$" label="common.field.updateBy" />,
+                <DateField key="updateTime" source="updateTime" label="common.field.updateTime" showTime />,                
+                <TextField key="createBy" source="createBy$" label="common.field.createBy" />,
+                <DateField key="createTime" source="createTime" label="common.field.createTime" showTime />,
+                <BooleanField key="statusBool" source="statusBool" label="common.field.status" sortable={false} />,
+                <TextField key="memo" source="memo" label="common.field.memo" sortable={false} />,
+            ]
+            setColumns([...arr, ...fields, ...lastArr]);
+            //filters娣诲姞杩囨护瀛楁
+            data.map(el => {
+                var i = 0;
+                filters.map((item) => {
+                    if (item.key === el.fields) {
+                        i = 1;
+                    }
+                })
+                i === 0 && filters.push(<TextInput key={el.fields} source={el.fields} label={el.fieldsAlise} />)
+            })
+        } else {
+            notify(msg);
+        }
+    }
 
     return (
-        <Box sx={{ position: "relative", minHeight: "82vh" }}>
-            {(isLoading || loading) && (
+        <Box sx={{ position: 'relative', minHeight: "82vh", }}>
+            {isLoading && (
                 <LinearProgress
                     sx={{
                         height: "2px",
-                        position: "absolute",
+                        position: 'absolute',
                         top: 0,
                         left: 0,
                         right: 0,
                     }}
                 />
             )}
-
-            {reportConfig.columns.length > 0 && (
+            {columns.length > 0 &&
                 <StyledDatagrid
-                    preferenceKey={reportConfig.preferenceKey}
-                    bulkActionButtons={(
-                        <ListReportBulkActions
-                            reportConfig={reportConfig}
-                            loading={loading}
-                            onExport={onExport}
-                            onPrintPreview={onPrintPreview}
-                        />
-                    )}
-                    rowClick={false}
-                    omit={reportConfig.omit}
+                    preferenceKey='warehouseAreasItem'
+                    bulkActionButtons={false}
+                    rowClick={(id, resource, record) => false}
+                    omit={['prodTime','platOrderCode','id', 'createTime', 'memo', 'areaId', 'brand', 
+                         'weight', 'splrId', 'projectCode','statusBool', 'extendFields.[priceUnitId]', 'isptResult$', 'extendFields.[inStockType]',
+                         'matnrId', 'trackCode', 'workQty', 'batch', 'shipperId', 'isptResult', 'createBy$', 'createTime', 'extendFields.[baseUnitId]']}
                 >
-                    {reportConfig.columns.map(column => column.element)}
-                </StyledDatagrid>
-            )}
+                    {columns.map((column) => column)}
+                </StyledDatagrid>}
         </Box>
-    );
-};
-
-const useWarehouseAreasItemDynamicFields = notify => {
-    const [dynamicFields, setDynamicFields] = useState([]);
-    const [dynamicFieldsLoading, setDynamicFieldsLoading] = useState(true);
-
-    useEffect(() => {
-        let active = true;
-
-        const loadDynamicFields = async () => {
-            setDynamicFieldsLoading(true);
-            try {
-                const { data: { code, data, msg } } = await request.get("/fields/enable/list");
-                if (!active) {
-                    return;
-                }
-                if (code === 200) {
-                    setDynamicFields(Array.isArray(data) ? data : []);
-                    return;
-                }
-                notify(msg, { type: "warning" });
-            } catch (error) {
-                if (!active) {
-                    return;
-                }
-                console.error(error);
-                notify("ra.notification.http_error", { type: "error" });
-            } finally {
-                if (active) {
-                    setDynamicFieldsLoading(false);
-                }
-            }
-        };
-
-        loadDynamicFields();
-        return () => {
-            active = false;
-        };
-    }, [notify]);
-
-    return {
-        dynamicFields,
-        dynamicFieldsLoading,
-    };
-};
+    )
+}
diff --git a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPrintPreview.jsx b/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPrintPreview.jsx
deleted file mode 100644
index e44be32..0000000
--- a/rsf-admin/src/page/warehouseAreasItem/WarehouseAreasItemPrintPreview.jsx
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from "@/page/components/listReport/ListReportPreviewDialog";
diff --git a/rsf-admin/src/page/warehouseAreasItem/warehouseAreasItemOutputUtils.jsx b/rsf-admin/src/page/warehouseAreasItem/warehouseAreasItemOutputUtils.jsx
deleted file mode 100644
index 325533e..0000000
--- a/rsf-admin/src/page/warehouseAreasItem/warehouseAreasItemOutputUtils.jsx
+++ /dev/null
@@ -1,493 +0,0 @@
-import React from "react";
-import {
-    BooleanField,
-    DateField,
-    NumberField,
-    SearchInput,
-    SelectInput,
-    TextField,
-    TextInput,
-    NumberInput,
-    ReferenceInput,
-    AutocompleteInput,
-} from "react-admin";
-import { buildDefaultReportMeta } from "@/page/components/listReport/listReportUtils";
-
-export const WAREHOUSE_AREAS_ITEM_PREFERENCE_KEY = "warehouseAreasItem";
-
-export const WAREHOUSE_AREAS_ITEM_OMIT = [
-    "prodTime",
-    "platOrderCode",
-    "id",
-    "createTime",
-    "memo",
-    "areaId",
-    "brand",
-    "weight",
-    "splrId",
-    "projectCode",
-    "statusBool",
-    "extendFields.[priceUnitId]",
-    "isptResult$",
-    "extendFields.[inStockType]",
-    "matnrId",
-    "trackCode",
-    "workQty",
-    "batch",
-    "shipperId",
-    "isptResult",
-    "createBy$",
-    "createTime",
-    "extendFields.[baseUnitId]",
-];
-
-const resolveLabel = (translate, label, fallback = "") => {
-    if (!label) {
-        return fallback;
-    }
-    const translated = translate(label, { _: label });
-    return translated || fallback || label;
-};
-
-export const buildWarehouseAreasItemReportMeta = () => {
-    return {
-        ...buildDefaultReportMeta("鏀惰揣搴撳瓨鎶ヨ〃"),
-    };
-};
-
-export const buildWarehouseAreasItemBaseFilters = () => ([
-    <SearchInput key="condition" source="condition" alwaysOn />,
-    <NumberInput key="areaId" source="areaId" label="table.field.warehouseAreasItem.areaId" />,
-    <TextInput key="asnCode" source="asnCode" label="table.field.warehouseAreasItem.asnCode" />,
-    <TextInput key="areaName" source="areaName" label="table.field.warehouseAreasItem.areaName" />,
-    <NumberInput key="matnrId" source="matnrId" label="table.field.warehouseAreasItem.matnrId" />,
-    <TextInput key="matnrName" source="matnrName" label="table.field.warehouseAreasItem.matnrName" />,
-    <TextInput key="matnrCode" source="matnrCode" label="table.field.warehouseAreasItem.matnrCode" />,
-    <TextInput key="barcode" source="barcode" label="table.field.warehouseAreasItem.barcode" />,
-    <NumberInput key="anfme" source="anfme" label="table.field.warehouseAreasItem.anfme" />,
-    <TextInput key="batch" source="batch" label="table.field.warehouseAreasItem.batch" />,
-    <TextInput key="platOrderCode" source="platOrderCode" label="table.field.asnOrderItem.platOrderCode" />,
-    <TextInput key="platWorkCode" source="platWorkCode" label="table.field.asnOrderItem.platWorkCode" />,
-    <TextInput key="projectCode" source="projectCode" label="table.field.asnOrderItem.projectCode" />,
-    <TextInput key="unit" source="unit" label="table.field.warehouseAreasItem.unit" />,
-    <TextInput key="stockUnit" source="stockUnit" label="table.field.warehouseAreasItem.stockUnit" />,
-    <TextInput key="brand" source="brand" label="table.field.warehouseAreasItem.brand" />,
-    <ReferenceInput
-        key="shipperId"
-        source="shipperId"
-        label="table.field.warehouseAreasItem.shipperId"
-        reference="companys"
-    >
-        <AutocompleteInput
-            label="table.field.warehouseAreasItem.shipperId"
-            optionText="name"
-            filterToQuery={val => ({ name: val })}
-        />
-    </ReferenceInput>,
-    <TextInput key="splrId" source="splrId" label="table.field.warehouseAreasItem.splrId" />,
-    <NumberInput key="weight" source="weight" label="table.field.warehouseAreasItem.weight" />,
-    <TextInput key="prodTime" source="prodTime" label="table.field.warehouseAreasItem.prodTime" />,
-    <TextInput key="splrBtch" source="splrBtch" label="table.field.warehouseAreasItem.splrBtch" />,
-    <TextInput key="memo" label="common.field.memo" source="memo" />,
-    <SelectInput
-        key="status"
-        label="common.field.status"
-        source="status"
-        choices={[
-            { id: "1", name: "common.enums.statusTrue" },
-            { id: "0", name: "common.enums.statusFalse" },
-        ]}
-        resettable
-    />,
-]);
-
-const createColumnDef = ({ key, source, label, element, isExtendField = false }) => ({
-    key,
-    source,
-    label,
-    isExtendField,
-    element,
-});
-
-export const buildWarehouseAreasItemColumnDefs = (translate, dynamicFields = []) => {
-    const baseDefs = [
-        createColumnDef({
-            key: "id",
-            source: "id",
-            label: "ID",
-            element: <NumberField key="id" source="id" label="ID" />,
-        }),
-        createColumnDef({
-            key: "areaName",
-            source: "areaName",
-            label: "鏀惰揣鍖哄悕绉�",
-            element: <TextField key="areaName" source="areaName" label="鏀惰揣鍖哄悕绉�" />,
-        }),
-        createColumnDef({
-            key: "asnCode",
-            source: "asnCode",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.asnCode"),
-            element: (
-                <TextField
-                    key="asnCode"
-                    source="asnCode"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.asnCode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "platWorkCode",
-            source: "platWorkCode",
-            label: resolveLabel(translate, "table.field.asnOrderItem.platWorkCode"),
-            element: (
-                <TextField
-                    key="platWorkCode"
-                    source="platWorkCode"
-                    label={resolveLabel(translate, "table.field.asnOrderItem.platWorkCode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "platItemId",
-            source: "platItemId",
-            label: resolveLabel(translate, "table.field.deliveryItem.platItemId"),
-            element: (
-                <TextField
-                    key="platItemId"
-                    source="platItemId"
-                    label={resolveLabel(translate, "table.field.deliveryItem.platItemId")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "matnrId",
-            source: "matnrId",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.matnrId"),
-            element: (
-                <NumberField
-                    key="matnrId"
-                    source="matnrId"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.matnrId")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "matnrCode",
-            source: "matnrCode",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.matnrCode"),
-            element: (
-                <TextField
-                    key="matnrCode"
-                    source="matnrCode"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.matnrCode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "maktx",
-            source: "maktx",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.matnrName"),
-            element: (
-                <TextField
-                    key="maktx"
-                    source="maktx"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.matnrName")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "splrBatch",
-            source: "splrBatch",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.splrBtch"),
-            element: (
-                <TextField
-                    key="splrBatch"
-                    source="splrBatch"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.splrBtch")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "batch",
-            source: "batch",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.batch"),
-            element: (
-                <TextField
-                    key="batch"
-                    source="batch"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.batch")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "trackCode",
-            source: "trackCode",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.barcode"),
-            element: (
-                <TextField
-                    key="trackCode"
-                    source="trackCode"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.barcode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "unit",
-            source: "unit",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.unit"),
-            element: (
-                <TextField
-                    key="unit"
-                    source="unit"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.unit")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "anfme",
-            source: "anfme",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.anfme"),
-            element: (
-                <NumberField
-                    key="anfme"
-                    source="anfme"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.anfme")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "workQty",
-            source: "workQty",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.workQty"),
-            element: (
-                <NumberField
-                    key="workQty"
-                    source="workQty"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.workQty")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "ableQty",
-            source: "ableQty",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.qty"),
-            element: (
-                <NumberField
-                    key="ableQty"
-                    source="ableQty"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.qty")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "platOrderCode",
-            source: "platOrderCode",
-            label: resolveLabel(translate, "table.field.asnOrderItem.platOrderCode"),
-            element: (
-                <TextField
-                    key="platOrderCode"
-                    source="platOrderCode"
-                    label={resolveLabel(translate, "table.field.asnOrderItem.platOrderCode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "projectCode",
-            source: "projectCode",
-            label: resolveLabel(translate, "table.field.asnOrderItem.projectCode"),
-            element: (
-                <TextField
-                    key="projectCode"
-                    source="projectCode"
-                    label={resolveLabel(translate, "table.field.asnOrderItem.projectCode")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "brand",
-            source: "brand",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.brand"),
-            element: (
-                <TextField
-                    key="brand"
-                    source="brand"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.brand")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "shipperId",
-            source: "shipperId",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.shipperId"),
-            element: (
-                <TextField
-                    key="shipperId"
-                    source="shipperId"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.shipperId")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "splrId",
-            source: "splrId",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.splrId"),
-            element: (
-                <TextField
-                    key="splrId"
-                    source="splrId"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.splrId")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "isptResult$",
-            source: "isptResult$",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.isptResult"),
-            element: (
-                <TextField
-                    key="isptResult$"
-                    source="isptResult$"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.isptResult")}
-                    sortable={false}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "weight",
-            source: "weight",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.weight"),
-            element: (
-                <NumberField
-                    key="weight"
-                    source="weight"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.weight")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "prodTime",
-            source: "prodTime",
-            label: resolveLabel(translate, "table.field.warehouseAreasItem.prodTime"),
-            element: (
-                <TextField
-                    key="prodTime"
-                    source="prodTime"
-                    label={resolveLabel(translate, "table.field.warehouseAreasItem.prodTime")}
-                />
-            ),
-        }),
-    ];
-
-    const extendDefs = dynamicFields.map(field => {
-        const source = `extendFields.[${field.fields}]`;
-        return createColumnDef({
-            key: source,
-            source,
-            label: field.fieldsAlise || field.fields,
-            isExtendField: true,
-            element: <TextField key={source} source={source} label={field.fieldsAlise || field.fields} />,
-        });
-    });
-
-    const tailDefs = [
-        createColumnDef({
-            key: "updateBy$",
-            source: "updateBy$",
-            label: resolveLabel(translate, "common.field.updateBy"),
-            element: (
-                <TextField
-                    key="updateBy$"
-                    source="updateBy$"
-                    label={resolveLabel(translate, "common.field.updateBy")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "updateTime",
-            source: "updateTime",
-            label: resolveLabel(translate, "common.field.updateTime"),
-            element: (
-                <DateField
-                    key="updateTime"
-                    source="updateTime"
-                    label={resolveLabel(translate, "common.field.updateTime")}
-                    showTime
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "createBy$",
-            source: "createBy$",
-            label: resolveLabel(translate, "common.field.createBy"),
-            element: (
-                <TextField
-                    key="createBy$"
-                    source="createBy$"
-                    label={resolveLabel(translate, "common.field.createBy")}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "createTime",
-            source: "createTime",
-            label: resolveLabel(translate, "common.field.createTime"),
-            element: (
-                <DateField
-                    key="createTime"
-                    source="createTime"
-                    label={resolveLabel(translate, "common.field.createTime")}
-                    showTime
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "statusBool",
-            source: "statusBool",
-            label: resolveLabel(translate, "common.field.status"),
-            element: (
-                <BooleanField
-                    key="statusBool"
-                    source="statusBool"
-                    label={resolveLabel(translate, "common.field.status")}
-                    sortable={false}
-                />
-            ),
-        }),
-        createColumnDef({
-            key: "memo",
-            source: "memo",
-            label: resolveLabel(translate, "common.field.memo"),
-            element: (
-                <TextField
-                    key="memo"
-                    source="memo"
-                    label={resolveLabel(translate, "common.field.memo")}
-                    sortable={false}
-                />
-            ),
-        }),
-    ];
-
-    return [...baseDefs, ...extendDefs, ...tailDefs];
-};
-
-export const buildWarehouseAreasItemDynamicFilters = dynamicFields =>
-    dynamicFields.map(field => (
-        <TextInput
-            key={`filter-${field.fields}`}
-            source={field.fields}
-            label={field.fieldsAlise || field.fields}
-        />
-    ));
-
-export const buildWarehouseAreasItemReportConfig = (translate, dynamicFields = []) => ({
-    resource: "warehouseAreasItem",
-    preferenceKey: WAREHOUSE_AREAS_ITEM_PREFERENCE_KEY,
-    title: "鏀惰揣搴撳瓨鎶ヨ〃",
-    columns: buildWarehouseAreasItemColumnDefs(translate, dynamicFields),
-    omit: WAREHOUSE_AREAS_ITEM_OMIT,
-    buildReportMeta: buildWarehouseAreasItemReportMeta,
-    enablePrint: true,
-    defaultOrientation: "landscape",
-    exportFileName: "warehouseAreasItem.xlsx",
-});
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportColumnMeta.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportColumnMeta.java
deleted file mode 100644
index 3f12565..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportColumnMeta.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.vincent.rsf.server.common.domain.report;
-
-public class ReportColumnMeta {
-    private String key;
-    private String source;
-    private String label;
-    private Boolean isExtendField;
-
-    public String getKey() {
-        return key;
-    }
-
-    public void setKey(String key) {
-        this.key = key;
-    }
-
-    public String getSource() {
-        return source;
-    }
-
-    public void setSource(String source) {
-        this.source = source;
-    }
-
-    public String getLabel() {
-        return label;
-    }
-
-    public void setLabel(String label) {
-        this.label = label;
-    }
-
-    public Boolean getIsExtendField() {
-        return isExtendField;
-    }
-
-    public void setIsExtendField(Boolean extendField) {
-        isExtendField = extendField;
-    }
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportMeta.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportMeta.java
deleted file mode 100644
index c88b389..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportMeta.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.vincent.rsf.server.common.domain.report;
-
-public class ReportMeta {
-    private String title;
-    private String companyName;
-    private String printedBy;
-    private String reportDate;
-    private String reportDateValue;
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getCompanyName() {
-        return companyName;
-    }
-
-    public void setCompanyName(String companyName) {
-        this.companyName = companyName;
-    }
-
-    public String getPrintedBy() {
-        return printedBy;
-    }
-
-    public void setPrintedBy(String printedBy) {
-        this.printedBy = printedBy;
-    }
-
-    public String getReportDate() {
-        return reportDate;
-    }
-
-    public void setReportDate(String reportDate) {
-        this.reportDate = reportDate;
-    }
-
-    public String getReportDateValue() {
-        return reportDateValue;
-    }
-
-    public void setReportDateValue(String reportDateValue) {
-        this.reportDateValue = reportDateValue;
-    }
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryRequest.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryRequest.java
deleted file mode 100644
index 6bbf09a..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryRequest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package com.vincent.rsf.server.common.domain.report;
-
-import java.util.*;
-
-public class ReportQueryRequest {
-    private Long current = 1L;
-    private Long pageSize = 12L;
-    private String orderBy;
-    private List<Long> ids = new ArrayList<>();
-    private List<ReportColumnMeta> columns = new ArrayList<>();
-    private ReportMeta reportMeta;
-    private Map<String, Object> rawParams = new HashMap<>();
-
-    public static ReportQueryRequest fromMap(Map<String, Object> map) {
-        ReportQueryRequest request = new ReportQueryRequest();
-        Map<String, Object> safeMap = map == null ? new HashMap<>() : new HashMap<>(map);
-        request.setRawParams(safeMap);
-        request.setCurrent(parseLong(safeMap.get("current"), 1L));
-        request.setPageSize(parseLong(safeMap.get("pageSize"), 12L));
-        request.setOrderBy(Objects.isNull(safeMap.get("orderBy")) ? null : String.valueOf(safeMap.get("orderBy")));
-        request.setIds(parseIds(safeMap.get("ids")));
-        request.setColumns(parseColumns(safeMap.get("columns")));
-        request.setReportMeta(parseReportMeta(safeMap.get("reportMeta")));
-        return request;
-    }
-
-    public Map<String, Object> toPageParamMap(boolean includeFilters) {
-        Map<String, Object> queryMap = new HashMap<>(rawParams);
-        queryMap.remove("ids");
-        queryMap.remove("columns");
-        queryMap.remove("reportMeta");
-
-        if (!includeFilters) {
-            Object resolvedOrderBy = queryMap.get("orderBy");
-            queryMap.clear();
-            if (!Objects.isNull(resolvedOrderBy)) {
-                queryMap.put("orderBy", resolvedOrderBy);
-            }
-        }
-
-        return queryMap;
-    }
-
-    public Long getCurrent() {
-        return current;
-    }
-
-    public void setCurrent(Long current) {
-        this.current = current;
-    }
-
-    public Long getPageSize() {
-        return pageSize;
-    }
-
-    public void setPageSize(Long pageSize) {
-        this.pageSize = pageSize;
-    }
-
-    public String getOrderBy() {
-        return orderBy;
-    }
-
-    public void setOrderBy(String orderBy) {
-        this.orderBy = orderBy;
-    }
-
-    public List<Long> getIds() {
-        return ids;
-    }
-
-    public void setIds(List<Long> ids) {
-        this.ids = ids;
-    }
-
-    public List<ReportColumnMeta> getColumns() {
-        return columns;
-    }
-
-    public void setColumns(List<ReportColumnMeta> columns) {
-        this.columns = columns;
-    }
-
-    public ReportMeta getReportMeta() {
-        return reportMeta;
-    }
-
-    public void setReportMeta(ReportMeta reportMeta) {
-        this.reportMeta = reportMeta;
-    }
-
-    public Map<String, Object> getRawParams() {
-        return rawParams;
-    }
-
-    public void setRawParams(Map<String, Object> rawParams) {
-        this.rawParams = rawParams;
-    }
-
-    private static long parseLong(Object value, long defaultValue) {
-        if (Objects.isNull(value)) {
-            return defaultValue;
-        }
-        try {
-            return Long.parseLong(String.valueOf(value));
-        } catch (NumberFormatException ignore) {
-            return defaultValue;
-        }
-    }
-
-    private static List<Long> parseIds(Object idsObj) {
-        List<Long> ids = new ArrayList<>();
-        if (!(idsObj instanceof Collection<?> collection)) {
-            return ids;
-        }
-        for (Object value : collection) {
-            if (Objects.isNull(value)) {
-                continue;
-            }
-            ids.add(Long.parseLong(String.valueOf(value)));
-        }
-        return ids;
-    }
-
-    private static List<ReportColumnMeta> parseColumns(Object columnsObj) {
-        List<ReportColumnMeta> columns = new ArrayList<>();
-        if (!(columnsObj instanceof Collection<?> collection)) {
-            return columns;
-        }
-        for (Object item : collection) {
-            if (!(item instanceof Map<?, ?> columnMap)) {
-                continue;
-            }
-            Object source = columnMap.get("source");
-            if (Objects.isNull(source) || String.valueOf(source).trim().isEmpty()) {
-                continue;
-            }
-            ReportColumnMeta columnMeta = new ReportColumnMeta();
-            columnMeta.setKey(Objects.isNull(columnMap.get("key")) ? null : String.valueOf(columnMap.get("key")));
-            columnMeta.setSource(String.valueOf(source));
-            columnMeta.setLabel(Objects.isNull(columnMap.get("label")) ? String.valueOf(source) : String.valueOf(columnMap.get("label")));
-            columnMeta.setIsExtendField(Boolean.parseBoolean(String.valueOf(columnMap.get("isExtendField"))));
-            columns.add(columnMeta);
-        }
-        return columns;
-    }
-
-    private static ReportMeta parseReportMeta(Object reportMetaObj) {
-        if (!(reportMetaObj instanceof Map<?, ?> reportMetaMap)) {
-            return null;
-        }
-        ReportMeta reportMeta = new ReportMeta();
-        reportMeta.setTitle(getMapString(reportMetaMap, "title"));
-        reportMeta.setCompanyName(getMapString(reportMetaMap, "companyName"));
-        reportMeta.setPrintedBy(getMapString(reportMetaMap, "printedBy"));
-        reportMeta.setReportDate(getMapString(reportMetaMap, "reportDate"));
-        reportMeta.setReportDateValue(getMapString(reportMetaMap, "reportDateValue"));
-        return reportMeta;
-    }
-
-    private static String getMapString(Map<?, ?> map, String key) {
-        Object value = map.get(key);
-        return Objects.isNull(value) ? null : String.valueOf(value);
-    }
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryResponse.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryResponse.java
deleted file mode 100644
index 62f7a55..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/domain/report/ReportQueryResponse.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.vincent.rsf.server.common.domain.report;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ReportQueryResponse<T> {
-    private List<T> records = new ArrayList<>();
-    private Long total = 0L;
-    private Long current = 1L;
-    private Long pageSize = 0L;
-    private Long pages = 0L;
-
-    public List<T> getRecords() {
-        return records;
-    }
-
-    public void setRecords(List<T> records) {
-        this.records = records;
-    }
-
-    public Long getTotal() {
-        return total;
-    }
-
-    public void setTotal(Long total) {
-        this.total = total;
-    }
-
-    public Long getCurrent() {
-        return current;
-    }
-
-    public void setCurrent(Long current) {
-        this.current = current;
-    }
-
-    public Long getPageSize() {
-        return pageSize;
-    }
-
-    public void setPageSize(Long pageSize) {
-        this.pageSize = pageSize;
-    }
-
-    public Long getPages() {
-        return pages;
-    }
-
-    public void setPages(Long pages) {
-        this.pages = pages;
-    }
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/support/report/ListReportSupport.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/support/report/ListReportSupport.java
deleted file mode 100644
index 93aa553..0000000
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/support/report/ListReportSupport.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package com.vincent.rsf.server.common.support.report;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.server.common.domain.report.ReportColumnMeta;
-import com.vincent.rsf.server.common.domain.report.ReportMeta;
-import com.vincent.rsf.server.common.domain.report.ReportQueryRequest;
-import com.vincent.rsf.server.common.domain.report.ReportQueryResponse;
-import com.vincent.rsf.server.common.utils.ExcelUtil;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class ListReportSupport<T> {
-
-    public interface QueryWrapperBuilder<T> {
-        QueryWrapper<T> build(ReportQueryRequest request);
-    }
-
-    public interface RecordLoader<T> {
-        List<T> list(QueryWrapper<T> queryWrapper);
-
-        IPage<T> page(Page<T> page, QueryWrapper<T> queryWrapper);
-
-        default void afterLoad(List<T> records) {
-        }
-    }
-
-    private final QueryWrapperBuilder<T> queryWrapperBuilder;
-    private final RecordLoader<T> recordLoader;
-
-    public ListReportSupport(QueryWrapperBuilder<T> queryWrapperBuilder, RecordLoader<T> recordLoader) {
-        this.queryWrapperBuilder = queryWrapperBuilder;
-        this.recordLoader = recordLoader;
-    }
-
-    public List<T> queryRecords(ReportQueryRequest request) {
-        List<T> records = recordLoader.list(queryWrapperBuilder.build(request));
-        recordLoader.afterLoad(records);
-        return records;
-    }
-
-    public ReportQueryResponse<T> queryPage(ReportQueryRequest request) {
-        Page<T> page = new Page<>(
-                Math.max(request.getCurrent(), 1L),
-                Math.max(request.getPageSize(), 1L)
-        );
-        IPage<T> result = recordLoader.page(page, queryWrapperBuilder.build(request));
-        recordLoader.afterLoad(result.getRecords());
-
-        ReportQueryResponse<T> response = new ReportQueryResponse<>();
-        response.setRecords(result.getRecords());
-        response.setTotal(result.getTotal());
-        response.setCurrent(result.getCurrent());
-        response.setPageSize(result.getSize());
-        response.setPages(result.getPages());
-        return response;
-    }
-
-    public static List<ExcelUtil.ColumnMeta> toExcelColumns(List<ReportColumnMeta> columns) {
-        if (columns == null || columns.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        List<ExcelUtil.ColumnMeta> excelColumns = new ArrayList<>();
-        for (ReportColumnMeta column : columns) {
-            if (column == null || Cools.isEmpty(column.getSource())) {
-                continue;
-            }
-            excelColumns.add(new ExcelUtil.ColumnMeta()
-                    .setKey(column.getKey())
-                    .setSource(column.getSource())
-                    .setLabel(column.getLabel())
-                    .setExtendField(Boolean.TRUE.equals(column.getIsExtendField())));
-        }
-        return excelColumns;
-    }
-
-    public static ExcelUtil.ReportMeta toExcelReportMeta(ReportMeta reportMeta) {
-        if (reportMeta == null) {
-            return null;
-        }
-        return new ExcelUtil.ReportMeta()
-                .setTitle(reportMeta.getTitle())
-                .setCompanyName(reportMeta.getCompanyName())
-                .setPrintedBy(reportMeta.getPrintedBy())
-                .setReportDate(reportMeta.getReportDate())
-                .setReportDateValue(reportMeta.getReportDateValue());
-    }
-
-    public static void applyOrderBy(QueryWrapper<?> queryWrapper, String orderBy) {
-        if (Cools.isEmpty(orderBy)) {
-            return;
-        }
-        for (String item : orderBy.split(",")) {
-            String[] temp = item.trim().split(" ");
-            if (temp.length == 0 || Cools.isEmpty(temp[0])) {
-                continue;
-            }
-            boolean asc = temp.length == 1 || !"desc".equalsIgnoreCase(temp[temp.length - 1]);
-            queryWrapper.orderBy(true, asc, temp[0]);
-        }
-    }
-}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
index 1c12cc5..8d81944 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -15,12 +15,10 @@
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.poi.ss.util.CellRangeAddress;
 
 import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.lang.reflect.Field;
-import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
@@ -133,262 +131,6 @@
         return workbook;
     }
 
-    public static Workbook create(List<?> list, List<ColumnMeta> columns) {
-        return create(list, columns, null);
-    }
-
-    public static Workbook create(List<?> list, List<ColumnMeta> columns, ReportMeta reportMeta) {
-        XSSFWorkbook workbook = new XSSFWorkbook();
-        Sheet sheet = workbook.createSheet("export");
-        List<ColumnMeta> safeColumns = columns == null ? Collections.emptyList() : columns;
-        int sheetColumnCount = safeColumns.size() + 1;
-        configureA4PrintLayout(sheet);
-
-        CellStyle titleStyle = createTitleStyle(workbook);
-        CellStyle metaLabelStyle = createMetaLabelStyle(workbook);
-        CellStyle metaValueStyle = createMetaValueStyle(workbook);
-        CellStyle headerStyle = createHeaderStyle(workbook);
-        CellStyle bodyStyle = createBodyStyle(workbook);
-        CellStyle serialStyle = createCenteredBodyStyle(workbook);
-
-        int rowIndex = 0;
-        if (reportMeta != null) {
-            Row titleRow = sheet.createRow(rowIndex++);
-            titleRow.setHeightInPoints(28);
-            Cell titleCell = titleRow.createCell(0);
-            titleCell.setCellValue(StringUtils.defaultIfBlank(reportMeta.getTitle(), "鎶ヨ〃"));
-            titleCell.setCellStyle(titleStyle);
-            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, Math.max(0, sheetColumnCount - 1)));
-
-            Row metaRow = sheet.createRow(rowIndex++);
-            int metaCol = 0;
-            metaCol = writeMetaPair(metaRow, metaCol, "鎶ヨ〃鏃ユ湡", reportMeta.getReportDate(), metaLabelStyle, metaValueStyle);
-            writeMetaPair(metaRow, metaCol, "鎵撳嵃浜�", reportMeta.getPrintedBy(), metaLabelStyle, metaValueStyle);
-
-            rowIndex++;
-        }
-
-        int headerRowIndex = rowIndex;
-        Row header = sheet.createRow(rowIndex++);
-        Cell serialHeaderCell = header.createCell(0);
-        serialHeaderCell.setCellValue("搴忓彿");
-        serialHeaderCell.setCellStyle(headerStyle);
-
-        for (int i = 0; i < safeColumns.size(); i++) {
-            ColumnMeta column = safeColumns.get(i);
-            Cell headerCell = header.createCell(i + 1);
-            headerCell.setCellValue(
-                    StringUtils.isBlank(column.getLabel()) ? column.getSource() : column.getLabel()
-            );
-            headerCell.setCellStyle(headerStyle);
-        }
-
-        if (list != null) {
-            int serialNo = 1;
-            for (Object rowObj : list) {
-                Row row = sheet.createRow(rowIndex++);
-                Cell serialCell = row.createCell(0);
-                serialCell.setCellValue(String.format("%03d", serialNo++));
-                serialCell.setCellStyle(serialStyle);
-                for (int i = 0; i < safeColumns.size(); i++) {
-                    Object value = getColumnValue(rowObj, safeColumns.get(i).getSource());
-                    Cell cell = row.createCell(i + 1);
-                    cell.setCellStyle(bodyStyle);
-                    if (value != null) {
-                        if (value instanceof Date) {
-                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                            cell.setCellValue(sdf.format((Date) value));
-                        } else {
-                            cell.setCellValue(value.toString());
-                        }
-                    }
-                }
-            }
-        }
-
-        for (int i = 0; i <= safeColumns.size(); i++) {
-            sheet.autoSizeColumn(i);
-            sheet.setColumnWidth(i, Math.min(sheet.getColumnWidth(i) + 1024, 12000));
-        }
-
-        sheet.setRepeatingRows(CellRangeAddress.valueOf((headerRowIndex + 1) + ":" + (headerRowIndex + 1)));
-
-        return workbook;
-    }
-
-    private static void configureA4PrintLayout(Sheet sheet) {
-        sheet.setAutobreaks(true);
-        sheet.setFitToPage(true);
-        sheet.setHorizontallyCenter(true);
-        sheet.setDisplayGridlines(false);
-
-        PrintSetup printSetup = sheet.getPrintSetup();
-        printSetup.setPaperSize(PrintSetup.A4_PAPERSIZE);
-        printSetup.setLandscape(true);
-        printSetup.setFitWidth((short) 1);
-        printSetup.setFitHeight((short) 0);
-
-        sheet.setMargin(Sheet.LeftMargin, 0.3);
-        sheet.setMargin(Sheet.RightMargin, 0.3);
-        sheet.setMargin(Sheet.TopMargin, 0.4);
-        sheet.setMargin(Sheet.BottomMargin, 0.4);
-    }
-
-    private static int writeMetaPair(Row row, int startCol, String label, String value, CellStyle labelStyle, CellStyle valueStyle) {
-        Cell labelCell = row.createCell(startCol);
-        labelCell.setCellValue(label + "锛�");
-        labelCell.setCellStyle(labelStyle);
-
-        Cell valueCell = row.createCell(startCol + 1);
-        valueCell.setCellValue(StringUtils.defaultString(value));
-        valueCell.setCellStyle(valueStyle);
-        return startCol + 2;
-    }
-
-    private static CellStyle createTitleStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderBottom(BorderStyle.THICK);
-        Font font = workbook.createFont();
-        font.setBold(true);
-        font.setFontHeightInPoints((short) 16);
-        style.setFont(font);
-        return style;
-    }
-
-    private static CellStyle createMetaLabelStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.LEFT);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderBottom(BorderStyle.THIN);
-        Font font = workbook.createFont();
-        font.setBold(true);
-        style.setFont(font);
-        return style;
-    }
-
-    private static CellStyle createMetaValueStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.LEFT);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setBorderBottom(BorderStyle.THIN);
-        return style;
-    }
-
-    private static CellStyle createHeaderStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
-        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        Font font = workbook.createFont();
-        font.setBold(true);
-        style.setFont(font);
-        return style;
-    }
-
-    private static CellStyle createBodyStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.LEFT);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        return style;
-    }
-
-    private static CellStyle createCenteredBodyStyle(Workbook workbook) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(HorizontalAlignment.CENTER);
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        return style;
-    }
-
-    private static Object getColumnValue(Object rowObj, String source) {
-        if (rowObj == null || StringUtils.isBlank(source)) {
-            return null;
-        }
-
-        if (rowObj instanceof Map) {
-            return getValueFromMap((Map<?, ?>) rowObj, source);
-        }
-
-        String extendFieldKey = extractExtendFieldKey(source);
-        if (extendFieldKey != null) {
-            Object extendFields = getBeanValue(rowObj, "extendFields");
-            if (extendFields instanceof Map) {
-                return ((Map<?, ?>) extendFields).get(extendFieldKey);
-            }
-            return null;
-        }
-
-        return getBeanValue(rowObj, source);
-    }
-
-    private static Object getValueFromMap(Map<?, ?> rowObj, String source) {
-        String extendFieldKey = extractExtendFieldKey(source);
-        if (extendFieldKey != null) {
-            Object extendFields = rowObj.get("extendFields");
-            if (extendFields instanceof Map) {
-                return ((Map<?, ?>) extendFields).get(extendFieldKey);
-            }
-            return null;
-        }
-        return rowObj.get(source);
-    }
-
-    private static String extractExtendFieldKey(String source) {
-        if (source == null || !source.startsWith("extendFields.[")) {
-            return null;
-        }
-        int startIndex = source.indexOf('[');
-        int endIndex = source.indexOf(']');
-        if (startIndex < 0 || endIndex <= startIndex) {
-            return null;
-        }
-        return source.substring(startIndex + 1, endIndex);
-    }
-
-    private static Object getBeanValue(Object rowObj, String source) {
-        Object value = invokeGetter(rowObj, source);
-        if (value != null) {
-            return value;
-        }
-        Field field = findField(rowObj.getClass(), source);
-        if (field == null) {
-            return null;
-        }
-        try {
-            field.setAccessible(true);
-            return field.get(rowObj);
-        } catch (IllegalAccessException ignore) {
-            return null;
-        }
-    }
-
-    private static Object invokeGetter(Object target, String source) {
-        String suffix = Character.toUpperCase(source.charAt(0)) + source.substring(1);
-        String[] methodNames = new String[] { "get" + suffix, "is" + suffix };
-        for (String methodName : methodNames) {
-            try {
-                Method method = target.getClass().getMethod(methodName);
-                return method.invoke(target);
-            } catch (Exception ignore) {
-            }
-        }
-        return null;
-    }
-
-    private static Field findField(Class<?> clazz, String source) {
-        Class<?> current = clazz;
-        while (current != null && current != Object.class) {
-            try {
-                return current.getDeclaredField(source);
-            } catch (NoSuchFieldException ignore) {
-                current = current.getSuperclass();
-            }
-        }
-        return null;
-    }
-
     /**
      * 娣诲姞瀵煎叆excel閰嶇疆鍙傛暟
      * 娉細榛樿閰嶇疆鍙弧瓒冲綋鍓嶉渶姹�
@@ -479,102 +221,6 @@
             return true;
         }
         return false;
-    }
-
-    public static class ColumnMeta {
-        private String key;
-        private String source;
-        private String label;
-        private Boolean extendField;
-
-        public String getKey() {
-            return key;
-        }
-
-        public ColumnMeta setKey(String key) {
-            this.key = key;
-            return this;
-        }
-
-        public String getSource() {
-            return source;
-        }
-
-        public ColumnMeta setSource(String source) {
-            this.source = source;
-            return this;
-        }
-
-        public String getLabel() {
-            return label;
-        }
-
-        public ColumnMeta setLabel(String label) {
-            this.label = label;
-            return this;
-        }
-
-        public Boolean getExtendField() {
-            return extendField;
-        }
-
-        public ColumnMeta setExtendField(Boolean extendField) {
-            this.extendField = extendField;
-            return this;
-        }
-    }
-
-    public static class ReportMeta {
-        private String title;
-        private String companyName;
-        private String printedBy;
-        private String reportDate;
-        private String reportDateValue;
-
-        public String getTitle() {
-            return title;
-        }
-
-        public ReportMeta setTitle(String title) {
-            this.title = title;
-            return this;
-        }
-
-        public String getCompanyName() {
-            return companyName;
-        }
-
-        public ReportMeta setCompanyName(String companyName) {
-            this.companyName = companyName;
-            return this;
-        }
-
-        public String getReportDate() {
-            return reportDate;
-        }
-
-        public ReportMeta setReportDate(String reportDate) {
-            this.reportDate = reportDate;
-            return this;
-        }
-
-        public String getReportDateValue() {
-            return reportDateValue;
-        }
-
-        public ReportMeta setReportDateValue(String reportDateValue) {
-            this.reportDateValue = reportDateValue;
-            return this;
-        }
-
-        public String getPrintedBy() {
-            return printedBy;
-        }
-
-        public ReportMeta setPrintedBy(String printedBy) {
-            this.printedBy = printedBy;
-            return this;
-        }
     }
 
 
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
index 94d2207..f468a2d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WarehouseAreasItemController.java
@@ -11,9 +11,6 @@
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
-import com.vincent.rsf.server.common.domain.report.ReportQueryRequest;
-import com.vincent.rsf.server.common.domain.report.ReportQueryResponse;
-import com.vincent.rsf.server.common.support.report.ListReportSupport;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
 import com.vincent.rsf.server.manager.entity.WarehouseAreasItem;
 import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
@@ -36,10 +33,21 @@
     @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
     @PostMapping("/warehouseAreasItem/page")
     public R page(@RequestBody Map<String, Object> map) {
-        PageParam<WarehouseAreasItem, BaseParam> pageParam = buildPageParam(map, true);
-        QueryWrapper<WarehouseAreasItem> queryWrapper = buildFilterQueryWrapper(pageParam);
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WarehouseAreasItem, BaseParam> pageParam = new PageParam<>(baseParam, WarehouseAreasItem.class);
+        QueryWrapper<WarehouseAreasItem> queryWrapper = pageParam.buildWrapper(true);
+        /**鎷兼帴鎵╁睍瀛楁杩囨护*/
+        FieldsUtils.setFieldsFilters(queryWrapper,pageParam, WarehouseAreasItem.class);
+        /**鎷兼帴鎵╁睍瀛楁*/
         PageParam<WarehouseAreasItem, BaseParam> page = warehouseAreasItemService.page(pageParam, queryWrapper);
-        warehouseAreasItemService.fillExtendFields(page.getRecords());
+        List<WarehouseAreasItem> records = page.getRecords();
+        for (WarehouseAreasItem record : records) {
+            if (!Objects.isNull(record.getFieldsIndex())) {
+                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+                record.setExtendFields(fields);
+            }
+        }
+        page.setRecords(records);
         return R.ok().add(page);
     }
 
@@ -47,10 +55,19 @@
     @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
     @PostMapping("/warehouseAreasItem/ispts/page")
     public R getIsptPage(@RequestBody Map<String, Object> map) {
-        PageParam<WarehouseAreasItem, BaseParam> pageParam = buildPageParam(map, true);
+        BaseParam baseParam = buildParam(map, BaseParam.class);
+        PageParam<WarehouseAreasItem, BaseParam> pageParam = new PageParam<>(baseParam, WarehouseAreasItem.class);
         QueryWrapper<WarehouseAreasItem> queryWrapper = pageParam.buildWrapper(true);
+        /**鎷兼帴鎵╁睍瀛楁*/
         IPage<WarehouseAreasItem> page = warehouseAreasItemService.pageByItemId(pageParam, queryWrapper);
-        warehouseAreasItemService.fillExtendFields(page.getRecords());
+        List<WarehouseAreasItem> records = page.getRecords();
+        for (WarehouseAreasItem record : records) {
+            if (!Objects.isNull(record.getFieldsIndex())) {
+                Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex());
+                record.setExtendFields(fields);
+            }
+        }
+        page.setRecords(records);
         return R.ok().add(page);
     }
 
@@ -124,69 +141,7 @@
     @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
     @PostMapping("/warehouseAreasItem/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ReportQueryRequest request = ReportQueryRequest.fromMap(map);
-        List<WarehouseAreasItem> records = createListReportSupport().queryRecords(request);
-        List<ExcelUtil.ColumnMeta> columns = ListReportSupport.toExcelColumns(request.getColumns());
-        ExcelUtil.ReportMeta reportMeta = ListReportSupport.toExcelReportMeta(request.getReportMeta());
-        if (columns.isEmpty()) {
-            ExcelUtil.build(ExcelUtil.create(records, WarehouseAreasItem.class), response);
-            return;
-        }
-        ExcelUtil.build(ExcelUtil.create(records, columns, reportMeta), response);
-    }
-
-    @PreAuthorize("hasAuthority('manager:warehouseAreasItem:list')")
-    @PostMapping("/warehouseAreasItem/print/query")
-    public R printQuery(@RequestBody Map<String, Object> map) {
-        ReportQueryResponse<WarehouseAreasItem> result = createListReportSupport()
-                .queryPage(ReportQueryRequest.fromMap(map));
-        return R.ok().add(result);
-    }
-
-    private PageParam<WarehouseAreasItem, BaseParam> buildPageParam(Map<String, Object> map, boolean includeFilters) {
-        return buildPageParam(ReportQueryRequest.fromMap(map), includeFilters);
-    }
-
-    private PageParam<WarehouseAreasItem, BaseParam> buildPageParam(ReportQueryRequest request, boolean includeFilters) {
-        BaseParam baseParam = buildParam(request.toPageParamMap(includeFilters), BaseParam.class);
-        return new PageParam<>(baseParam, WarehouseAreasItem.class);
-    }
-
-    private QueryWrapper<WarehouseAreasItem> buildFilterQueryWrapper(PageParam<WarehouseAreasItem, BaseParam> pageParam) {
-        QueryWrapper<WarehouseAreasItem> queryWrapper = pageParam.buildWrapper(true);
-        FieldsUtils.setFieldsFilters(queryWrapper, pageParam, WarehouseAreasItem.class);
-        return queryWrapper;
-    }
-
-    private QueryWrapper<WarehouseAreasItem> buildOutputQueryWrapper(ReportQueryRequest request) {
-        List<Long> ids = request.getIds();
-        PageParam<WarehouseAreasItem, BaseParam> pageParam = buildPageParam(request, ids.isEmpty());
-        QueryWrapper<WarehouseAreasItem> queryWrapper = ids.isEmpty()
-                ? buildFilterQueryWrapper(pageParam)
-                : new QueryWrapper<>();
-
-        if (!ids.isEmpty()) {
-            queryWrapper.in("id", ids);
-        }
-        ListReportSupport.applyOrderBy(queryWrapper, pageParam.getWhere().getOrderBy());
-        return queryWrapper;
-    }
-
-    private ListReportSupport<WarehouseAreasItem> createListReportSupport() {
-        return new ListReportSupport<>(
-                this::buildOutputQueryWrapper,
-                new ListReportSupport.RecordLoader<>() {
-                    @Override
-                    public List<WarehouseAreasItem> list(QueryWrapper<WarehouseAreasItem> queryWrapper) {
-                        return warehouseAreasItemService.listForOutput(queryWrapper);
-                    }
-
-                    @Override
-                    public IPage<WarehouseAreasItem> page(Page<WarehouseAreasItem> page, QueryWrapper<WarehouseAreasItem> queryWrapper) {
-                        return warehouseAreasItemService.pageForOutput(page, queryWrapper);
-                    }
-                }
-        );
+        ExcelUtil.build(ExcelUtil.create(warehouseAreasItemService.list(), WarehouseAreasItem.class), response);
     }
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
index 8d86f79..d2a4283 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/WarehouseAreasItemService.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
@@ -17,10 +16,4 @@
     List<WarehouseAreasItem> getList();
 
     IPage<WarehouseAreasItem> pageByItemId(PageParam<WarehouseAreasItem, BaseParam> pageParam, QueryWrapper<WarehouseAreasItem> queryWrapper);
-
-    List<WarehouseAreasItem> listForOutput(QueryWrapper<WarehouseAreasItem> queryWrapper);
-
-    IPage<WarehouseAreasItem> pageForOutput(Page<WarehouseAreasItem> page, QueryWrapper<WarehouseAreasItem> queryWrapper);
-
-    void fillExtendFields(List<WarehouseAreasItem> records);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
index 7e6c220..3f9a887 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WarehouseAreasItemServiceImpl.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.common.utils.FieldsUtils;
@@ -21,7 +20,12 @@
     @Override
     public List<WarehouseAreasItem> getList() {
         List<WarehouseAreasItem> areasItems = this.list();
-        fillExtendFields(areasItems);
+        for (WarehouseAreasItem areasItem : areasItems) {
+            if (Objects.isNull(areasItem.getFieldsIndex())) {
+                continue;
+            }
+            areasItem.setExtendFields(FieldsUtils.getFields(areasItem.getFieldsIndex()));
+        }
         return areasItems;
     }
 
@@ -29,32 +33,5 @@
     public IPage<WarehouseAreasItem> pageByItemId(PageParam<WarehouseAreasItem, BaseParam> pageParam, QueryWrapper<WarehouseAreasItem> queryWrapper) {
         IPage<WarehouseAreasItem> itemIPage = this.baseMapper.pageByItemId(pageParam, queryWrapper);
         return itemIPage;
-    }
-
-    @Override
-    public List<WarehouseAreasItem> listForOutput(QueryWrapper<WarehouseAreasItem> queryWrapper) {
-        List<WarehouseAreasItem> records = this.list(queryWrapper);
-        fillExtendFields(records);
-        return records;
-    }
-
-    @Override
-    public IPage<WarehouseAreasItem> pageForOutput(Page<WarehouseAreasItem> page, QueryWrapper<WarehouseAreasItem> queryWrapper) {
-        IPage<WarehouseAreasItem> outputPage = this.page(page, queryWrapper);
-        fillExtendFields(outputPage.getRecords());
-        return outputPage;
-    }
-
-    @Override
-    public void fillExtendFields(List<WarehouseAreasItem> records) {
-        if (records == null || records.isEmpty()) {
-            return;
-        }
-        for (WarehouseAreasItem record : records) {
-            if (Objects.isNull(record.getFieldsIndex())) {
-                continue;
-            }
-            record.setExtendFields(FieldsUtils.getFields(record.getFieldsIndex()));
-        }
     }
 }

--
Gitblit v1.9.1