refactor file tree
This commit is contained in:
@@ -1,23 +1,23 @@
|
||||
import { BarcodeFormat, EncodeHintType, QRCodeWriter } from "@zxing/library";
|
||||
|
||||
export interface ManagementQrCodePage {
|
||||
export interface QrCodePage {
|
||||
pageIndex: number;
|
||||
codes: string[];
|
||||
}
|
||||
|
||||
export interface DownloadManagementQrCodeOptions {
|
||||
export interface DownloadQrCodeOptions {
|
||||
codes: string[];
|
||||
filePrefix: string;
|
||||
maxCodeLength?: number;
|
||||
}
|
||||
|
||||
export interface PrintManagementQrCodeOptions {
|
||||
export interface PrintQrCodeOptions {
|
||||
codes: string[];
|
||||
maxCodeLength?: number;
|
||||
title?: string;
|
||||
}
|
||||
|
||||
export interface ManagementQrCodeGrid {
|
||||
export interface QrCodeGrid {
|
||||
rows: number;
|
||||
columns: number;
|
||||
pageSize: number;
|
||||
@@ -40,7 +40,7 @@ const qrEncodeHints = new Map<EncodeHintType, string | number>([
|
||||
[EncodeHintType.MARGIN, 4]
|
||||
]);
|
||||
|
||||
export function calculateManagementQrCodeGrid(maxCodeLength = 0): ManagementQrCodeGrid {
|
||||
export function calculateQrCodeGrid(maxCodeLength = 0): QrCodeGrid {
|
||||
const codeTextMinWidth = Math.ceil(maxCodeLength * codeFontSize * codeTextWidthRatio + codeTextHorizontalPadding);
|
||||
const cellMinWidth = Math.max(qrSize + minCellGap, codeTextMinWidth + minCellGap);
|
||||
const cellMinHeight = qrSize + codeTopGap + codeFontSize + minCellGap;
|
||||
@@ -54,9 +54,9 @@ export function calculateManagementQrCodeGrid(maxCodeLength = 0): ManagementQrCo
|
||||
};
|
||||
}
|
||||
|
||||
export function splitManagementQrCodePages(codes: string[], maxCodeLength = 0): ManagementQrCodePage[] {
|
||||
const pages: ManagementQrCodePage[] = [];
|
||||
const pageSize = calculateManagementQrCodeGrid(maxCodeLength).pageSize;
|
||||
export function splitQrCodePages(codes: string[], maxCodeLength = 0): QrCodePage[] {
|
||||
const pages: QrCodePage[] = [];
|
||||
const pageSize = calculateQrCodeGrid(maxCodeLength).pageSize;
|
||||
|
||||
for (let index = 0; index < codes.length; index += pageSize) {
|
||||
pages.push({
|
||||
@@ -68,23 +68,23 @@ export function splitManagementQrCodePages(codes: string[], maxCodeLength = 0):
|
||||
return pages;
|
||||
}
|
||||
|
||||
export async function downloadManagementQrCodeImages(options: DownloadManagementQrCodeOptions): Promise<void> {
|
||||
const pages = splitManagementQrCodePages(options.codes, options.maxCodeLength);
|
||||
export async function downloadQrCodeImages(options: DownloadQrCodeOptions): Promise<void> {
|
||||
const pages = splitQrCodePages(options.codes, options.maxCodeLength);
|
||||
|
||||
for (const page of pages) {
|
||||
const canvas = renderManagementQrCodePage(page.codes, options.maxCodeLength);
|
||||
const canvas = renderQrCodePage(page.codes, options.maxCodeLength);
|
||||
await downloadCanvas(canvas, `${options.filePrefix}-${String(page.pageIndex + 1).padStart(2, "0")}.png`);
|
||||
}
|
||||
}
|
||||
|
||||
export async function printManagementQrCodeImages(options: PrintManagementQrCodeOptions): Promise<void> {
|
||||
export async function printQrCodeImages(options: PrintQrCodeOptions): Promise<void> {
|
||||
const printWindow = window.open("", "_blank");
|
||||
if (!printWindow) {
|
||||
throw new Error("浏览器阻止了打印窗口,请允许弹出窗口后重试");
|
||||
}
|
||||
|
||||
const pages = splitManagementQrCodePages(options.codes, options.maxCodeLength);
|
||||
const imageList = pages.map(page => renderManagementQrCodePage(page.codes, options.maxCodeLength).toDataURL("image/png"));
|
||||
const pages = splitQrCodePages(options.codes, options.maxCodeLength);
|
||||
const imageList = pages.map(page => renderQrCodePage(page.codes, options.maxCodeLength).toDataURL("image/png"));
|
||||
const title = options.title || "客户二维码打印";
|
||||
const imageHTML = imageList.map(src => `<section class="page"><img src="${src}" alt="客户二维码" /></section>`).join("");
|
||||
|
||||
@@ -138,11 +138,11 @@ export async function printManagementQrCodeImages(options: PrintManagementQrCode
|
||||
printWindow.print();
|
||||
}
|
||||
|
||||
function renderManagementQrCodePage(codes: string[], maxCodeLength = 0): HTMLCanvasElement {
|
||||
function renderQrCodePage(codes: string[], maxCodeLength = 0): HTMLCanvasElement {
|
||||
const canvas = document.createElement("canvas");
|
||||
canvas.width = pageWidth;
|
||||
canvas.height = pageHeight;
|
||||
const grid = calculateManagementQrCodeGrid(maxCodeLength);
|
||||
const grid = calculateQrCodeGrid(maxCodeLength);
|
||||
|
||||
const context = canvas.getContext("2d");
|
||||
if (!context) {
|
||||
@@ -199,7 +199,7 @@ function escapeHTML(value: string): string {
|
||||
.replaceAll("\"", """);
|
||||
}
|
||||
|
||||
function drawGridLines(context: CanvasRenderingContext2D, grid: ManagementQrCodeGrid, cellWidth: number, cellHeight: number): void {
|
||||
function drawGridLines(context: CanvasRenderingContext2D, grid: QrCodeGrid, cellWidth: number, cellHeight: number): void {
|
||||
context.strokeStyle = "#d1d5db";
|
||||
context.lineWidth = gridLineWidth;
|
||||
|
||||
Reference in New Issue
Block a user