diff --git a/apps/daxpay-admin/src/api/system/security.api.ts b/apps/daxpay-admin/src/api/system/security.api.ts index 36947a4b5..1d375eda7 100644 --- a/apps/daxpay-admin/src/api/system/security.api.ts +++ b/apps/daxpay-admin/src/api/system/security.api.ts @@ -213,4 +213,8 @@ export interface PaySecurityConfig { riskBlockBeforePay?: boolean; /** 支付成功后是否补录命中(用于事后分析) */ riskCheckAfterPay?: boolean; + /** openId 拦截级别(normal=正常拦截 / enhanced=增强拦截) */ + riskOpenIdLevel?: string; + /** 海外 IP 拦截(占位字段, 默认关闭, 后续接入) */ + blockOverseasIp?: boolean; } diff --git a/apps/daxpay-admin/src/locales/langs/en-US/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/en-US/system/security/pay-security.json index 16f78cdb2..abcf3f7db 100644 --- a/apps/daxpay-admin/src/locales/langs/en-US/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/en-US/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "Hit: Block Order", "blockOff": "Hit: Log Only", "afterOn": "Post-Pay Log: On", - "afterOff": "Post-Pay Log: Off" + "afterOff": "Post-Pay Log: Off", + "levelNormal": "Level: Normal", + "levelEnhanced": "Level: Enhanced", + "overseasOn": "Overseas IP: Block" }, "section": { - "switch": "Risk Control" + "switch": "Risk Control", + "strategy": "Interception Strategy" }, "riskEnabled": { "label": "Risk Control Master Switch", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "Post-Pay Hit Logging", "desc": "When enabled, hits are recorded after successful payment for post-event analysis, without affecting funds." + }, + "riskOpenIdLevel": { + "label": "openId Interception Level", + "desc": "Normal: only block JSAPI/Mini native methods. Enhanced: also force OAuth to acquire openId for H5/QR-code in recognizable environments.", + "normal": "Normal", + "enhanced": "Enhanced" + }, + "blockOverseasIp": { + "label": "Overseas IP Blocking", + "desc": "Block payment requests from overseas IPs (outside mainland China), a common risk control strategy for the China region.", + "comingSoon": "This feature will be available in a future release." } } } diff --git a/apps/daxpay-admin/src/locales/langs/id-ID/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/id-ID/system/security/pay-security.json index 934e9adea..46cd25d1f 100644 --- a/apps/daxpay-admin/src/locales/langs/id-ID/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/id-ID/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "Hit: Blokir Pesanan", "blockOff": "Hit: Catat Saja", "afterOn": "Catatan Pascabayar: Aktif", - "afterOff": "Catatan Pascabayar: Nonaktif" + "afterOff": "Catatan Pascabayar: Nonaktif", + "levelNormal": "Level: Normal", + "levelEnhanced": "Level: Ditingkatkan", + "overseasOn": "IP Luar Negeri: Blokir" }, "section": { - "switch": "Saklar Kontrol Risiko" + "switch": "Saklar Kontrol Risiko", + "strategy": "Strategi Intersepsi" }, "riskEnabled": { "label": "Saklar Utama Kontrol Risiko", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "Pencatatan Hit Pasca Pembayaran", "desc": "Saat aktif, hit dicatat setelah pembayaran berhasil untuk analisis pasca-peristiwa, tanpa memengaruhi dana." + }, + "riskOpenIdLevel": { + "label": "Level Intersepsi openId", + "desc": "Normal: hanya blokir metode native JSAPI/Mini. Ditingkatkan: juga memaksa OAuth untuk mendapatkan openId pada H5/QR dalam lingkungan yang dikenali.", + "normal": "Normal", + "enhanced": "Ditingkatkan" + }, + "blockOverseasIp": { + "label": "Pemblokiran IP Luar Negeri", + "desc": "Blokir permintaan pembayaran dari IP luar negeri (di luar Tiongkok daratan), strategi pengendalian risiko umum di wilayah Tiongkok.", + "comingSoon": "Fitur ini akan tersedia di rilis mendatang." } } } diff --git a/apps/daxpay-admin/src/locales/langs/ja-JP/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/ja-JP/system/security/pay-security.json index b6933cbd6..0b09f0845 100644 --- a/apps/daxpay-admin/src/locales/langs/ja-JP/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/ja-JP/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "ヒット:注文拒否", "blockOff": "ヒット:記録のみ", "afterOn": "事後記録:オン", - "afterOff": "事後記録:オフ" + "afterOff": "事後記録:オフ", + "levelNormal": "レベル:通常", + "levelEnhanced": "レベル:強化", + "overseasOn": "海外 IP:ブロック" }, "section": { - "switch": "リスク管理スイッチ" + "switch": "リスク管理スイッチ", + "strategy": "ブロック戦略" }, "riskEnabled": { "label": "リスク管理メインスイッチ", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "決済後ヒット記録", "desc": "オンの場合、決済成功後にヒットを記録し、事後分析に使用します。資金状態には影響しません。" + }, + "riskOpenIdLevel": { + "label": "openId ブロック レベル", + "desc": "通常ブロック:JSAPI/ミニなどネイティブ方式のみブロック。強化ブロック:H5/QR 決済など識別可能環境でも OAuth を強制し openId を取得してブロック。", + "normal": "通常ブロック", + "enhanced": "強化ブロック" + }, + "blockOverseasIp": { + "label": "海外 IP ブロック", + "desc": "中国本土以外の海外 IP からの決済リクエストをブロック。中国地域で一般的なリスク管理戦略。", + "comingSoon": "この機能は今後のバージョンで提供されます。" } } } diff --git a/apps/daxpay-admin/src/locales/langs/ko-KR/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/ko-KR/system/security/pay-security.json index 009a47ced..33cbdad44 100644 --- a/apps/daxpay-admin/src/locales/langs/ko-KR/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/ko-KR/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "히트: 주문 차단", "blockOff": "히트: 기록만", "afterOn": "사후 기록: 켜짐", - "afterOff": "사후 기록: 꺼짐" + "afterOff": "사후 기록: 꺼짐", + "levelNormal": "레벨: 일반", + "levelEnhanced": "레벨: 강화", + "overseasOn": "해외 IP: 차단" }, "section": { - "switch": "리스크 관리 스위치" + "switch": "리스크 관리 스위치", + "strategy": "차단 전략" }, "riskEnabled": { "label": "리스크 관리 마스터 스위치", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "결제 후 히트 기록", "desc": "켜면 결제 성공 후 히트를 기록하여 사후 분석에 사용합니다. 자금 상태에 영향을 주지 않습니다." + }, + "riskOpenIdLevel": { + "label": "openId 차단 레벨", + "desc": "일반 차단: JSAPI/미니 등 네이티브 방식만 차단. 강화 차단: H5/QR 결제 등 인식 가능 환경에서 OAuth 를 강제하여 openId 를 획득 후 차단.", + "normal": "일반 차단", + "enhanced": "강화 차단" + }, + "blockOverseasIp": { + "label": "해외 IP 차단", + "desc": "중국 본토 외 해외 IP 에서의 결제 요청을 차단. 중국 지역에서 일반적인 리스크 관리 전략.", + "comingSoon": "이 기능은 향후 버전에서 제공됩니다." } } } diff --git a/apps/daxpay-admin/src/locales/langs/ms-MY/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/ms-MY/system/security/pay-security.json index 8b27e6220..0310c7ad8 100644 --- a/apps/daxpay-admin/src/locales/langs/ms-MY/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/ms-MY/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "Hit: Sekat Pesanan", "blockOff": "Hit: Rekod Sahaja", "afterOn": "Rekod Pasca-Bayar: Aktif", - "afterOff": "Rekod Pasca-Bayar: Mati" + "afterOff": "Rekod Pasca-Bayar: Mati", + "levelNormal": "Tahap: Biasa", + "levelEnhanced": "Tahap: Diperkuat", + "overseasOn": "IP Luar Negara: Sekat" }, "section": { - "switch": "Suis Kawalan Risiko" + "switch": "Suis Kawalan Risiko", + "strategy": "Strategi Sekatan" }, "riskEnabled": { "label": "Suis Utama Kawalan Risiko", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "Rekod Hit Selepas Pembayaran", "desc": "Apabila aktif, hit direkod selepas pembayaran berjaya untuk analisis pasca-peristiwa, tanpa menjejaskan dana." + }, + "riskOpenIdLevel": { + "label": "Tahap Sekatan openId", + "desc": "Biasa: hanya sekat kaedah native JSAPI/Mini. Diperkuat: juga memaksa OAuth untuk mendapatkan openId pada H5/QR dalam persekitaran yang dikenali.", + "normal": "Biasa", + "enhanced": "Diperkuat" + }, + "blockOverseasIp": { + "label": "Sekatan IP Luar Negara", + "desc": "Sekat permintaan pembayaran dari IP luar negara (luar tanah besar China), strategi kawalan risiko biasa di wilayah China.", + "comingSoon": "Ciri ini akan tersedia dalam keluaran akan datang." } } } diff --git a/apps/daxpay-admin/src/locales/langs/th-TH/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/th-TH/system/security/pay-security.json index f11c643f4..02673420b 100644 --- a/apps/daxpay-admin/src/locales/langs/th-TH/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/th-TH/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "ตรง: บล็อกคำสั่ง", "blockOff": "ตรง: บันทึกอย่างเดียว", "afterOn": "บันทึกหลังชำระ: เปิด", - "afterOff": "บันทึกหลังชำระ: ปิด" + "afterOff": "บันทึกหลังชำระ: ปิด", + "levelNormal": "ระดับ: ปกติ", + "levelEnhanced": "ระดับ: เข้มข้น", + "overseasOn": "IP ต่างประเทศ: บล็อก" }, "section": { - "switch": "สวิตช์ควบคุมความเสี่ยง" + "switch": "สวิตช์ควบคุมความเสี่ยง", + "strategy": "กลยุทธ์การบล็อก" }, "riskEnabled": { "label": "สวิตช์หลักควบคุมความเสี่ยง", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "บันทึกการตรงหลังชำระเงิน", "desc": "เมื่อเปิด การตรงจะถูกบันทึกหลังชำระเงินสำเร็จเพื่อวิเคราะห์ภายหลัง โดยไม่กระทบสถานะเงิน" + }, + "riskOpenIdLevel": { + "label": "ระดับการบล็อก openId", + "desc": "ปกติ: บล็อกเฉพาะ JSAPI/Mini แบบเนทีฟ. เข้มข้น: บังคับ OAuth เพื่อรับ openId สำหรับ H5/QR ในสภาพแวดล้อมที่ระบุได้.", + "normal": "ปกติ", + "enhanced": "เข้มข้น" + }, + "blockOverseasIp": { + "label": "การบล็อก IP ต่างประเทศ", + "desc": "บล็อกคำขอชำระเงินจาก IP ต่างประเทศ (นอกจีนแผ่นดินใหญ่) กลยุทธ์ควบคุมความเสี่ยงที่พบได้ทั่วไปในภูมิภาคจีน", + "comingSoon": "คุณลักษณะนี้จะพร้อมใช้งานในรุ่นถัดไป." } } } diff --git a/apps/daxpay-admin/src/locales/langs/vi-VN/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/vi-VN/system/security/pay-security.json index db7012b8e..dd2275020 100644 --- a/apps/daxpay-admin/src/locales/langs/vi-VN/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/vi-VN/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "Trúng: Chặn đơn", "blockOff": "Trúng: Chỉ ghi nhận", "afterOn": "Ghi nhận sau: Bật", - "afterOff": "Ghi nhận sau: Tắt" + "afterOff": "Ghi nhận sau: Tắt", + "levelNormal": "Cấp độ: Bình thường", + "levelEnhanced": "Cấp độ: Tăng cường", + "overseasOn": "IP nước ngoài: Chặn" }, "section": { - "switch": "Công tắc kiểm soát rủi ro" + "switch": "Công tắc kiểm soát rủi ro", + "strategy": "Chiến lược chặn" }, "riskEnabled": { "label": "Công tắc chính kiểm soát rủi ro", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "Ghi nhận trúng sau thanh toán", "desc": "Khi bật, trúng được ghi nhận sau thanh toán thành công để phân tích sự cố, không ảnh hưởng trạng thái tiền." + }, + "riskOpenIdLevel": { + "label": "Cấp độ chặn openId", + "desc": "Bình thường: chỉ chặn phương thức native JSAPI/Mini. Tăng cường: ép OAuth lấy openId cho H5/QR trong môi trường nhận diện được.", + "normal": "Bình thường", + "enhanced": "Tăng cường" + }, + "blockOverseasIp": { + "label": "Chặn IP nước ngoài", + "desc": "Chặn yêu cầu thanh toán từ IP nước ngoài (ngoài Trung Quốc đại lục), chiến lược kiểm soát rủi ro phổ biến tại khu vực Trung Quốc.", + "comingSoon": "Tính năng này sẽ có trong bản phát hành sau." } } } diff --git a/apps/daxpay-admin/src/locales/langs/zh-CN/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/zh-CN/system/security/pay-security.json index 06e40bbcd..986bac810 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-CN/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/zh-CN/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "命中:拦截下单", "blockOff": "命中:仅记录", "afterOn": "事后补录:开", - "afterOff": "事后补录:关" + "afterOff": "事后补录:关", + "levelNormal": "拦截级别:正常", + "levelEnhanced": "拦截级别:增强", + "overseasOn": "海外 IP:拦截" }, "section": { - "switch": "风控开关" + "switch": "风控开关", + "strategy": "拦截策略" }, "riskEnabled": { "label": "风控总开关", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "事后补录命中", "desc": "开启后,支付成功后会补充记录命中情况,用于事后分析,不影响资金态。" + }, + "riskOpenIdLevel": { + "label": "openId 拦截级别", + "desc": "正常拦截:仅对 JSAPI/小程序等原生方式拦截;增强拦截:对 H5/主扫等可识别环境也强制 OAuth 取 openId 拦截。", + "normal": "正常拦截", + "enhanced": "增强拦截" + }, + "blockOverseasIp": { + "label": "海外 IP 拦截", + "desc": "拦截境外 IP(中国大陆以外)发起的支付请求,中国区常用风控策略。", + "comingSoon": "该功能将在后续版本接入。" } } } diff --git a/apps/daxpay-admin/src/locales/langs/zh-HK/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/zh-HK/system/security/pay-security.json index 412f0a6f9..431fed217 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-HK/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/zh-HK/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "命中:攔截下單", "blockOff": "命中:僅記錄", "afterOn": "事後補錄:開", - "afterOff": "事後補錄:關" + "afterOff": "事後補錄:關", + "levelNormal": "攔截級別:正常", + "levelEnhanced": "攔截級別:增強", + "overseasOn": "海外 IP:攔截" }, "section": { - "switch": "風控開關" + "switch": "風控開關", + "strategy": "攔截策略" }, "riskEnabled": { "label": "風控總開關", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "事後補錄命中", "desc": "開啟後,支付成功後會補充記錄命中情況,用於事後分析,不影響資金態。" + }, + "riskOpenIdLevel": { + "label": "openId 攔截級別", + "desc": "正常攔截:僅對 JSAPI/小程式等原生方式攔截;增強攔截:對 H5/主掃等可識別環境也強制 OAuth 取 openId 攔截。", + "normal": "正常攔截", + "enhanced": "增強攔截" + }, + "blockOverseasIp": { + "label": "海外 IP 攔截", + "desc": "攔截境外 IP(中國大陸以外)發起的支付請求,中國區常用風控策略。", + "comingSoon": "該功能將在後續版本接入。" } } } diff --git a/apps/daxpay-admin/src/locales/langs/zh-TW/system/security/pay-security.json b/apps/daxpay-admin/src/locales/langs/zh-TW/system/security/pay-security.json index 412f0a6f9..431fed217 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-TW/system/security/pay-security.json +++ b/apps/daxpay-admin/src/locales/langs/zh-TW/system/security/pay-security.json @@ -13,10 +13,14 @@ "blockOn": "命中:攔截下單", "blockOff": "命中:僅記錄", "afterOn": "事後補錄:開", - "afterOff": "事後補錄:關" + "afterOff": "事後補錄:關", + "levelNormal": "攔截級別:正常", + "levelEnhanced": "攔截級別:增強", + "overseasOn": "海外 IP:攔截" }, "section": { - "switch": "風控開關" + "switch": "風控開關", + "strategy": "攔截策略" }, "riskEnabled": { "label": "風控總開關", @@ -29,6 +33,17 @@ "riskCheckAfterPay": { "label": "事後補錄命中", "desc": "開啟後,支付成功後會補充記錄命中情況,用於事後分析,不影響資金態。" + }, + "riskOpenIdLevel": { + "label": "openId 攔截級別", + "desc": "正常攔截:僅對 JSAPI/小程式等原生方式攔截;增強攔截:對 H5/主掃等可識別環境也強制 OAuth 取 openId 攔截。", + "normal": "正常攔截", + "enhanced": "增強攔截" + }, + "blockOverseasIp": { + "label": "海外 IP 攔截", + "desc": "攔截境外 IP(中國大陸以外)發起的支付請求,中國區常用風控策略。", + "comingSoon": "該功能將在後續版本接入。" } } } diff --git a/apps/daxpay-admin/src/views/system/config/security/components/RiskConfig.vue b/apps/daxpay-admin/src/views/system/config/security/components/RiskConfig.vue index af1e576f5..e2db292ed 100644 --- a/apps/daxpay-admin/src/views/system/config/security/components/RiskConfig.vue +++ b/apps/daxpay-admin/src/views/system/config/security/components/RiskConfig.vue @@ -20,13 +20,13 @@ const formState = ref({} as PaySecurityConfig); - // 概要标签:总开关关闭仅展示关闭态;开启时同步展示阻断/事后补录 + // 概要标签:总开关关闭仅展示关闭态;开启时同步展示阻断/事后补录/拦截级别 const summaryItems = computed(() => { if (!formState.value.riskEnabled) { // 风控:已关闭 return [$t('system.security.pay-security.risk.summary.disabled')]; } - return [ + const items = [ // 风控:已开启 $t('system.security.pay-security.risk.summary.enabled'), // 命中:拦截下单 / 仅记录 @@ -37,7 +37,16 @@ formState.value.riskCheckAfterPay ? $t('system.security.pay-security.risk.summary.afterOn') : $t('system.security.pay-security.risk.summary.afterOff'), + // openId 拦截级别 + formState.value.riskOpenIdLevel === 'enhanced' + ? $t('system.security.pay-security.risk.summary.levelEnhanced') + : $t('system.security.pay-security.risk.summary.levelNormal'), ]; + // 海外 IP 拦截(占位, 默认关闭, 仅开启时展示) + if (formState.value.blockOverseasIp) { + items.push($t('system.security.pay-security.risk.summary.overseasOn')); + } + return items; }); /** @@ -180,6 +189,55 @@ /> + + +
+
+ {{ $t('system.security.pay-security.risk.section.strategy') }} +
+ + +
+
+ +
{{ + $t('system.security.pay-security.risk.riskOpenIdLevel.label') + }}
+ +
{{ $t('system.security.pay-security.risk.riskOpenIdLevel.desc') }}
+
+ + + + {{ $t('system.security.pay-security.risk.riskOpenIdLevel.normal') }} + + + + {{ $t('system.security.pay-security.risk.riskOpenIdLevel.enhanced') }} + + +
+ + +
+
+ +
{{ + $t('system.security.pay-security.risk.blockOverseasIp.label') + }}
+ +
{{ $t('system.security.pay-security.risk.blockOverseasIp.desc') }}
+
+ + + + +
+