auto verify for order fulfillment and payment

This commit is contained in:
Timi
2026-09-16 13:07:05 +08:00
parent b201f5cd58
commit d0969cb322
5 changed files with 135 additions and 14 deletions
+24 -6
View File
@@ -15,7 +15,7 @@
<t-form
v-if="order"
class="form"
label-width="6rem"
label-width="7rem"
v-entrance-transition="70"
>
<t-form-item label="收款金额" required-mark>
@@ -31,8 +31,9 @@
size="extra-small"
theme="primary"
variant="outline"
content="全额收款"
@click="fillUnpaidAmount"
>全额收款</t-button>
/>
</template>
</t-input>
</t-form-item>
@@ -55,6 +56,12 @@
/>
</div>
</t-form-item>
<t-form-item v-if="canDirectVerify" label="直接核销收款" content-align="right">
<t-switch v-model="directVerify" size="small" />
<template #help v-if="directVerify">
<span class="red">店长直接核销后,收款会立即计入订单已收款,不再进入待核销队列。</span>
</template>
</t-form-item>
<t-form-item label="备注">
<t-textarea
v-model="remark"
@@ -95,7 +102,7 @@ import type { PhotoItem } from "@/types/Photo";
import { createPackageRequestNo, formatPackageAmount, formatPackageAmountInput, parsePackageAmount } from "@/utils/package";
import { getErrorMessage } from "@/utils/error";
import { Message } from "@/utils/message";
import { permissionCodes } from "@/utils/permission";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
import { uploadPhotoList } from "@/utils/photo";
defineOptions({ name: "SalesOrderPayment" });
@@ -114,6 +121,10 @@ const remark = ref("");
const photoItems = ref<PhotoItem[]>([]);
const photoUrlList = computed(() => photoItems.value.map(item => item.url));
const requestNo = ref("");
const directVerify = ref(false);
const canDirectVerify = computed(() => userStore.hasRoles(gaoRoleCodes.storeManager)
&& userStore.hasPermissions(permissionCodes.fundReceive.create)
&& userStore.hasPermissions(permissionCodes.fundReceive.verify));
function openOccurredAtPicker(): void {
draftTime.value = occurredAtText.value || Time.formatDateTime(new Date());
@@ -162,6 +173,10 @@ async function loadData(): Promise<void> {
async function save(): Promise<void> {
if (saving.value || !order.value?.id) return;
if (directVerify.value && !canDirectVerify.value) {
Message.warning("当前账号没有店长直接核销权限");
return;
}
const amount = parsePackageAmount(amountText.value);
const attachmentList = buildAttachments();
if (amount === undefined || amount === 0) {
@@ -175,15 +190,18 @@ async function save(): Promise<void> {
if (!requestNo.value) requestNo.value = createPackageRequestNo();
saving.value = true;
try {
const record = await SalesOrderAPI.receivePayment({
const request = {
salesOrderId: order.value.id,
requestNo: requestNo.value,
amount,
occurredAt: resolveTimestamp(occurredAtText.value),
attachmentList,
remark: remark.value.trim() || null
});
Message.success("收款登记已提交");
};
const record = directVerify.value
? await SalesOrderAPI.receivePaymentAndVerify(request)
: await SalesOrderAPI.receivePayment(request);
Message.success(directVerify.value ? "收款登记并核销成功" : "收款登记已提交");
await router.replace(record.id && userStore.hasPermissions(permissionCodes.fundReceive.create)
? `/management/fund-records/${record.id}`
: `/management/sales-orders/${order.value.id}`);