相对方确认签署

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