2026-08-10 f9e6eb6fc2c2e0c2a2b17238b817fcbfcb6bab56
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
import type { PageParam, PageResult } from '@vben/request';
 
import { requestClient } from '#/api/request';
 
export namespace AftersalesTicketApi {
  /** 工单明细行 */
  export interface TicketItem {
    id?: number;
    ticketId?: number;
    saleOrderItemId?: number;
    itemId?: number;
    itemCode?: string;
    itemName?: string;
    batchId?: number;
    batchCode?: string;
    saleQuantity?: number;
    returnQuantity?: number;
    needRepair?: boolean;
    needReturn?: boolean;
    remark?: string;
  }
 
  /** 售后工单 */
  export interface Ticket {
    id?: number;
    no?: string;
    name: string;
    customerId?: number;
    customerName?: string;
    contactId?: number;
    contactName?: string;
    saleOrderId?: number;
    saleOrderNo?: string;
    contractId?: number;
    issueType?: number;
    issueCategory?: string;
    issueDescription?: string;
    severityLevel?: number;
    status?: number;
    ownerUserId?: number;
    ownerUserName?: string;
    handlerUserId?: number;
    handlerUserName?: string;
    processInstanceId?: string;
    returnId?: number;
    repairId?: number;
    resolvedTime?: string;
    closedTime?: string;
    remark?: string;
    creator?: string;
    createTime?: string;
    updater?: string;
    updateTime?: string;
    /** 附件 blobId 列表(保存时传入) */
    blobIds?: number[];
    /** 附件列表(详情时返回) */
    attachmentList?: { id: number; name?: string; url?: string }[];
    items?: TicketItem[];
  }
}
 
/** 创建售后工单 */
export function createTicket(data: AftersalesTicketApi.Ticket) {
  return requestClient.post<number>('/aftersales/ticket/create', data);
}
 
/** 更新售后工单 */
export function updateTicket(data: AftersalesTicketApi.Ticket) {
  return requestClient.put<boolean>('/aftersales/ticket/update', data);
}
 
/** 删除售后工单 */
export function deleteTicket(id: number) {
  return requestClient.delete<boolean>('/aftersales/ticket/delete', {
    params: { id },
  });
}
 
/** 获取售后工单详情 */
export function getTicket(id: number) {
  return requestClient.get<AftersalesTicketApi.Ticket>(
    `/aftersales/ticket/get?id=${id}`,
  );
}
 
/** 分页查询售后工单 */
export function getTicketPage(params: PageParam) {
  return requestClient.get<PageResult<AftersalesTicketApi.Ticket>>(
    '/aftersales/ticket/page',
    { params },
  );
}
 
/** 分配处理人 */
export function assignTicket(id: number, handlerUserId: number) {
  return requestClient.post<boolean>('/aftersales/ticket/assign', null, {
    params: { id, handlerUserId },
  });
}
 
/** 问题判定 */
export function classifyTicket(params: {
  id: number;
  issueType: number;
  issueCategory?: string;
  severityLevel?: number;
}) {
  return requestClient.post<boolean>('/aftersales/ticket/classify', null, {
    params,
  });
}
 
/** 完结工单 */
export function resolveTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/resolve', null, {
    params: { id },
  });
}
 
/** 关闭工单 */
export function closeTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/close', null, {
    params: { id },
  });
}
 
/** 取消工单 */
export function cancelTicket(id: number) {
  return requestClient.put<boolean>('/aftersales/ticket/cancel', null, {
    params: { id },
  });
}