From c8c4cd6bd4a9a19087d3937c4d9cd4e853658e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AF=85?= <1335909236@qq.com> Date: Tue, 28 Oct 2025 10:25:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=89=A9=E4=B8=9A=E7=BC=B4?= =?UTF-8?q?=E8=B4=B9=E6=98=AF=E5=90=A6=E5=85=81=E8=AE=B8=E8=B7=B3=E4=BB=98?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/community/propertyPayment/index.vue | 163 ++++++++++++++----- 1 file changed, 125 insertions(+), 38 deletions(-) diff --git a/packages/community/propertyPayment/index.vue b/packages/community/propertyPayment/index.vue index a7f4cac9..0b427dc9 100644 --- a/packages/community/propertyPayment/index.vue +++ b/packages/community/propertyPayment/index.vue @@ -57,7 +57,9 @@ + v-if="item.community_order_rows.some(itemObj => itemObj.pay_status == 1)" + :disabled="!canSelectBill(index)"> + {{ item.order_date }}年 @@ -73,8 +75,8 @@ - + {{ items.order_date }}年 @@ -279,6 +281,7 @@ export default { currentCommunity: "", //当前房源 currentCommunityAddr: "", //当前房源地址 Bill: "", //账单 + Bill2: "", //未支付账单 balanceMoney: 0, //公积金 currentMoney: 0, //所选金额 @@ -289,6 +292,7 @@ export default { page_num: 1, payOrderList: [], flag: false, + isAllow: false, }; }, onLoad(options) { @@ -387,9 +391,10 @@ export default { page_num: 1, page_size: 50, }).then((res) => { + this.isAllow = res.rows[0].community.bill_allow_skip_payment === 1; this.roomList = res.rows; if (!this.currentRoom.room_id) { - this.currentRoom = this.roomList[0] + this.currentRoom = this.roomList[0] } this.selectedRoomId = this.currentRoom.room_id; this.getOrderList().then(() => { @@ -405,6 +410,7 @@ export default { // 选择房源 selectRoom(item) { + this.getRoomSelect() // 更新选中的房源ID this.selectedRoomId = item.room_id; // 在控制台输出选中的数据 @@ -451,7 +457,30 @@ export default { ite.check = false; }); }); + + // 按照年份和月份进行排序 + res.rows.sort((a, b) => { + // 首先获取年份(从community_order_rows中第一个元素的order_date提取) + const yearA = a.community_order_rows && a.community_order_rows.length > 0 ? parseInt(a.community_order_rows[0].order_date) : 0; + const yearB = b.community_order_rows && b.community_order_rows.length > 0 ? parseInt(b.community_order_rows[0].order_date) : 0; + + // 如果年份不同,按照年份排序 + if (yearA !== yearB) { + return yearA - yearB; + } + + // 如果年份相同,获取月份进行比较 + const monthA = a.community_order_rows && a.community_order_rows.length > 0 ? parseInt(a.community_order_rows[0].order_datetime) : 0; + const monthB = b.community_order_rows && b.community_order_rows.length > 0 ? parseInt(b.community_order_rows[0].order_datetime) : 0; + return monthA - monthB; + }); + this.Bill = res.rows; + this.Bill2 = res.rows.reduce((result, item) => { + const paidOrders = item.community_order_rows.filter(ite => ite.pay_status == 1); + return result.concat(paidOrders); + }, []); + resolve(); }).catch((error) => { reject(error); @@ -462,49 +491,107 @@ export default { changeCheck(e, index) { this.Bill[index].more = !this.Bill[index].more; }, + // 判断是否可以选择该年份的账单 + canSelectBill(index) { + if (this.isAllow) return true; + + // 如果是第一条账单,总是可以选择 + if (index === 0) return true; + + // 检查前面所有年份的账单是否都已支付 + for (let i = 0; i < index; i++) { + const yearBill = this.Bill[i]; + // 检查该年份是否有未支付的账单 + const hasUnpaid = yearBill.community_order_rows.some(item => item.pay_status === 1); + if (hasUnpaid) { + return false; + } + } + + return true; + }, + + // 判断是否可以选择该具体的账单项 + canSelectItem(indes, index) { + if (this.isAllow) return true; + + // 首先检查该年份是否可以选择 + if (!this.canSelectBill(index)) { + return false; + } + + // 如果是该年份的第一项,总是可以选择 + if (indes === 0) return true; + + // 检查该年份前面的月份是否都已支付 + const yearBill = this.Bill[index]; + for (let i = 0; i < indes; i++) { + if (yearBill.community_order_rows[i].pay_status === 1) { + return false; + } + } + + return true; + }, + //整体选择 checkChange(e, index) { - this.Bill[index].check = !this.Bill[index].check; - this.Bill[index].community_order_rows.forEach((item) => { - if (item.pay_status == 1) { - item.check = this.Bill[index].check; - } - }); - - // 重新计算选中金额 - let money = 0; - this.Bill.forEach((item) => { - item.community_order_rows.forEach((ite) => { - if (ite.check && ite.pay_status == 1) { - money += ite.money; + // 只针对没有禁用的多选框操作 + if (this.canSelectBill(index)) { + this.Bill[index].check = !this.Bill[index].check; + this.Bill[index].community_order_rows.forEach((item, indes) => { + // 子项也只针对没有禁用的多选框操作 + if (item.pay_status == 1 && this.canSelectItem(indes, index)) { + item.check = this.Bill[index].check; } }); - }); - this.currentMoney = money ? money.toFixed(2) : 0.00; + + // 重新计算选中金额 + let money = 0; + this.Bill.forEach((item) => { + item.community_order_rows.forEach((ite) => { + if (ite.check && ite.pay_status == 1) { + money += ite.money; + } + }); + }); + this.currentMoney = money ? money.toFixed(2) : 0.00; + } }, //具体选择 itemsCheckChange(e, indes, index) { - this.Bill[index].community_order_rows[indes].check = - !this.Bill[index].community_order_rows[indes].check; - //判断是否全部选中 - let isAll = this.Bill[index].community_order_rows.every((item) => { - return item.check; - }); - if (isAll) { - this.Bill[index].check = true; - } else { - this.Bill[index].check = false; - } - //帮我计算所有Bill的的community_order_rows 所选中的金额 现在取消选择金额没有减 - let money = 0; - this.Bill.forEach((item) => { - item.community_order_rows.forEach((ite) => { - if (ite.check) { - money += ite.money; + // 只针对没有禁用的多选框操作 + if (this.canSelectItem(indes, index)) { + this.Bill[index].community_order_rows[indes].check = + !this.Bill[index].community_order_rows[indes].check; + + //判断是否全部选中(只检查可选中的项) + let isAll = this.Bill[index].community_order_rows.every((item, idx) => { + // 只考虑可选中的项(未支付且可以选择) + if (item.pay_status === 1 && this.canSelectItem(idx, index)) { + return item.check; } + // 对于已支付或不可选择的项,不影响全选状态 + return true; }); - }); - this.currentMoney = money ? money.toFixed(2) : 0.00; + + if (isAll) { + this.Bill[index].check = true; + } else { + this.Bill[index].check = false; + } + + // 计算所有选中的金额 + let money = 0; + this.Bill.forEach((item) => { + item.community_order_rows.forEach((ite) => { + if (ite.check && ite.pay_status == 1) { + money += ite.money; + } + }); + }); + this.currentMoney = money ? money.toFixed(2) : 0.00; + } }, //切换支付方式 changePayType(e) {