修改后端接口

This commit is contained in:
2025-09-25 17:43:54 +08:00
parent 5b6b7e0a96
commit 76b5393182
31 changed files with 2155 additions and 468 deletions

View File

@@ -79,6 +79,154 @@
</a-table>
</div>
<!-- 新增对话框 -->
<a-modal
v-model:open="addModalVisible"
title="新增贷款商品"
width="800px"
:confirm-loading="addLoading"
@ok="handleAddSubmit"
@cancel="handleAddCancel"
>
<a-form
ref="addFormRef"
:model="addForm"
:rules="addFormRules"
layout="vertical"
v-if="addModalVisible"
>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="贷款产品名称" name="productName">
<a-input v-model:value="addForm.productName" placeholder="请输入贷款产品名称" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="贷款额度" name="loanAmount">
<a-input
v-model:value="addForm.loanAmount"
placeholder="请输入贷款额度50000~5000000"
style="width: 100%"
addon-after=""
/>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="贷款周期" name="loanTerm">
<a-input-number
v-model:value="addForm.loanTerm"
placeholder="请输入贷款周期"
:min="1"
style="width: 100%"
addon-after="个月"
/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="贷款利率" name="interestRate">
<a-input
v-model:value="addForm.interestRate"
placeholder="请输入贷款利率3.90"
style="width: 100%"
addon-after="%"
/>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="服务区域" name="serviceArea">
<a-input v-model:value="addForm.serviceArea" placeholder="请输入服务区域" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="服务电话" name="servicePhone">
<a-input v-model:value="addForm.servicePhone" placeholder="请输入服务电话" />
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="最小贷款金额" name="minLoanAmount">
<a-input-number
v-model:value="addForm.minLoanAmount"
placeholder="请输入最小贷款金额"
:min="0"
style="width: 100%"
addon-after=""
/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="最大贷款金额" name="maxLoanAmount">
<a-input-number
v-model:value="addForm.maxLoanAmount"
placeholder="请输入最大贷款金额"
:min="0"
style="width: 100%"
addon-after=""
/>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="16">
<a-col :span="12">
<a-form-item label="风险等级" name="riskLevel">
<a-select v-model:value="addForm.riskLevel" placeholder="请选择风险等级">
<a-select-option value="LOW">低风险</a-select-option>
<a-select-option value="MEDIUM">中风险</a-select-option>
<a-select-option value="HIGH">高风险</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="在售状态" name="onSaleStatus">
<a-switch v-model:checked="addForm.onSaleStatus" />
<span style="margin-left: 8px">{{ addForm.onSaleStatus ? '在售' : '停售' }}</span>
</a-form-item>
</a-col>
</a-row>
<a-form-item label="产品描述" name="productDescription">
<a-textarea
v-model:value="addForm.productDescription"
placeholder="请输入产品描述"
:rows="3"
/>
</a-form-item>
<a-form-item label="申请要求" name="applicationRequirements">
<a-textarea
v-model:value="addForm.applicationRequirements"
placeholder="请输入申请要求"
:rows="3"
/>
</a-form-item>
<a-form-item label="所需材料" name="requiredDocuments">
<a-textarea
v-model:value="addForm.requiredDocuments"
placeholder="请输入所需材料"
:rows="3"
/>
</a-form-item>
<a-form-item label="审批流程" name="approvalProcess">
<a-textarea
v-model:value="addForm.approvalProcess"
placeholder="请输入审批流程"
:rows="3"
/>
</a-form-item>
</a-form>
</a-modal>
<!-- 编辑对话框 -->
<a-modal
v-model:open="editModalVisible"
@@ -229,6 +377,27 @@ const loading = ref(false)
const searchText = ref('')
const products = ref([])
// 新增相关
const addModalVisible = ref(false)
const addLoading = ref(false)
const addFormRef = ref(null)
const addForm = reactive({
productName: '',
loanAmount: '',
loanTerm: null,
interestRate: '',
serviceArea: '',
servicePhone: '',
minLoanAmount: null,
maxLoanAmount: null,
riskLevel: 'LOW',
onSaleStatus: true,
productDescription: '',
applicationRequirements: '',
requiredDocuments: '',
approvalProcess: ''
})
// 编辑相关
const editModalVisible = ref(false)
const editLoading = ref(false)
@@ -314,6 +483,78 @@ const editFormRules = {
]
}
// 新增表单验证规则
const addFormRules = {
productName: [
{ required: true, message: '请输入贷款产品名称', trigger: 'blur' },
{ min: 2, max: 50, message: '产品名称长度在2-50个字符', trigger: 'blur' }
],
loanAmount: [
{ required: true, message: '请输入贷款额度', trigger: 'blur' },
{
validator: (rule, value) => {
if (!value) return Promise.reject('请输入贷款额度')
// 支持数字或范围字符串50000~5000000
if (typeof value === 'number') {
if (value <= 0) return Promise.reject('贷款额度必须大于0')
} else if (typeof value === 'string') {
// 处理范围字符串
if (value.includes('~')) {
const [min, max] = value.split('~').map(v => parseFloat(v.trim()))
if (isNaN(min) || isNaN(max) || min <= 0 || max <= 0) {
return Promise.reject('贷款额度范围格式不正确')
}
} else {
const numValue = parseFloat(value)
if (isNaN(numValue) || numValue <= 0) {
return Promise.reject('贷款额度必须大于0')
}
}
}
return Promise.resolve()
},
trigger: 'blur'
}
],
loanTerm: [
{ required: true, message: '请输入贷款周期', trigger: 'blur' },
{ type: 'number', min: 1, message: '贷款周期必须大于0', trigger: 'blur' }
],
interestRate: [
{ required: true, message: '请输入贷款利率', trigger: 'blur' },
{
validator: (rule, value) => {
if (!value) return Promise.reject('请输入贷款利率')
const numValue = parseFloat(value)
if (isNaN(numValue)) return Promise.reject('请输入有效的数字')
if (numValue < 0 || numValue > 100) {
return Promise.reject('贷款利率必须在0-100之间')
}
return Promise.resolve()
},
trigger: 'blur'
}
],
serviceArea: [
{ required: true, message: '请输入服务区域', trigger: 'blur' }
],
servicePhone: [
{ required: true, message: '请输入服务电话', trigger: 'blur' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
],
minLoanAmount: [
{ required: true, message: '请输入最小贷款金额', trigger: 'blur' },
{ type: 'number', min: 0, message: '最小贷款金额不能小于0', trigger: 'blur' }
],
maxLoanAmount: [
{ required: true, message: '请输入最大贷款金额', trigger: 'blur' },
{ type: 'number', min: 0, message: '最大贷款金额不能小于0', trigger: 'blur' }
],
riskLevel: [
{ required: true, message: '请选择风险等级', trigger: 'change' }
]
}
// 行选择配置
const rowSelection = {
selectedRowKeys: selectedRowKeys,
@@ -472,7 +713,24 @@ const handleReset = () => {
}
const handleAddProduct = () => {
message.info('新增贷款功能开发中...')
// 重置表单
Object.assign(addForm, {
productName: '',
loanAmount: '',
loanTerm: null,
interestRate: '',
serviceArea: '',
servicePhone: '',
minLoanAmount: null,
maxLoanAmount: null,
riskLevel: 'LOW',
onSaleStatus: true,
productDescription: '',
applicationRequirements: '',
requiredDocuments: '',
approvalProcess: ''
})
addModalVisible.value = true
}
const handleEdit = async (record) => {
@@ -554,6 +812,36 @@ const handleEditCancel = () => {
editFormRef.value?.resetFields()
}
// 新增提交
const handleAddSubmit = async () => {
try {
await addFormRef.value.validate()
addLoading.value = true
const response = await api.loanProducts.create(addForm)
if (response.success) {
message.success('新增贷款商品成功')
addModalVisible.value = false
addFormRef.value?.resetFields()
fetchProducts() // 刷新列表
} else {
message.error(response.message || '新增失败')
}
} catch (error) {
console.error('新增失败:', error)
message.error('新增失败')
} finally {
addLoading.value = false
}
}
// 新增取消
const handleAddCancel = () => {
addModalVisible.value = false
addFormRef.value?.resetFields()
}
// 删除产品
const handleDelete = async (record) => {
try {