feat(api,web): logo da empresa na impressao e cabecalho A4 compacto
- Tabela sar.config_empresa (logo em data URL por empresa matriz) com migration idempotente, espelho no schema SQL e GRANT no provision - PUT /catalog/company/logo (gerente/admin) e logoBase64 no GET /catalog/company - vale para a impressao de todos os representantes - Nova tela /ger/config "Configuracoes" com upload/preview/remocao do logo (PNG/JPG/WebP ate 500KB) - Cabecalho da impressao redesenhado: logo a esquerda, dados da empresa condensados em 3 linhas, numero/status/data compactos a direita - ocupa ~metade da altura anterior no A4 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -17,5 +17,18 @@ export const EmpresaInfoSchema = z.object({
|
||||
cep: z.string().nullable(),
|
||||
telefone: z.string().nullable(),
|
||||
email: z.string().nullable(),
|
||||
// Logo (data URL) exibido no cabeçalho da impressão — sar.config_empresa
|
||||
logoBase64: z.string().nullable().optional(),
|
||||
});
|
||||
export type EmpresaInfo = z.infer<typeof EmpresaInfoSchema>;
|
||||
|
||||
// Upload do logo pelo gerente — data URL de imagem; null remove o logo.
|
||||
// ~700KB de base64 = imagem de ~500KB, suficiente para logo de cabeçalho.
|
||||
export const UpdateLogoBodySchema = z.object({
|
||||
logoBase64: z
|
||||
.string()
|
||||
.max(700_000)
|
||||
.regex(/^data:image\/(png|jpeg|jpg|webp);base64,[A-Za-z0-9+/=]+$/)
|
||||
.nullable(),
|
||||
});
|
||||
export type UpdateLogoBody = z.infer<typeof UpdateLogoBodySchema>;
|
||||
|
||||
Reference in New Issue
Block a user