修改后端接口
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user