8/7 收银台加个未收,打印票据多个支付明细,房屋租赁-签约/上下架

This commit is contained in:
Zy
2026-08-07 15:12:12 +08:00
parent fa39c98a95
commit 586ec70274
5 changed files with 69 additions and 20 deletions

View File

@@ -80,6 +80,10 @@ export const billPrint = (data: { 'detailsIds': string[]; 'residentId': string }
export type BillPrintType = {
'totalAccount': string;
'residentName': string;
'payTypeSummary': {
'payType': string;
'payAmount': string;
}[];
'detailsList': {
'detailsId': string;
'chargeItemName': string;

View File

@@ -1,5 +1,7 @@
<template>
<div :class="{ hidden: hidden }" class="pagination-container">
<span class="total"> {{ total }} </span>
<slot name="pageContent"></slot>
<el-pagination
v-model:current-page="currentPage"
v-model:page-size="pageSize"
@@ -25,7 +27,7 @@ const props = defineProps({
pageSizes: { type: Array<number>, default: () => [10, 20, 30, 50, 100] },
// 移动端页码按钮的数量端默认值5
pagerCount: propTypes.number.def(document.body.clientWidth < 992 ? 5 : 7),
layout: propTypes.string.def('total, sizes, prev, pager, next, jumper'),
layout: propTypes.string.def('sizes, prev, pager, next, jumper'),
background: propTypes.bool.def(true),
autoScroll: propTypes.bool.def(true),
hidden: propTypes.bool.def(false),
@@ -67,7 +69,15 @@ function handleCurrentChange(val: number) {
</script>
<style lang="scss" scoped>
.total {
color: var(--el-text-color-regular);
font-weight: 400;
font-size: 14px;
margin: 0 15px 0 0;
}
.pagination-container {
display: flex;
align-items: center;
.el-pagination {
float: v-bind(float);
}

View File

@@ -104,12 +104,7 @@
</div>
</div>
<el-card class="flex-1" shadow="never">
<el-table
v-loading="loading"
border
:data="tableData"
@selection-change="handleSelectionChange"
>
<el-table v-loading="loading" border :data="tableData" @selection-change="handleSelectionChange">
<el-table-column type="selection" fixed="left" width="55" align="center" />
<el-table-column label="房屋/车位/车辆" fixed="left" align="center" prop="unitNo" width="120">
<template #default="scope">
@@ -156,7 +151,7 @@
<el-table-column label="优惠金额" width="100" align="center" prop="singleDiscountAmount" />
<el-table-column label="实缴金额" width="100" align="center" prop="actualAccount" />
<el-table-column label="缴费人" width="120" align="center" prop="residentName" />
<el-table-column label="缴费时间" width="200" align="center" prop="payTime" />
<el-table-column label="缴费时间" width="200" align="center" prop="payTime" />
<el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="110" align="center" fixed="right" class-name="small-padding fixed-width">
<template #default="scope">
@@ -172,9 +167,10 @@
<div class="footerBox">
<div class="totalBox">
<span>合计</span>
<span>应收{{ totalAll.totalAccount }}</span>
<span style="padding: 0 20px">实收{{ totalAll.TotalPaymentAmount }}</span>
<span>优惠{{ totalAll.totalDiscountAmount }}</span>
<span style="padding: 0 10px">应收{{ totalAll.totalAccount }}</span>
<span style="padding: 0 10px">实收{{ totalAll.TotalPaymentAmount }}</span>
<span style="padding: 0 10px">优惠{{ totalAll.totalDiscountAmount }}</span>
<span style="padding: 0 10px">未收{{ totalAll.TotalUnPaymentAmount }}</span>
</div>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</div>
@@ -404,6 +400,14 @@
<td></td>
<td></td>
</tr>
<tr>
<td>支付明细</td>
<td colspan="8" style="text-align: left; padding: 0 10px">
<span v-for="(item, index) in print_form.payTypeSummary" :key="index"
>{{ item.payType }}: {{ item.payAmount }} ; &nbsp; &nbsp;</span
>
</td>
</tr>
</tbody>
</table>
<p style="font-size: 10px">说明本收据收款单位和收款具签章方为有效本收据手写无效</p>
@@ -683,9 +687,10 @@ function initInComeFrom() {
residentName: '' // 缴费人
};
totalAll.value = {
totalDiscountAmount: 0,
TotalPaymentAmount: 0,
totalAccount: 0
totalDiscountAmount: 0, // 总优惠金额
TotalPaymentAmount: 0, // 总实收金额
totalAccount: 0, // 总金额
TotalUnPaymentAmount: 0 // 未收金额
};
payList.value = [
{
@@ -920,6 +925,7 @@ const print_form = ref<BillPrintType>({
totalActualAccount: '',
'totalAccount': '',
'residentName': '',
'payTypeSummary': [],
'detailsList': [],
'printDate': '',
'HouseName': '',
@@ -1049,16 +1055,19 @@ onMounted(() => {
// 总 表单
const totalAll = ref({
totalDiscountAmount: 0,
TotalPaymentAmount: 0,
totalAccount: 0
totalDiscountAmount: 0, // 总优惠金额
TotalPaymentAmount: 0, // 总实收金额
totalAccount: 0, // 总金额
TotalUnPaymentAmount: 0 // 未收金额
});
// 多选时 统计总金额,优惠总金额,实付总金额
function handleSelectBill(val: billlistType[]) {
totalAll.value.totalAccount = sum(val.map((item) => item.amount ?? 0));
totalAll.value.TotalPaymentAmount = sum(val.map((item) => item.actualAccount ?? 0));
totalAll.value.totalDiscountAmount = sum(val.map((item) => item.singleDiscountAmount ?? 0));
totalAll.value.TotalUnPaymentAmount = sum(val.map((item) => item.needPayAmount ?? 0));
}
function handleChangePayTypeId(val: string, index: number) {
// 【可选兜底校验】防止异常数据出现重复
const repeatCount = usedPayValues.value.filter((v) => v === val).length;

View File

@@ -80,7 +80,13 @@
<el-table-column label="充值金额" align="center" prop="rechargeAmount" />
<el-table-column label="缴费方式" align="center" prop="topUpType" />
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
<div class="flex flex-items-center justify-end">
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList">
<template #pageContent>
<div class="totalMoney">共计 {{ totalMoney }} </div>
</template>
</pagination>
</div>
</el-card>
</div>
</template>
@@ -88,6 +94,7 @@
<script setup lang="ts">
import { getTopupRecordByDate, type TopupRecordList } from '@/api/system/SdbTopupRecord/index';
import { checkPermi } from '@/utils/permission';
import { sum } from '@/utils/money';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const topupRecordList = ref<TopupRecordList[]>([]);
@@ -105,6 +112,9 @@ const data = reactive({
const SearchTime = ref([]);
const { queryParams } = toRefs(data);
const totalMoney = ref(0);
/** 查询充值记录列表 */
const getList = async () => {
if (!checkPermi(['water:topupRecord:list'])) return;
@@ -113,6 +123,7 @@ const getList = async () => {
topupRecordList.value = res.rows;
total.value = res.total;
loading.value = false;
totalMoney.value = sum(topupRecordList.value.map((item) => item.rechargeAmount));
};
onMounted(() => {
@@ -121,7 +132,6 @@ onMounted(() => {
/** 导出按钮操作 */
const handleExport = () => {
// exportTopupRecordByDate();
proxy?.download(
'/topupRecord/water/export',
{
@@ -140,4 +150,14 @@ const handleExport = () => {
.el-form-item {
margin-bottom: 0;
}
.totalMoney {
min-width: 77px;
height: 20px;
line-height: 20px;
color: rgba(79, 79, 79, 1);
font-size: 14px;
text-align: left;
margin: 0 26px;
}
</style>

View File

@@ -147,9 +147,11 @@
:show-file-list="true"
v-model:file-list="showImgList"
name="files"
:limit="MAX_UPLOAD_FILES"
:onChange="handleChange"
:onExceed="handleExceed"
:multiple="true"
:on-preview="handlePreview"
:auto-upload="false"
drag
:action="uploadApi"
@@ -339,6 +341,10 @@ const handleAdd = () => {
});
};
function handlePreview(uploadFile: UploadFile) {
window.open(uploadFile.url);
}
/** 修改按钮操作 */
const handleUpdate = (row?: HouseRentalVO) => {
const id = row?.id || ids.value[0];
@@ -424,7 +430,7 @@ const handleExceed = () => {
};
const handleChange = (file: UploadUserFile) => {
// 实时判断当前已存在图片总数
if (showImgList.value.length >= MAX_UPLOAD_FILES) {
if (showImgList.value.length > MAX_UPLOAD_FILES) {
ElMessage.warning(`最多上传${MAX_UPLOAD_FILES}张,无法继续添加`);
// 清除刚选中的文件,防止缓存残留
uploadRef.value?.handleRemove(file);