Files
ReceiptGenerator/src/shared/settings.ts
T

21 lines
1.9 KiB
TypeScript

import { z } from 'zod'
import type { AppSettings } from './types'
export const historyPageSizeSchema=z.union([z.literal(5),z.literal(10),z.literal(20),z.literal(50)])
export const settingsSchema = z.object({
schemaVersion: z.literal(1), outputDirectory: z.string().max(1024), sealDirectory: z.string().max(1024),
defaultSealId: z.string().max(260), exportPdf: z.boolean(), exportPng: z.boolean(), exportPrint: z.boolean(),
receiptsPerPage: z.union([z.literal(1), z.literal(2)]), cutLine: z.boolean(),
createBatchFolder: z.boolean(), openAfterExport: z.boolean(), numberPrefix: z.string().regex(/^[A-Za-z0-9_-]{1,16}$/, '编号前缀须为 1–16 位字母、数字、短横线或下划线'),
defaultCashier: z.string().max(20), defaultReviewer: z.string().max(20),
sealWidthMm: z.number().min(15).max(55), sealOffsetX: z.number().min(-20).max(20),
sealOffsetY: z.number().min(-12).max(12), pngDpi: z.union([z.literal(150), z.literal(300)]),
lastImportDirectory: z.string().max(1024), templateId: z.string().min(1).max(80), fileNamePattern:z.enum(['number_customer','customer_number','number']).default('number_customer'),historyPageSize:historyPageSizeSchema.default(5)
})
export function defaultSettings(outputDirectory = ''): AppSettings {
return { schemaVersion: 1, outputDirectory, sealDirectory: '', defaultSealId: '', exportPdf: true,
exportPng: false, exportPrint: true, receiptsPerPage: 2, cutLine: true, createBatchFolder: true,
openAfterExport: true, numberPrefix: 'SJ', defaultCashier: '', defaultReviewer: '',
sealWidthMm: 35, sealOffsetX: 0, sealOffsetY: 0, pngDpi: 300, lastImportDirectory: '', templateId: 'classic-v1', fileNamePattern:'number_customer',historyPageSize:5 }
}
export const exportOptionsSchema = z.object({ pdf:z.boolean(), png:z.boolean(), print:z.boolean(), receiptsPerPage:z.union([z.literal(1),z.literal(2)]), cutLine:z.boolean() }).refine(v=>v.pdf||v.png||v.print, '请至少选择一种导出内容')