import request from '@/utils/request'; // 出国申请查询参数类型 export interface OverseasApplicationQuery { pageNum: number; pageSize: number; applicantName?: string; department?: string; purpose?: string; destination?: string; status?: string; approvalLevel?: string; currentApprover?: string; applicantId?: number; budgetMin?: number; budgetMax?: number; applyTimeBegin?: string; applyTimeEnd?: string; startDateBegin?: string; startDateEnd?: string; params?: Record; } // 出国申请数据类型 export interface OverseasApplicationVO { applicationId: number | string; serialNumber?: string; // 编号 applicantId: number; applicantName: string; gender?: string; // 性别 birthDate?: string; // 出生日期 photo?: string; // 照片地址 idNumber?: string; // 身份证号 politicalStatus?: string; // 政治面貌 registeredAddress?: string; // 户籍所在地 department: string; position?: string; // 职务 professionalTitle?: string; // 职称 administrativeLevel?: string; // 行政职级 personnelCategory?: string; // 人员类别代码 registrationUnit?: string; // 登记备案责任单位 unitLeaderSignature?: string; // 单位负责人签名 officePhone?: string; // 办公电话 mobilePhone?: string; // 移动电话 contactPhone: string; documentName?: string; // 申领证件名称 documentNumber?: string; // 证件号码 destinationCountry?: string; // 前往国家 exitReason?: string; // 出境事由 visitRelationship?: string; // 探望对象姓名及与申请者关系 remarks?: string; // 备注 emergencyContact?: string; // 应急联系人及电话 signature?: string; // 手写签字 stampedRegistrationFilePath?: string; // 登记备案表盖章文件路径 stampedRegistrationFileName?: string; // 登记备案表盖章文件名 stampedFileUploadTime?: string; // 盖章文件上传时间 stampedFileUploadStatus?: string; // 盖章文件上传状态 stampedFileOssId?: number; // 盖章文件OSS ID partyRetentionFilePath?: string; // 党籍保留附件文件路径 partyRetentionFileName?: string; // 党籍保留附件文件名 partyRetentionUploadTime?: string; // 党籍保留附件上传时间 partyRetentionUploadStatus?: string; // 党籍保留附件上传状态 partyRetentionFileOssId?: number; // 党籍保留附件OSS ID purpose: string; purposeDetail: string; destination: string; destinationCity?: string; startDate: string; endDate: string; duration: number; budget: number; invitation?: string; itinerary: string; accommodationPlan?: string; transportationPlan?: string; status: string; currentApprover?: string; approvalLevel: string; applyTime: string; approvalTime?: string; adminRemark?: string; applicantRemark?: string; createTime: string; updateTime: string; createBy: string; updateBy: string; // 显示字段 statusText: string; purposeText: string; approvalLevelText: string; genderText?: string; politicalStatusText?: string; administrativeLevelText?: string; personnelCategoryText?: string; // 工作流相关字段 approvalStatus?: string; // 工作流审批状态:draft/waiting/finish/back/cancel approvalStatusText?: string; // 工作流审批状态文本 taskId?: string; // 当前待办任务ID(用于审批跳转) } // 出国申请表单类型 export interface OverseasApplicationForm { applicationId?: number | string; serialNumber?: string; // 编号 applicantId?: number; applicantName?: string; gender?: string; // 性别 birthDate?: string; // 出生日期 photo?: string; // 照片地址 idNumber?: string; // 身份证号 politicalStatus?: string; // 政治面貌 registeredAddress?: string; // 户籍所在地 department?: string; // 所属部门/现工作部门 position?: string; // 职务 professionalTitle?: string; // 职称 administrativeLevel?: string; // 行政职级 personnelCategory?: string; // 人员类别代码 unitLeaderSignature?: string; // 单位负责人签名 officePhone?: string; // 办公电话 mobilePhone?: string; // 移动电话 contactPhone?: string; // 联系电话(保留兼容性) documentName?: string; // 申领证件名称 documentNumber?: string; // 证件号码 destinationCountry?: string; // 前往国家 exitReason?: string; // 出境事由 visitRelationship?: string; // 探望对象姓名及与申请者关系 remarks?: string; // 备注 emergencyContact?: string; // 应急联系人及电话 signature?: string; // 手写签字(base64格式) stampedRegistrationFilePath?: string; // 登记备案表盖章文件路径 stampedRegistrationFileName?: string; // 登记备案表盖章文件名 stampedFileUploadTime?: string; // 盖章文件上传时间 stampedFileUploadStatus?: string; // 盖章文件上传状态:0-未上传,1-已上传 partyRetentionFilePath?: string; // 党籍保留附件文件路径 partyRetentionFileName?: string; // 党籍保留附件文件名 partyRetentionUploadTime?: string; // 党籍保留附件上传时间 partyRetentionUploadStatus?: string; // 党籍保留附件上传状态:0-未上传,1-已上传 purpose: string; purposeDetail: string; destination: string; destinationCity?: string; // 目的地城市 startDate: string; endDate: string; duration?: number; // 自动计算 budget: number; invitation?: string; itinerary: string; accommodationPlan?: string; transportationPlan?: string; applicantRemark?: string; // 工作流相关字段 approvalStatus?: string; // 工作流审批状态 } // 审批请求类型(支持标准工作流模式) export interface ApprovalRequest { applicationId: number | string; approvalStatus: string; approvalOpinion?: string; approvalSignature?: string; // 审批签字(base64图片) taskId?: string; // 🔴 新增:工作流任务ID,支持标准工作流模式 } // 出国记录查询参数类型 export interface OverseasRecordQuery { pageNum: number; pageSize: number; applicantName?: string; department?: string; purpose?: string; destination?: string; completionStatus?: string; applicantId?: number; applicationId?: number; actualStartDateBegin?: string; actualStartDateEnd?: string; actualEndDateBegin?: string; actualEndDateEnd?: string; params?: Record; } // 出国记录数据类型 export interface OverseasRecordVO { recordId: number | string; applicationId: number; applicantId: number; applicantName: string; department: string; position: string; positionText?: string; // 职务文本(用于显示) contactPhone: string; contactEmail: string; purpose: string; purposeDetail: string; destination: string; destinationCity: string; actualStartDate: string; actualEndDate: string; actualDuration: number; actualBudget: number; invitation: string; itinerary: string; accommodationPlan: string; transportationPlan: string; completionStatus: string; achievement: string; reportContent: string; certificatePath: string; createTime: string; updateTime: string; createBy: string; updateBy: string; // 显示字段 purposeText: string; status?: string; // 申请状态(来自申请表) statusText?: string; // 申请状态文本(来自申请表) completionStatusText: string; // 来自申请表的扩展字段 gender?: string; genderText?: string; birthDate?: string; politicalStatus?: string; politicalStatusText?: string; professionalTitle?: string; documentName?: string; documentNumber?: string; mobilePhone?: string; destinationCountry?: string; exitReason?: string; emergencyContact?: string; remarks?: string; } // 出国记录表单类型 export interface OverseasRecordForm { recordId?: number | string; applicationId: number; applicantId?: number; applicantName?: string; department?: string; position?: string; contactPhone?: string; contactEmail?: string; purpose?: string; purposeDetail?: string; destination?: string; destinationCity?: string; actualStartDate: string; actualEndDate: string; actualDuration?: number; actualBudget: number; completionStatus: string; achievement?: string; reportContent?: string; certificatePath?: string; } // 完成状态更新请求类型 export interface CompletionRequest { recordId: number | string; completionStatus: string; achievement?: string; reportContent?: string; } // 出国审批记录查询参数类型 export interface OverseasApprovalQuery { pageNum: number; pageSize: number; applicationId?: number; approverId?: number; approverName?: string; approvalLevel?: string; approvalStatus?: string; approvalTimeBegin?: string; approvalTimeEnd?: string; applicantName?: string; department?: string; destination?: string; params?: Record; } // 出国审批记录数据类型 export interface OverseasApprovalVO { approvalId: number | string; applicationId: number; approverId: number; approverName: string; approvalLevel: string; approvalStatus: string; approvalOpinion: string; approvalTime: string; createTime: string; updateTime: string; createBy: string; updateBy: string; // ==================== 申请信息相关字段 ==================== applicantId: number; applicantName: string; department: string; purpose: string; destination: string; startDate: string; endDate: string; duration: number; // 显示字段 approvalLevelText: string; approvalStatusText: string; purposeText: string; } // ==================== 出国申请相关API ==================== // 查询出国申请列表 export function listOverseasApplication(query: OverseasApplicationQuery) { return request({ url: '/rs/overseas/application/list', method: 'get', params: query }); } // 查询我的出国申请列表 export function listMyOverseasApplication(query: OverseasApplicationQuery) { return request({ url: '/rs/overseas/application/my/list', method: 'get', params: query }); } // 查询当前用户的待审批申请列表(五级审批模式) export function listPendingOverseasApplication() { return request({ url: '/rs/overseas/application/pending/list', method: 'get' }); } // ======================================== // 🚨 标准化改造:删除自定义待审批查询API // // 原因:出国申请工作流应使用标准工作流模式 // 用户应通过工作流API pageByTaskWait() 获取待办任务 // 而不是调用自定义的业务API // // 删除的API:listPendingOverseasApplication() // // 标准工作流模式: // 1. 导入工作流API:import { pageByTaskWait } from '@/api/workflow/task' // 2. 调用标准API:pageByTaskWait(queryParams) // 3. 获得待办任务列表,包含businessId // 4. 点击办理跳转:/rs/overseas/application/edit?taskId=xxx&applicationId=businessId // ======================================== // 根据状态查询申请列表 export function listOverseasApplicationByStatus(status: string) { return request({ url: `/rs/overseas/application/status/${status}`, method: 'get' }); } // 查询出国申请详细 export function getOverseasApplication(applicationId: string | number) { return request({ url: `/rs/overseas/application/detail/${applicationId}`, method: 'get' }); } // 新增出国申请 export function addOverseasApplication(data: OverseasApplicationForm) { return request({ url: '/rs/overseas/application', method: 'post', data: data }); } // 修改出国申请 export function updateOverseasApplication(data: OverseasApplicationForm) { return request({ url: '/rs/overseas/application', method: 'put', data: data }); } // 提交出国申请 export function submitOverseasApplication(applicationId: string | number) { return request({ url: `/rs/overseas/application/submit/${applicationId}`, method: 'put' }); } // 重新提交被拒绝的出国申请 export function resubmitOverseasApplication(applicationId: string | number, data: OverseasApplicationForm) { return request({ url: `/rs/overseas/application/resubmit/${applicationId}`, method: 'put', data: data }); } // 校验出国申请前置条件 export function validateApplicationPrerequisites(politicalStatus?: string, duration?: number) { return request({ url: '/rs/overseas/application/validatePrerequisites', method: 'get', params: { politicalStatus, duration } }); } // 取消出国申请 export function cancelOverseasApplication(applicationId: string | number, reason?: string) { return request({ url: `/rs/overseas/application/cancel/${applicationId}`, method: 'put', params: { reason } }); } // 审批出国申请 export function approveOverseasApplication(data: ApprovalRequest) { return request({ url: '/rs/overseas/application/approve', method: 'post', data: data }); } // 删除出国申请 export function delOverseasApplication(applicationId: string | number | Array) { return request({ url: `/rs/overseas/application/${typeof applicationId === 'object' ? applicationId.join(',') : applicationId}`, method: 'delete' }); } // 导出出国申请 export function exportOverseasApplication(query: OverseasApplicationQuery) { return request({ url: '/rs/overseas/application/export', method: 'post', data: query }); } // ==================== 出国记录相关API ==================== // 查询出国记录列表 export function listOverseasRecord(query: OverseasRecordQuery) { return request({ url: '/rs/overseas/record/list', method: 'get', params: query }); } // 查询我的出国记录列表 export function listMyOverseasRecord(query: OverseasRecordQuery) { return request({ url: '/rs/overseas/record/my/list', method: 'get', params: query }); } // 根据申请ID查询出国记录 export function getOverseasRecordByApplication(applicationId: string | number) { return request({ url: `/rs/overseas/record/application/${applicationId}`, method: 'get' }); } // 查询出国记录详细 export function getOverseasRecord(recordId: string | number) { return request({ url: `/rs/overseas/record/${recordId}`, method: 'get' }); } // 新增出国记录 export function addOverseasRecord(data: OverseasRecordForm) { return request({ url: '/rs/overseas/record', method: 'post', data: data }); } // 修改出国记录 export function updateOverseasRecord(data: OverseasRecordForm) { return request({ url: '/rs/overseas/record', method: 'put', data: data }); } // 基于申请信息创建出国记录 export function createOverseasRecordFromApplication(applicationId: string | number) { return request({ url: `/rs/overseas/record/create/${applicationId}`, method: 'post' }); } // 更新出国记录完成状态 export function updateOverseasRecordCompletion(data: CompletionRequest) { return request({ url: '/rs/overseas/record/complete', method: 'put', data: data }); } // 删除出国记录 export function delOverseasRecord(recordId: string | number | Array) { return request({ url: `/rs/overseas/record/${typeof recordId === 'object' ? recordId.join(',') : recordId}`, method: 'delete' }); } // 导出出国记录 export function exportOverseasRecord(query: OverseasRecordQuery) { return request({ url: '/rs/overseas/record/export', method: 'post', data: query }); } // 初始化出国记录测试数据(临时接口) export function initOverseasRecordTestData() { return request({ url: '/rs/overseas/record/initTestData', method: 'post' }); } // ==================== 出国审批记录相关API ==================== // 查询出国审批记录列表 export function listOverseasApproval(query: OverseasApprovalQuery) { return request({ url: '/rs/overseas/approval/list', method: 'get', params: query }); } // 查询我的审批记录列表 export function listMyOverseasApproval(query: OverseasApprovalQuery) { return request({ url: '/rs/overseas/approval/my/list', method: 'get', params: query }); } // 根据申请ID查询审批记录列表 export function getOverseasApprovalByApplication(applicationId: string | number) { return request({ url: `/rs/overseas/approval/application/${applicationId}`, method: 'get' }); } // 查询出国审批记录详细 export function getOverseasApproval(approvalId: string | number) { return request({ url: `/rs/overseas/approval/${approvalId}`, method: 'get' }); } // 导出出国审批记录 export function exportOverseasApproval(query: OverseasApprovalQuery) { return request({ url: '/rs/overseas/approval/export', method: 'post', data: query }); } // 获取出国申请审批历史 export function getOverseasApprovalHistory(applicationId: string | number) { return request({ url: `/rs/overseas/application/approval/history/${applicationId}`, method: 'get' }); } // 新增出国审批记录 export function addOverseasApproval(data: any) { return request({ url: '/rs/overseas/approval', method: 'post', data: data }); } // 修改出国审批记录 export function updateOverseasApproval(data: any) { return request({ url: '/rs/overseas/approval', method: 'put', data: data }); } // 删除出国审批记录 export function delOverseasApproval(approvalIds: string | number | Array) { return request({ url: `/rs/overseas/approval/${approvalIds}`, method: 'delete' }); } // 修复审批记录数据 export function fixOverseasApprovalData() { return request({ url: '/rs/overseas/approval/fixData', method: 'post' }); } // 修复已审批通过但未创建记录的申请 export function fixApprovedOverseasRecords() { return request({ url: '/rs/overseas/application/fix/records', method: 'post' }); } // ==================== PDF生成相关接口 ==================== // 生成登记表请求参数类型 export interface GenerateRegistrationFormRequest { applicationId: number; documentNumber?: string; format?: string; } // 登记表生成响应类型 export interface RegistrationFormResponse { documentId: string; fileName: string; downloadUrl: string; previewUrl: string; fileSize: number; generateTime: string; documentNumber: string; applicationId: number; } // 生成出国申请登记表PDF export function generateRegistrationForm(data: GenerateRegistrationFormRequest) { return request({ url: '/rs/overseas/application/generateRegistrationForm', method: 'post', data: data }); } // 下载生成的PDF文档 export function downloadRegistrationFormPdf(documentId: string) { return request({ url: `/rs/overseas/application/downloadPdf/${documentId}`, method: 'get', responseType: 'blob' }); } // 预览生成的PDF文档 export function previewRegistrationFormPdf(documentId: string) { return request({ url: `/rs/overseas/application/previewPdf/${documentId}`, method: 'get', responseType: 'blob' }); } // 下载登记备案附件模板 export function downloadRegistrationTemplate() { return request({ url: '/rs/overseas/application/downloadRegistrationTemplate', method: 'get', responseType: 'blob' }); } // 下载保留党籍申请模板 export function downloadPartyMembershipTemplate() { return request({ url: '/rs/overseas/application/downloadPartyMembershipTemplate', method: 'get', responseType: 'blob' }); } // ==================== 出国申请附件相关API ==================== // 附件数据类型 export interface OverseasAttachmentVO { attachmentId: number | string; applicationId: number; attachmentTitle: string; attachmentContent?: string; fileName: string; fileOriginalName: string; filePath: string; fileSize: number; fileSizeFormatted?: string; fileType?: string; mimeType?: string; uploadTime?: string; uploadUserId?: number; uploadUserName?: string; createTime?: string; updateTime?: string; } // 附件BO export interface OverseasAttachmentBo { attachmentId?: number | string; applicationId: number; attachmentTitle: string; attachmentContent?: string; } // 查询出国申请的附件列表 export function listOverseasAttachments(applicationId: string | number) { return request({ url: `/rs/overseas/attachment/list/${applicationId}`, method: 'get' }); } // 查询附件详情 export function getOverseasAttachment(attachmentId: string | number) { return request({ url: `/rs/overseas/attachment/${attachmentId}`, method: 'get' }); } // 上传附件 export function uploadOverseasAttachment(data: FormData) { return request({ url: '/rs/overseas/attachment/upload', method: 'post', headers: { 'Content-Type': 'multipart/form-data' }, data: data }); } // 更新附件信息(标题和内容) export function updateOverseasAttachment(data: OverseasAttachmentBo) { return request({ url: '/rs/overseas/attachment', method: 'put', data: data }); } // 删除附件 export function deleteOverseasAttachment(attachmentId: string | number) { return request({ url: `/rs/overseas/attachment/${attachmentId}`, method: 'delete' }); } // 批量删除附件 export function deleteOverseasAttachments(attachmentIds: Array) { return request({ url: '/rs/overseas/attachment/batch', method: 'delete', data: attachmentIds }); } // ==================== 出国行程变更相关API ==================== // 行程变更查询参数类型 export interface ItineraryChangeQuery { pageNum: number; pageSize: number; applicantName?: string; destination?: string; status?: string; params?: Record; } // 行程变更数据类型 export interface ItineraryChangeVO { changeId: number | string; recordId: number; applicationId?: number; applicantName: string; gender?: string; birthDate?: string; politicalStatus?: string; professionalTitle?: string; position?: string; documentName?: string; documentNumber?: string; department: string; originalDestination: string; originalDestinationCity?: string; originalExitReason: string; originalStartDate: string; originalEndDate: string; originalDuration: number; originalItinerary: string; changeType: string; newDestination?: string; newDestinationCity?: string; newExitReason?: string; newStartDate?: string; newEndDate?: string; newDuration?: number; newItinerary?: string; changeReason: string; remark?: string; status: string; statusText: string; approvalOpinion?: string; approvalBy?: number; approvalByName?: string; approvalTime?: string; createTime: string; updateTime?: string; createBy: string; updateBy: string; } // 行程变更表单类型 export interface ItineraryChangeForm { changeId?: number | string; recordId: number; // 关联出国记录ID(必填) applicationId: number; applicantId: number; // 申请人ID(必填) applicantName?: string; gender?: string; birthDate?: string; politicalStatus?: string; professionalTitle?: string; position?: string; documentName?: string; documentNumber?: string; department?: string; originalDestination?: string; originalDestinationCity?: string; originalExitReason?: string; originalStartDate?: string; originalEndDate?: string; originalDuration?: number; originalItinerary?: string; changeType: string; newDestination?: string; newDestinationCity?: string; newExitReason?: string; newStartDate?: string; newEndDate?: string; newDuration?: number; newItinerary?: string; changeReason: string; remark?: string; } // 行程变更审批请求类型 export interface ItineraryChangeApprovalRequest { changeId: number | string; approved: boolean; // true=通过,false=拒绝 opinion?: string; // 审批意见 signature?: string; // 审批签字(base64图片) } // 查询行程变更列表 export function listItineraryChange(query: ItineraryChangeQuery) { return request({ url: '/rs/itinerary/change/list', method: 'get', params: query }); } // 查询我的变更记录列表(只返回已通过的变更申请) export function listMyItineraryChange(query: ItineraryChangeQuery) { return request({ url: '/rs/itinerary/change/my/list', method: 'get', params: query }); } // 查询待审批的行程变更列表 export function listPendingItineraryChange(query: ItineraryChangeQuery) { return request({ url: '/rs/itinerary/change/pending/list', method: 'get', params: query }); } // 查询行程变更详细 export function getItineraryChange(changeId: string | number) { return request({ url: `/rs/itinerary/change/${changeId}`, method: 'get' }); } // 新增行程变更 export function addItineraryChange(data: ItineraryChangeForm) { return request({ url: '/rs/itinerary/change', method: 'post', data: data }); } // 修改行程变更(重新提交) export function updateItineraryChange(data: ItineraryChangeForm) { return request({ url: '/rs/itinerary/change', method: 'put', data: data }); } // 删除行程变更 export function delItineraryChange(changeId: string | number | Array) { return request({ url: `/rs/itinerary/change/${typeof changeId === 'object' ? changeId.join(',') : changeId}`, method: 'delete' }); } // 撤回行程变更 export function cancelItineraryChange(changeId: string | number, reason?: string) { return request({ url: `/rs/itinerary/change/cancel/${changeId}`, method: 'put', params: { reason } }); } // 审批行程变更 export function approveItineraryChange(data: ItineraryChangeApprovalRequest) { return request({ url: '/rs/itinerary/change/approve', method: 'put', data: data }); } // 导出行程变更列表 export function exportItineraryChange(query: ItineraryChangeQuery) { return request({ url: '/rs/itinerary/change/export', method: 'post', data: query }); } // 获取可用的出国记录列表(用于选择原出国申请) export function getAvailableOverseasRecords() { return request({ url: '/rs/itinerary/change/available-records', method: 'get' }); } // 获取已审批通过的出国申请列表(用于行程变更申请选择) export function getApprovedOverseasApplications() { return request({ url: '/rs/overseas/application/status/1', method: 'get' }); } // 根据记录ID查询出国记录详情(用于显示原申请信息) export function getOverseasRecordForChange(recordId: string | number) { return request({ url: `/rs/itinerary/change/record/${recordId}`, method: 'get' }); } // 查询某个记录的变更历史 export function getItineraryChangeHistory(recordId: string | number) { return request({ url: `/rs/itinerary/change/record/${recordId}/history`, method: 'get' }); } // ==================== 动态审批人获取API ==================== /** * 根据申请人ID获取部门审批人ID * @param applicantId 申请人ID */ export function getDepartmentApproverId(applicantId: string | number): Promise<{ data: number }> { return request({ url: `/rs/overseas/application/getDepartmentApproverId/${applicantId}`, method: 'get' }); } /** * 根据申请人ID获取人事处审批人列表 * @param applicantId 申请人ID */ export function getHrApprovers(applicantId: string | number): Promise<{ data: number[] }> { return request({ url: `/rs/overseas/application/getHrApprovers/${applicantId}`, method: 'get' }); } // ==================== 出国申请进度查询(监控)相关API ==================== // 审批监控查询参数类型 export interface OverseasMonitorQuery { pageNum: number; pageSize: number; applicantName?: string; department?: string; destination?: string; approvalLevel?: string; currentApprover?: string; status?: string; applyTimeStart?: string; applyTimeEnd?: string; } // 查询待审批列表(监控) export function getPendingList(query: OverseasMonitorQuery) { return request({ url: '/rs/overseas/monitor/pending/list', method: 'get', params: query }); } // 查询已完成审批列表(监控) export function getCompletedList(query: OverseasMonitorQuery) { return request({ url: '/rs/overseas/monitor/completed/list', method: 'get', params: query }); } // 查询申请详情(监控) export function getDetail(applicationId: string | number) { return request({ url: `/rs/overseas/monitor/detail/${applicationId}`, method: 'get' }); } // 下载审批表PDF export function downloadApprovalPdf(applicationId: string | number) { return request({ url: `/rs/overseas/monitor/downloadApprovalPdf/${applicationId}`, method: 'get', responseType: 'blob' }); }