chore: sync local latest state and repository cleanup
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
* 审批流服务 - 与后端审批API交互
|
||||
*/
|
||||
|
||||
import { authFetch, baseUrl } from './authHelper'
|
||||
import type { AdminRole } from '../auth/roles'
|
||||
|
||||
export interface ApprovalFlow {
|
||||
@@ -81,14 +82,14 @@ export interface ApiResponse<T> {
|
||||
* 审批流服务类
|
||||
*/
|
||||
class ApprovalService {
|
||||
private baseUrl = '/api'
|
||||
private baseUrl = baseUrl || '/api/v1'
|
||||
|
||||
/**
|
||||
* 获取所有审批流
|
||||
*/
|
||||
async getFlows(): Promise<ApprovalFlow[]> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/flows`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/flows`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalFlow[]>
|
||||
if (result.code !== 200) {
|
||||
@@ -101,8 +102,8 @@ class ApprovalService {
|
||||
* 获取审批流详情
|
||||
*/
|
||||
async getFlowById(id: number): Promise<ApprovalFlow | null> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/flows/${id}`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/flows/${id}`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalFlow>
|
||||
if (result.code !== 200) {
|
||||
@@ -115,10 +116,10 @@ class ApprovalService {
|
||||
* 创建审批流
|
||||
*/
|
||||
async createFlow(data: CreateFlowRequest): Promise<number> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/flows`, {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/flows`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
credentials: undefined,
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
const result = await response.json() as ApiResponse<number>
|
||||
@@ -132,10 +133,10 @@ class ApprovalService {
|
||||
* 更新审批流
|
||||
*/
|
||||
async updateFlow(data: UpdateFlowRequest): Promise<void> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/flows/${data.id}`, {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/flows/${data.id}`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
credentials: undefined,
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
@@ -148,9 +149,9 @@ class ApprovalService {
|
||||
* 删除审批流
|
||||
*/
|
||||
async deleteFlow(id: number): Promise<void> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/flows/${id}`, {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/flows/${id}`, {
|
||||
method: 'DELETE',
|
||||
credentials: 'include'
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
if (result.code !== 200) {
|
||||
@@ -162,8 +163,8 @@ class ApprovalService {
|
||||
* 获取待审批列表
|
||||
*/
|
||||
async getPendingApprovals(userId: number): Promise<ApprovalRecord[]> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/pending?userId=${userId}`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/pending?userId=${userId}`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalRecord[]>
|
||||
if (result.code !== 200) {
|
||||
@@ -176,8 +177,8 @@ class ApprovalService {
|
||||
* 获取已审批列表
|
||||
*/
|
||||
async getApprovedList(userId: number): Promise<ApprovalRecord[]> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/processed?userId=${userId}`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/processed?userId=${userId}`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalRecord[]>
|
||||
if (result.code !== 200) {
|
||||
@@ -190,8 +191,8 @@ class ApprovalService {
|
||||
* 获取我发起的审批
|
||||
*/
|
||||
async getMyApplications(userId: number): Promise<ApprovalRecord[]> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/my?userId=${userId}`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/my?userId=${userId}`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalRecord[]>
|
||||
if (result.code !== 200) {
|
||||
@@ -201,26 +202,155 @@ class ApprovalService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批操作
|
||||
* 审批操作(统一入口)
|
||||
* @deprecated 请使用 approveRecord, rejectRecord, transferRecord 三个独立方法
|
||||
*/
|
||||
async approve(data: {
|
||||
recordId: number
|
||||
action: 'APPROVE' | 'REJECT' | 'TRANSFER'
|
||||
operatorId: number
|
||||
comment?: string
|
||||
transferTo?: number // TRANSFER时必填
|
||||
}): Promise<void> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/handle`, {
|
||||
// 根据action调用对应的独立接口
|
||||
switch (data.action) {
|
||||
case 'APPROVE':
|
||||
return this.approveRecord({ recordId: data.recordId, comment: data.comment })
|
||||
case 'REJECT':
|
||||
return this.rejectRecord({ recordId: data.recordId, comment: data.comment })
|
||||
case 'TRANSFER':
|
||||
if (data.transferTo == null) {
|
||||
throw new Error('TRANSFER操作需要提供transferTo参数')
|
||||
}
|
||||
return this.transferRecord({ recordId: data.recordId, transferTo: data.transferTo, comment: data.comment })
|
||||
default:
|
||||
throw new Error(`Unknown action: ${data.action}`)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批通过
|
||||
*/
|
||||
async approveRecord(data: {
|
||||
recordId: number
|
||||
comment?: string
|
||||
}): Promise<void> {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/approve`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
body: JSON.stringify(data)
|
||||
credentials: undefined,
|
||||
body: JSON.stringify({
|
||||
recordId: data.recordId,
|
||||
comment: data.comment || ''
|
||||
})
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
if (result.code !== 200) {
|
||||
throw new Error(result.message || '审批操作失败')
|
||||
throw new Error(result.message || '审批通过失败')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批拒绝
|
||||
*/
|
||||
async rejectRecord(data: {
|
||||
recordId: number
|
||||
comment?: string
|
||||
}): Promise<void> {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/reject`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: undefined,
|
||||
body: JSON.stringify({
|
||||
recordId: data.recordId,
|
||||
comment: data.comment || ''
|
||||
})
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
if (result.code !== 200) {
|
||||
throw new Error(result.message || '审批拒绝失败')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批转交
|
||||
*/
|
||||
async transferRecord(data: {
|
||||
recordId: number
|
||||
transferTo: number
|
||||
comment?: string
|
||||
}): Promise<void> {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/transfer`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: undefined,
|
||||
body: JSON.stringify({
|
||||
recordId: data.recordId,
|
||||
transferTo: data.transferTo,
|
||||
comment: data.comment || ''
|
||||
})
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
if (result.code !== 200) {
|
||||
throw new Error(result.message || '审批转交失败')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 审批委托
|
||||
*/
|
||||
async delegateRecord(data: {
|
||||
recordId: number
|
||||
delegateTo: number
|
||||
reason?: string
|
||||
}): Promise<void> {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/delegate`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: undefined,
|
||||
body: JSON.stringify({
|
||||
recordId: data.recordId,
|
||||
delegateTo: data.delegateTo,
|
||||
reason: data.reason || ''
|
||||
})
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
if (result.code !== 200) {
|
||||
throw new Error(result.message || '审批委托失败')
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量审批操作
|
||||
*/
|
||||
async batchApprove(data: {
|
||||
recordIds: number[]
|
||||
action: 'APPROVE' | 'REJECT' | 'TRANSFER'
|
||||
comment?: string
|
||||
}): Promise<{
|
||||
total: number
|
||||
successCount: number
|
||||
failCount: number
|
||||
results: Array<{ recordId: number; success: boolean; status: string; message: string }>
|
||||
}> {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/batch-handle`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: undefined,
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
const result = await response.json() as ApiResponse<{
|
||||
total: number
|
||||
successCount: number
|
||||
failCount: number
|
||||
results: Array<{ recordId: number; success: boolean; status: string; message: string }>
|
||||
}>
|
||||
if (result.code !== 200) {
|
||||
throw new Error(result.message || '批量审批操作失败')
|
||||
}
|
||||
return result.data
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交审批申请
|
||||
*/
|
||||
@@ -232,10 +362,10 @@ class ApprovalService {
|
||||
applicantId: number
|
||||
applyReason: string
|
||||
}): Promise<number> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/submit`, {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/submit`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
credentials: undefined,
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
const result = await response.json() as ApiResponse<{ recordId: number }>
|
||||
@@ -249,10 +379,10 @@ class ApprovalService {
|
||||
* 取消审批
|
||||
*/
|
||||
async cancelApproval(recordId: number, operatorId: number): Promise<void> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/cancel`, {
|
||||
const response = await authFetch(`${this.baseUrl}/approval/cancel`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
credentials: 'include',
|
||||
credentials: undefined,
|
||||
body: JSON.stringify({ recordId, operatorId })
|
||||
})
|
||||
const result = await response.json() as ApiResponse<void>
|
||||
@@ -265,8 +395,8 @@ class ApprovalService {
|
||||
* 获取审批记录详情
|
||||
*/
|
||||
async getRecordById(id: number): Promise<ApprovalRecord | null> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/records/${id}`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/records/${id}`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalRecord>
|
||||
if (result.code !== 200) {
|
||||
@@ -279,8 +409,8 @@ class ApprovalService {
|
||||
* 获取审批历史
|
||||
*/
|
||||
async getApprovalHistory(recordId: number): Promise<ApprovalHistory[]> {
|
||||
const response = await fetch(`${this.baseUrl}/approval/records/${recordId}/history`, {
|
||||
credentials: 'include'
|
||||
const response = await authFetch(`${this.baseUrl}/approval/records/${recordId}/history`, {
|
||||
credentials: undefined
|
||||
})
|
||||
const result = await response.json() as ApiResponse<ApprovalHistory[]>
|
||||
if (result.code !== 200) {
|
||||
|
||||
Reference in New Issue
Block a user