ERPTurbo_Admin/packages/app-sso-server/src/components/Captcha/mock.ts
shenyifei 1429319b01 refactor(components): 调整组件导入路径并新增验证码组件
- 将多个组件中的 @chageable/components 导入改为从 @/components 导入
- 在 BoxBrandList.tsx、CostList.tsx、ProductDataList.tsx 等文件中更新 ProFormBizSelect 相关组件导入
- 在 CaptchaModal/index.tsx 中将 Captcha 组件导入从 @chageable/components 改为 @/components
- 在 ChannelList.tsx、CompanyList.tsx、EmployeeList.tsx 等文件中更新 ProFormUploadMaterial 导入
- 在 MaterialList.tsx 中更新 ProFormBizTreeSelect 和 ProFormUploadOss 导入
- 在 MenuList.tsx、OrderCostList.tsx 中更新 ProFormBizSelect 相关组件导入
- 在 DealerModal.tsx、MaterialModal.tsx、OrderModal.tsx 等文件中更新 SelectModal 导入
- 在 app.tsx 中将 LeftMenu 导入从 @chageable/components 改为 @/components
- 新增 UploadMaterial 组件并添加到 components/index.ts 导出
- 在 Captcha 组件中添加滑动验证码功能,包含样式和交互逻辑
- 在 companyPaymentAccount 工具函数中添加 branchName 字段支持
2026-01-07 00:12:26 +08:00

77 lines
2.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import mockCaptchaData from './mockDB';
import { CaptchaRes, CheckCaptchaProps, CheckCaptchaRes } from './typing';
import { aesDecrypt } from './utils';
/**
* 异步获取验证码图片
*
* 本函数通过发送HTTP请求获取验证码图片数据并返回解析后的数据
* 主要用于在用户登录或注册时获取验证码图片,以提高系统安全性
*
* @returns {Promise<CaptchaRes>} 返回一个Promise解析后包含验证码图片数据的CaptchaRes对象
*/
export const getPictureMock = async (): Promise<CaptchaRes> => {
const delay = Math.random() * 800;
return new Promise<CaptchaRes>((resolve) => {
setTimeout(() => {
// 模拟异步请求返回的数据
const keys = Object.keys(mockCaptchaData);
const key = keys[Math.floor(Math.random() * keys.length)];
const obj = mockCaptchaData[key];
resolve({
token: obj.token,
secretKey: obj.secretKey,
originalImageBase64: obj.originalImageBase64,
jigsawImageBase64: obj.jigsawImageBase64,
});
}, delay);
});
};
/**
* 验证验证码的正确性
*
* @param data 包含验证码相关信息的对象
* @param data.token 验证码的令牌
* @param data.captchaType 验证码的类型
* @param data.pointJson 用户点击的位置信息,加密后的内容
* @param data.clientUid 客户端的唯一标识
* @param data.ts 时间戳
* @returns 返回一个Promise包含验证码验证的结果
*/
export const checkCaptchaMock = async (
data: CheckCaptchaProps,
): Promise<CheckCaptchaRes> => {
// 生成随机延迟时间,模拟网络延迟
const delay = Math.random() * 1500;
// 定义误差范围用于验证点击位置不要过小或者过大推荐范围在1到3之间
const buffer = 2;
return new Promise<CheckCaptchaRes>((resolve, reject) => {
// 使用setTimeout模拟异步验证过程
setTimeout(() => {
if (data.token in mockCaptchaData) {
const mockCaptchaRes = mockCaptchaData[data.token];
const x = mockCaptchaRes.x;
// 解密用户点击的位置信息
const decryptRes = aesDecrypt(data.pointJson, mockCaptchaRes.secretKey);
const point = JSON.parse(decryptRes);
console.log({ captchaX: x, buffer, sliderX: point.x });
// 验证点击位置是否在有效范围内
if (!point.x || point.x > x + buffer || point.x < x - buffer) {
reject('point error');
return;
}
// 模拟异步请求返回的数据
resolve({ token: mockCaptchaRes.token, success: true, msg: 'success' });
return;
}
reject('token error');
}, delay);
});
};