diff --git a/src/pages/salesOrder/FundRecordDetail.vue b/src/pages/salesOrder/FundRecordDetail.vue index 7526002..9670c3d 100644 --- a/src/pages/salesOrder/FundRecordDetail.vue +++ b/src/pages/salesOrder/FundRecordDetail.vue @@ -4,7 +4,7 @@
- +

@@ -12,19 +12,28 @@

- + + + + + - + - +
record.value?.operationType === "RECEIVE" && record.value.status === "PENDING"); const canVerifyReceive = computed(() => isPendingReceive.value && userStore.hasPermissions(permissionCodes.fundReceive.verify)); const canCancelReceive = computed(() => isPendingReceive.value && userStore.hasPermissions(permissionCodes.fundReceive.create)); -const canRevoke = computed(() => record.value?.status === "VERIFIED" && record.value.operationType !== "REVOKE" && userStore.hasPermissions(permissionCodes.fund.revoke)); +const canRevoke = computed(() => record.value?.status === "VERIFIED" + && record.value.operationType !== "REVOKE" + && !record.value.revokeRecordId + && userStore.hasPermissions(permissionCodes.fund.revoke)); function getStatusTheme(status?: FundRecordStatus): "success" | "warning" | "danger" | "default" { return status === "VERIFIED" ? "success" : status === "PENDING" ? "warning" : status === "REJECTED" ? "danger" : "default"; } +function getRecordStatusText(recordValue: FundRecord): string { + return recordValue.revokeRecordId ? "已被冲正" : getFundStatusText(recordValue.status); +} + +function getRecordStatusTheme(recordValue: FundRecord): "success" | "warning" | "danger" | "default" { + return recordValue.revokeRecordId ? "danger" : getStatusTheme(recordValue.status); +} + async function loadData(): Promise { const id = String(route.params.id || ""); if (!id) { @@ -179,6 +199,18 @@ async function toSalesOrder(): Promise { }); } +// ---------- 原资金记录 ---------- + +async function toSourceRecord(): Promise { + if (!record.value?.sourceRecordId) { + return; + } + await router.push({ + path: `/management/fund-records/${record.value.sourceRecordId}`, + query: { transitionDepth: String(getCurrentRouteDepth() + 1) } + }); +} + function getCurrentRouteDepth(): number { const transitionDepth = Array.isArray(route.query.transitionDepth) ? route.query.transitionDepth[0] @@ -216,7 +248,11 @@ async function verifyReceive(): Promise { const dialog = DialogPlugin.confirm({ title: "核销收款", content: "核销后该金额才会计入套餐的已收款。确定继续?", + cancelBtn: "取消", confirmBtn: "核销", + onCancel() { + dialog.destroy(); + }, onConfirm: async () => { isOperating.value = true; try { diff --git a/src/pages/salesOrder/FundRecordList.vue b/src/pages/salesOrder/FundRecordList.vue index fafe093..e65c591 100644 --- a/src/pages/salesOrder/FundRecordList.vue +++ b/src/pages/salesOrder/FundRecordList.vue @@ -30,9 +30,9 @@
@@ -48,13 +48,28 @@
- +
+ +
@@ -72,7 +87,7 @@ import { useNavBarStore } from "@/store/navBarStore"; import type { FundOperationType, FundRecord, FundRecordStatus } from "@/types/SalesOrder"; import { getErrorMessage } from "@/utils/error"; import { formatPackageAmount } from "@/utils/package"; -import { getFundBizTypeText, getFundOperationText, getFundStatusText } from "@/utils/salesOrder"; +import { getFundOperationText, getFundStatusText } from "@/utils/salesOrder"; import { Message } from "@/utils/message"; import { permissionCodes } from "@/utils/permission"; import { PassTimeLabel } from "timi-web"; @@ -166,6 +181,14 @@ function getStatusTheme(statusValue?: FundRecordStatus): "success" | "warning" | return statusValue === "VERIFIED" ? "success" : statusValue === "PENDING" ? "warning" : statusValue === "REJECTED" ? "danger" : "default"; } +function getRecordStatusText(item: FundRecord): string { + return item.revokeRecordId ? "已被冲正" : getFundStatusText(item.status); +} + +function getRecordStatusTheme(item: FundRecord): "success" | "warning" | "danger" | "default" { + return item.revokeRecordId ? "danger" : getStatusTheme(item.status); +} + async function toDetail(item: FundRecord): Promise { if (item.id) { await router.push({ @@ -256,7 +279,7 @@ onUnmounted(() => navBarStore.clearRight()); gap: 0; color: var(--td-text-color-secondary); display: flex; - font-size: .8125rem; + font-size: .75rem; flex-wrap: wrap; line-height: 1.5; flex-direction: column; @@ -277,9 +300,26 @@ onUnmounted(() => navBarStore.clearRight()); } } - .amount { + .amounts { + display: flex; + font-size: .75rem; + align-items: end; + flex-direction: column; - .value { + .label { + color: var(--td-text-color-placeholder); + } + + .order-amount, + .unpaid-amount, + .record-amount { + gap: .125rem; + display: flex; + align-items: baseline; + white-space: nowrap; + } + + .record-amount .value { font-size: 1.25rem; } } diff --git a/src/pages/salesOrder/FundRecordRevoke.vue b/src/pages/salesOrder/FundRecordRevoke.vue index 8b7c586..a00fbe9 100644 --- a/src/pages/salesOrder/FundRecordRevoke.vue +++ b/src/pages/salesOrder/FundRecordRevoke.vue @@ -2,33 +2,89 @@
- - - + + + + + - - - - + + + + + +
+ + +
+
+ + + +
+ +
- - - + +