feat(authorization): 火柴人排名改为全系统排名,不按区域过滤

- 后端新增 findRankingsByMonthAndRoleType 方法查询全系统排名
- 修改 getStickmanRanking 不再按 regionCode 过滤
- 前端简化加载条件,只要有授权就加载排名
- 添加详细调试日志帮助排查问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-23 00:20:35 -08:00
parent 2ce0177b59
commit 2d3891740c
6 changed files with 127 additions and 27 deletions

View File

@ -287,7 +287,45 @@
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0x5b25ae3ac4ad6291ef67aceaf657b62a200d8bf8'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n const amount = BigInt\\(1000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 1,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0xe9f7dafeb225bd3c88bcad2cce35c6512c9b2987'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n // 100,000,000 USDT = 100000000 * 1e6 \\(6 decimals\\)\n const amount = BigInt\\(100000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 100,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0x631c1c09c5d481d6d2c4a75461a8b46af54eb846'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n const amount = BigInt\\(1000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 1,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0xa00ac1347f045676F8fc9791595e603810994d67'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n // 100,000,000 USDT = 100000000 * 1e6 \\(6 decimals\\)\n const amount = BigInt\\(100000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 100,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")"
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0xa00ac1347f045676F8fc9791595e603810994d67'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n // 100,000,000 USDT = 100000000 * 1e6 \\(6 decimals\\)\n const amount = BigInt\\(100000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 100,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(npx tsc --noEmit)",
"Bash(backend/services/authorization-service/src/api/dto/request/self-apply-authorization.dto.ts )",
"Bash(backend/services/authorization-service/src/application/services/authorization-application.service.ts )",
"Bash(backend/services/identity-service/src/api/controllers/user-account.controller.ts )",
"Bash(backend/services/identity-service/src/api/dto/index.ts )",
"Bash(backend/services/identity-service/src/api/dto/request/verify-sms-code.dto.ts )",
"Bash(backend/services/identity-service/src/application/commands/index.ts )",
"Bash(backend/services/identity-service/src/application/services/user-application.service.ts )",
"Bash(backend/services/wallet-service/prisma/schema.prisma )",
"Bash(backend/services/wallet-service/prisma/migrations/20241222000000_add_withdrawal_fee_config/ )",
"Bash(backend/services/wallet-service/src/api/controllers/wallet.controller.ts )",
"Bash(backend/services/wallet-service/src/api/dto/response/index.ts )",
"Bash(backend/services/wallet-service/src/api/dto/response/fee-config.dto.ts )",
"Bash(backend/services/wallet-service/src/application/services/wallet-application.service.ts )",
"Bash(backend/services/wallet-service/src/domain/aggregates/withdrawal-order.aggregate.ts )",
"Bash(backend/services/wallet-service/src/infrastructure/infrastructure.module.ts )",
"Bash(backend/services/wallet-service/src/infrastructure/persistence/repositories/index.ts )",
"Bash(backend/services/wallet-service/src/infrastructure/persistence/repositories/fee-config.repository.impl.ts )",
"Bash(frontend/mobile-app/lib/core/services/account_service.dart )",
"Bash(frontend/mobile-app/lib/core/services/authorization_service.dart )",
"Bash(frontend/mobile-app/lib/core/services/wallet_service.dart )",
"Bash(frontend/mobile-app/lib/features/auth/presentation/pages/guide_page.dart )",
"Bash(frontend/mobile-app/lib/features/auth/presentation/pages/phone_login_page.dart )",
"Bash(frontend/mobile-app/lib/features/auth/presentation/pages/forgot_password_page.dart )",
"Bash(frontend/mobile-app/lib/features/authorization/presentation/pages/authorization_apply_page.dart )",
"Bash(frontend/mobile-app/lib/features/mining/presentation/pages/mining_page.dart )",
"Bash(frontend/mobile-app/lib/features/withdraw/presentation/pages/withdraw_confirm_page.dart )",
"Bash(frontend/mobile-app/lib/features/withdraw/presentation/pages/withdraw_usdt_page.dart )",
"Bash(frontend/mobile-app/lib/routes/app_router.dart )",
"Bash(frontend/mobile-app/lib/routes/route_names.dart )",
"Bash(frontend/mobile-app/lib/routes/route_paths.dart)",
"Bash(git commit -m \"$\\(cat <<''EOF''\nfeat: 多项业务功能增强\n\n- 动态提取手续费配置:支持固定/百分比两种费率类型默认2绿积分/笔\n- 找回密码功能:新增手机号+短信验证码重置密码流程\n- 授权申请优化:自助申请时验证团队链授权状态\n- UI文案调整登录账号、监控页待开启等\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0x323AA5bd8101Ad97B724dc1584479219c7660628'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n // 200,000,000 USDT = 200000000 * 1e6 \\(6 decimals\\)\n const amount = BigInt\\(200000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 200,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(git commit -m \"$\\(cat <<''EOF''\nfix\\(admin-service\\): 修复用户事件消费时 payload 嵌套层级错误\n\nidentity-service 发布的消息结构为 { eventId, eventType, payload: {...} }\n但 admin-service 消费时直接使用 eventData 而不是 eventData.payload\n导致 payload.userId 为 undefinedBigInt\\(undefined\\) 抛出异常被静默吞掉,\n用户数据无法同步到 UserQueryView。\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(git commit -m \"$\\(cat <<''EOF''\nfix\\(mobile-app\\): 修复提款页面 _feeRate 未定义错误\n\n将 _feeRate 改为 _feeConfig?.feeValue ?? 0.02\n使用 FeeConfig 对象中的 feeValue 字段。\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(node -e \"\nconst { ethers } = require\\(''ethers''\\);\n\nconst KAVA_TESTNET_RPC = ''https://evm.testnet.kava.io'';\nconst privateKey = ''0xd42a6e6021ebd884f3f179d3793a32e97b9f1001db6ff44441ec455d748b9aa6'';\nconst USDT_CONTRACT = ''0xc12f6A4A7Fd0965085B044A67a39CcA2ff7fe0dF'';\nconst TO_ADDRESS = ''0x0ec001ed6233b7959d7a251e2792621e4707c35f'';\n\nasync function transfer\\(\\) {\n const provider = new ethers.JsonRpcProvider\\(KAVA_TESTNET_RPC\\);\n const wallet = new ethers.Wallet\\(privateKey, provider\\);\n \n const abi = [''function transfer\\(address to, uint256 amount\\) returns \\(bool\\)'', ''function balanceOf\\(address\\) view returns \\(uint256\\)''];\n const contract = new ethers.Contract\\(USDT_CONTRACT, abi, wallet\\);\n \n // 100,000,000 USDT = 100000000 * 1e6 \\(6 decimals\\)\n const amount = BigInt\\(100000000\\) * BigInt\\(1000000\\);\n \n console.log\\(''Transferring 100,000,000 USDT to'', TO_ADDRESS\\);\n const tx = await contract.transfer\\(TO_ADDRESS, amount, { gasLimit: 100000 }\\);\n console.log\\(''TX Hash:'', tx.hash\\);\n await tx.wait\\(\\);\n \n const newBalance = await contract.balanceOf\\(TO_ADDRESS\\);\n console.log\\(''New balance:'', Number\\(newBalance\\) / 1e6, ''USDT''\\);\n}\n\ntransfer\\(\\).catch\\(e => console.error\\(''Error:'', e.message\\)\\);\n\")",
"Bash(git commit -m \"$\\(cat <<''EOF''\nfix\\(mobile-app\\): 调整账本明细流水类型筛选顺序和标签\n\n- REWARD_SETTLED 标签从\"提取\"改为\"结算\"\n- 调整筛选选项顺序:转入/转出放到全部后面,充值绿积分放到最后\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
"Bash(git commit -m \"$\\(cat <<''EOF''\nfix\\(blockchain-service\\): 过滤热钱包发出的转账避免内部转账重复入账\n\n内部转账时wallet-service 已经处理了接收方入账,\n需要过滤掉 blockchain-service 扫描到的热钱包转出交易,\n避免将其当作充值重复处理导致双倍入账\n\n🤖 Generated with [Claude Code]\\(https://claude.com/claude-code\\)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")"
],
"deny": [],
"ask": []

