feat: 银行端
This commit is contained in:
231
src/api/loan.ts
Normal file
231
src/api/loan.ts
Normal file
@@ -0,0 +1,231 @@
|
||||
// import { request } from '@/utils/http'
|
||||
import type { LoanApplication, RelatedMerchant, AssistMaterial } from '@/typings/loan'
|
||||
import { LoanStatus } from '@/typings/loan'
|
||||
|
||||
/**
|
||||
* [用户端] 获取用户交易过的商家列表
|
||||
*/
|
||||
export function getUserMerchants() {
|
||||
// Mock数据
|
||||
return new Promise<{ list: RelatedMerchant[] }>((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve({
|
||||
list: [
|
||||
{
|
||||
merchantId: 'M001',
|
||||
merchantName: '乐高玩具旗舰店',
|
||||
lastTradeTime: '2025-12-01',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
},
|
||||
{
|
||||
merchantId: 'M002',
|
||||
merchantName: '迪士尼官方店',
|
||||
lastTradeTime: '2025-11-20',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
},
|
||||
{
|
||||
merchantId: 'M003',
|
||||
merchantName: '泡泡玛特',
|
||||
lastTradeTime: '2025-11-15',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
},
|
||||
{
|
||||
merchantId: 'M004',
|
||||
merchantName: '奥特曼官方玩具店',
|
||||
lastTradeTime: '2025-11-10',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
},
|
||||
{
|
||||
merchantId: 'M005',
|
||||
merchantName: '玩具反斗城',
|
||||
lastTradeTime: '2025-11-05',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
},
|
||||
{
|
||||
merchantId: 'M006',
|
||||
merchantName: 'KidsLand',
|
||||
lastTradeTime: '2025-10-20',
|
||||
selected: false,
|
||||
assistStatus: 'pending'
|
||||
}
|
||||
]
|
||||
})
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* [用户端] 提交贷款申请
|
||||
*/
|
||||
export function submitLoanApplication(data: any) {
|
||||
return new Promise<{ id: string }>((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve({ id: `LA${Date.now()}` })
|
||||
}, 1000)
|
||||
})
|
||||
}
|
||||
|
||||
// 模拟数据库
|
||||
let mockDatabase: LoanApplication[] = []
|
||||
|
||||
/**
|
||||
* [银行端] 获取贷款申请列表
|
||||
*/
|
||||
export function getLoanApplicationList(params: any) {
|
||||
return new Promise<{ list: LoanApplication[], total: number }>((resolve) => {
|
||||
setTimeout(() => {
|
||||
// 如果没有数据,初始化一些 Mock 数据
|
||||
if (mockDatabase.length === 0) {
|
||||
mockDatabase = [
|
||||
{
|
||||
id: 'LA20251219001',
|
||||
userId: 'U001',
|
||||
userName: '张三',
|
||||
userPhone: '13800138000',
|
||||
amount: 50,
|
||||
term: 1,
|
||||
status: LoanStatus.SUBMITTED,
|
||||
createTime: '2025-12-19 10:00:00',
|
||||
updateTime: '2025-12-19 10:00:00',
|
||||
relatedMerchants: [
|
||||
{
|
||||
merchantId: 'M001',
|
||||
merchantName: '乐高玩具旗舰店',
|
||||
lastTradeTime: '2025-12-01',
|
||||
selected: true,
|
||||
assistStatus: 'pending'
|
||||
}
|
||||
],
|
||||
personalInfo: {
|
||||
name: '张三',
|
||||
phone: '13800138000',
|
||||
idCard: '440106199001011234',
|
||||
region: ['广东省', '广州市', '天河区'],
|
||||
detailAddress: '天河路1号'
|
||||
},
|
||||
businessInfo: {
|
||||
businessProject: '玩具零售',
|
||||
businessTime: '3年',
|
||||
annualIncome: 100,
|
||||
hasDebt: 'no',
|
||||
loanDemand: 50,
|
||||
assets: ['house', 'car']
|
||||
},
|
||||
documentInfo: {
|
||||
businessLicense: 'https://via.placeholder.com/150',
|
||||
otherMaterials: []
|
||||
},
|
||||
processRecords: []
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
resolve({
|
||||
list: mockDatabase,
|
||||
total: mockDatabase.length
|
||||
})
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* [银行端] 获取贷款申请详情
|
||||
*/
|
||||
export function getLoanApplicationDetail(id: string) {
|
||||
return new Promise<LoanApplication>((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
const item = mockDatabase.find(i => i.id === id)
|
||||
if (item) {
|
||||
resolve(item)
|
||||
} else {
|
||||
// Fallback for demo
|
||||
if (mockDatabase.length > 0) resolve(mockDatabase[0])
|
||||
else reject('Not found')
|
||||
}
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* [银行端] 流程操作
|
||||
*/
|
||||
export function operateLoanApplication(id: string, action: string, data?: any) {
|
||||
return new Promise<void>((resolve) => {
|
||||
setTimeout(() => {
|
||||
const item = mockDatabase.find(i => i.id === id)
|
||||
if (item) {
|
||||
// 更新状态逻辑
|
||||
switch (action) {
|
||||
case 'accept': item.status = LoanStatus.ACCEPTED; break;
|
||||
case 'investigate': item.status = LoanStatus.INVESTIGATING; break;
|
||||
case 'report': item.status = LoanStatus.REPORTED; break;
|
||||
case 'approve': item.status = LoanStatus.APPROVED; break;
|
||||
case 'sign': item.status = LoanStatus.SIGNED; break;
|
||||
case 'disburse': item.status = LoanStatus.DISBURSED; break;
|
||||
case 'reject': item.status = LoanStatus.REJECTED; break;
|
||||
}
|
||||
|
||||
// 添加记录
|
||||
item.processRecords.push({
|
||||
step: action as any,
|
||||
operator: '银行管理员',
|
||||
operateTime: new Date().toLocaleString(),
|
||||
...data
|
||||
})
|
||||
}
|
||||
resolve()
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* [商家端] 获取待办列表
|
||||
*/
|
||||
export function getMerchantPendingAssistList() {
|
||||
return new Promise<{ list: any[] }>((resolve) => {
|
||||
setTimeout(() => {
|
||||
// 找到所有关联了当前商家的未处理申请
|
||||
// 这里简化逻辑,直接返回 Mock
|
||||
resolve({
|
||||
list: [
|
||||
{
|
||||
loanId: 'LA20251219001',
|
||||
userName: '张三',
|
||||
applyTime: '2025-12-19 10:00:00',
|
||||
amount: 50,
|
||||
status: 'pending'
|
||||
}
|
||||
]
|
||||
})
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* [商家端] 提交辅助材料
|
||||
*/
|
||||
export function submitAssistMaterial(loanId: string, materials: any[]) {
|
||||
return new Promise<void>((resolve) => {
|
||||
setTimeout(() => {
|
||||
const item = mockDatabase.find(i => i.id === loanId)
|
||||
// 简化:更新第一个匹配的商家状态
|
||||
if (item && item.relatedMerchants.length > 0) {
|
||||
item.relatedMerchants[0].assistStatus = 'submitted'
|
||||
item.relatedMerchants[0].materials = {
|
||||
merchantId: item.relatedMerchants[0].merchantId,
|
||||
merchantName: item.relatedMerchants[0].merchantName,
|
||||
loanApplicationId: loanId,
|
||||
materials: materials,
|
||||
submitTime: new Date().toLocaleString(),
|
||||
status: 'submitted'
|
||||
}
|
||||
}
|
||||
resolve()
|
||||
}, 800)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user