feat(P18B-3,P18B-4): 实现资产盘点页面与流转前端入口
这个提交包含在:
+41
-3
@@ -106,7 +106,7 @@ export type AssetListQuery = {
|
||||
mine?: boolean;
|
||||
};
|
||||
|
||||
export type AssetPayload = {
|
||||
export type CreateAssetPayload = {
|
||||
name: string;
|
||||
categoryId: string;
|
||||
legalEntityId: string;
|
||||
@@ -120,6 +120,20 @@ export type AssetPayload = {
|
||||
retiredAt?: string | null;
|
||||
};
|
||||
|
||||
export type PatchAssetPayload = Partial<
|
||||
Omit<CreateAssetPayload, "purchaseRequestId" | "assigneeEmployeeId">
|
||||
>;
|
||||
|
||||
export type AssetMovementResponse = {
|
||||
assetId: string;
|
||||
assetNo: string;
|
||||
status: AssetStatus;
|
||||
assigneeEmployeeId: string | null;
|
||||
location: string | null;
|
||||
assignmentId?: string | null;
|
||||
transferId?: string | null;
|
||||
};
|
||||
|
||||
function toQueryString(query: Record<string, string | boolean | undefined>) {
|
||||
const params = new URLSearchParams();
|
||||
for (const [key, value] of Object.entries(query)) {
|
||||
@@ -181,16 +195,40 @@ export async function fetchAssetDetail(assetId: string) {
|
||||
return apiRequestData<{ asset: AssetItem }>(`/api/assets/${assetId}`);
|
||||
}
|
||||
|
||||
export async function createAsset(payload: AssetPayload) {
|
||||
export async function createAsset(payload: CreateAssetPayload) {
|
||||
return apiRequestData<{ asset: AssetItem }>("/api/assets", {
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
export async function patchAsset(assetId: string, payload: Partial<Omit<AssetPayload, "purchaseRequestId">>) {
|
||||
export async function patchAsset(assetId: string, payload: PatchAssetPayload) {
|
||||
return apiRequestData<{ asset: AssetItem }>(`/api/assets/${assetId}`, {
|
||||
method: "PATCH",
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
export async function assignAsset(assetId: string, payload: { employeeId: string; note?: string | null }) {
|
||||
return apiRequestData<AssetMovementResponse>(`/api/assets/${assetId}/assign`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
export async function returnAsset(assetId: string, payload: { note?: string | null } = {}) {
|
||||
return apiRequestData<AssetMovementResponse>(`/api/assets/${assetId}/return`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
export async function transferAsset(
|
||||
assetId: string,
|
||||
payload: { toEmployeeId?: string | null; toLocation?: string | null; note?: string | null },
|
||||
) {
|
||||
return apiRequestData<AssetMovementResponse>(`/api/assets/${assetId}/transfer`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(payload),
|
||||
});
|
||||
}
|
||||
|
||||
在新工单中引用
屏蔽一个用户