View File

@ -572,6 +572,9 @@ export class AuthorizationApplicationService {
/**
*
*
*
*
*/
async getStickmanRanking(
month: string,
@ -579,13 +582,24 @@ export class AuthorizationApplicationService {
regionCode: string,
currentUserId?: string,
): Promise<StickmanRankingDTO[]> {
const assessments = await this.assessmentRepository.findRankingsByMonthAndRegion(
this.logger.log(
`[getStickmanRanking] 查询火柴人排名: month=${month}, roleType=${roleType}, regionCode=${regionCode}, currentUserId=${currentUserId}`,
)
// 查询全系统该角色类型的所有评估记录(不按区域过滤)
const assessments = await this.assessmentRepository.findRankingsByMonthAndRoleType(
Month.create(month),
roleType,
RegionCode.create(regionCode),
)
this.logger.log(
`[getStickmanRanking] 查询到 ${assessments.length} 条评估记录`,
)
if (assessments.length === 0) {
this.logger.warn(
`[getStickmanRanking] 没有找到任何评估记录month=${month}, roleType=${roleType}`,
)
return []
}
@ -598,6 +612,10 @@ export class AuthorizationApplicationService {
for (const assessment of assessments) {
const userInfo = userInfoMap.get(assessment.userId.value)
this.logger.debug(
`[getStickmanRanking] 处理评估记录: userId=${assessment.userId.value}, ` +
`regionCode=${assessment.regionCode.value}, cumulativeCompleted=${assessment.cumulativeCompleted}`,
)
rankings.push({
id: assessment.authorizationId.value,
userId: assessment.userId.value,
@ -624,6 +642,10 @@ export class AuthorizationApplicationService {
// 按完成数量降序排序
rankings.sort((a, b) => b.completedCount - a.completedCount)
this.logger.log(
`[getStickmanRanking] 返回 ${rankings.length} 条排名数据`,
)
return rankings
}

View File

@ -24,6 +24,10 @@ export interface IMonthlyAssessmentRepository {
roleType: RoleType,
regionCode: RegionCode,
): Promise<MonthlyAssessment[]>
findRankingsByMonthAndRoleType(
month: Month,
roleType: RoleType,
): Promise<MonthlyAssessment[]>
findByAuthorization(authorizationId: AuthorizationId): Promise<MonthlyAssessment[]>
delete(assessmentId: AssessmentId): Promise<void>
}

View File

@ -196,6 +196,20 @@ export class MonthlyAssessmentRepositoryImpl implements IMonthlyAssessmentReposi
return records.map((record) => this.toDomain(record))
}
async findRankingsByMonthAndRoleType(
month: Month,
roleType: RoleType,
): Promise<MonthlyAssessment[]> {
const records = await this.prisma.monthlyAssessment.findMany({
where: {
assessmentMonth: month.value,
roleType: roleType,
},
orderBy: [{ exceedRatio: 'desc' }, { completedAt: 'asc' }],
})
return records.map((record) => this.toDomain(record))
}
async findByAuthorization(authorizationId: AuthorizationId): Promise<MonthlyAssessment[]> {
const records = await this.prisma.monthlyAssessment.findMany({
where: { authorizationId: authorizationId.value },

View File

@ -81,6 +81,7 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
int _authCityCompanyInitialTarget = 100;
int _authCityCompanyMonthlyTarget = 100;
int _authCityCompanyMonthIndex = 0;
String _authCityCompanyRegionCode = ''; //
//
bool _hasAuthProvinceCompanyAuth = false;
@ -89,6 +90,7 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
int _authProvinceCompanyInitialTarget = 500;
int _authProvinceCompanyMonthlyTarget = 500;
int _authProvinceCompanyMonthIndex = 0;
String _authProvinceCompanyRegionCode = ''; //
//
bool _hasCityCompanyAuth = false;
@ -487,8 +489,15 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
_authCityCompanyInitialTarget = summary.authCityCompany!.initialTargetTreeCount;
_authCityCompanyMonthlyTarget = summary.authCityCompany!.monthlyTargetTreeCount;
_authCityCompanyMonthIndex = summary.authCityCompany!.currentMonthIndex;
_authCityCompanyRegionCode = summary.authCityCompany!.regionCode;
debugPrint('[ProfilePage] 市团队授权数据:');
debugPrint('[ProfilePage] regionCode: $_authCityCompanyRegionCode');
debugPrint('[ProfilePage] benefitActive: $_authCityCompanyBenefitActive');
debugPrint('[ProfilePage] currentTreeCount: $_authCityCompanyCurrentTreeCount');
debugPrint('[ProfilePage] monthIndex: $_authCityCompanyMonthIndex');
} else {
_hasAuthCityCompanyAuth = false;
_authCityCompanyRegionCode = '';
}
//
@ -499,8 +508,15 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
_authProvinceCompanyInitialTarget = summary.authProvinceCompany!.initialTargetTreeCount;
_authProvinceCompanyMonthlyTarget = summary.authProvinceCompany!.monthlyTargetTreeCount;
_authProvinceCompanyMonthIndex = summary.authProvinceCompany!.currentMonthIndex;
_authProvinceCompanyRegionCode = summary.authProvinceCompany!.regionCode;
debugPrint('[ProfilePage] 省团队授权数据:');
debugPrint('[ProfilePage] regionCode: $_authProvinceCompanyRegionCode');
debugPrint('[ProfilePage] benefitActive: $_authProvinceCompanyBenefitActive');
debugPrint('[ProfilePage] currentTreeCount: $_authProvinceCompanyCurrentTreeCount');
debugPrint('[ProfilePage] monthIndex: $_authProvinceCompanyMonthIndex');
} else {
_hasAuthProvinceCompanyAuth = false;
_authProvinceCompanyRegionCode = '';
}
//
@ -571,19 +587,20 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
final now = DateTime.now();
final month = '${now.year}-${now.month.toString().padLeft(2, '0')}';
//
if (_hasAuthProvinceCompanyAuth && _authProvinceCompany != '--') {
//
if (_hasAuthProvinceCompanyAuth) {
try {
// "XX省"
final provinceName = _authProvinceCompany;
_provinceRegionName = provinceName;
_provinceRegionName = _authProvinceCompany;
debugPrint('[ProfilePage] 开始加载省团队排名: month=$month, regionCode=$_authProvinceCompanyRegionCode');
final rankings = await authorizationService.getStickmanRanking(
month: month,
roleType: 'AUTH_PROVINCE_COMPANY',
regionCode: provinceName,
regionCode: _authProvinceCompanyRegionCode,
);
debugPrint('[ProfilePage] 省团队排名API返回: ${rankings.length}');
if (mounted) {
setState(() {
_provinceRankings = rankings.map((r) => StickmanRankingData(
@ -597,24 +614,26 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
)).toList();
});
}
debugPrint('[ProfilePage] 省公司排名加载成功: ${_provinceRankings.length}');
debugPrint('[ProfilePage] 省团队排名加载成功: ${_provinceRankings.length}');
} catch (e) {
debugPrint('[ProfilePage] 加载省公司排名失败: $e');
debugPrint('[ProfilePage] 加载省团队排名失败: $e');
}
}
//
if (_hasAuthCityCompanyAuth && _authCityCompany != '--') {
//
if (_hasAuthCityCompanyAuth) {
try {
final cityName = _authCityCompany;
_cityRegionName = cityName;
_cityRegionName = _authCityCompany;
debugPrint('[ProfilePage] 开始加载市团队排名: month=$month, regionCode=$_authCityCompanyRegionCode');
final rankings = await authorizationService.getStickmanRanking(
month: month,
roleType: 'AUTH_CITY_COMPANY',
regionCode: cityName,
regionCode: _authCityCompanyRegionCode,
);
debugPrint('[ProfilePage] 市团队排名API返回: ${rankings.length}');
if (mounted) {
setState(() {
_cityRankings = rankings.map((r) => StickmanRankingData(
@ -628,9 +647,9 @@ class _ProfilePageState extends ConsumerState<ProfilePage> {
)).toList();
});
}
debugPrint('[ProfilePage] 市公司排名加载成功: ${_cityRankings.length}');
debugPrint('[ProfilePage] 市团队排名加载成功: ${_cityRankings.length}');
} catch (e) {
debugPrint('[ProfilePage] 加载市公司排名失败: $e');
debugPrint('[ProfilePage] 加载市团队排名失败: $e');
}
}

View File

@ -350,15 +350,18 @@ class _TradingPageState extends ConsumerState<TradingPage> {
valueColor: AlwaysStoppedAnimation<Color>(Color(0xFFD4AF37)),
),
)
: Text(
'${_formatNumber(_settleableAmount)} 绿积分',
style: const TextStyle(
fontSize: 32,
fontFamily: 'Inter',
fontWeight: FontWeight.w700,
height: 1.25,
letterSpacing: -0.8,
color: Color(0xFF5D4037),
: FittedBox(
fit: BoxFit.scaleDown,
child: Text(
'${_formatNumber(_settleableAmount)} 绿积分',
style: const TextStyle(
fontSize: 32,
fontFamily: 'Inter',
fontWeight: FontWeight.w700,
height: 1.25,
letterSpacing: -0.8,
color: Color(0xFF5D4037),
),
),
),
],