refactor(admin): 支付模式文案统一为「直接指定」

将开发调试、聚合支付、收银台中 direct 模式的「指定通道商户/直传/传值」统一为「直接指定」,并同步多语言与代码注释。
This commit is contained in:
DaxPay Dev
2026-07-15 10:07:51 +08:00
parent 55d583238b
commit d7917fac11
33 changed files with 47 additions and 47 deletions

View File

@@ -24,7 +24,7 @@ export const DevelopTradeApi = {
},
/**
* 传值模式: 按商户号筛选通道商户候选, provider 非空时仅返回声明支持该支付渠道的通道商户
* 直接指定: 按商户号筛选通道商户候选, provider 非空时仅返回声明支持该支付渠道的通道商户
*/
channelMchCandidates(mchNo: string, provider?: string): Promise<Result<LabelValue[]>> {
return defHttp.get({
@@ -34,7 +34,7 @@ export const DevelopTradeApi = {
},
/**
* 传值模式: 按通道商户筛选支付能力候选
* 直接指定: 按通道商户筛选支付能力候选
*/
capabilityCandidates(channelMchNo: string): Promise<Result<LabelValue[]>> {
return defHttp.get({
@@ -58,7 +58,7 @@ export interface PayParam {
mchNo: string;
/** 应用号 */
appId?: string;
/** 通道商户号(调试/指定通道商户时传入) */
/** 通道商户号(调试/直接指定时传入) */
channelMchNo?: string;
/** 商户订单号 */
bizOrderNo: string;
@@ -70,9 +70,9 @@ export interface PayParam {
amount: number;
/** 支付产品编码, 为空时由路由自动选择 */
product?: string;
/** 支付方式编码(路由模式必填, 传值模式由后端从能力反推) */
/** 支付方式编码(跟随通道路由必填, 直接指定由后端从能力反推) */
method?: string;
/** 支付能力编码(传值模式输入, 路由模式由后端回填) */
/** 支付能力编码(直接指定输入, 跟随通道路由由后端回填) */
capability?: string;
/** 用户标识 OpenId(微信 jsapi/mini 场景) */
openId?: string;

View File

@@ -65,9 +65,9 @@
"mode": {
"label": "Pay Mode",
"route": "Follow Channel Routing",
"direct": "Explicit Channel Merchant",
"direct": "Specify Directly",
"routeDesc": "Resolve channel merchant and capability via the app's channel routing",
"directDesc": "Decided by channel merchant + capability; skip channel routing"
"directDesc": "Directly specify channel merchant + capability; skip channel routing"
},
"preview": {
"title": "Request JSON",

View File

@@ -6,7 +6,7 @@
"autoLaunchHint": "Automatically initiate payment after scanning, no manual click needed",
"autoModeHint": "System derives pay method from open environment and follows app channel routing. No manual config needed.",
"methodModeHint": "Manually select pay method per open environment, then resolve via app channel routing.",
"directModeHint": "Explicitly set channel merchant and capability per open environment; skip channel routing.",
"directModeHint": "Directly specify channel merchant and capability per open environment; skip channel routing.",
"scene": "Open Environment",
"method": "Payment Method",
"methodPlaceholder": "Select payment method",
@@ -27,6 +27,6 @@
},
"modeAuto": "Follow Channel Routing",
"modeMethod": "By Method",
"modeDirect": "Explicit Channel Merchant"
"modeDirect": "Specify Directly"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "Smaller numbers first",
"resolveMode": "Pay Resolve Mode",
"modeMethod": "By Method",
"modeDirect": "Explicit Channel Merchant",
"modeDirect": "Specify Directly",
"method": "Payment Method",
"methodPlaceholder": "Select payment method",
"channelMerchant": "Channel Merchant",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "Modus Bayar",
"route": "Ikuti Perutean Saluran",
"direct": "Pedagang Saluran Eksplisit",
"direct": "Tentukan Langsung",
"routeDesc": "Selesaikan pedagang saluran dan kemampuan melalui perutean saluran aplikasi",
"directDesc": "Diputuskan oleh pedagang saluran + kemampuan; lewati perutean saluran"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "Ikuti Perutean Saluran",
"modeMethod": "Berdasarkan Metode",
"modeDirect": "Pedagang Saluran Eksplisit"
"modeDirect": "Tentukan Langsung"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "Angka yang lebih kecil terlebih dahulu",
"resolveMode": "Mode Penyelesaian Bayar",
"modeMethod": "Berdasarkan Metode",
"modeDirect": "Pedagang Saluran Eksplisit",
"modeDirect": "Tentukan Langsung",
"method": "Metode Pembayaran",
"methodPlaceholder": "Pilih metode pembayaran",
"channelMerchant": "Pedagang Saluran",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "ペイモード",
"route": "チャンネルルーティングに従う",
"direct": "明示的なチャネル販売者",
"direct": "直接指定",
"routeDesc": "アプリのチャネルルーティングを介してチャネルマーチャントと機能を解決します",
"directDesc": "チャネル販売業者と能力によって決定されます。チャンネルルーティングをスキップする"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "チャンネルルーティングに従う",
"modeMethod": "方法別",
"modeDirect": "明示的なチャネル販売者"
"modeDirect": "直接指定"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "小さい数字から順に",
"resolveMode": "支払い解決モード",
"modeMethod": "方法別",
"modeDirect": "明示的なチャネル販売者",
"modeDirect": "直接指定",
"method": "支払方法",
"methodPlaceholder": "支払い方法を選択してください",
"channelMerchant": "チャネルマーチャント",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "지불 모드",
"route": "채널 라우팅 따르기",
"direct": "명시적 채널 판매자",
"direct": "직접 지정",
"routeDesc": "앱의 채널 라우팅을 통해 채널 판매자 및 기능을 해결합니다.",
"directDesc": "채널 판매자 + 역량에 따라 결정됩니다. 채널 라우팅 건너뛰기"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "채널 라우팅 따르기",
"modeMethod": "방법별",
"modeDirect": "명시적 채널 판매자"
"modeDirect": "직접 지정"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "작은 숫자부터 먼저",
"resolveMode": "지불 해결 모드",
"modeMethod": "방법별",
"modeDirect": "명시적 채널 판매자",
"modeDirect": "직접 지정",
"method": "결제 방법",
"methodPlaceholder": "결제 수단 선택",
"channelMerchant": "채널 판매자",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "Mod Bayar",
"route": "Ikuti Penghalaan Saluran",
"direct": "Pedagang Saluran Eksplisit",
"direct": "Tentukan Langsung",
"routeDesc": "Selesaikan pedagang saluran dan keupayaan melalui penghalaan saluran apl",
"directDesc": "Diputuskan oleh pedagang saluran + keupayaan; langkau penghalaan saluran"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "Ikuti Penghalaan Saluran",
"modeMethod": "Mengikut Kaedah",
"modeDirect": "Pedagang Saluran Eksplisit"
"modeDirect": "Tentukan Langsung"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "Nombor yang lebih kecil dahulu",
"resolveMode": "Mod Penyelesaian Bayar",
"modeMethod": "Mengikut Kaedah",
"modeDirect": "Pedagang Saluran Eksplisit",
"modeDirect": "Tentukan Langsung",
"method": "Kaedah Pembayaran",
"methodPlaceholder": "Pilih kaedah pembayaran",
"channelMerchant": "Peniaga Saluran",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "โหมดการชำระเงิน",
"route": "ติดตามการกำหนดเส้นทางช่อง",
"direct": "ผู้ค้าช่องทางที่ชัดเจน",
"direct": "ระบุโดยตรง",
"routeDesc": "แก้ไขผู้ค้าช่องทางและความสามารถผ่านการกำหนดเส้นทางช่องทางของแอป",
"directDesc": "ตัดสินใจโดยช่องทางการค้า + ความสามารถ; ข้ามการกำหนดเส้นทางช่อง"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "ติดตามการกำหนดเส้นทางช่อง",
"modeMethod": "โดยวิธีการ",
"modeDirect": "ผู้ค้าช่องทางที่ชัดเจน"
"modeDirect": "ระบุโดยตรง"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "ตัวเลขที่น้อยกว่าก่อน",
"resolveMode": "โหมดการแก้ปัญหาการชำระเงิน",
"modeMethod": "โดยวิธีการ",
"modeDirect": "ผู้ค้าช่องทางที่ชัดเจน",
"modeDirect": "ระบุโดยตรง",
"method": "วิธีการชำระเงิน",
"methodPlaceholder": "เลือกวิธีการชำระเงิน",
"channelMerchant": "พ่อค้าช่องทาง",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "Chế độ thanh toán",
"route": "Theo dõi định tuyến kênh",
"direct": "Người bán kênh rõ ràng",
"direct": "Chỉ định trực tiếp",
"routeDesc": "Giải quyết khả năng và người bán kênh thông qua định tuyến kênh của ứng dụng",
"directDesc": "Quyết định bởi người bán kênh + khả năng; bỏ qua định tuyến kênh"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "Theo dõi định tuyến kênh",
"modeMethod": "Bằng phương pháp",
"modeDirect": "Người bán kênh rõ ràng"
"modeDirect": "Chỉ định trực tiếp"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "Số nhỏ hơn trước",
"resolveMode": "Chế độ giải quyết thanh toán",
"modeMethod": "Bằng phương pháp",
"modeDirect": "Người bán kênh rõ ràng",
"modeDirect": "Chỉ định trực tiếp",
"method": "Phương thức thanh toán",
"methodPlaceholder": "Chọn phương thức thanh toán",
"channelMerchant": "Người bán kênh",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "支付模式",
"route": "跟随通道路由",
"direct": "指定通道商户",
"direct": "直接指定",
"routeDesc": "按应用通道路由解析通道商户与支付能力",
"directDesc": "由通道商户+支付能力直接决定支付实现,跳过通道路由"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "跟随通道路由",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商户"
"modeDirect": "直接指定"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "数字越小越靠前",
"resolveMode": "支付解析方式",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商户",
"modeDirect": "直接指定",
"method": "支付方式",
"methodPlaceholder": "请选择支付方式",
"channelMerchant": "通道商户",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "支付模式",
"route": "跟隨通道路由",
"direct": "指定通道商户",
"direct": "直接指定",
"routeDesc": "按應用通道路由解析通道商户與支付能力",
"directDesc": "由通道商户+支付能力直接決定支付實現,跳過通道路由"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "跟隨通道路由",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商户"
"modeDirect": "直接指定"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "數字越小越靠前",
"resolveMode": "支付解析方式",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商户",
"modeDirect": "直接指定",
"method": "支付方式",
"methodPlaceholder": "請選擇支付方式",
"channelMerchant": "通道商户",

View File

@@ -65,7 +65,7 @@
"mode": {
"label": "支付模式",
"route": "跟隨通道路由",
"direct": "指定通道商戶",
"direct": "直接指定",
"routeDesc": "按應用通道路由解析通道商戶與支付能力",
"directDesc": "由通道商戶+支付能力直接決定支付實現,跳過通道路由"
},

View File

@@ -27,6 +27,6 @@
},
"modeAuto": "跟隨通道路由",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商戶"
"modeDirect": "直接指定"
}
}

View File

@@ -18,7 +18,7 @@
"sortNoPlaceholder": "數字越小越靠前",
"resolveMode": "支付解析方式",
"modeMethod": "指定支付方式",
"modeDirect": "指定通道商戶",
"modeDirect": "直接指定",
"method": "支付方式",
"methodPlaceholder": "請選擇支付方式",
"channelMerchant": "通道商戶",

View File

@@ -29,7 +29,7 @@
// 私钥在 localStorage 中的键名
const PRIVATE_KEY_STORAGE_KEY = 'daxpay_dev_private_key';
// 支付模式: route=路由模式(商户+方式+应用动态匹配) direct=直传模式(通道商户+能力直接决定)
// 支付模式: route=路由模式(商户+方式+应用动态匹配) direct=直接指定(通道商户+能力直接决定)
const routeMode = ref<'direct' | 'route'>('route');
// 私钥独立存储(标签+弹窗交互, 校验通过 form 自定义规则挂接)
@@ -61,7 +61,7 @@
if (routeMode.value === 'route') {
rules.method = [{ required: true, message: $t('payment.develop.trade.rule.method') }];
} else {
// 直传模式: 通道商户与支付能力必填
// 直接指定: 通道商户与支付能力必填
rules.channelMchNo = [{ required: true, message: $t('payment.develop.trade.rule.channelMchNo') }];
rules.capability = [{ required: true, message: $t('payment.develop.trade.rule.capability') }];
}
@@ -138,7 +138,7 @@
}
}
/** 商户变更: 刷新应用列表, 直传模式下重载通道商户候选 */
/** 商户变更: 刷新应用列表, 直接指定下重载通道商户候选 */
function merchantChange() {
form.appId = '';
form.channelMchNo = '';
@@ -155,7 +155,7 @@
value: item.appId ?? '',
})) ?? [];
});
// 直传模式: 商户变更即加载通道商户候选(不依赖支付方式)
// 直接指定: 商户变更即加载通道商户候选(不依赖支付方式)
if (routeMode.value === 'direct') {
loadChannelMchCandidates(form.mchNo);
}
@@ -170,7 +170,7 @@
}
}
/** 模式切换: 清空通道相关字段, 直传模式重载通道商户候选 */
/** 模式切换: 清空通道相关字段, 直接指定重载通道商户候选 */
function modeChange() {
form.channelMchNo = '';
form.capability = '';
@@ -269,7 +269,7 @@
/**
* 按当前模式组装提交参数(含公共字段 reqTime/nonceStr)
* 各模式只透传自身字段; 直传模式 method 由 unipay 路由反推
* 各模式只透传自身字段; 直接指定 method 由 unipay 路由反推
*/
function buildPayload(): PayParam {
const payload: PayParam = {
@@ -285,7 +285,7 @@
payload.channelMchNo = undefined;
payload.capability = undefined;
} else {
// 直传模式: method 由后端从(通道商户, 能力)反推, 不透传
// 直接指定: method 由后端从(通道商户, 能力)反推, 不透传
payload.method = undefined;
}
return cleanPayload(payload);
@@ -538,7 +538,7 @@
/>
</a-form-item>
</a-col>
<!-- 传模式: 通道商户(必填) -->
<!-- 接指定: 通道商户(必填) -->
<a-col v-if="routeMode === 'direct'" :span="8">
<a-form-item :label="$t('payment.develop.trade.field.channelMchNo')" name="channelMchNo">
<a-select
@@ -552,7 +552,7 @@
/>
</a-form-item>
</a-col>
<!-- 传模式: 支付能力(必填, 由通道商户+能力直接决定支付实现) -->
<!-- 接指定: 支付能力(必填, 由通道商户+能力直接决定支付实现) -->
<a-col v-if="routeMode === 'direct'" :span="8">
<a-form-item :label="$t('payment.develop.trade.field.capability')" name="capability">
<a-select

View File

@@ -30,5 +30,5 @@ export const AGGREGATE_CLIENT_ENVS: AggregateClientEnvConfig[] = [
export const LEVEL_DISPLAY: Record<AggregateLevel, string> = {
auto: '跟随通道路由',
method: '指定支付方式',
direct: '指定通道商户',
direct: '直接指定',
};