增加了手机操作端
This commit is contained in:
447
work-app/src/api/admin.ts
Normal file
447
work-app/src/api/admin.ts
Normal file
@@ -0,0 +1,447 @@
|
||||
import { request, uploadFile } from "../utils/request";
|
||||
import type { AdminSessionInfo } from "../utils/auth";
|
||||
|
||||
export interface AdminLoginResponse {
|
||||
token: string;
|
||||
admin_info: AdminSessionInfo;
|
||||
}
|
||||
|
||||
export interface AdminFileAsset {
|
||||
file_id: string;
|
||||
file_url: string;
|
||||
thumbnail_url: string;
|
||||
name?: string;
|
||||
file_type?: string;
|
||||
mime_type?: string;
|
||||
}
|
||||
|
||||
export interface PaginatedList<T> {
|
||||
list: T[];
|
||||
total?: number;
|
||||
page?: number;
|
||||
page_size?: number;
|
||||
}
|
||||
|
||||
export interface AdminOrderListItem {
|
||||
id: number;
|
||||
order_no: string;
|
||||
appraisal_no: string;
|
||||
product_name: string;
|
||||
category_name: string;
|
||||
brand_name: string;
|
||||
service_provider: string;
|
||||
service_provider_text: string;
|
||||
source_channel: string;
|
||||
source_channel_text: string;
|
||||
source_customer_id: string;
|
||||
order_status: string;
|
||||
display_status: string;
|
||||
warehouse_bucket?: string;
|
||||
warehouse_bucket_text?: string;
|
||||
estimated_finish_time: string;
|
||||
pay_amount: number;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface AdminOrderDetail {
|
||||
order_info: AdminOrderListItem & {
|
||||
can_mark_received: boolean;
|
||||
can_submit_return_logistics: boolean;
|
||||
return_logistics_block_reason: string;
|
||||
};
|
||||
product_info: {
|
||||
product_name: string;
|
||||
category_name: string;
|
||||
brand_name: string;
|
||||
color: string;
|
||||
size_spec: string;
|
||||
serial_no: string;
|
||||
};
|
||||
extra_info: Record<string, any>;
|
||||
shipping_target: null | Record<string, any>;
|
||||
return_address: null | {
|
||||
consignee: string;
|
||||
mobile: string;
|
||||
full_address: string;
|
||||
};
|
||||
logistics_info: null | Record<string, any>;
|
||||
return_logistics: null | Record<string, any>;
|
||||
supplement_task: null | Record<string, any>;
|
||||
report_summary: null | {
|
||||
id?: number;
|
||||
report_no: string;
|
||||
report_title: string;
|
||||
report_status: string;
|
||||
report_status_text?: string;
|
||||
publish_time: string;
|
||||
};
|
||||
timeline: Array<{
|
||||
node_text: string;
|
||||
node_desc: string;
|
||||
occurred_at: string;
|
||||
}>;
|
||||
}
|
||||
|
||||
export interface AdminWarehouseWorkbenchContext {
|
||||
order_info: {
|
||||
id: number;
|
||||
order_no: string;
|
||||
appraisal_no: string;
|
||||
service_provider: string;
|
||||
service_provider_text: string;
|
||||
source_channel: string;
|
||||
source_channel_text: string;
|
||||
source_customer_id: string;
|
||||
order_status: string;
|
||||
display_status: string;
|
||||
};
|
||||
product_info: {
|
||||
product_name: string;
|
||||
category_name: string;
|
||||
brand_name: string;
|
||||
color: string;
|
||||
size_spec: string;
|
||||
serial_no: string;
|
||||
};
|
||||
logistics_info: null | {
|
||||
express_company: string;
|
||||
tracking_no: string;
|
||||
tracking_status: string;
|
||||
};
|
||||
return_address: null | {
|
||||
consignee: string;
|
||||
mobile: string;
|
||||
full_address: string;
|
||||
};
|
||||
return_logistics: null | {
|
||||
express_company: string;
|
||||
tracking_no: string;
|
||||
tracking_status: string;
|
||||
};
|
||||
transfer_flow: null | {
|
||||
internal_tag_no: string;
|
||||
current_stage: string;
|
||||
current_stage_text: string;
|
||||
current_location: string;
|
||||
current_location_text: string;
|
||||
return_confirmed_at?: string;
|
||||
};
|
||||
report_info: null | {
|
||||
id: number;
|
||||
report_no: string;
|
||||
report_status: string;
|
||||
publish_time: string;
|
||||
zhongjian_report_no: string;
|
||||
zhongjian_report_files: AdminFileAsset[];
|
||||
};
|
||||
flow_logs?: Array<{
|
||||
id: number;
|
||||
action_text: string;
|
||||
operator_name: string;
|
||||
remark: string;
|
||||
created_at: string;
|
||||
}>;
|
||||
next_action?: string;
|
||||
next_action_text?: string;
|
||||
}
|
||||
|
||||
export interface AdminAppraisalTaskListItem {
|
||||
id: number;
|
||||
order_id: number;
|
||||
order_no: string;
|
||||
appraisal_no: string;
|
||||
external_order_no: string;
|
||||
service_provider: string;
|
||||
service_provider_text: string;
|
||||
task_stage: string;
|
||||
task_stage_text: string;
|
||||
status: string;
|
||||
status_text: string;
|
||||
assignee_id: number;
|
||||
product_name: string;
|
||||
category_name: string;
|
||||
brand_name: string;
|
||||
assignee_name: string;
|
||||
result_text: string;
|
||||
started_at: string;
|
||||
submitted_at: string;
|
||||
sla_deadline: string;
|
||||
is_overtime: boolean;
|
||||
display_status: string;
|
||||
}
|
||||
|
||||
export interface AdminAppraisalTaskDetail {
|
||||
task_info: AdminAppraisalTaskListItem & {
|
||||
is_overtime: boolean;
|
||||
};
|
||||
report_summary: null | {
|
||||
id: number;
|
||||
report_no: string;
|
||||
report_status: string;
|
||||
report_status_text: string;
|
||||
};
|
||||
material_tag?: null | Record<string, any>;
|
||||
product_info: {
|
||||
product_name: string;
|
||||
category_id: number;
|
||||
category_name: string;
|
||||
brand_id: number;
|
||||
brand_name: string;
|
||||
color: string;
|
||||
size_spec: string;
|
||||
serial_no: string;
|
||||
};
|
||||
extra_info: Record<string, any>;
|
||||
result_info: {
|
||||
result_text: string;
|
||||
result_desc: string;
|
||||
condition_grade: string;
|
||||
condition_desc?: string;
|
||||
valuation_min: number;
|
||||
valuation_max: number;
|
||||
valuation_desc?: string;
|
||||
attachments: AdminFileAsset[];
|
||||
external_remark: string;
|
||||
internal_remark: string;
|
||||
key_points: Array<{
|
||||
point_code: string;
|
||||
point_name: string;
|
||||
point_value: string;
|
||||
point_remark: string;
|
||||
}>;
|
||||
};
|
||||
prefill_result_info?: null | (AdminAppraisalTaskDetail["result_info"] & {
|
||||
source_task_id?: number;
|
||||
source_stage?: string;
|
||||
source_stage_text?: string;
|
||||
});
|
||||
appraisal_template: null | {
|
||||
id?: number;
|
||||
name?: string;
|
||||
code?: string;
|
||||
service_provider?: string;
|
||||
service_provider_text?: string;
|
||||
result_options: string[];
|
||||
condition_options: string[];
|
||||
valuation_hint?: string;
|
||||
key_points: Array<{
|
||||
point_code: string;
|
||||
point_name: string;
|
||||
point_type: "text" | "textarea" | "select" | "boolean";
|
||||
options: string[];
|
||||
sort_order?: number;
|
||||
is_required: boolean;
|
||||
point_value: string;
|
||||
point_remark: string;
|
||||
}>;
|
||||
};
|
||||
stage_tasks?: Array<AdminAppraisalTaskListItem & { is_current?: boolean }>;
|
||||
timeline: Array<{
|
||||
node_text: string;
|
||||
node_desc: string;
|
||||
occurred_at: string;
|
||||
}>;
|
||||
materials: Array<{
|
||||
item_name: string;
|
||||
status: string;
|
||||
source_type: string;
|
||||
files: Array<{
|
||||
file_id: string;
|
||||
file_url: string;
|
||||
thumbnail_url: string;
|
||||
}>;
|
||||
}>;
|
||||
supplement_task: null | {
|
||||
id: number;
|
||||
reason: string;
|
||||
deadline: string;
|
||||
status: string;
|
||||
items: Array<{
|
||||
item_name: string;
|
||||
guide_text: string;
|
||||
is_required: boolean;
|
||||
}>;
|
||||
};
|
||||
zhongjian_report: {
|
||||
report_no: string;
|
||||
files: AdminFileAsset[];
|
||||
};
|
||||
}
|
||||
|
||||
export interface AdminReportListItem {
|
||||
id: number;
|
||||
order_id: number;
|
||||
order_no: string;
|
||||
appraisal_no: string;
|
||||
report_no: string;
|
||||
report_type: string;
|
||||
report_type_text: string;
|
||||
report_title: string;
|
||||
report_status: string;
|
||||
report_status_text: string;
|
||||
service_provider: string;
|
||||
service_provider_text: string;
|
||||
institution_name: string;
|
||||
publish_time: string;
|
||||
zhongjian_report_no: string;
|
||||
report_entry_admin_name: string;
|
||||
report_entered_at: string;
|
||||
product_name: string;
|
||||
category_name: string;
|
||||
brand_name: string;
|
||||
}
|
||||
|
||||
export interface AdminReportDetail {
|
||||
report_header: Partial<AdminReportListItem> & {
|
||||
id: number;
|
||||
order_id: number;
|
||||
report_no: string;
|
||||
report_type: string;
|
||||
report_type_text: string;
|
||||
report_title: string;
|
||||
report_status: string;
|
||||
report_status_text: string;
|
||||
service_provider: string;
|
||||
service_provider_text: string;
|
||||
institution_name: string;
|
||||
publish_time: string;
|
||||
zhongjian_report_no: string;
|
||||
report_entry_admin_id: number;
|
||||
report_entry_admin_name: string;
|
||||
report_entered_at: string;
|
||||
};
|
||||
product_info: Record<string, any>;
|
||||
result_info: Record<string, any>;
|
||||
appraisal_info: Record<string, any>;
|
||||
valuation_info: Record<string, any>;
|
||||
evidence_attachments: AdminFileAsset[];
|
||||
zhongjian_report_files: AdminFileAsset[];
|
||||
risk_notice_text: string;
|
||||
verify_info: {
|
||||
verify_status: string;
|
||||
verify_url: string;
|
||||
verify_qrcode_url: string;
|
||||
report_page_url: string;
|
||||
verify_count: number;
|
||||
};
|
||||
}
|
||||
|
||||
export const adminApi = {
|
||||
login(mobile: string, password: string) {
|
||||
return request<AdminLoginResponse>("/api/admin/auth/login", {
|
||||
method: "POST",
|
||||
data: { mobile, password },
|
||||
});
|
||||
},
|
||||
getAuthMe() {
|
||||
return request<{ admin_info: AdminSessionInfo }>("/api/admin/auth/me");
|
||||
},
|
||||
logout() {
|
||||
return request<Record<string, never>>("/api/admin/auth/logout", { method: "POST" });
|
||||
},
|
||||
getOrders(params?: Record<string, string | number>) {
|
||||
return request<PaginatedList<AdminOrderListItem>>("/api/admin/orders", { params });
|
||||
},
|
||||
getOrderDetail(id: number) {
|
||||
return request<AdminOrderDetail>("/api/admin/order/detail", { params: { id } });
|
||||
},
|
||||
lookupWarehouseInbound(trackingNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/inbound/lookup", {
|
||||
params: { tracking_no: trackingNo },
|
||||
});
|
||||
},
|
||||
receiveWarehouseInbound(data: { tracking_no: string; internal_tag_no: string }) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/inbound/receive", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
lookupZhongjianWarehouseTransfer(internalTagNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/zhongjian/lookup", {
|
||||
params: { internal_tag_no: internalTagNo },
|
||||
});
|
||||
},
|
||||
zhongjianWarehouseOutbound(internalTagNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/zhongjian/outbound", {
|
||||
method: "POST",
|
||||
data: { internal_tag_no: internalTagNo },
|
||||
});
|
||||
},
|
||||
zhongjianWarehouseInbound(internalTagNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/zhongjian/inbound", {
|
||||
method: "POST",
|
||||
data: { internal_tag_no: internalTagNo },
|
||||
});
|
||||
},
|
||||
lookupWarehouseReturn(internalTagNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/return/lookup", {
|
||||
params: { internal_tag_no: internalTagNo },
|
||||
});
|
||||
},
|
||||
verifyWarehouseReturnMaterialTag(data: { internal_tag_no: string; qr_input: string }) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/return/material-tag/verify", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
confirmWarehouseReturnZhongjian(internalTagNo: string) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/return/zhongjian/confirm", {
|
||||
method: "POST",
|
||||
data: { internal_tag_no: internalTagNo },
|
||||
});
|
||||
},
|
||||
shipWarehouseReturn(data: { internal_tag_no: string; express_company: string; tracking_no: string }) {
|
||||
return request<AdminWarehouseWorkbenchContext>("/api/admin/warehouse-workbench/return/ship", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
getAppraisalTasks(params?: Record<string, string | number>) {
|
||||
return request<PaginatedList<AdminAppraisalTaskListItem>>("/api/admin/appraisal-tasks", { params });
|
||||
},
|
||||
getAppraisalTaskDetail(id: number) {
|
||||
return request<AdminAppraisalTaskDetail>("/api/admin/appraisal-task/detail", { params: { id } });
|
||||
},
|
||||
scanAppraisalTransferTag(internalTagNo: string) {
|
||||
return request<{ task_id: number; order_id: number; service_provider: string; service_provider_text: string }>(
|
||||
"/api/admin/appraisal-task/transfer-tag/scan",
|
||||
{ method: "POST", data: { internal_tag_no: internalTagNo } },
|
||||
);
|
||||
},
|
||||
saveAppraisalTaskResult(data: Record<string, unknown>) {
|
||||
return request<{ id: number }>("/api/admin/appraisal-task/save-result", { method: "POST", data });
|
||||
},
|
||||
requestAppraisalTaskSupplement(data: Record<string, unknown>) {
|
||||
return request<{ id: number; supplement_task_id: number }>("/api/admin/appraisal-task/request-supplement", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
saveZhongjianAppraisalReport(data: { id: number; zhongjian_report_no: string; report_files: AdminFileAsset[] }) {
|
||||
return request<{ id: number; report: Record<string, any> }>("/api/admin/appraisal-task/zhongjian-report/save", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
publishAppraisalTaskWithMaterialTag(data: { id: number; qr_input: string }) {
|
||||
return request<Record<string, any>>("/api/admin/appraisal-task/material-tag/publish", {
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
},
|
||||
uploadAppraisalEvidenceFile(filePath: string) {
|
||||
return uploadFile<AdminFileAsset>("/api/admin/appraisal-task/evidence/upload", filePath);
|
||||
},
|
||||
deleteAppraisalEvidenceFile(fileUrl: string) {
|
||||
return request<{ file_url: string }>("/api/admin/appraisal-task/evidence/delete", {
|
||||
method: "POST",
|
||||
data: { file_url: fileUrl },
|
||||
});
|
||||
},
|
||||
getReports(params?: Record<string, string | number>) {
|
||||
return request<PaginatedList<AdminReportListItem>>("/api/admin/reports", { params });
|
||||
},
|
||||
getReportDetail(id: number) {
|
||||
return request<AdminReportDetail>("/api/admin/report/detail", { params: { id } });
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user