• krysent's avatar
    new · 1c49e391
    krysent authored
    1c49e391
printdom.jsx 4.6 KB
import { doFetch } from "@/utils/doFetch";
import React, {
  useState,
  useImperativeHandle,
  forwardRef,
  useRef,
} from "react";
import { useEffect } from "react";
import { ScrollBoard } from "@jiaminghi/data-view-react";
import { useWindowSize } from "@/utils/windowsize";
const pageStyle = `
@media all {
    .page-break {
    display: none;
    }
}

@media print {
    html, body {
    height: initial !important;
    overflow: initial !important;
    position:relative;
    -webkit-print-color-adjust: exact;
    word-break: break-all;
    }

}

@media print {
    .page-break {
    margin-top:0;
    display: block;
    page-break-before: auto;
    }
}

@media print {
    .page-noprint {
        display: none !important;
    }
}

@page {
    size: auto;
    margin: 0px;
}
`;

let columns = [
  {
    title: "物料编码 - 名称",
    dataIndex: "materieName",
    key: "materieName",
    search: false,
    render: (dom, row) => {
      return (row.materieCode ?? "") + " - " + (row.materieName ?? "");
    },
  },
  {
    title: "出库数量",
    dataIndex: "outstroeNum",
    key: "outstroeNum",
    search: false,
  },
  {
    title: "库存单位",
    dataIndex: "productionUnitName",
    key: "productionUnitName",
    search: false,
    width: 60,
  },
];

function PrintDom({ totalPath, val, totalParams, totalCard }, ref) {
  console.log(totalCard);
  let printRef = useRef();
  const [data, setdata] = useState({});
  useImperativeHandle(ref, () => ({
    dom: printRef,
  }));

  useEffect(() => {
    if (val == "detail") {
      doFetch({ url: totalPath, params: totalParams }).then((res) => {
        if (res.code == "0000") {
          setdata(res?.data?.data);
        }
      });
    } else {
    }
  }, [val]);

  let datas = data?.materialList
    ? data?.materialList.map((it) => {
        return columns.map((item) => {
          if (item.render) {
            return item.render(it, it);
          } else {
            return it[item.dataIndex];
          }
        });
      })
    : [];

  return (
    <>
      <style type="text/css" media="print">
        {pageStyle}
      </style>
      {val == "detail" && (
        <div
          ref={printRef}
          style={{
            width: "100%",
            minHeight: "100%",
            overflow: "inherit",
            position: "relative",
          }}
        >
          <div
            style={{
              display: "flex",
              justifyContent: "space-between",
              alignItems: "center",
              padding: "0 2%",
              paddingBottom: 12,
            }}
          >
            <h1
              style={{
                width: "100%",
                fontSize: 40,
                marginTop: "-6px",
              }}
            >
              出库工单
            </h1>
            <img
              style={{
                width: 300,
                height: "auto",
              }}
              src={data?.qrCodeUrl}
              alt=""
            />
          </div>
          <div
            style={{
              display: "flex",
              flexWrap: "wrap",
              paddingLeft: "2%",
              marginTop: 24,
            }}
          >
            {totalCard &&
              totalCard[0].itemData
                .filter((it) => !(it.noshow === true))
                .map((it) => {
                  return (
                    <div
                      style={{
                        width: it.noshow ?? "32%",
                        backgroundColor: "#f9f9f9",
                        marginRight: "1%",
                        marginBottom: 10,
                        padding: "4px",
                        fontSize: 20,
                        overflow: "hidden",
                      }}
                    >
                      <b>{it.title}: </b>
                      <span>{data[it.key] || "-"}</span>
                    </div>
                  );
                })}
          </div>
          <div
            style={{
              padding: "4px 2%",
              position: "relative",
              width: "100%",
              overflow: "hidden",
            }}
            id="large"
          >
            <div
              style={{
                marginBottom: 18,
              }}
            >
              <b>{totalCard && totalCard[1].cardTitle}</b>
            </div>

            <ScrollBoard
              config={{
                header: columns.map((it) => it.title),
                data: datas,
                rowNum: datas.length,
                hoverPause: false,
              }}
            />
          </div>
        </div>
      )}
    </>
  );
}

export default forwardRef(PrintDom);