刘光辉
5 小时以前 cf11e63b659afcc9792ab3e395f1b45d844431a8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { defHttp } from '#/api/request';
 
export type WatermarkType = 'BARCODE' | 'IMAGE' | 'TEXT';
export type WatermarkScene = 'DOWNLOAD' | 'PREVIEW' | 'PRINT';
export type WatermarkVersionScope = 'ALL' | 'CURRENT';
export type WatermarkLayout = 'POSITION' | 'TILED';
export type WatermarkHorizontalAlign = 'CENTER' | 'LEFT' | 'RIGHT';
export type WatermarkVerticalAlign = 'BOTTOM' | 'MIDDLE' | 'TOP';
 
export interface WatermarkPosition {
  landscapeXMm: number;
  landscapeYMm: number;
  paperHeightMm: number;
  paperType: string;
  paperWidthMm: number;
  portraitXMm: number;
  portraitYMm: number;
}
 
export interface WatermarkConfig {
  barcodeFormat?: 'CODE_128' | 'QR_CODE';
  contentTemplate?: string;
  createdAt?: string;
  enabled: boolean;
  enterpriseId?: string;
  enterpriseName: string;
  fontColor?: string;
  fontFamily?: string;
  fontSize: number;
  horizontalAlign?: WatermarkHorizontalAlign;
  id?: string;
  imageUrl?: string;
  layoutMode: WatermarkLayout;
  loadScenes: WatermarkScene[];
  watermarkBusinessTypes: string[];
  markHeightMm: number;
  markWidthMm: number;
  name: string;
  opacity: number;
  positions: WatermarkPosition[];
  repeatSpacingXMm?: number;
  repeatSpacingYMm?: number;
  revision?: number;
  rotationAngle: number;
  showBarcodeText: boolean;
  updatedAt?: string;
  versionScope: WatermarkVersionScope;
  verticalAlign?: WatermarkVerticalAlign;
  watermarkType: WatermarkType;
}
 
export interface WatermarkQuery {
  currentPage: number;
  enabled?: boolean;
  enterpriseId?: string;
  keyword?: string;
  pageSize: number;
  watermarkType?: WatermarkType;
}
 
interface ApiResult<T> {
  code: number;
  data: T;
  msg?: string;
}
interface PageResult<T> {
  list: T[];
  pagination: { currentPage: number; pageSize: number; total: number };
}
 
const prefix = '/api/dms/watermarks';
const silent = { errorMessageMode: 'none' as const };
 
export const getWatermarkPage = (params: WatermarkQuery) => defHttp.get<ApiResult<PageResult<WatermarkConfig>>>({ url: prefix, params }, silent);
export const getWatermarkDetail = (id: string) => defHttp.get<ApiResult<WatermarkConfig>>({ url: `${prefix}/${id}` }, silent);
export const createWatermark = (data: WatermarkConfig) => defHttp.post<ApiResult<WatermarkConfig>>({ url: prefix, data }, silent);
export const updateWatermark = (id: string, data: WatermarkConfig) => defHttp.put<ApiResult<WatermarkConfig>>({ url: `${prefix}/${id}`, data }, silent);
export const setWatermarkEnabled = (id: string, revision: number, enabled: boolean) =>
  defHttp.put<ApiResult<WatermarkConfig>>({ url: `${prefix}/${id}/enabled`, data: { enabled, revision } }, silent);
export const deleteWatermark = (id: string, revision: number) =>
  defHttp.delete<ApiResult<WatermarkConfig>>({ url: `${prefix}/${id}`, params: { revision } }, silent);
 
export interface WatermarkFont {
  displayName: string;
  family: string;
}
 
export const getWatermarkFonts = () => defHttp.get<ApiResult<WatermarkFont[]>>({ url: '/api/file/Dms/Watermark/fonts' }, silent);
 
export const getWatermarkPreview = (paperWidthMm: number, paperHeightMm: number, config: WatermarkConfig, content: string) =>
  defHttp.post<Blob>(
    {
      url: '/api/file/Dms/Watermark/preview',
      responseType: 'blob',
      data: { paperWidthMm, paperHeightMm, watermark: { ...config, content, barcodeText: content } },
    },
    { ...silent, isTransformResponse: false },
  );