8/4 更新 输入限制,修复收银台
This commit is contained in:
@@ -21,7 +21,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item @change="handleChangeHouseNo" label="房号" prop="houseId">
|
||||
<el-select v-model="queryParams.houseId" placeholder="请选择收费项目">
|
||||
<el-select v-model="queryParams.houseId" placeholder="请选择房号">
|
||||
<el-option-group v-for="group in houseList" :key="group.floorNo" :label="String(group.floorNo) + ' 楼'">
|
||||
<el-option v-for="item in group.houses" :key="item.houseId" :label="item.houseNo" :value="item.houseId" />
|
||||
</el-option-group>
|
||||
@@ -30,7 +30,7 @@
|
||||
</div>
|
||||
<div>
|
||||
<el-form-item label="收费项目" prop="itemId">
|
||||
<el-select v-model="queryParams.chargeItemId" placeholder="请选择收费项目">
|
||||
<el-select multiple v-model="queryParams.chargeItemId" placeholder="请选择收费项目">
|
||||
<el-option
|
||||
:disabled="item.status === '1'"
|
||||
v-for="(item, index) in chargeItems"
|
||||
@@ -147,7 +147,10 @@
|
||||
<el-table-column label="应收金额" width="100" align="center" prop="amount" />
|
||||
<el-table-column label="缴费状态" width="100" align="center" prop="payStatus">
|
||||
<template #default="scope">
|
||||
<DictTag :options="com_pay_status" :value="scope.row.payStatus"></DictTag>
|
||||
<span v-if="scope.row.payStatus === '0'">未缴纳</span>
|
||||
<span v-else-if="scope.row.payStatus === '1'">已缴纳</span>
|
||||
<span v-else-if="scope.row.payStatus === '2'">缴纳失败</span>
|
||||
<span v-else>部分缴纳</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="应缴金额" width="100" align="center" prop="amount" />
|
||||
@@ -159,7 +162,7 @@
|
||||
<el-table-column label="操作" width="110" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button link type="primary" v-if="scope.row.payStatus !== '1'" @click="handleIncome(scope.row)" v-has-permi="['bill:bill:edit']"
|
||||
>收费</el-button
|
||||
>收款</el-button
|
||||
>
|
||||
<el-button link type="success" v-if="scope.row.payStatus === '1'" @click="printPIaoJuByOnly(scope.row)" v-has-permi="['bill:bill:query']"
|
||||
>打印票据</el-button
|
||||
@@ -180,7 +183,10 @@
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="650px" append-to-body>
|
||||
<div class="payInfo">
|
||||
<div>
|
||||
<div>缴费人: {{ inComeFrom.residentName }}</div>
|
||||
<div class="flex flex-items-center justify-between">
|
||||
<span>缴费人: {{ inComeFrom.residentName }}</span>
|
||||
<span style="color: #ff9947">待缴纳</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<span>收费名称: </span>
|
||||
@@ -204,11 +210,11 @@
|
||||
<span>{{ item.amount }}¥</span>
|
||||
</div>
|
||||
<div style="text-align: right" class="flex justify-between">
|
||||
<span>上次优惠金额</span>
|
||||
<span>累计优惠金额</span>
|
||||
<span>− {{ item.singleDiscountAmount }}¥</span>
|
||||
</div>
|
||||
<div style="text-align: right" class="flex justify-between">
|
||||
<span>上次已交金额</span>
|
||||
<span>累计已交金额</span>
|
||||
<span>− {{ item.paidAmount }}¥</span>
|
||||
</div>
|
||||
<div
|
||||
@@ -264,40 +270,11 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="缴纳状态" prop="payStatus">
|
||||
<el-radio-group v-model="inComeFrom.payStatus">
|
||||
<el-radio v-for="dict in com_pay_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-radio>
|
||||
<el-radio value="1" label="已缴纳"></el-radio>
|
||||
<el-radio value="2" label="部分缴纳"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="payType" v-if="inComeFrom.payStatus !== '0'">
|
||||
<div class="flex-1">
|
||||
<div class="flex flex-items-center" v-for="(item, index) in payList" :key="index">
|
||||
<div class="flex-1 flex">
|
||||
<el-select @change="handleChangePayTypeId($event, index)" v-model="item.payType" placeholder="请选择">
|
||||
<el-option
|
||||
:disabled="isOptionDisabled(dict.value, item.payType)"
|
||||
v-for="dict in com_pay_method"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<el-input @change="(val: string) => handleChangePay(val, index)" v-model.number.trim="item.payAmount" style="margin: 0 10px">
|
||||
<template #append>¥</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div style="width: 80px; text-align: left">
|
||||
<el-icon
|
||||
color="blue"
|
||||
size="24"
|
||||
v-if="index === payList.length - 1 && payList.length < com_pay_method.length"
|
||||
@click="addPayList"
|
||||
style="margin-right: 10px; cursor: pointer"
|
||||
><CirclePlus
|
||||
/></el-icon>
|
||||
<el-icon color="red" style="cursor: pointer" size="24" v-if="payList.length > 1" @click="removePayList(index)"><Delete /></el-icon>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="优惠方式" prop="discountMethod" v-if="inComeFrom.payStatus !== '0'">
|
||||
<el-select style="width: 400px" @change="handleChangeDisCountMethod" v-model="inComeFrom.discountMethod" placeholder="请选择">
|
||||
<el-option label="不优惠" :value="0"></el-option>
|
||||
@@ -335,6 +312,37 @@
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<el-form-item label="支付方式" prop="payType" v-if="inComeFrom.payStatus !== '0'">
|
||||
<div class="flex-1">
|
||||
<div class="flex flex-items-center" v-for="(item, index) in payList" :key="index">
|
||||
<div class="flex-1 flex">
|
||||
<el-select @change="handleChangePayTypeId($event, index)" v-model="item.payType" placeholder="请选择">
|
||||
<el-option
|
||||
:disabled="isOptionDisabled(dict.value, item.payType)"
|
||||
v-for="dict in com_pay_method"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
<el-input @change="(val: string) => handleChangePay(val, index)" v-model.number.trim="item.payAmount" style="margin: 0 10px">
|
||||
<template #append>¥</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div style="width: 80px; text-align: left">
|
||||
<el-icon
|
||||
color="blue"
|
||||
size="24"
|
||||
v-if="index === payList.length - 1 && payList.length < com_pay_method.length"
|
||||
@click="addPayList"
|
||||
style="margin-right: 10px; cursor: pointer"
|
||||
><CirclePlus
|
||||
/></el-icon>
|
||||
<el-icon color="red" style="cursor: pointer" size="24" v-if="payList.length > 1" @click="removePayList(index)"><Delete /></el-icon>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input style="width: 400px" type="textarea" show-word-limit maxlength="100" :rows="5" v-model="inComeFrom.remark"></el-input>
|
||||
</el-form-item>
|
||||
@@ -433,9 +441,7 @@ import { CirclePlus, Delete, QuestionFilled } from '@element-plus/icons-vue';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
const { com_pay_status, com_pay_method, com_charge_item_unit } = toRefs<any>(
|
||||
proxy?.useDict('com_pay_status', 'com_pay_method', 'com_charge_item_unit')
|
||||
);
|
||||
const { com_pay_method, com_charge_item_unit } = toRefs<any>(proxy?.useDict('com_pay_method', 'com_charge_item_unit'));
|
||||
|
||||
const userStore = useUserStore();
|
||||
const loading = ref(false);
|
||||
@@ -668,7 +674,7 @@ function initInComeFrom() {
|
||||
inComeFrom.value = {
|
||||
allCost: 0, // 总金额
|
||||
billResidentId: [], // 账单id
|
||||
payStatus: '1', // 0:未缴 1:已缴
|
||||
payStatus: '1', // 0:未缴 1:已缴 2: 缴纳失败 3: 部分缴纳
|
||||
payType: '2', // 0:微信 1:支付宝 2 线下
|
||||
remark: '',
|
||||
discountMethod: 0, // 优惠方式 0 不优惠 1 比例 2 金额
|
||||
@@ -694,7 +700,6 @@ function initInComeFrom() {
|
||||
}
|
||||
// 改变优惠方式
|
||||
function handleChangeDisCountMethod(val: number) {
|
||||
console.log(val);
|
||||
inComeFrom.value.discountRate = '0'; // 优惠比例
|
||||
inComeFrom.value.discount = '0.00'; // 优惠金额
|
||||
totalReadDiscount.value = '0.00'; // 实际优惠金额
|
||||
@@ -718,7 +723,6 @@ function handleChangeDiscountMoney(val: string) {
|
||||
}
|
||||
let discount = toBig(cleanVal).toNumber();
|
||||
if (Number.isNaN(discount)) discount = 0;
|
||||
console.log('折扣金额:', discount);
|
||||
const allCost = inComeFrom.value.allCost ?? 0;
|
||||
if (discount < 0) {
|
||||
ElMessage.warning('优惠金额不能为负数');
|
||||
@@ -830,6 +834,7 @@ function handleIncome(row: billlistType | false) {
|
||||
if (row) {
|
||||
inComeFrom.value.allCost = row.needPayAmount;
|
||||
inComeFrom.value.billResidentId = [row];
|
||||
inComeFrom.value.remark = row.remark;
|
||||
inComeFrom.value.residentName = row.residentName;
|
||||
totalPayAmount.value = row.needPayAmount;
|
||||
} else {
|
||||
@@ -845,6 +850,7 @@ function handleIncome(row: billlistType | false) {
|
||||
ElMessage.warning('缴费人不一致,重新选择');
|
||||
return;
|
||||
} else if (set.size === 1) {
|
||||
inComeFrom.value.remark = '';
|
||||
inComeFrom.value.residentName = ids.value[0].residentName;
|
||||
ids.value.forEach((item) => {
|
||||
inComeFrom.value.billResidentId.push(item);
|
||||
@@ -866,12 +872,17 @@ const closer = () => {
|
||||
};
|
||||
// 提交
|
||||
const submitForm = () => {
|
||||
if (!handlePayListIsEmpt()) {
|
||||
ElMessage.warning('请填写完整支付方式和支付金额');
|
||||
return;
|
||||
}
|
||||
buttonLoading.value = true;
|
||||
// 部分缴纳时 不管
|
||||
// 已缴纳时 判断 支付金额 和 预计支付金额 是否相等
|
||||
// 混合缴纳时 不管
|
||||
if (inComeFrom.value.payStatus === '1') {
|
||||
if (!eqMoney(totalPayAmount.value, payListAllAmount.value)) {
|
||||
return ElMessage.error('实际支付金额 和 预计支付金额 不相等');
|
||||
buttonLoading.value = false;
|
||||
return ElMessage.warning('支付金额不足,可选择 部分缴纳 方式');
|
||||
}
|
||||
}
|
||||
const obj = {
|
||||
@@ -998,11 +1009,15 @@ const printOption = {
|
||||
}
|
||||
`,
|
||||
afterCloseCallback: () => {
|
||||
console.log('打印结束');
|
||||
isPrint.value = false;
|
||||
isLoading.value = false;
|
||||
}
|
||||
};
|
||||
// 打印状态恢复函数
|
||||
function resetPrintState() {
|
||||
isPrint.value = false;
|
||||
isLoading.value = false;
|
||||
}
|
||||
function conFimPrint() {
|
||||
isLoading.value = true;
|
||||
isPrint.value = true;
|
||||
@@ -1017,7 +1032,8 @@ function conFimPrint() {
|
||||
// isPrint.value = false;
|
||||
// isLoading.value = false;
|
||||
// });
|
||||
}, 1000);
|
||||
resetPrintState();
|
||||
}, 100);
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
@@ -1072,7 +1088,6 @@ const payListAllAmount = computed(() => {
|
||||
});
|
||||
// 添加支付方式
|
||||
function addPayList() {
|
||||
console.log(com_pay_method.value);
|
||||
payList.value.push({
|
||||
payType: '',
|
||||
payAmount: null
|
||||
@@ -1104,6 +1119,27 @@ function handleChangePay(val: string, index: number = -1) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handlePayListIsEmpt() {
|
||||
if (payList.value.length === 0) {
|
||||
ElMessage.warning('请添加支付方式');
|
||||
return false;
|
||||
}
|
||||
const invalidIndex = payList.value.findIndex(
|
||||
(item) =>
|
||||
item.payType === null ||
|
||||
item.payType === undefined ||
|
||||
item.payType === '' ||
|
||||
item.payAmount === null ||
|
||||
item.payAmount === undefined ||
|
||||
item.payAmount === ''
|
||||
);
|
||||
if (invalidIndex !== -1) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// 校验数字
|
||||
function checkMoney(value: string) {
|
||||
if (!value) return false;
|
||||
|
||||
Reference in New Issue
Block a user