From 90ab8fee4cd7b8459a595a056d79b8a39c477ed6 Mon Sep 17 00:00:00 2001 From: DaxPay Dev Date: Thu, 9 Jul 2026 12:40:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(payment):=20=E6=96=B0=E5=A2=9E=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=9F=9F=E5=90=8D=E9=AA=8C=E8=AF=81=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=AB=AF(=E5=B9=B3=E5=8F=B0=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E8=A7=86=E5=9B=BE/=E5=95=86=E6=88=B7=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E5=8F=B0/JSON=E4=B8=8A=E4=BC=A0/=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=BC=B9=E7=AA=97/=E5=BD=92=E5=B1=9E=E5=8F=AA=E8=AF=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/config/wx-domain-verify.api.ts | 106 ++++++ .../merchant/mch-wx-domain-verify.api.ts | 103 ++++++ apps/daxpay-admin/src/constants/perm-codes.ts | 12 + .../en-US/payment/merchant/workbench.json | 2 + .../locales/langs/en-US/payment/wxVerify.json | 23 ++ .../zh-CN/payment/merchant/workbench.json | 2 + .../locales/langs/zh-CN/payment/wxVerify.json | 23 ++ .../wx-verify/PlatformWxDomainVerifyEdit.vue | 166 ++++++++++ .../wx-verify/PlatformWxDomainVerifyList.vue | 300 +++++++++++++++++ .../manage/workbench/MerchantManage.vue | 9 + .../wx-verify/MchWxDomainVerifyEdit.vue | 166 ++++++++++ .../wx-verify/MchWxDomainVerifyList.vue | 301 ++++++++++++++++++ 12 files changed, 1213 insertions(+) create mode 100644 apps/daxpay-admin/src/api/payment/config/wx-domain-verify.api.ts create mode 100644 apps/daxpay-admin/src/api/payment/merchant/mch-wx-domain-verify.api.ts create mode 100644 apps/daxpay-admin/src/locales/langs/en-US/payment/wxVerify.json create mode 100644 apps/daxpay-admin/src/locales/langs/zh-CN/payment/wxVerify.json create mode 100644 apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyEdit.vue create mode 100644 apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyList.vue create mode 100644 apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyEdit.vue create mode 100644 apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyList.vue diff --git a/apps/daxpay-admin/src/api/payment/config/wx-domain-verify.api.ts b/apps/daxpay-admin/src/api/payment/config/wx-domain-verify.api.ts new file mode 100644 index 000000000..2d4d350e8 --- /dev/null +++ b/apps/daxpay-admin/src/api/payment/config/wx-domain-verify.api.ts @@ -0,0 +1,106 @@ +import type { BaseEntity, PageResult, Result } from '#/types/web'; + +import { defHttp } from '#/api/request'; + +/** + * 微信域名验证文件 API(平台级,路径前缀 /admin/platform/wx-verify) + * 运营在「支付配置」菜单管理所有验证文件(平台 + 商户),平台页为全局视图 + */ +export const PlatformWxDomainVerifyApi = { + /** + * 分页查询平台级验证文件 + */ + page( + params: PlatformWxDomainVerifyQuery & { current: number; size: number }, + ): Promise> { + return defHttp.get({ url: '/admin/platform/wx-verify/page', params }); + }, + + /** + * 根据 id 查询详情 + */ + get(id: string): Promise> { + return defHttp.get({ url: '/admin/platform/wx-verify/get', params: { id } }); + }, + + /** + * 修改备注等元数据(备注) + */ + update(data: PlatformWxDomainVerifyParam): Promise> { + return defHttp.post({ url: '/admin/platform/wx-verify/update', data }); + }, + + /** + * 删除 + */ + delete(id: string): Promise> { + return defHttp.post({ url: '/admin/platform/wx-verify/delete', params: { id } }); + }, + + /** + * 上传单个验证文件(JSON 提交 fileName + fileContent) + * @param data 文件名 + 文件内容 + 可选元数据 + */ + upload(data: PlatformWxDomainVerifyUploadData): Promise> { + return defHttp.post({ url: '/admin/platform/wx-verify/upload', data }); + }, +}; + +/** + * 平台级验证文件查询参数 + */ +export interface PlatformWxDomainVerifyQuery { + /** 文件名 */ + fileName?: string; + /** 验证码 */ + verifyCode?: string; + /** 归属筛选(true-平台 / false-商户,不传=全部) */ + platform?: boolean; + /** 商户号 */ + mchNo?: string; +} + +/** + * 平台级验证文件上传数据(前端读 .txt 内容后 JSON 提交) + */ +export interface PlatformWxDomainVerifyUploadData { + /** 文件名(如 MP_verify_xxx.txt) */ + fileName: string; + /** 文件内容(纯文本) */ + fileContent: string; + /** 备注 */ + remark?: string; +} + +/** + * 平台级验证文件修改参数 + */ +export interface PlatformWxDomainVerifyParam { + /** 主键 */ + id: string; + /** 备注 */ + remark?: string; +} + +/** + * 平台级验证文件结果 + */ +export interface PlatformWxDomainVerifyVo extends BaseEntity { + /** 商户号(平台级为空) */ + mchNo?: string; + /** 是否平台级 */ + platform?: boolean; + /** 文件名(如 MP_verify_xxx.txt) */ + fileName?: string; + /** 验证码(从文件名或内容解析) */ + verifyCode?: string; + /** 文件内容 */ + fileContent?: string; + /** 备注 */ + remark?: string; +} + +/** + * 平台级验证文件分页结果 + */ +export type PlatformWxDomainVerifyPageResult = PageResult; diff --git a/apps/daxpay-admin/src/api/payment/merchant/mch-wx-domain-verify.api.ts b/apps/daxpay-admin/src/api/payment/merchant/mch-wx-domain-verify.api.ts new file mode 100644 index 000000000..a66833720 --- /dev/null +++ b/apps/daxpay-admin/src/api/payment/merchant/mch-wx-domain-verify.api.ts @@ -0,0 +1,103 @@ +import type { MchEntity, PageResult, Result } from '#/types/web'; + +import { defHttp } from '#/api/request'; + +/** + * 微信域名验证文件 API(商户级,路径前缀 /admin/mch/wx-verify) + * 运营在商户工作台代指定商户管理,upload/page 均需传 mchNo + */ +export const MchWxDomainVerifyApi = { + /** + * 分页查询指定商户的验证文件 + */ + page( + params: MchWxDomainVerifyQuery & { current: number; size: number }, + ): Promise> { + return defHttp.get({ url: '/admin/mch/wx-verify/page', params }); + }, + + /** + * 根据 id 查询详情 + */ + get(id: string): Promise> { + return defHttp.get({ url: '/admin/mch/wx-verify/get', params: { id } }); + }, + + /** + * 修改备注等元数据(备注) + */ + update(data: MchWxDomainVerifyParam): Promise> { + return defHttp.post({ url: '/admin/mch/wx-verify/update', data }); + }, + + /** + * 删除 + */ + delete(id: string): Promise> { + return defHttp.post({ url: '/admin/mch/wx-verify/delete', params: { id } }); + }, + + /** + * 上传单个验证文件(JSON 提交 fileName + fileContent),必须传 mchNo + * @param data 文件名 + 文件内容 + 可选元数据 + * @param mchNo 商户号(必填,走 URL query) + */ + upload(data: MchWxDomainVerifyUploadData, mchNo: string): Promise> { + return defHttp.post({ url: '/admin/mch/wx-verify/upload', params: { mchNo }, data }); + }, +}; + +/** + * 商户级验证文件查询参数(mchNo 必填) + */ +export interface MchWxDomainVerifyQuery { + /** 商户号(必填) */ + mchNo: string; + /** 文件名 */ + fileName?: string; + /** 验证码 */ + verifyCode?: string; +} + +/** + * 商户级验证文件上传数据(前端读 .txt 内容后 JSON 提交) + */ +export interface MchWxDomainVerifyUploadData { + /** 文件名(如 MP_verify_xxx.txt) */ + fileName: string; + /** 文件内容(纯文本) */ + fileContent: string; + /** 备注 */ + remark?: string; +} + +/** + * 商户级验证文件修改参数 + */ +export interface MchWxDomainVerifyParam { + /** 主键 */ + id: string; + /** 备注 */ + remark?: string; +} + +/** + * 商户级验证文件结果 + */ +export interface MchWxDomainVerifyVo extends MchEntity { + /** 是否平台级 */ + platform?: boolean; + /** 文件名(如 MP_verify_xxx.txt) */ + fileName?: string; + /** 验证码(从文件名或内容解析) */ + verifyCode?: string; + /** 文件内容 */ + fileContent?: string; + /** 备注 */ + remark?: string; +} + +/** + * 商户级验证文件分页结果 + */ +export type MchWxDomainVerifyPageResult = PageResult; diff --git a/apps/daxpay-admin/src/constants/perm-codes.ts b/apps/daxpay-admin/src/constants/perm-codes.ts index b0e81e804..b9275e58d 100644 --- a/apps/daxpay-admin/src/constants/perm-codes.ts +++ b/apps/daxpay-admin/src/constants/perm-codes.ts @@ -79,6 +79,11 @@ export const PermCodes = { VIEW: 'merchant:user:view', MANAGE: 'merchant:user:manage', }, + /** 微信域名验证文件 menuCode=merchant:wx_verify */ + WxDomainVerify: { + VIEW: 'merchant:wx_verify:view', + MANAGE: 'merchant:wx_verify:manage', + }, }, /** 渠道管理(独立顶级域) */ @@ -164,6 +169,13 @@ export const PermCodes = { VIEW: 'payment:config:product_config:view', MANAGE: 'payment:config:product_config:manage', }, + /** 微信域名验证文件 menuCode=payment:config:wx_verify */ + Config: { + WxDomainVerify: { + VIEW: 'payment:config:wx_verify:view', + MANAGE: 'payment:config:wx_verify:manage', + }, + }, /** 普通支付业务订单 menuCode=payment:order */ Order: { VIEW: 'payment:order:view', diff --git a/apps/daxpay-admin/src/locales/langs/en-US/payment/merchant/workbench.json b/apps/daxpay-admin/src/locales/langs/en-US/payment/merchant/workbench.json index 480656850..bceaa7b0b 100644 --- a/apps/daxpay-admin/src/locales/langs/en-US/payment/merchant/workbench.json +++ b/apps/daxpay-admin/src/locales/langs/en-US/payment/merchant/workbench.json @@ -18,6 +18,8 @@ "cardAppDesc": "Merchant app creation and management", "cardCredentialConfig": "Credential Config", "cardCredentialConfigDesc": "Merchant public key, communication key, platform public key and other credential configuration", + "cardWxDomainVerify": "WeChat Domain Verify File", + "cardWxDomainVerifyDesc": "Upload and manage WeChat Official Account / Mini Program business domain verification files", "cardUser": "User Management", "cardUserDesc": "User account management and permission assignment", "cardStore": "Store Management", diff --git a/apps/daxpay-admin/src/locales/langs/en-US/payment/wxVerify.json b/apps/daxpay-admin/src/locales/langs/en-US/payment/wxVerify.json new file mode 100644 index 000000000..16affa54f --- /dev/null +++ b/apps/daxpay-admin/src/locales/langs/en-US/payment/wxVerify.json @@ -0,0 +1,23 @@ +{ + "title": "WeChat Domain Verify File", + "adminTitle": "WeChat Domain Verify File", + "upload": "Upload Verify File", + "uploadTip": "Select the WeChat domain verification .txt file", + "uploadSuccess": "Upload succeeded", + "uploadFail": "Upload failed", + "confirmDelete": "Are you sure to delete this verification file?", + "editTitle": "Edit Verify File", + "field": { + "fileName": "File Name", + "mchNo": "Merchant No.", + "belong": "Belong", + "verifyCode": "Verify Content", + "remark": "Remark", + "createTime": "Create Time", + "fileContent": "File Content" + }, + "belong": { + "platform": "Platform", + "merchant": "Merchant" + } +} diff --git a/apps/daxpay-admin/src/locales/langs/zh-CN/payment/merchant/workbench.json b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/merchant/workbench.json index 1aa2b9e9b..3dceba0ff 100644 --- a/apps/daxpay-admin/src/locales/langs/zh-CN/payment/merchant/workbench.json +++ b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/merchant/workbench.json @@ -18,6 +18,8 @@ "cardAppDesc": "商户应用创建与管理", "cardCredentialConfig": "对接配置", "cardCredentialConfigDesc": "商户公钥、通信密钥、平台公钥等对接密钥配置", + "cardWxDomainVerify": "微信域名验证文件", + "cardWxDomainVerifyDesc": "上传与管理微信公众号 / 小程序业务域名校验文件", "cardUser": "用户管理", "cardUserDesc": "用户账号管理与权限分配", "cardStore": "门店管理", diff --git a/apps/daxpay-admin/src/locales/langs/zh-CN/payment/wxVerify.json b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/wxVerify.json new file mode 100644 index 000000000..da0036a03 --- /dev/null +++ b/apps/daxpay-admin/src/locales/langs/zh-CN/payment/wxVerify.json @@ -0,0 +1,23 @@ +{ + "title": "微信域名验证文件", + "adminTitle": "微信域名验证文件", + "upload": "上传验证文件", + "uploadTip": "请选择微信下载的域名验证 .txt 文件", + "uploadSuccess": "上传成功", + "uploadFail": "上传失败", + "confirmDelete": "确定删除该验证文件吗?", + "editTitle": "编辑验证文件", + "field": { + "fileName": "文件名", + "mchNo": "商户号", + "belong": "归属", + "verifyCode": "验证内容", + "remark": "备注", + "createTime": "创建时间", + "fileContent": "文件内容" + }, + "belong": { + "platform": "平台", + "merchant": "商户" + } +} diff --git a/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyEdit.vue b/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyEdit.vue new file mode 100644 index 000000000..9de420ee8 --- /dev/null +++ b/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyEdit.vue @@ -0,0 +1,166 @@ + + + diff --git a/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyList.vue b/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyList.vue new file mode 100644 index 000000000..96050e3aa --- /dev/null +++ b/apps/daxpay-admin/src/views/payment/config/wx-verify/PlatformWxDomainVerifyList.vue @@ -0,0 +1,300 @@ + + + diff --git a/apps/daxpay-admin/src/views/payment/merchant/manage/workbench/MerchantManage.vue b/apps/daxpay-admin/src/views/payment/merchant/manage/workbench/MerchantManage.vue index 77ad5783e..0ca8387e0 100644 --- a/apps/daxpay-admin/src/views/payment/merchant/manage/workbench/MerchantManage.vue +++ b/apps/daxpay-admin/src/views/payment/merchant/manage/workbench/MerchantManage.vue @@ -101,6 +101,15 @@ description: $t('payment.merchant.workbench.workbench.cardCredentialConfigDesc'), route: '/payment/merchant/manage/credential', }, + { + key: 'wxDomainVerify', + // 国际化:微信域名验证文件 + title: $t('payment.merchant.workbench.workbench.cardWxDomainVerify'), + icon: 'ant-design:safety-certificate-outlined', + // 国际化:上传与管理微信公众号 / 小程序业务域名校验文件 + description: $t('payment.merchant.workbench.workbench.cardWxDomainVerifyDesc'), + route: '/payment/merchant/manage/wx-verify', + }, ], }, ]); diff --git a/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyEdit.vue b/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyEdit.vue new file mode 100644 index 000000000..1c2f97db0 --- /dev/null +++ b/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyEdit.vue @@ -0,0 +1,166 @@ + + + diff --git a/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyList.vue b/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyList.vue new file mode 100644 index 000000000..59bb85230 --- /dev/null +++ b/apps/daxpay-admin/src/views/payment/merchant/manage/wx-verify/MchWxDomainVerifyList.vue @@ -0,0 +1,301 @@ + + +