feat(registration): 优化经销商注册流程并增加地址定位功能

- 修改导航栏标题从“邀请注册”为“注册成为会员”
- 修复重复提交问题并移除不必要的submitting状态
- 增加昵称和头像的必填验证提示
- 添加用户角色缺失时的默认角色写入机制
- 集成地图选点功能,支持经纬度获取和地址解析
- 实现微信地址导入功能,自动填充基本信息
- 增加定位权限检查和错误处理机制
- 添加.gitignore规则忽略备份文件夹src__bak
- 移除已废弃的银行卡和客户管理页面代码
- 优化表单验证规则和错误提示信息
- 实现经销商注册成功后自动跳转到“我的”页面
- 添加用户信息缓存刷新机制确保角色信息同步
```
This commit is contained in:
2026-03-01 12:35:41 +08:00
parent 945351be91
commit eee4644d06
296 changed files with 28845 additions and 6664 deletions

166
src/utils/test-invite.ts Normal file
View File

@@ -0,0 +1,166 @@
/**
* 邀请参数解析测试工具
*/
import { parseInviteParams } from './invite'
/**
* 测试不同格式的邀请参数解析
*/
export function testInviteParamsParsing() {
console.log('=== 开始测试邀请参数解析 ===')
// 测试用例1: uid_格式
const testCase1 = {
scene: 'uid_33103',
path: 'pages/index/index'
}
console.log('测试用例1 - uid格式:')
console.log('输入:', testCase1)
const result1 = parseInviteParams(testCase1)
console.log('输出:', result1)
console.log('预期: { inviter: "33103", source: "qrcode", t: "..." }')
console.log('结果:', result1?.inviter === '33103' && result1?.source === 'qrcode' ? '✅ 通过' : '❌ 失败')
console.log('')
// 测试用例2: 传统格式
const testCase2 = {
scene: 'inviter=12345&source=share&t=1640995200000',
path: 'pages/index/index'
}
console.log('测试用例2 - 传统格式:')
console.log('输入:', testCase2)
const result2 = parseInviteParams(testCase2)
console.log('输出:', result2)
console.log('预期: { inviter: "12345", source: "share", t: "1640995200000" }')
console.log('结果:', result2?.inviter === '12345' && result2?.source === 'share' ? '✅ 通过' : '❌ 失败')
console.log('')
// 测试用例3: 数字类型的scene
const testCase3 = {
scene: 1047, // 数字类型
path: 'pages/index/index'
}
console.log('测试用例3 - 数字类型scene:')
console.log('输入:', testCase3)
const result3 = parseInviteParams(testCase3)
console.log('输出:', result3)
console.log('预期: null (因为不是uid_格式)')
console.log('结果:', result3 === null ? '✅ 通过' : '❌ 失败')
console.log('')
// 测试用例4: 空参数
const testCase4 = {}
console.log('测试用例4 - 空参数:')
console.log('输入:', testCase4)
const result4 = parseInviteParams(testCase4)
console.log('输出:', result4)
console.log('预期: null')
console.log('结果:', result4 === null ? '✅ 通过' : '❌ 失败')
console.log('')
// 测试用例5: 无效的uid格式
const testCase5 = {
scene: 'uid_abc',
path: 'pages/index/index'
}
console.log('测试用例5 - 无效uid格式:')
console.log('输入:', testCase5)
const result5 = parseInviteParams(testCase5)
console.log('输出:', result5)
console.log('预期: null (因为abc不是数字)')
console.log('结果:', result5 === null ? '✅ 通过' : '❌ 失败')
console.log('')
// 测试用例6: referrer参数
const testCase6 = {
referrer: '99999',
path: 'pages/index/index'
}
console.log('测试用例6 - referrer参数:')
console.log('输入:', testCase6)
const result6 = parseInviteParams(testCase6)
console.log('输出:', result6)
console.log('预期: { inviter: "99999", source: "link" }')
console.log('结果:', result6?.inviter === '99999' && result6?.source === 'link' ? '✅ 通过' : '❌ 失败')
console.log('')
console.log('=== 邀请参数解析测试完成 ===')
}
/**
* 模拟小程序启动场景测试
*/
export function simulateMiniProgramLaunch() {
console.log('=== 模拟小程序启动场景 ===')
// 模拟通过小程序码启动
const qrcodeOptions = {
path: 'pages/index/index',
scene: 'uid_33103',
shareTicket: undefined,
referrerInfo: {}
}
console.log('模拟小程序码启动:')
console.log('启动参数:', qrcodeOptions)
const qrcodeResult = parseInviteParams(qrcodeOptions)
console.log('解析结果:', qrcodeResult)
if (qrcodeResult && qrcodeResult.inviter === '33103') {
console.log('✅ 小程序码邀请解析成功')
return qrcodeResult
} else {
console.log('❌ 小程序码邀请解析失败')
return null
}
}
/**
* 验证邀请参数格式
*/
export function validateInviteParams(params: any) {
console.log('=== 验证邀请参数格式 ===')
console.log('参数:', params)
if (!params) {
console.log('❌ 参数为空')
return false
}
if (!params.inviter) {
console.log('❌ 缺少inviter字段')
return false
}
if (isNaN(parseInt(params.inviter))) {
console.log('❌ inviter不是有效数字')
return false
}
if (!params.source) {
console.log('❌ 缺少source字段')
return false
}
console.log('✅ 邀请参数格式验证通过')
return true
}
/**
* 运行所有测试
*/
export function runAllTests() {
console.log('🚀 开始运行所有邀请参数测试')
testInviteParamsParsing()
const simulationResult = simulateMiniProgramLaunch()
if (simulationResult) {
validateInviteParams(simulationResult)
}
console.log('🎉 所有测试完成')
}