入职任务预览,入职任务cope,验证填入的信息
This commit is contained in:
@@ -3,6 +3,7 @@ import type { ReqId, ResPage } from "@/api/interface";
|
||||
|
||||
const taskHttp = moduleRequest("/biz/onboarding/task/");
|
||||
const auditHttp = moduleRequest("/biz/onboarding/audit/");
|
||||
const contractDocumentHttp = moduleRequest("/biz/onboarding/contract-document/");
|
||||
const fileHttp = moduleRequest("/sys/dev/file/");
|
||||
|
||||
export interface OnboardingTask {
|
||||
@@ -21,6 +22,33 @@ export interface OnboardingTask {
|
||||
linkExpireAt?: string;
|
||||
submitCount: number;
|
||||
createTime: string;
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
/** 当前查询条件下、不受状态筛选影响的任务统计。 */
|
||||
export interface OnboardingTaskStatistics {
|
||||
pendingFill: number;
|
||||
reviewing: number;
|
||||
rejected: number;
|
||||
approved: number;
|
||||
}
|
||||
|
||||
/** 带状态统计的入职任务分页结果。 */
|
||||
export interface OnboardingTaskPage extends ResPage<OnboardingTask> {
|
||||
statistics: OnboardingTaskStatistics;
|
||||
}
|
||||
|
||||
/** 批量复制任务返回的单条新任务链接。 */
|
||||
export interface OnboardingTaskCreatedResult {
|
||||
taskId: number;
|
||||
taskNo: string;
|
||||
linkToken: string;
|
||||
expiresAt: string;
|
||||
}
|
||||
|
||||
/** 批量复制任务结果。 */
|
||||
export interface OnboardingTaskCopyResult {
|
||||
tasks: OnboardingTaskCreatedResult[];
|
||||
}
|
||||
|
||||
/** 员工端完成合同准备后返回的当前文件版本。 */
|
||||
@@ -218,7 +246,7 @@ export interface OnboardingTemplate {
|
||||
}
|
||||
export const onboardingTaskApi = {
|
||||
page(params: Record<string, unknown>) {
|
||||
return taskHttp.get<ResPage<OnboardingTask>>("page", params);
|
||||
return taskHttp.get<OnboardingTaskPage>("page", params);
|
||||
},
|
||||
|
||||
detail(params: ReqId) {
|
||||
@@ -254,10 +282,62 @@ export const onboardingTaskApi = {
|
||||
return response;
|
||||
},
|
||||
|
||||
/** 创建任务前生成并下载单份临时 DOCX 合同预览。 */
|
||||
async previewContractBeforeCreate(params: Record<string, unknown>) {
|
||||
let response: any;
|
||||
try {
|
||||
response = await contractDocumentHttp.post<any>(
|
||||
"preview-before-create",
|
||||
params,
|
||||
{ responseType: "blob", loading: false, cancel: false }
|
||||
);
|
||||
} catch (error: any) {
|
||||
const errorBlob = error?.response?.data;
|
||||
if (errorBlob instanceof Blob) {
|
||||
try {
|
||||
const result = JSON.parse(await errorBlob.text());
|
||||
throw new Error(result?.msg || "合同预览生成失败");
|
||||
} catch (parseError) {
|
||||
if (!(parseError instanceof SyntaxError)) throw parseError;
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
|
||||
const blob = response?.data;
|
||||
const contentType = String(
|
||||
response?.headers?.["content-type"] || blob?.type || ""
|
||||
);
|
||||
if (
|
||||
blob instanceof Blob &&
|
||||
contentType.toLowerCase().includes("application/json")
|
||||
) {
|
||||
try {
|
||||
const result = JSON.parse(await blob.text());
|
||||
throw new Error(result?.msg || "合同预览生成失败");
|
||||
} catch (error) {
|
||||
if (error instanceof SyntaxError) {
|
||||
throw new Error("合同预览生成失败");
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
},
|
||||
|
||||
create(params: Record<string, unknown>) {
|
||||
return taskHttp.post("create", params);
|
||||
},
|
||||
|
||||
copy(params: {
|
||||
sourceTaskId: number;
|
||||
count: number;
|
||||
items: Array<{ remark: string }>;
|
||||
}) {
|
||||
return taskHttp.post<OnboardingTaskCopyResult>("copy", params);
|
||||
},
|
||||
|
||||
approve(params: {
|
||||
taskId: number;
|
||||
auditOpinion?: string;
|
||||
|
||||
Reference in New Issue
Block a user