From f8179706b3bde5b48915cb326d748264a66e3d93 Mon Sep 17 00:00:00 2001 From: chen Date: Thu, 17 Sep 2026 15:40:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E8=87=AA=E5=AE=9A=E4=B9=89=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E5=85=A8=E9=93=BE=E8=B7=AF=E9=85=8D=E7=BD=AE=E4=B8=8E=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/shopro/console/PartnerAccept.php | 2 +- addons/shopro/console/PartnerInstall.php | 2 +- addons/shopro/console/PartnerSettle.php | 2 +- addons/shopro/listener/Partner.php | 2 +- .../service/partner/IdentityService.php | 31 ++- .../shopro/service/partner/PartnerConfig.php | 45 +++-- .../admin/controller/shopro/Config.php | 12 ++ .../admin/controller/shopro/Dashboard.php | 43 +++-- .../controller/shopro/commission/Agent.php | 8 +- .../controller/shopro/partner/Reward.php | 4 +- .../admin/model/shopro/commission/Agent.php | 18 ++ .../view/shopro/commission/agent/detail.html | 32 ++-- .../view/shopro/commission/agent/index.html | 7 +- .../admin/view/shopro/config/index.html | 17 ++ .../admin/view/shopro/dashboard/index.html | 16 +- .../view/shopro/partner/reward/index.html | 2 +- .../js/backend/shopro/commission/agent.js | 54 +++++- public/assets/js/backend/shopro/dashboard.js | 2 +- tests/partner/DashboardWealthTest.php | 8 +- tests/verify_custom_role_names_spec.js | 177 ++++++++++++++++++ .../commission/components/commission-info.vue | 29 ++- uniapp/pages/commission/rewards.vue | 25 ++- uniapp/pages/commission/team.vue | 49 +++-- .../components/s-user-card/s-user-card.vue | 31 ++- 24 files changed, 508 insertions(+), 110 deletions(-) create mode 100644 tests/verify_custom_role_names_spec.js diff --git a/addons/shopro/console/PartnerAccept.php b/addons/shopro/console/PartnerAccept.php index 67ff122..55fcd70 100644 --- a/addons/shopro/console/PartnerAccept.php +++ b/addons/shopro/console/PartnerAccept.php @@ -20,7 +20,7 @@ class PartnerAccept extends Command protected function configure() { $this->setName('shopro:partner:accept') - ->setDescription('跑通合伙股东验收剧本:V5极差/平级、馆县拆分、30日暂停、退款、日结'); + ->setDescription('跑通收益中心全角色验收剧本:V5极差/平级、馆县拆分、30日暂停、退款、日结'); } protected function execute(Input $input, Output $output) diff --git a/addons/shopro/console/PartnerInstall.php b/addons/shopro/console/PartnerInstall.php index 07f7062..080e7f5 100644 --- a/addons/shopro/console/PartnerInstall.php +++ b/addons/shopro/console/PartnerInstall.php @@ -13,7 +13,7 @@ class PartnerInstall extends Command protected function configure() { $this->setName('shopro:partner:install') - ->setDescription('导入合伙股东表结构/配置,并升级后台菜单'); + ->setDescription('导入收益中心表结构/配置,并升级后台菜单'); } protected function execute(Input $input, Output $output) diff --git a/addons/shopro/console/PartnerSettle.php b/addons/shopro/console/PartnerSettle.php index 411287e..505951a 100644 --- a/addons/shopro/console/PartnerSettle.php +++ b/addons/shopro/console/PartnerSettle.php @@ -15,7 +15,7 @@ class PartnerSettle extends Command $this->setName('shopro:partner:settle') ->addOption('date', 'd', Option::VALUE_OPTIONAL, '结算日期 Y-m-d,默认昨天') ->addOption('rerun', 'r', Option::VALUE_NONE, '删除当天日结后重算') - ->setDescription('合伙股东日结(马豆/馆县均分/兑换券释放)'); + ->setDescription('收益中心日结(马豆/馆县均分/兑换券释放)'); } protected function execute(Input $input, Output $output) diff --git a/addons/shopro/listener/Partner.php b/addons/shopro/listener/Partner.php index d449146..cfce3e1 100644 --- a/addons/shopro/listener/Partner.php +++ b/addons/shopro/listener/Partner.php @@ -72,7 +72,7 @@ class Partner $service->refundPartial($order, $item); } } catch (\Exception $e) { - format_log_error($e, 'Partner.orderItemRefundAfter', '合伙股东退款处理异常: ' . $e->getMessage()); + format_log_error($e, 'Partner.orderItemRefundAfter', '收益中心退款处理异常: ' . $e->getMessage()); } } diff --git a/addons/shopro/service/partner/IdentityService.php b/addons/shopro/service/partner/IdentityService.php index 850bf54..4deabd9 100644 --- a/addons/shopro/service/partner/IdentityService.php +++ b/addons/shopro/service/partner/IdentityService.php @@ -15,7 +15,10 @@ class IdentityService 'identities' => [], 'identity_text' => '', 'is_partner' => false, + 'is_advanced' => false, 'maker_level_name' => '', + 'role_names' => PartnerConfig::roleNames(), + 'custom_role_names' => PartnerConfig::roleNames(), ]; if (!$agent) { return $empty; @@ -25,6 +28,13 @@ class IdentityService $isCounty = intval(is_array($agent) ? ($agent['is_county'] ?? 0) : ($agent->is_county ?? 0)); $isPartner = intval(is_array($agent) ? ($agent['is_partner'] ?? 0) : ($agent->is_partner ?? 0)); + $roleNames = PartnerConfig::roleNames(); + $tasterName = $roleNames['taster']; + $makerBaseName = $roleNames['maker']; + $venueName = $roleNames['venue']; + $countyName = $roleNames['county']; + $partnerName = $roleNames['partner']; + $identities = []; $parts = []; $makerLevelName = ''; @@ -33,25 +43,25 @@ class IdentityService $identities[] = 'taster'; } elseif ($level >= 2) { $identities[] = 'maker'; - $makerLevelName = '创客V' . ($level - 1); + $makerLevelName = $makerBaseName . 'V' . ($level - 1); $parts[] = $makerLevelName; } if ($isVenue) { $identities[] = 'venue'; - $parts[] = '酒道馆'; + $parts[] = $venueName; } if ($isCounty) { $identities[] = 'county'; - $parts[] = '区县代理'; + $parts[] = $countyName; } if ($isPartner) { $identities[] = 'partner'; - $parts[] = '合伙股东'; + $parts[] = $partnerName; } - // 若无进阶角色身份且等级为1,则身份为基础品酒师 + // 若无进阶角色身份且等级为1,则身份为基础品酒师/自定义基础名称 if (empty($parts) && $level == 1) { - $parts[] = '品酒师'; + $parts[] = $tasterName; } $isAdvanced = ($level >= 2) || ($isVenue == 1) || ($isCounty == 1) || ($isPartner == 1); @@ -62,6 +72,8 @@ class IdentityService 'is_partner' => (bool) $isPartner, 'is_advanced' => $isAdvanced, 'maker_level_name' => $makerLevelName, + 'role_names' => $roleNames, + 'custom_role_names' => $roleNames, ]; } @@ -121,11 +133,15 @@ class IdentityService { if (!$agent) { $baseRate = PartnerConfig::get('partner_madow_base_rate', '0.00000075'); + $roleNames = PartnerConfig::roleNames(); return [ 'identity_text' => '', 'identities' => [], 'is_partner' => false, + 'is_advanced' => false, 'maker_level_name' => '', + 'role_names' => $roleNames, + 'custom_role_names' => $roleNames, 'madow' => '0', 'madow_rate' => self::formatRate($baseRate), 'madow_value' => '0.00', @@ -136,12 +152,15 @@ class IdentityService ]; } $full = self::attachAgent($agent, $rate); + $roleNames = $full['role_names'] ?? PartnerConfig::roleNames(); return [ 'identity_text' => $full['identity_text'], 'identities' => $full['identities'], 'is_partner' => $full['is_partner'], 'is_advanced' => $full['is_advanced'] ?? false, 'maker_level_name' => $full['maker_level_name'], + 'role_names' => $roleNames, + 'custom_role_names' => $roleNames, 'madow' => $full['madow'], 'madow_rate' => $full['madow_rate'], 'madow_value' => $full['madow_value'], diff --git a/addons/shopro/service/partner/PartnerConfig.php b/addons/shopro/service/partner/PartnerConfig.php index 8e2255c..411333c 100644 --- a/addons/shopro/service/partner/PartnerConfig.php +++ b/addons/shopro/service/partner/PartnerConfig.php @@ -68,6 +68,17 @@ class PartnerConfig return $map; } + public static function roleNames() + { + return [ + 'taster' => trim((string) self::get('partner_role_name_taster', '品酒师')) ?: '品酒师', + 'maker' => trim((string) self::get('partner_role_name_maker', '创客')) ?: '创客', + 'venue' => trim((string) self::get('partner_role_name_venue', '酒道馆')) ?: '酒道馆', + 'county' => trim((string) self::get('partner_role_name_county', '区县代理')) ?: '区县代理', + 'partner' => trim((string) self::get('partner_role_name_partner', '合伙股东')) ?: '合伙股东', + ]; + } + public static function rewardTypeText($type) { $map = self::rewardTypeMap(); @@ -76,17 +87,22 @@ class PartnerConfig public static function rewardTypeMap() { + $roles = self::roleNames(); + $maker = $roles['maker']; + $venue = $roles['venue']; + $county = $roles['county']; + return [ 'push3' => '推荐开拓奖', - 'maker_diff' => '创客进阶奖', - 'maker_peer' => '创客协同奖', - 'maker_overtaken' => '创客卓越奖', - 'team_venue' => '酒道馆运营奖', - 'team_county' => '区县统筹奖', - 'venue_peer' => '酒道馆协同奖', - 'county_peer' => '区县协同奖', - 'venue_share' => '酒道馆加权奖励', - 'county_share' => '区县加权奖励', + 'maker_diff' => $maker . '进阶奖', + 'maker_peer' => $maker . '协同奖', + 'maker_overtaken' => $maker . '卓越奖', + 'team_venue' => $venue . '运营奖', + 'team_county' => $county . '统筹奖', + 'venue_peer' => $venue . '协同奖', + 'county_peer' => $county . '协同奖', + 'venue_share' => $venue . '加权奖励', + 'county_share' => $county . '加权奖励', 'madow_share' => '每日贡献马豆', 'voucher_grant' => '消费补贴发放', 'voucher_release' => '消费补贴到账', @@ -97,13 +113,18 @@ class PartnerConfig public static function skipReasonText($code, $forUser = false) { + $roles = self::roleNames(); + $maker = $roles['maker']; + $venue = $roles['venue']; + $county = $roles['county']; + $inner = [ 'no_parent' => '无推荐上级', 'self_buy' => '本人自购', 'inactive_30d' => '受益人 30 日无自购', - 'not_maker' => '不是创客身份', - 'not_venue' => '不是酒道馆身份', - 'not_county' => '不是区县代理身份', + 'not_maker' => '不是' . $maker . '身份', + 'not_venue' => '不是' . $venue . '身份', + 'not_county' => '不是' . $county . '身份', 'cap_not_higher' => '等级未超过基数水位', 'already_settled' => '幂等跳过', 'partner_goods_off' => '商品未参与', diff --git a/application/admin/controller/shopro/Config.php b/application/admin/controller/shopro/Config.php index 21114e6..6241469 100644 --- a/application/admin/controller/shopro/Config.php +++ b/application/admin/controller/shopro/Config.php @@ -199,6 +199,8 @@ class Config extends Common 'partner_maker_overtaken_rate', 'partner_team_total', 'partner_venue_split', 'partner_county_full', 'partner_venue_share_per_order', 'partner_county_share_per_order', 'partner_venue_peer_rate', 'partner_county_peer_rate', + 'partner_role_name_taster', 'partner_role_name_maker', 'partner_role_name_venue', + 'partner_role_name_county', 'partner_role_name_partner', ]; if ('GET' === $this->request->method()) { $all = ShoproConfig::getConfigs('shop.commission', false) ?: []; @@ -228,6 +230,11 @@ class Config extends Common 'partner_county_share_per_order' => 50, 'partner_venue_peer_rate' => 0.10, 'partner_county_peer_rate' => 0.10, + 'partner_role_name_taster' => '品酒师', + 'partner_role_name_maker' => '创客', + 'partner_role_name_venue' => '酒道馆', + 'partner_role_name_county' => '区县代理', + 'partner_role_name_partner' => '合伙股东', ]; foreach ($defaults as $key => $value) { if ($configs[$key] === null || $configs[$key] === '') { @@ -243,6 +250,11 @@ class Config extends Common $save[$key] = $params[$key]; } } + foreach (['partner_role_name_taster', 'partner_role_name_maker', 'partner_role_name_venue', 'partner_role_name_county', 'partner_role_name_partner'] as $roleKey) { + if (isset($save[$roleKey])) { + $save[$roleKey] = trim((string) $save[$roleKey]); + } + } if (isset($save['partner_active_days']) && intval($save['partner_active_days']) < 1) { $this->error('领取窗口天数须 ≥ 1'); } diff --git a/application/admin/controller/shopro/Dashboard.php b/application/admin/controller/shopro/Dashboard.php index 27868c8..97bb983 100644 --- a/application/admin/controller/shopro/Dashboard.php +++ b/application/admin/controller/shopro/Dashboard.php @@ -169,7 +169,7 @@ class Dashboard extends Common 'available_voucher' => number_format($availableVoucher, 2, '.', ''), ]; - // 7. 合伙股东网络与全角色身份矩阵 (收益按角色专属类型归集,杜绝重复统计) + // 7. 收益中心网络与全角色身份矩阵 (收益按角色专属类型归集,杜绝重复统计) $totalRegisteredUsers = (int) User::count(); $totalAgents = (int) Agent::count(); $normalUserCount = max(0, $totalRegisteredUsers - $totalAgents); @@ -194,7 +194,7 @@ class Dashboard extends Common $activeUserIds = $activeService->activeUserIds($activeWindowStart, $now); $activeUserMap = array_flip($activeUserIds); - // 全量合伙股东基础信息 + // 全量成员档案基础信息 $allAgents = Agent::field('user_id, level, is_venue, is_county, madow, last_self_order_time')->select(); // 收益明细按 (user_id + reward_type) 聚合,精确归集各角色产出收益 @@ -284,18 +284,25 @@ class Dashboard extends Common ]; }; + $roleNames = PartnerConfig::roleNames(); + $tasterTitle = $roleNames['taster']; + $makerTitle = $roleNames['maker']; + $venueTitle = $roleNames['venue']; + $countyTitle = $roleNames['county']; + $partnerTitle = $roleNames['partner']; + // 统计各角色身份详细指标 $roleList = [ - $calcRoleStats(function($a) { return (int)$a->level == 1; }, 'taster', '品酒师', '基础身份', '人', '品', '#806af6', 1, '', $roleRewardTypeFilter['taster']), - $calcRoleStats(function($a) { return (int)$a->level == 2; }, 'maker_v1', '创客V1', '创客梯队', '人', 'V1', '#13c2c2', 2, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level == 3; }, 'maker_v2', '创客V2', '创客梯队', '人', 'V2', '#13c2c2', 3, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level == 4; }, 'maker_v3', '创客V3', '创客梯队', '人', 'V3', '#13c2c2', 4, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level == 5; }, 'maker_v4', '创客V4', '创客梯队', '人', 'V4', '#13c2c2', 5, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level == 6; }, 'maker_v5', '创客V5', '创客梯队', '人', 'V5', '#13c2c2', 6, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level == 7; }, 'maker_v6', '创客V6', '创客梯队', '人', 'V6', '#13c2c2', 7, '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->level >= 2; }, 'maker_total', '创客队伍小计', '创客梯队', '人', '创', '#13c2c2', 'maker', '', $roleRewardTypeFilter['maker']), - $calcRoleStats(function($a) { return (int)$a->is_venue == 1; }, 'venue', '实体酒道馆', '渠道授权', '家', '馆', '#fa8c16', '', 'venue', $roleRewardTypeFilter['venue']), - $calcRoleStats(function($a) { return (int)$a->is_county == 1; }, 'county', '区县代理', '渠道授权', '个', '县', '#722ed1', '', 'county', $roleRewardTypeFilter['county']), + $calcRoleStats(function($a) { return (int)$a->level == 1; }, 'taster', $tasterTitle, '基础身份', '人', mb_substr($tasterTitle, 0, 1), '#806af6', 1, '', $roleRewardTypeFilter['taster']), + $calcRoleStats(function($a) { return (int)$a->level == 2; }, 'maker_v1', $makerTitle . 'V1', $makerTitle . '梯队', '人', 'V1', '#13c2c2', 2, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level == 3; }, 'maker_v2', $makerTitle . 'V2', $makerTitle . '梯队', '人', 'V2', '#13c2c2', 3, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level == 4; }, 'maker_v3', $makerTitle . 'V3', $makerTitle . '梯队', '人', 'V3', '#13c2c2', 4, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level == 5; }, 'maker_v4', $makerTitle . 'V4', $makerTitle . '梯队', '人', 'V4', '#13c2c2', 5, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level == 6; }, 'maker_v5', $makerTitle . 'V5', $makerTitle . '梯队', '人', 'V5', '#13c2c2', 6, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level == 7; }, 'maker_v6', $makerTitle . 'V6', $makerTitle . '梯队', '人', 'V6', '#13c2c2', 7, '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->level >= 2; }, 'maker_total', $makerTitle . '队伍小计', $makerTitle . '梯队', '人', mb_substr($makerTitle, 0, 1), '#13c2c2', 'maker', '', $roleRewardTypeFilter['maker']), + $calcRoleStats(function($a) { return (int)$a->is_venue == 1; }, 'venue', $venueTitle, '渠道授权', '家', mb_substr($venueTitle, 0, 1), '#fa8c16', '', 'venue', $roleRewardTypeFilter['venue']), + $calcRoleStats(function($a) { return (int)$a->is_county == 1; }, 'county', $countyTitle, '渠道授权', '个', mb_substr($countyTitle, 0, 1), '#722ed1', '', 'county', $roleRewardTypeFilter['county']), ]; // 增加普通注册会员行 (明确标明无需自购考核) @@ -365,6 +372,8 @@ class Dashboard extends Common 'active_rate' => $activeRate, 'role_list' => $roleList, 'role_stats' => $roleStats, + 'role_names' => $roleNames, + 'custom_role_names' => $roleNames, ]; // 8. CFO 视角:平台资金池结余、刚性法币流动负债与提现风控 @@ -408,7 +417,7 @@ class Dashboard extends Common 'pending_voucher_quota' => number_format($pendingVoucher, 2, '.', ''), ]; - // 9. COO 视角:转化复购漏斗、合伙股东自购续期雷达、供应链库存与实时待办看板 + // 9. COO 视角:转化复购漏斗、进阶成员自购续期雷达、供应链库存与实时待办看板 $paidOrderUsers = Order::whereIn('status', [Order::STATUS_PAID, Order::STATUS_COMPLETED]) ->group('user_id') ->field('user_id, count(*) as buy_count') @@ -428,7 +437,7 @@ class Dashboard extends Common $repeatPurchaseRate = $paidUsersCount > 0 ? round(($repeatBuyCount / $paidUsersCount) * 100, 1) : 0.0; $arpu = $paidUsersCount > 0 ? round($netGmv / $paidUsersCount, 2) : 0.0; - // 9.2 合伙股东 30 天自购续期雷达 (仅统计具备合伙股东身份的会员,避免恐慌误判) + // 9.2 进阶成员 30 天自购续期雷达 (仅统计具备进阶角色的会员,避免恐慌误判) $activePartnersCount = 0; $warningPartnersCount = 0; $pendingRenewCount = 0; @@ -506,7 +515,7 @@ class Dashboard extends Common } } - // 股东专属自购达标率(分子为在保合格股东,分母为合伙股东总人数) + // 进阶成员自购达标率(分子为在保合格进阶成员,分母为进阶角色总人数) $partnerActiveRate = $partnerShareholderCount > 0 ? round((($activePartnersCount + $warningPartnersCount) / $partnerShareholderCount) * 100, 1) : 0.0; @@ -634,6 +643,8 @@ class Dashboard extends Common 'partner_network' => $partnerNetwork, 'finance_overview' => $financeOverview, 'operation_overview' => $operationOverview, + 'custom_role_names' => $roleNames, + 'role_names' => $roleNames, ]); } @@ -887,7 +898,7 @@ class Dashboard extends Common $searchHistory = new SearchHistory(); $hotSearch = $searchHistory->hotSearch(); - // 3. 合伙股东收益排行 TOP 5 + // 3. 收益中心收益排行 TOP 5 $partnerRanking = []; $rankingRows = Reward::field('user_id, sum(amount) as total_income, count(*) as reward_count') ->where('status', 1) diff --git a/application/admin/controller/shopro/commission/Agent.php b/application/admin/controller/shopro/commission/Agent.php index 6b597f3..a6bbf0d 100644 --- a/application/admin/controller/shopro/commission/Agent.php +++ b/application/admin/controller/shopro/commission/Agent.php @@ -61,14 +61,16 @@ class Agent extends Common $identityInfo = \addons\shopro\service\partner\IdentityService::build($detail); $isPartner = !empty($identityInfo['is_partner']); + $isAdvanced = !empty($identityInfo['is_advanced']); $detail->is_partner = $isPartner ? 1 : 0; + $detail->is_advanced = $isAdvanced ? 1 : 0; $detail->next_push3_amount = number_format((float) $next, 2, '.', ''); $detail->next_push3_text = '第 ' . ($seq + 1) . ' 单将返 ' . $detail->next_push3_amount; $detail->last_self_order_text = $last ? date('Y-m-d H:i:s', $last) : '从未下单'; - // 业务核心规范:合伙股东仅是会员专属进阶身份,普通会员与品酒师免自购考核 - if (!$isPartner) { + // 业务核心规范:进阶角色(创客V1~V6、酒道馆、区县代理、合伙股东)需自购考核;基础会员及品酒师免自购考核 + if (!$isAdvanced) { $detail->active_status_text = '免自购考核 (基础会员/品酒师)'; } else { $detail->active_status_text = !empty($detail->active_30d) @@ -98,6 +100,8 @@ class Agent extends Common $detail->partner_mode = \addons\shopro\service\partner\PartnerConfig::isPartnerMode() ? 1 : 0; $rate = (new \addons\shopro\service\partner\RateService())->currentRate(); $detail->madow_value = \addons\shopro\service\partner\IdentityService::formatMoney((float) ($detail->madow ?? 0) * (float) $rate); + $detail->custom_role_names = \addons\shopro\service\partner\PartnerConfig::roleNames(); + $detail->role_names = $detail->custom_role_names; $this->success('分销商详情', null, $detail); } diff --git a/application/admin/controller/shopro/partner/Reward.php b/application/admin/controller/shopro/partner/Reward.php index 3131c82..6fc88b0 100644 --- a/application/admin/controller/shopro/partner/Reward.php +++ b/application/admin/controller/shopro/partner/Reward.php @@ -48,7 +48,7 @@ class Reward extends Common 'buyer_nickname' => '买家', 'order_id' => '订单', 'reward_type_text' => '奖励类型', - 'role_text' => '合伙身份', + 'role_text' => '受益身份', 'amount' => '结算金额', 'madow' => '马豆', 'base_amount' => '基数', @@ -61,7 +61,7 @@ class Reward extends Common } $export = new \addons\shopro\library\Export(); $params = [ - 'file_name' => '合伙人服务收益结算台账', + 'file_name' => '收益中心结算台账', 'cell_titles' => $cellTitles, 'total' => $total, 'is_sub_cell' => false, diff --git a/application/admin/model/shopro/commission/Agent.php b/application/admin/model/shopro/commission/Agent.php index 73e1bc2..fb496e4 100644 --- a/application/admin/model/shopro/commission/Agent.php +++ b/application/admin/model/shopro/commission/Agent.php @@ -23,7 +23,10 @@ class Agent extends Common 'identity_text', 'identities', 'is_partner', + 'is_advanced', 'maker_level_name', + 'role_names', + 'custom_role_names', 'voucher_available', 'active_30d', 'madow_value', @@ -93,11 +96,26 @@ class Agent extends Common return \addons\shopro\service\partner\IdentityService::build($data)['is_partner']; } + public function getIsAdvancedAttr($value, $data) + { + return \addons\shopro\service\partner\IdentityService::build($data)['is_advanced'] ?? false; + } + public function getMakerLevelNameAttr($value, $data) { return \addons\shopro\service\partner\IdentityService::build($data)['maker_level_name']; } + public function getRoleNamesAttr($value, $data) + { + return \addons\shopro\service\partner\IdentityService::build($data)['role_names'] ?? \addons\shopro\service\partner\PartnerConfig::roleNames(); + } + + public function getCustomRoleNamesAttr($value, $data) + { + return $this->getRoleNamesAttr($value, $data); + } + public function getVoucherAvailableAttr($value, $data) { $released = (float) ($data['voucher_released'] ?? 0); diff --git a/application/admin/view/shopro/commission/agent/detail.html b/application/admin/view/shopro/commission/agent/detail.html index 4a7ad89..ff64990 100644 --- a/application/admin/view/shopro/commission/agent/detail.html +++ b/application/admin/view/shopro/commission/agent/detail.html @@ -314,26 +314,36 @@
- 合伙股东身份(会员进阶身份) + 角色身份与进阶权益 {if $auth->check('shopro/commission/agent/edit')} 开通 / 调整身份 {/if}
-