fix: align customer payment encryption and protect original values
Deploy olons-admin production / deploy (push) Successful in 9m19s

This commit is contained in:
richjohnrambo
2026-10-22 22:33:42 +08:00
parent 70ef3d9d04
commit 3d69d68a5d
8 changed files with 371 additions and 46 deletions
+32 -20
View File
@@ -178,8 +178,10 @@
<n-spin :show="relatedLoading">
<n-form label-placement="left" label-width="110">
<template v-if="relatedType === 'payment'">
<n-alert v-if="paymentForm.id" type="warning" :show-icon="false">
敏感资料已明文展示;请仅用于当前业务处理。留空保存不会覆盖原敏感字段或收款码。
<n-alert v-if="paymentForm.id" :type="paymentForm.sensitiveUnavailable ? 'error' : 'warning'" :show-icon="false">
{{ paymentForm.sensitiveUnavailable
? '部分历史资料暂无法解密。脱敏值只作占位,不会写回原数据;请留空保留原值。'
: '资料已明文展示。留空保存不会覆盖原字段或收款码。' }}
</n-alert>
<n-form-item label="开户人"
><n-input v-model:value="paymentForm.holder" :placeholder="paymentForm.holderMask || '留空不修改'"
@@ -734,16 +736,17 @@
reset(paymentForm, {
memberId,
id: bank?.id || 0,
holder: bank?.holder || bank?.holderMask || '',
holder: editableSensitive(bank?.holder),
sensitiveUnavailable: bank?.sensitiveUnavailable || false,
holderMask: bank?.holderMask || '',
identityNo: bank?.identityNo || bank?.identityNoMask || '',
identityNo: editableSensitive(bank?.identityNo),
identityNoMask: bank?.identityNoMask || '',
bankName: bank?.bankName || '',
mobile: bank?.mobile || bank?.mobileMask || '',
mobile: editableSensitive(bank?.mobile),
mobileMask: bank?.mobileMask || '',
bankAccount: bank?.accountNo || bank?.accountNoMask || '',
bankAccount: editableSensitive(bank?.accountNo),
accountNoMask: bank?.accountNoMask || '',
digitalWallet: bank?.digitalRmbCode || bank?.digitalRmbCodeMask || '',
digitalWallet: editableSensitive(bank?.digitalRmbCode),
digitalRmbCodeMask: bank?.digitalRmbCodeMask || '',
alipayQrCode: bank?.alipayQrUrl || '',
wechatQrCode: bank?.wechatQrUrl || '',
@@ -756,14 +759,14 @@
reset(addressForm, {
id: row?.id || 0,
memberId,
receiver: row?.receiver || row?.receiverMask || '',
mobile: row?.mobile || row?.mobileMask || '',
receiver: editableSensitive(row?.receiver),
mobile: editableSensitive(row?.mobile),
region,
originalRegion: region,
province: row?.province || '',
city: row?.city || '',
district: row?.district || '',
address: '',
address: editableSensitive(row?.address),
isDefault: 1,
});
}
@@ -778,6 +781,9 @@
: await AddressList({ memberId: detail.value.id });
relatedRows.value = r.list || [];
}
function editableSensitive(value: unknown) {
return typeof value === 'string' && !value.includes('*') ? value : '';
}
function startRelatedAdd() {
showRelatedForm.value = true;
if (relatedType.value === 'payment')
@@ -788,7 +794,8 @@
bankName: '',
holder: '',
mobile: '',
accountNo: '',
bankAccount: '',
digitalWallet: '',
verifyStatus: 1,
isDefault: 2,
});
@@ -801,7 +808,7 @@
province: '',
city: '',
district: '',
address: row?.address || row?.addressMask || '',
address: '',
isDefault: 2,
});
}
@@ -855,11 +862,16 @@
memberId: row.memberId,
accountType: row.accountType,
bankName: row.bankName,
holder: row.holder || row.holderMask || '',
identityNo: row.identityNo || row.identityNoMask || '',
mobile: row.mobile || row.mobileMask || '',
accountNo: row.accountNo || row.accountNoMask || '',
digitalRmbCode: row.digitalRmbCode || row.digitalRmbCodeMask || '',
holder: editableSensitive(row.holder),
sensitiveUnavailable: row.sensitiveUnavailable || false,
identityNo: editableSensitive(row.identityNo),
mobile: editableSensitive(row.mobile),
bankAccount: editableSensitive(row.accountNo),
digitalWallet: editableSensitive(row.digitalRmbCode),
wechatQrCode: row.wechatQrUrl || '',
alipayQrCode: row.alipayQrUrl || '',
wechatQrAttachmentId: row.wechatQrAttachmentId || 0,
alipayQrAttachmentId: row.alipayQrAttachmentId || 0,
verifyStatus: row.verifyStatus,
isDefault: row.isDefault,
});
@@ -867,12 +879,12 @@
reset(addressForm, {
id: row.id,
memberId: row.memberId,
receiver: row.receiver || row.receiverMask || '',
mobile: row.mobile || row.mobileMask || '',
receiver: editableSensitive(row.receiver),
mobile: editableSensitive(row.mobile),
province: row.province,
city: row.city,
district: row.district,
address: row.address || row.addressMask || '',
address: editableSensitive(row.address),
isDefault: row.isDefault,
});
}