diff --git a/package.json b/package.json index 6cfc1e6..8fef91b 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@types/crypto-js": "^4.2.2", "@types/file-saver": "^2.0.7", "@types/node": "^24.10.13", + "@types/qrcode": "^1.5.6", "@types/xlsx": "^0.0.36", "@vitejs/plugin-basic-ssl": "^2.3.0", "@vitejs/plugin-vue": "^6.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 71ab7f0..5d7b10d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,6 +84,9 @@ importers: '@types/node': specifier: ^24.10.13 version: 24.10.15 + '@types/qrcode': + specifier: ^1.5.6 + version: 1.5.6 '@types/xlsx': specifier: ^0.0.36 version: 0.0.36 @@ -967,6 +970,9 @@ packages: '@types/offscreencanvas@2019.3.0': resolution: {integrity: sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==} + '@types/qrcode@1.5.6': + resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} + '@types/readable-stream@4.0.23': resolution: {integrity: sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==} @@ -3403,6 +3409,10 @@ snapshots: '@types/offscreencanvas@2019.3.0': {} + '@types/qrcode@1.5.6': + dependencies: + '@types/node': 24.10.15 + '@types/readable-stream@4.0.23': dependencies: '@types/node': 24.10.15 diff --git a/src/api/index.ts b/src/api/index.ts index 17e20d5..eb01aa9 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,10 +1,15 @@ import axios from 'axios' -import type { AxiosResponse, AxiosError, InternalAxiosRequestConfig } from 'axios' +import type { AxiosResponse, AxiosError, AxiosRequestConfig } from 'axios' import type { ApiResponse } from '@/api/types' import { ElNotification } from 'element-plus' import { getStorage, setStorage, removeStorage } from '@/utils/storage' import router from '../router' +// 扩展 AxiosRequestConfig,添加 showMessage 属性 +export interface RequestConfig extends AxiosRequestConfig { + showMessage?: boolean +} + // 记录当前请求数量,用于控制顶部进度条 let requestCount = 0 @@ -44,14 +49,14 @@ const service = axios.create({ }) // 3. 请求拦截器:直接使用 axios 内置类型 -const requestInterceptor = (config: InternalAxiosRequestConfig) => { +const requestInterceptor = (config: RequestConfig) => { console.log('请求配置', config) // 显示顶部进度条 showLoading() // 添加token到请求头 const token = getStorage('token') - if (token) { + if (token && config.headers) { config.headers.token = token } return config @@ -75,7 +80,7 @@ service.interceptors.request.use(requestInterceptor, requestErrorInterceptor) const responseInterceptor = (response: AxiosResponse>) => { //关闭loading(无论成功失败都要关) hideLoading() - const config = response.config + const config = response.config as RequestConfig // axios 会将响应头规范化为小写,同时尝试大小写版本以兼容不同服务器 const newToken = response.headers['new-token'] || response.headers['New-Token'] if (newToken) { @@ -176,7 +181,7 @@ const responseErrorInterceptor = (error: AxiosError) => { errMsg = error.message || '服务器错误' } - if (error.config?.showMessage !== false) { + if ((error.config as RequestConfig)?.showMessage !== false) { ElNotification({ message: errMsg, type: 'error', @@ -191,13 +196,13 @@ service.interceptors.response.use(responseInterceptor, responseErrorInterceptor) // 5. 封装通用请求方法 export const request = { - get(url: string, params?: unknown, config?: InternalAxiosRequestConfig): Promise { - return service.get>(url, { params, ...config,showMessage:false }).then((res) => { + get(url: string, params?: unknown, config?: RequestConfig): Promise { + return service.get>(url, { params, ...config }).then((res) => { return res as T; }); }, - post(url: string, data?: unknown, config?: InternalAxiosRequestConfig): Promise { - return service.post>(url, data, { ...config, showMessage: true,}).then((res) => { + post(url: string, data?: unknown, config?: RequestConfig): Promise { + return service.post>(url, data, config).then((res) => { return res as T; }); }, diff --git a/src/api/modules/capital/rechangeChanl.ts b/src/api/modules/capital/rechangeChanl.ts index 196842b..596c100 100644 --- a/src/api/modules/capital/rechangeChanl.ts +++ b/src/api/modules/capital/rechangeChanl.ts @@ -26,3 +26,24 @@ export const getRechargeChannelList = () => { export const rechargeApi = (params: any) => { return request.post('/user/recharge', { ...params }) } + +// 获取支付申请引用(扫码支付前必须调用) +export const getApplyCustomerRef = () => { + return request.post('/delphiPay/getApplyCustomerRef', undefined, { showMessage: false }) +} + +// 获取KYC详情 +export const getKycDetail = () => { + return request.post('/delphiPay/getKycDetail', undefined, { showMessage: false }) +} + +// 创建买入订单 +export const createBuyEx = (data: { + channel_id: number + amount: string + payment_method: string + bh?: string + pass?: string +}) => { + return request.post('/delphiPay/createBuyEx', data, { showMessage: false }) +} diff --git a/src/assets/images/wx.png b/src/assets/images/wx.png new file mode 100644 index 0000000..5352a4e Binary files /dev/null and b/src/assets/images/wx.png differ diff --git a/src/assets/images/ylzf.png b/src/assets/images/ylzf.png new file mode 100644 index 0000000..4f2f9af Binary files /dev/null and b/src/assets/images/ylzf.png differ diff --git a/src/assets/images/zfb.png b/src/assets/images/zfb.png new file mode 100644 index 0000000..a9266bf Binary files /dev/null and b/src/assets/images/zfb.png differ diff --git a/src/views/capital/rechange/index.vue b/src/views/capital/rechange/index.vue index 1b4e5a2..c969101 100644 --- a/src/views/capital/rechange/index.vue +++ b/src/views/capital/rechange/index.vue @@ -4,7 +4,8 @@
存款
- +