feat: 新增电工APP端与定时任务管理功能

- 新增电工APP独立鉴权中间件与登录注册接口
- 新增定时任务管理模块,支持任务配置、执行日志与手动触发
- 新增运维费定价与电工派单成本价目管理
- 新增电工资质证照管理与到期提醒定时任务
- 完善数据库实体与DTO校验,优化权限控制
This commit is contained in:
andyesfly committed 2026-10-02 16:08:00 +08:00
1 parent 1803ad679c
commit f4454ad014
57 files changed
+9388 -200

No files matched your search

+128
View File
@@ -0,0 +1,128 @@
import request from '@/utils/request';
// 资质状态:none 无证书 / normal 正常 / expiring 临期 / expired 已过期
export type WorkerCertStatus = 'none' | 'normal' | 'expiring' | 'expired';
// 审核状态:0 待审核 / 1 已通过 / 2 已驳回
export type WorkerAuditStatus = 0 | 1 | 2;
// 证书行(详情接口返回完整证书,保存时按此结构提交)
export interface WorkerCert {
id?: number;
workerId?: number;
certType: string;
certNo: string;
issueAuthority?: string;
issueDate?: string;
expireDate?: string;
certImageUrl?: string;
}
// 列表接口返回的证书摘要
export interface WorkerCertSummary {
id: number;
certType: string;
certNo: string;
expireDate?: string;
}
export interface WorkerRecord {
id: number;
workerName: string;
phone?: string;
idCard?: string;
workerTitle?: string;
rating?: number | string;
certInfo?: string;
certVerified?: boolean;
completedCount?: number;
// 在岗状态:1 在岗 / 0 离职
status: number;
auditStatus: number;
auditRemark?: string;
auditBy?: number;
auditAt?: string;
lastLoginAt?: string;
certStatus?: WorkerCertStatus;
certs?: WorkerCertSummary[];
createdAt?: string;
created_at?: string;
updatedAt?: string;
updated_at?: string;
}
export interface WorkerQuery {
page?: number;
pageSize?: number;
keyword?: string;
status?: number;
auditStatus?: number;
certStatus?: WorkerCertStatus;
}
export interface WorkerListResult {
list: WorkerRecord[];
total: number;
page: number;
pageSize: number;
}
// KPI:电工总数 / 待审核 / 临期 / 已过期
export interface WorkerStats {
total: number;
pendingAudit: number;
expiring: number;
expired: number;
}
export interface WorkerCertPayload {
certType: string;
certNo: string;
issueAuthority?: string;
issueDate?: string;
expireDate?: string;
certImageUrl?: string;
}
export interface WorkerPayload {
workerName: string;
phone: string;
idCard?: string;
workerTitle?: string;
status?: number;
rating?: number;
certInfo?: string;
// 新增时是否同时开通电工 APP 账号(默认密码为手机号后 6 位)
withAccount?: boolean;
// 存在时整体覆盖该电工的全部证书
certs?: WorkerCertPayload[];
}
export interface WorkerAuditPayload {
approved: boolean;
remark?: string;
}
// 管理端电工登记接口(不修改原 worker.ts,勘察派单页仍使用 workerApi)
export const workerRegistryApi = {
getList: (params: WorkerQuery) => request.get<WorkerListResult>('/workers', { params }),
getStats: () => request.get<WorkerStats>('/workers/stats'),
getDetail: (id: number) => request.get<WorkerRecord>(`/workers/${id}`),
create: (data: WorkerPayload) => request.post('/workers', data),
update: (id: number, data: Partial<WorkerPayload>) => request.put(`/workers/${id}`, data),
remove: (id: number) => request.delete(`/workers/${id}`),
audit: (id: number, data: WorkerAuditPayload) => request.put(`/workers/${id}/audit`, data),
addCert: (id: number, data: WorkerCertPayload) => request.post(`/workers/${id}/certs`, data),
updateCert: (id: number, certId: number, data: WorkerCertPayload) =>
request.put(`/workers/${id}/certs/${certId}`, data),
removeCert: (id: number, certId: number) => request.delete(`/workers/${id}/certs/${certId}`),
};