相对方确认签署

This commit is contained in:
2026-07-01 13:00:33 +08:00
parent c5b744737d
commit fa7be38e7f
@@ -521,30 +521,30 @@
</div>
</div>
<div v-if="counterpartyPartyNames.length" class="counterparty-confirm-section">
<div v-if="counterpartyConfirmItems.length" class="counterparty-confirm-section">
<div class="counterparty-confirm-title">相对方签署确认</div>
<div
v-for="name in counterpartyPartyNames"
:key="name"
v-for="item in counterpartyConfirmItems"
:key="item.partyId || item.partnerId || item.companyName"
class="counterparty-confirm-row"
>
<span
v-if="counterpartyConfirmMap[name]?.confirmed"
v-if="item.confirmed"
class="confirm-status status-done"
></span>
<span v-else class="confirm-status status-pending"></span>
<span class="confirm-name">{{ name }}</span>
<span class="confirm-name">{{ item.companyName }}</span>
<span
v-if="counterpartyConfirmMap[name]?.confirmed"
v-if="item.confirmed"
class="confirm-method"
>{{ counterpartyConfirmMap[name]?.method === 'manual' ? '(代确认)' : '(已确认)' }}</span>
>{{ item.method === 'manual' ? '(代确认)' : '(已确认)' }}</span>
<a-button
v-else
size="small"
type="primary"
ghost
:loading="counterpartyConfirmLoading"
@click="handleConfirmCounterparty(name)"
@click="handleConfirmCounterparty(item)"
>我已签署完成</a-button>
</div>
<div v-if="unconfirmedPartyNames.length" class="counterparty-confirm-note">
@@ -1290,16 +1290,16 @@ const querySealTypes = ref([0, 20, 10, 30, 40, 50, 60]);
const fetchingSeals = ref(false);
const sealList = ref([]);
const sealDefaultScale = ref(1.0);
/** 解析相对方名单(分号分隔) */
const counterpartyPartyNames = computed(() => {
const text = businessRecord.value?.counterpartySummary || '';
return text.split(/[;]/).map(s => s.trim()).filter(Boolean);
});
const counterpartyConfirmItems = computed(
() => counterpartyConfirmMap.value?.items || [],
);
/** 未确认的相对方名单 */
const unconfirmedPartyNames = computed(() => {
return counterpartyPartyNames.value.filter(name => !counterpartyConfirmMap.value[name]?.confirmed);
return counterpartyConfirmItems.value
.filter((item) => !item.confirmed)
.map((item) => item.companyName)
.filter(Boolean);
});
async function loadCounterpartyConfirm() {
@@ -1314,13 +1314,19 @@ async function loadCounterpartyConfirm() {
counterpartyConfirmLoading.value = false;
}
async function handleConfirmCounterparty(companyName) {
async function handleConfirmCounterparty(item = {}) {
if (!businessRecord.value?.id) return;
if (!item.partyId) {
message.error("缺少相对方标识,无法确认");
return;
}
try {
const res = await confirmCounterparty(businessRecord.value.id, { companyName });
const res = await confirmCounterparty(businessRecord.value.id, {
partyId: String(item.partyId),
});
if (isSuccessResponse(res) && res.result) {
counterpartyConfirmMap.value = res.result || {};
message.success(`已确认:${companyName}`);
message.success(`已确认:${item.companyName || "相对方"}`);
} else {
message.error(getResponseMessage(res, '确认失败'));
}