zhangwencui
2026-10-21 b3484d9b15bd5611a7129148b155eec86febb914
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import { request } from './request';
 
export interface PageResult<T> {
  list: T[];
  total: number;
}
 
export interface MaterialItem {
  id?: number;
  code: string;
  name: string;
  specification?: string;
  categoryId?: number;
  categoryName?: string;
  unitMeasureId?: number;
  unitMeasureName?: string;
  unitMeasureId2?: number;
  unitMeasureName2?: string;
  unitMeasureRate1?: number;
  unitMeasureId3?: number;
  unitMeasureName3?: string;
  unitMeasureRate2?: number;
  itemType?: number;
  status: number;
  purchasePrice?: number;
  salesPrice?: number;
  costPrice?: number;
  safetyStock?: number;
  minStock?: number;
  maxStock?: number;
  warehouseId?: number;
  warehouseCode?: string;
  warehouseName?: string;
  remark?: string;
  isBatchManaged?: boolean;
  produceDateFlag?: boolean;
  expireDateFlag?: boolean;
  receiptDateFlag?: boolean;
  vendorFlag?: boolean;
  purchaseOrderCodeFlag?: boolean;
  lotNumberFlag?: boolean;
  qualityStatusFlag?: boolean;
  expiryDay?: number;
  syncMes?: boolean;
  syncedMes?: boolean;
}
 
export interface MaterialCategory {
  id?: number;
  parentId?: number;
  code?: string;
  name?: string;
  itemOrProduct?: string;
  sort?: number;
  status?: number;
  remark?: string;
  children?: MaterialCategory[];
}
 
export interface MeasureUnit {
  id?: number;
  code: string;
  name: string;
  primaryFlag?: boolean;
  primaryId?: number;
  changeRate?: number;
  status: number;
  remark?: string;
}
 
function authHeader(accessToken: string) {
  return { Authorization: `Bearer ${accessToken}` };
}
 
function toQuery(params: Record<string, string | number | boolean | undefined>) {
  const query = Object.keys(params)
    .filter((key) => params[key] !== undefined && params[key] !== '')
    .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(String(params[key]))}`)
    .join('&');
  return query ? `?${query}` : '';
}
 
export function getMaterialPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string; code?: string; status?: number }) {
  return request<PageResult<MaterialItem>>(`/mdm/item/page${toQuery(params)}`, { header: authHeader(accessToken) });
}
export function getMaterial(accessToken: string, id: number) {
  return request<MaterialItem>(`/mdm/item/get${toQuery({ id })}`, { header: authHeader(accessToken) });
}
export function createMaterial(accessToken: string, data: MaterialItem) {
  return request<number>('/mdm/item/create', { method: 'POST', data, header: authHeader(accessToken) });
}
export function updateMaterial(accessToken: string, data: MaterialItem) {
  return request<boolean>('/mdm/item/update', { method: 'PUT', data, header: authHeader(accessToken) });
}
export function deleteMaterial(accessToken: string, id: number) {
  return request<boolean>(`/mdm/item/delete${toQuery({ id })}`, { method: 'DELETE', header: authHeader(accessToken) });
}
export function deleteMaterialList(accessToken: string, ids: number[] | string) {
  return request<boolean>(`/mdm/item/delete-list${toQuery({ ids: Array.isArray(ids) ? ids.join(',') : ids })}`, { method: 'DELETE', header: authHeader(accessToken) });
}
export function updateMaterialStatus(accessToken: string, id: number, status: number) {
  return request<boolean>('/mdm/item/update-status', { method: 'PUT', data: { id, status }, header: authHeader(accessToken) });
}
export function updateMaterialSync(accessToken: string, id: number, sync: boolean) {
  return request<boolean>('/mdm/item/update-sync', { method: 'PUT', data: { id, sync }, header: authHeader(accessToken) });
}
 
export function getMaterialCategoryList(accessToken: string, params: { name?: string; status?: number } = {}) {
  return request<MaterialCategory[]>(`/mes/md/item-type/list${toQuery(params)}`, { header: authHeader(accessToken) });
}
export function getMaterialCategorySimpleList(accessToken: string) {
  return request<MaterialCategory[]>('/mes/md/item-type/simple-list', { header: authHeader(accessToken) });
}
export function getMaterialCategory(accessToken: string, id: number) {
  return request<MaterialCategory>(`/mes/md/item-type/get${toQuery({ id })}`, { header: authHeader(accessToken) });
}
export function generateMaterialCategoryCode(accessToken: string): Promise<string> {
  return request<string>('/mes/md/auto-code-record/generate', {
    method: 'POST',
    data: { ruleCode: 'MD_ITEM_TYPE_CODE' },
    header: authHeader(accessToken),
  });
}
export function createMaterialCategory(accessToken: string, data: MaterialCategory) {
  return request<number>('/mes/md/item-type/create', { method: 'POST', data, header: authHeader(accessToken) });
}
export function updateMaterialCategory(accessToken: string, data: MaterialCategory) {
  return request<boolean>('/mes/md/item-type/update', { method: 'PUT', data, header: authHeader(accessToken) });
}
export function deleteMaterialCategory(accessToken: string, id: number) {
  return request<boolean>(`/mes/md/item-type/delete${toQuery({ id })}`, { method: 'DELETE', header: authHeader(accessToken) });
}
 
export function getMeasureUnitPage(accessToken: string, params: { pageNo: number; pageSize: number; name?: string; code?: string; status?: number }) {
  return request<PageResult<MeasureUnit>>(`/mdm/unit/page${toQuery(params)}`, { header: authHeader(accessToken) });
}
/**
 * 计量单位候选列表(下拉/选择器用)。
 * 对齐 web 的 MdUnitMeasureSelect:web 走的就是 `/mdm/unit/page`(pageSize 100),
 * 而不是 `/mes/md/unit-measure/simple-list`(该接口实测恒返回空,见 2026-10-10 日志)。
 */
export async function getMeasureUnitList(accessToken: string) {
  const res = await getMeasureUnitPage(accessToken, { pageNo: 1, pageSize: 100 });
  return res?.list || [];
}
export function getMeasureUnit(accessToken: string, id: number) {
  return request<MeasureUnit>(`/mdm/unit/get${toQuery({ id })}`, { header: authHeader(accessToken) });
}
export function createMeasureUnit(accessToken: string, data: MeasureUnit) {
  return request<number>('/mdm/unit/create', { method: 'POST', data, header: authHeader(accessToken) });
}
export function updateMeasureUnit(accessToken: string, data: MeasureUnit) {
  return request<boolean>('/mdm/unit/update', { method: 'PUT', data, header: authHeader(accessToken) });
}
export function deleteMeasureUnit(accessToken: string, id: number) {
  return request<boolean>(`/mdm/unit/delete${toQuery({ id })}`, { method: 'DELETE', header: authHeader(accessToken) });
}