要在你的 JavaScript 代码中实现对不同合同状态(所有、已结清、停催、诉讼)的过滤,我们可以使用按钮的状态来决定展示哪些合同。以下是如何修改你提供的 AJAX 调用部分,以实现这个功能的示例:
// 假设有一个变量 currentTab 表示当前选中的标签,可以是 'all', 'settled', 'stopped', 'litigation'
let currentTab = 'all'; // 默认显示所有
// 监听按钮点击事件以改变 currentTab
function setCurrentTab(tab) {
currentTab = tab;
filterLoans(); // 每次切换时调用过滤函数
}
// 过滤贷款信息
function filterLoans() {
// 根据 currentTab 过滤出相应的贷款信息
const filteredLoans = jsonRes.flatMap(item => {
if (item.code === 'loan') {
return item.child.filter(loan => {
const loanStatus = loan.child.find(child => child.code === 'loanStatus');
if (!loanStatus) return true; // 如果没有状态则默认通过
switch (currentTab) {
case 'settled':
return loanStatus.value === '已结清';
case 'stopped':
return loanStatus.value === '停催';
case 'litigation':
return loanStatus.value === '诉讼';
case 'all':
default:
return true; // 显示所有合同
}
});
}
return [];
});
me.form.initForm(filteredLoans); // 将筛选后的结果传递给表单初始化方法
}
$.ajax({
method: "POST",
url: "../d/detail/keyInfo",
data: { custId: custId },
success: function(result) {
var jsonRes = JSON.parse(result);
for (const item of jsonRes) {
if (item.code === 'loan') {
for (const loan of item.child) {
const Index = loan.path.split('.')[1];
let contractCode;
me.overDueInfoIndex[loan.path] = Index;
const child_OverduePeriod = loan.child.find(val => val.code === "overduePeriod");
const child_LoanCharacter = loan.child.find(val => val.code === "loanCharacter");
if (child_LoanCharacter && child_LoanCharacter.value === "Y") {
Object.assign(authMapLoan, { totalPaymentAmount: '' });
}
const child_ProductLine = loan.child.find(val => val.code === "productLine");
if (child_ProductLine && !child_ProductLine.ifVirtual) {
Object.assign(authMapLoan, { installmentLoanAmount: '' });
const productLine = child_ProductLine.line;
loan.child = loan.child.reduce((arr, child) => {
if (child.code == 'overduePeriod') {
if (child.title.includes("(") && child.title.includes(")")) {
child.title = child.title.replace('(', '(').replace(')', ')');
}
}
if (child.code == 'loanStatus' && child_OverduePeriod && child_OverduePeriod.value == '0') {
child.valueMap[child.value] += `(${lang('NO_DEBT')})`;
}
if (child.code === 'contractCode') {
contractCode = child.value;
me.loanPathContractCodes[loan.path] = child.value;
}
if (child.code === 'allowCollNextPayment' && !child.value) return arr;
const DEFAULT_SHOW = !(child.code in authMapLoan);
const AUTH_SHOW = (child.code in authMapLoan) && canI(authMapLoan[child.code]);
if (DEFAULT_SHOW || AUTH_SHOW) {
arr.push(child);
}
return arr;
}, []);
// 新增:为每个贷款对象添加 status 属性,供后续过滤使用
loan.statusValue=loansArray(value);
}
}
}
}
me.keyInfo=jsonRes;
filterLoans(); // 初始化时调用一次以填充数据
me.form.initForm(jsonRes);
// 在此处加入按钮监听器,这取决于你实际在项目中的实现方式,假设是以下形式:
document.querySelector('#tab-all').addEventListener('click', () => setCurrentTab('all'));
document.querySelector('#tab-settled').addEventListener('click', () => setCurrentTab('settled'));
document.querySelector('#tab-stopped').addEventListener('click', () => setCurrentTab('stopped'));
document.querySelector('#tab-litigation').addEventListener('click', () => setCurrentTab('litigation'));
}
});
解释:
currentTab
:一个变量,用于跟踪当前选择的标签。setCurrentTab(tab)
:根据被点击的标签设置currentTab
的值,并调用filterLoans()
函数来更新显示。filterLoans()
:这个函数会遍历jsonRes
中的贷款信息,并根据当前选择的标签对其进行筛选,最后调用表单初始化函数更新页面内容。- 事件监听器:在 AJAX 成功回调中,我们设置了不同标签按钮的事件监听器,通过点击这些按钮来切换不同的合同视图。
请确保将这段代码与你现有代码整合,并根据你的实际 HTML 按钮 ID 和结构进行调整。
内容由零声教学AI助手提供,问题来源于学员提问