Files
shop-toy/src/api/loan.ts
FlowerWater a5c7e9f6ca feat: 修复
2025-12-23 17:18:55 +08:00

233 lines
6.5 KiB
TypeScript

// 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;
case 'request_supplement': item.status = LoanStatus.PENDING_SUPPLEMENT; 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)
})
}