partnerService.ts
4.7 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import { createApiClient } from "../lib/apiClient";
import { authorizedGetBlobDownload } from "../lib/batchFileHttp";
import {
normalizePartnerFromApi,
type PartnerCreateInput,
type PartnerDetailDto,
type PartnerGetListInput,
type PartnerListResult,
type PartnerUpdateInput,
} from "../types/partner";
const api = createApiClient({
getToken: () => {
try {
return localStorage.getItem("access_token") ?? localStorage.getItem("token") ?? null;
} catch {
return null;
}
},
});
const PATH = "/partner";
export async function getPartners(input: PartnerGetListInput, signal?: AbortSignal): Promise<PartnerListResult> {
const raw = await api.requestJson<PartnerListResult & { items?: unknown[]; Items?: unknown[] }>({
path: PATH,
method: "GET",
query: {
SkipCount: input.skipCount,
MaxResultCount: input.maxResultCount,
Sorting: input.sorting,
Keyword: input.keyword,
State: input.state,
},
signal,
});
const itemsRaw = raw.items ?? raw.Items ?? [];
const items = (Array.isArray(itemsRaw) ? itemsRaw : []).map((x) => normalizePartnerFromApi(x));
return { ...raw, items, totalCount: raw.totalCount ?? (raw as { TotalCount?: number }).TotalCount ?? items.length };
}
export async function getPartner(id: string, signal?: AbortSignal): Promise<PartnerDetailDto> {
const raw = await api.requestJson<unknown>({
path: `/partner/${encodeURIComponent(id)}`,
method: "GET",
signal,
});
const item = normalizePartnerFromApi(raw);
const r = raw && typeof raw === "object" ? (raw as Record<string, unknown>) : {};
const lastModificationTime = (r.lastModificationTime ?? r.LastModificationTime ?? null) as string | null;
return { ...item, lastModificationTime };
}
function trimOrNull(v: string | null | undefined): string | null {
const t = (v ?? "").trim();
return t ? t : null;
}
export async function createPartner(input: PartnerCreateInput, signal?: AbortSignal): Promise<PartnerDetailDto> {
const raw = await api.requestJson<unknown>({
path: PATH,
method: "POST",
body: {
partnerName: input.partnerName.trim(),
contactEmail: trimOrNull(input.contactEmail ?? undefined),
phoneNumber: trimOrNull(input.phoneNumber ?? undefined),
state: input.state ?? true,
street: trimOrNull(input.street ?? undefined),
city: trimOrNull(input.city ?? undefined),
stateCode: trimOrNull(input.stateCode ?? undefined),
country: trimOrNull(input.country ?? undefined),
zipCode: trimOrNull(input.zipCode ?? undefined),
},
signal,
});
const item = normalizePartnerFromApi(raw);
const r = raw && typeof raw === "object" ? (raw as Record<string, unknown>) : {};
const lastModificationTime = (r.lastModificationTime ?? r.LastModificationTime ?? null) as string | null;
return { ...item, lastModificationTime };
}
export async function updatePartner(
id: string,
input: PartnerUpdateInput,
signal?: AbortSignal,
): Promise<PartnerDetailDto> {
const raw = await api.requestJson<unknown>({
path: `/partner/${encodeURIComponent(id)}`,
method: "PUT",
body: {
partnerName: input.partnerName.trim(),
contactEmail: trimOrNull(input.contactEmail ?? undefined),
phoneNumber: trimOrNull(input.phoneNumber ?? undefined),
state: input.state ?? true,
street: trimOrNull(input.street ?? undefined),
city: trimOrNull(input.city ?? undefined),
stateCode: trimOrNull(input.stateCode ?? undefined),
country: trimOrNull(input.country ?? undefined),
zipCode: trimOrNull(input.zipCode ?? undefined),
},
signal,
});
const item = normalizePartnerFromApi(raw);
const r = raw && typeof raw === "object" ? (raw as Record<string, unknown>) : {};
const lastModificationTime = (r.lastModificationTime ?? r.LastModificationTime ?? null) as string | null;
return { ...item, lastModificationTime };
}
export async function deletePartner(id: string, signal?: AbortSignal): Promise<void> {
await api.requestJson<unknown>({
path: `/partner/${encodeURIComponent(id)}`,
method: "DELETE",
signal,
});
}
export type PartnerExportQuery = {
keyword?: string;
state?: boolean;
sorting?: string;
};
/**
* 与文档及后端 `ExportPdfAsync([FromQuery] PartnerGetListInputVo)` 一致:`GET /api/app/partner/export-pdf`,
* Query:`Keyword`、`State`、`Sorting`(全量导出,分页参数不传)。
*/
export async function exportPartnersPdf(input: PartnerExportQuery, signal?: AbortSignal): Promise<void> {
await authorizedGetBlobDownload({
path: `${PATH}/export-pdf`,
query: {
Keyword: input.keyword,
State: input.state,
Sorting: input.sorting,
},
defaultFileName: "companies-export.pdf",
signal,
});
}