chore: sync local latest state and repository cleanup

This commit is contained in:
Your Name
2026-03-23 13:02:36 +08:00
parent f1ff3d629f
commit 2ef0f17961
493 changed files with 46912 additions and 7977 deletions

View File

@@ -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) {