fix: 功能优化完善,分期待还相关。
This commit is contained in:
@@ -148,17 +148,26 @@
|
|||||||
<div class="content-con">
|
<div class="content-con">
|
||||||
<div v-show="radioVal === '柱状图'" class="chart" id="chartBar"></div>
|
<div v-show="radioVal === '柱状图'" class="chart" id="chartBar"></div>
|
||||||
<div v-show="radioVal === '折线图'" class="chart" id="chartLine"></div>
|
<div v-show="radioVal === '折线图'" class="chart" id="chartLine"></div>
|
||||||
<el-table v-show="radioVal === '表格'" v-loading="loading" :data="historyObj.tableHistoryDetailList">
|
<el-table v-show="radioVal === '表格'" v-loading="loading" :data="reversedTableData">
|
||||||
<el-table-column label="序号" width="50" type="index" align="center">
|
<el-table-column label="序号" width="50" type="index" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ scope.$index + 1 }}</span>
|
<span>{{ scope.$index + 1 }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="还款日期" align="center" prop="time" />
|
<el-table-column label="还款日期" align="center" prop="time" width="200" />
|
||||||
<el-table-column label="待还款金额" align="center" prop="value" />
|
<el-table-column label="待还款金额" align="center" prop="value" />
|
||||||
<el-table-column prop="detail" label="待还款明细" width="700" v-if="queryParams.type === 1">
|
<el-table-column prop="detail" label="待还款明细" width="900" v-if="queryParams.type === 1">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-html="formatMultiLineData(scope.row.detail)"></span>
|
<div v-if="scope.row.detailList && scope.row.detailList.length > 0">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in scope.row.detailList"
|
||||||
|
:key="index"
|
||||||
|
style="padding: 6px 8px; margin-bottom: 4px; background: #f5f7fa; border-radius: 4px"
|
||||||
|
>
|
||||||
|
{{ item.bankCardLendName }}(本金:{{ item.principal }}元,利息:{{ item.interest }}元,合计:{{ item.currentAmount }}元)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span v-else v-html="formatMultiLineData(scope.row.detail)"></span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -293,7 +302,8 @@ const historyObj = ref({
|
|||||||
dueDetail: '',
|
dueDetail: '',
|
||||||
repaidDetail: '',
|
repaidDetail: '',
|
||||||
leftDetail: '',
|
leftDetail: '',
|
||||||
historyDetailList: []
|
historyDetailList: [],
|
||||||
|
tableHistoryDetailList: []
|
||||||
})
|
})
|
||||||
|
|
||||||
const chartData = ref({
|
const chartData = ref({
|
||||||
@@ -301,6 +311,14 @@ const chartData = ref({
|
|||||||
value1: []
|
value1: []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 计算属性:倒序后的表格数据
|
||||||
|
const reversedTableData = computed(() => {
|
||||||
|
if (historyObj.value.tableHistoryDetailList && historyObj.value.tableHistoryDetailList.length > 0) {
|
||||||
|
return [...historyObj.value.tableHistoryDetailList].reverse()
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
chartData.value = { name: [], value1: [] }
|
chartData.value = { name: [], value1: [] }
|
||||||
|
|||||||
@@ -148,22 +148,86 @@
|
|||||||
<div class="content-con">
|
<div class="content-con">
|
||||||
<div v-show="radioVal === '柱状图'" class="chart" id="chartBar"></div>
|
<div v-show="radioVal === '柱状图'" class="chart" id="chartBar"></div>
|
||||||
<div v-show="radioVal === '折线图'" class="chart" id="chartLine"></div>
|
<div v-show="radioVal === '折线图'" class="chart" id="chartLine"></div>
|
||||||
<el-table v-show="radioVal === '表格'" v-loading="loading" :data="historyObj.tableHistoryDetailList">
|
<el-table v-show="radioVal === '表格'" v-loading="loading" :data="reversedTableData">
|
||||||
<el-table-column label="序号" width="50" type="index" align="center">
|
<el-table-column label="序号" width="50" type="index" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>{{ scope.$index + 1 }}</span>
|
<span>{{ scope.$index + 1 }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="还款日期" align="center" prop="time" />
|
<el-table-column label="还款日期" align="center" prop="time" width="200" />
|
||||||
<el-table-column label="待还款金额" align="center" prop="value" />
|
<el-table-column label="待还款金额" align="center" prop="value" />
|
||||||
<el-table-column prop="detail" label="待还款明细" width="700" v-if="queryParams.type === 1">
|
<el-table-column prop="detail" label="待还款明细" width="900" v-if="queryParams.type === 1">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-html="formatMultiLineData(scope.row.detail)"></span>
|
<div v-if="scope.row.detailList && scope.row.detailList.length > 0">
|
||||||
|
<div
|
||||||
|
v-for="(item, index) in scope.row.detailList"
|
||||||
|
:key="index"
|
||||||
|
style="
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 6px 8px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
border-radius: 4px;
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<span style="flex: 1"
|
||||||
|
>{{ item.bankCardLendName }}(本金:{{ item.principal }}元,利息:{{ item.interest }}元,合计:{{ item.currentAmount }}元)</span
|
||||||
|
>
|
||||||
|
<el-button size="small" type="primary" icon="Coin" @click="handleRepayment(item)">还款</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span v-else v-html="formatMultiLineData(scope.row.detail)"></span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 还款对话框 -->
|
||||||
|
<el-dialog title="贷款还款" v-model="repaymentOpen" width="500px" append-to-body>
|
||||||
|
<el-form ref="repaymentFormRef" :model="repaymentForm" :rules="repaymentRules" label-width="120px">
|
||||||
|
<el-form-item label="贷款机构">
|
||||||
|
<el-input v-model="repaymentForm.bankCardLendName" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="还款日期" prop="repaymentDate">
|
||||||
|
<el-date-picker
|
||||||
|
clearable
|
||||||
|
v-model="repaymentForm.repaymentDate"
|
||||||
|
type="date"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
placeholder="请选择还款日期"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="应还本金" prop="principal">
|
||||||
|
<el-input v-model="repaymentForm.principal" type="number" @input="calculateTotalAmount" placeholder="请输入应还本金" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="应还利息" prop="interest">
|
||||||
|
<el-input v-model="repaymentForm.interest" type="number" @input="calculateTotalAmount" placeholder="请输入应还利息" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="合计金额">
|
||||||
|
<el-input v-model="repaymentForm.currentAmount" disabled />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="还款状态" prop="postingState">
|
||||||
|
<el-select v-model="repaymentForm.postingState" placeholder="请选择还款状态" style="width: 100%">
|
||||||
|
<el-option label="已还款" value="1"></el-option>
|
||||||
|
<el-option label="未还款" value="0"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="repaymentForm.remark" type="textarea" placeholder="请输入备注" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button type="primary" @click="submitRepayment">确 定</el-button>
|
||||||
|
<el-button @click="repaymentOpen = false">取 消</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -196,6 +260,7 @@ const dates = [
|
|||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const radioVal = ref('柱状图')
|
const radioVal = ref('柱状图')
|
||||||
|
const repaymentOpen = ref(false)
|
||||||
|
|
||||||
const creditCardList = ref([])
|
const creditCardList = ref([])
|
||||||
const dateValidate = (rules, value, callback) => {
|
const dateValidate = (rules, value, callback) => {
|
||||||
@@ -231,10 +296,26 @@ const data = reactive({
|
|||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
time: [{ validator: dateValidate, dateType: 'months', num: 35, dateRange: '月', message: '时间跨度不能大于36个月,默认选择开始日期的36个月' }]
|
time: [{ validator: dateValidate, dateType: 'months', num: 35, dateRange: '月', message: '时间跨度不能大于36个月,默认选择开始日期的36个月' }]
|
||||||
|
},
|
||||||
|
repaymentForm: {
|
||||||
|
id: null,
|
||||||
|
bankCardLendName: '',
|
||||||
|
repaymentDate: '',
|
||||||
|
principal: 0,
|
||||||
|
interest: 0,
|
||||||
|
currentAmount: 0,
|
||||||
|
postingState: '1',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
repaymentRules: {
|
||||||
|
repaymentDate: [{ required: true, message: '还款日期不能为空', trigger: 'blur' }],
|
||||||
|
principal: [{ required: true, message: '应还本金不能为空', trigger: 'blur' }],
|
||||||
|
interest: [{ required: true, message: '应还利息不能为空', trigger: 'blur' }],
|
||||||
|
postingState: [{ required: true, message: '还款状态不能为空', trigger: 'change' }]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const { queryParams, queryCreditCardParams, rules } = toRefs(data)
|
const { queryParams, queryCreditCardParams, rules, repaymentForm, repaymentRules } = toRefs(data)
|
||||||
const handleCreditChange = (id) => {
|
const handleCreditChange = (id) => {
|
||||||
queryParams.value.id = id
|
queryParams.value.id = id
|
||||||
getList()
|
getList()
|
||||||
@@ -294,7 +375,8 @@ const historyObj = ref({
|
|||||||
dueDetail: '',
|
dueDetail: '',
|
||||||
repaidDetail: '',
|
repaidDetail: '',
|
||||||
leftDetail: '',
|
leftDetail: '',
|
||||||
historyDetailList: []
|
historyDetailList: [],
|
||||||
|
tableHistoryDetailList: []
|
||||||
})
|
})
|
||||||
|
|
||||||
const chartData = ref({
|
const chartData = ref({
|
||||||
@@ -302,6 +384,14 @@ const chartData = ref({
|
|||||||
value1: []
|
value1: []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 计算属性:倒序后的表格数据
|
||||||
|
const reversedTableData = computed(() => {
|
||||||
|
if (historyObj.value.tableHistoryDetailList && historyObj.value.tableHistoryDetailList.length > 0) {
|
||||||
|
return [...historyObj.value.tableHistoryDetailList].reverse()
|
||||||
|
}
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
chartData.value = { name: [], value1: [] }
|
chartData.value = { name: [], value1: [] }
|
||||||
@@ -537,6 +627,47 @@ const handleRadioChange = (type) => {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 还款按钮操作 */
|
||||||
|
function handleRepayment(item) {
|
||||||
|
repaymentForm.value = {
|
||||||
|
id: item.id,
|
||||||
|
bankCardLendName: item.bankCardLendName,
|
||||||
|
repaymentDate: dayjs(new Date().getTime()).format('YYYY-MM-DD'),
|
||||||
|
principal: item.principal,
|
||||||
|
interest: item.interest,
|
||||||
|
currentAmount: item.currentAmount,
|
||||||
|
postingState: '1',
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
repaymentOpen.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 计算合计金额 */
|
||||||
|
function calculateTotalAmount() {
|
||||||
|
const principal = parseFloat(repaymentForm.value.principal) || 0
|
||||||
|
const interest = parseFloat(repaymentForm.value.interest) || 0
|
||||||
|
repaymentForm.value.currentAmount = (principal + interest).toFixed(2)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 提交还款 */
|
||||||
|
function submitRepayment() {
|
||||||
|
proxy.$refs.repaymentFormRef.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
proxy.$modal
|
||||||
|
.confirm('是否确认已还款?')
|
||||||
|
.then(function () {
|
||||||
|
// TODO: 这里需要调用后端接口更新还款状态
|
||||||
|
// 示例: return updateInstallmentDetail(repaymentForm.value)
|
||||||
|
proxy.$modal.msgSuccess('还款成功')
|
||||||
|
repaymentOpen.value = false
|
||||||
|
getList() // 刷新列表
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
getCreditCardList()
|
getCreditCardList()
|
||||||
getList()
|
getList()
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -227,6 +227,9 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
|
<el-tooltip class="item" effect="dark" content="还款" placement="top">
|
||||||
|
<el-button icon="Coin" v-hasPermi="['invest:installmentHistory:edit']" circle @click="handleRepayment(scope.row)"></el-button>
|
||||||
|
</el-tooltip>
|
||||||
<el-tooltip v-for="item in operateDetailList" :key="item.id" class="item" effect="dark" :content="item.title" placement="top">
|
<el-tooltip v-for="item in operateDetailList" :key="item.id" class="item" effect="dark" :content="item.title" placement="top">
|
||||||
<el-button :icon="item.icon" v-hasPermi="item.hasPermi" circle @click="handleDetailOperate(item.id, scope.row)"></el-button>
|
<el-button :icon="item.icon" v-hasPermi="item.hasPermi" circle @click="handleDetailOperate(item.id, scope.row)"></el-button>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
@@ -594,6 +597,22 @@ function handleUpdateDetail(row) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 还款按钮操作 */
|
||||||
|
function handleRepayment(row) {
|
||||||
|
resetDetail()
|
||||||
|
getInstallmentDetail(row.id).then((response) => {
|
||||||
|
formDetail.value = response.data
|
||||||
|
// 默认设置还款状态为已还款
|
||||||
|
formDetail.value.postingState = '1'
|
||||||
|
// 设置还款日期为当前日期
|
||||||
|
if (!formDetail.value.repaymentDate) {
|
||||||
|
formDetail.value.repaymentDate = dayjs(new Date().getTime()).format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
openDetail.value = true
|
||||||
|
titleDetail.value = '贷款还款'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs.installmentHistoryRef.validate((valid) => {
|
proxy.$refs.installmentHistoryRef.validate((valid) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user