Add employee code assignment function

This commit is contained in:
2026-03-02 12:58:05 +08:00
parent d2dac6091e
commit 76ea5a2e06
9 changed files with 1068 additions and 160 deletions
+110 -6
View File
@@ -1,5 +1,5 @@
import axios from 'axios';
import type { ApiResponse, AuthResponse, User } from '@/types';
import type { ApiResponse, AuthResponse, User, EmployeeSerial, EmployeeSerialResponse } from '@/types';
const API_BASE_URL = import.meta.env.VITE_API_BASE_URL || '/api';
@@ -78,10 +78,9 @@ export const authApi = {
updateProfile: async (data: { name?: string; email?: string }) => {
const response = await apiClient.put('/auth/profile', data);
const user = response.data;
if (user) {
localStorage.setItem('currentUser', JSON.stringify(user));
return user;
if (response.data.user) {
localStorage.setItem('currentUser', JSON.stringify(response.data.user));
return response.data.user as User;
}
throw new Error('更新资料失败');
},
@@ -91,7 +90,10 @@ export const authApi = {
if (response.data.message) {
return true;
}
throw new Error(response.data.error || '修改密码失败');
if (response.data.error) {
throw new Error(response.data.error);
}
throw new Error('修改密码失败');
},
};
@@ -192,6 +194,7 @@ export const dashboardApi = {
return {
totalCompanies: data.overview?.totalCompanies || 0,
totalSerials: data.overview?.totalSerials || 0,
totalEmployeeSerials: data.overview?.totalEmployeeSerials || 0,
activeSerials: data.overview?.activeSerials || 0,
inactiveSerials: data.overview?.inactiveSerials || 0,
monthlyData: data.monthlyStats || [],
@@ -207,9 +210,110 @@ export const dashboardApi = {
companyName: s.companyName,
status: s.isActive ? 'active' : 'inactive',
createdAt: s.createdAt,
type: s.type,
})) || [],
};
}
throw new Error('获取统计数据失败');
},
};
export const employeeSerialApi = {
generate: async (data: {
companyName: string;
department: string;
employeeName: string;
quantity: number;
serialPrefix?: string;
}) => {
const response = await apiClient.post('/employee-serials/generate', data);
if (response.data.serials) {
return response.data;
}
throw new Error(response.data.error || '生成员工序列号失败');
},
list: async (filter?: { page?: number; limit?: number; search?: string }) => {
let url = '/employee-serials';
const params = new URLSearchParams();
if (filter?.page && filter.page > 1) params.append('page', String(filter.page));
if (filter?.limit && filter.limit !== 20) params.append('limit', String(filter.limit));
if (filter?.search) params.append('search', filter.search);
if (params.toString()) url += `?${params.toString()}`;
const response = await apiClient.get(url);
if (response.data.data) {
return response.data as EmployeeSerialResponse;
}
throw new Error('获取员工序列号列表失败');
},
query: async (serialNumber: string) => {
const response = await apiClient.get(`/employee-serials/${encodeURIComponent(serialNumber)}/query`);
if (response.data.serial) {
return response.data.serial as EmployeeSerial;
}
throw new Error(response.data.error || '查询员工序列号失败');
},
queryAll: async (serialNumber: string) => {
// 先查企业序列号
try {
const companyResponse = await apiClient.get(`/serials/${encodeURIComponent(serialNumber)}/query`);
if (companyResponse.data.serial) {
return { type: 'company', data: companyResponse.data.serial };
}
} catch (e: any) {
// 企业序列号不存在,继续查员工序列号
}
// 再查员工序列号
try {
const employeeResponse = await apiClient.get(`/employee-serials/${encodeURIComponent(serialNumber)}/query`);
if (employeeResponse.data.serial) {
return { type: 'employee', data: employeeResponse.data.serial };
}
} catch (e: any) {
throw new Error('序列号不存在');
}
throw new Error('序列号不存在');
},
generateQrCode: async (serialNumber: string, baseUrl?: string) => {
const response = await apiClient.post(`/employee-serials/${encodeURIComponent(serialNumber)}/qrcode`, {
baseUrl,
});
if (response.data.qrCodeData) {
return response.data;
}
throw new Error(response.data.error || '生成二维码失败');
},
update: async (serialNumber: string, data: {
companyName?: string;
department?: string;
employeeName?: string;
isActive?: boolean;
}) => {
const response = await apiClient.put(`/employee-serials/${encodeURIComponent(serialNumber)}`, data);
if (response.data.serial) {
return response.data.serial as EmployeeSerial;
}
throw new Error(response.data.error || '更新员工序列号失败');
},
revoke: async (serialNumber: string) => {
const response = await apiClient.post(`/employee-serials/${encodeURIComponent(serialNumber)}/revoke`);
if (response.data.message) {
return true;
}
throw new Error(response.data.error || '吊销员工序列号失败');
},
delete: async (serialNumber: string) => {
const response = await apiClient.delete(`/employee-serials/${encodeURIComponent(serialNumber)}`);
if (response.data.message) {
return true;
}
throw new Error(response.data.error || '删除员工序列号失败');
},
};