From 9181c7144f0fec1d9a250d5d4527ded829c68472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Mon, 5 Oct 2026 12:56:57 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(split):=20=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=88=86=E8=B4=A6=E6=8E=A5=E6=94=B6=E6=96=B9=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加用户信息查询和展示,包括昵称、手机号等用户详情 - 增加汇付进件状态显示和账号匹配校验功能 - 优化前端表格界面,新增用户关联信息、进件核对状态等列 - 改进数据格式化处理,提供更详细的分账接收方信息展示 - 更新表单提示文案,明确用户ID填写规则和要求 ``` --- .../controller/shopro/split/Receiver.php | 139 +++++++++++++ .../admin/view/shopro/split/receiver/add.html | 2 +- .../view/shopro/split/receiver/index.html | 185 ++++++++++++++++-- .../js/backend/shopro/split/receiver.js | 14 ++ 4 files changed, 318 insertions(+), 22 deletions(-) diff --git a/application/admin/controller/shopro/split/Receiver.php b/application/admin/controller/shopro/split/Receiver.php index a7589ed..0898474 100644 --- a/application/admin/controller/shopro/split/Receiver.php +++ b/application/admin/controller/shopro/split/Receiver.php @@ -5,6 +5,8 @@ namespace app\admin\controller\shopro\split; use app\admin\controller\shopro\Base; use addons\shopro\library\split\Config as SplitConfig; use addons\shopro\library\split\ProfitSharingService; +use app\admin\model\shopro\user\User as ShopUser; +use think\Db; class Receiver extends Base { @@ -23,6 +25,7 @@ class Receiver extends Base list($where, $sort, $order, $offset, $limit) = $this->custombuildparams(); $total = $this->model->where($where)->count(); $list = $this->model->where($where)->order($sort, $order)->limit($offset, $limit)->select(); + $list = $this->formatReceiverList($list); return $this->success('操作成功', null, ['total' => $total, 'rows' => $list]); } $this->assignconfig('splitHuifuOnly', (new SplitConfig())->isHuifuMode()); @@ -67,6 +70,142 @@ class Receiver extends Base $this->success('操作成功'); } + protected function formatReceiverList($list) + { + $rows = []; + $userIds = []; + foreach ($list as $item) { + $data = is_array($item) ? $item : $item->toArray(); + $roleId = intval($data['role_id'] ?? 0); + if ($roleId > 0) { + $userIds[] = $roleId; + } + } + $userIds = array_values(array_unique($userIds)); + $users = []; + if ($userIds) { + $userRows = ShopUser::where('id', 'in', $userIds)->field('id,nickname,mobile')->select(); + foreach ($userRows as $user) { + $u = is_array($user) ? $user : $user->toArray(); + $users[intval($u['id'])] = $u; + } + } + + $onboardMap = []; + if ($userIds) { + try { + $onboardRows = Db::name('shopro_huifu_onboard') + ->where('user_id', 'in', $userIds) + ->order('id desc') + ->select(); + foreach ($onboardRows as $ob) { + $uid = intval($ob['user_id']); + if (!isset($onboardMap[$uid])) { + $onboardMap[$uid] = $ob; + } + } + } catch (\Throwable $e) { + $onboardMap = []; + } + } + + foreach ($list as $item) { + $data = is_array($item) ? $item : $item->toArray(); + $roleId = intval($data['role_id'] ?? 0); + $user = $roleId > 0 && isset($users[$roleId]) ? $users[$roleId] : null; + $onboard = $roleId > 0 && isset($onboardMap[$roleId]) ? $onboardMap[$roleId] : null; + + $data['user_id'] = $roleId; + $data['user_nickname'] = is_array($user) ? trim((string) ($user['nickname'] ?? '')) : ''; + $data['user_mobile'] = is_array($user) ? trim((string) ($user['mobile'] ?? '')) : ''; + $data['user_display'] = $this->formatUserDisplay($roleId, $user); + $data['role_id_text'] = $roleId > 0 ? (string) $roleId : '0(通用)'; + + $onboardHuifuId = trim((string) ($onboard['huifu_id'] ?? '')); + $receiverAccount = trim((string) ($data['receiver_account'] ?? '')); + $data['onboard_huifu_id'] = $onboardHuifuId; + $data['onboard_status'] = $onboard['onboard_status'] ?? ''; + $data['onboard_status_text'] = $this->formatOnboardStatus($onboard['onboard_status'] ?? ''); + $data['account_match'] = ($onboardHuifuId !== '' && $receiverAccount !== '' && $onboardHuifuId === $receiverAccount) ? 1 : 0; + $data['account_match_text'] = $this->formatAccountMatch($roleId, $onboardHuifuId, $receiverAccount); + + $data['channel_text'] = ($data['channel'] ?? '') === 'huifu' ? '汇付' : '微信'; + $data['role_type_text'] = $this->roleTypeLabel($data['role_type'] ?? ''); + $data['status_text'] = ($data['status'] ?? '') === 'forbidden' ? '禁用' : '正常'; + $data['createtime_text'] = !empty($data['createtime']) + ? date('Y-m-d H:i:s', $data['createtime']) + : '-'; + + $rows[] = $data; + } + + return $rows; + } + + protected function formatUserDisplay($roleId, $user) + { + if ($roleId <= 0) { + return '—(规则模式通用接收方)'; + } + if (!is_array($user)) { + return '用户#' . $roleId . '(未找到)'; + } + $nickname = trim((string) ($user['nickname'] ?? '')); + $mobile = trim((string) ($user['mobile'] ?? '')); + if ($nickname !== '' && $mobile !== '') { + return $nickname . '(' . $mobile . ')'; + } + if ($nickname !== '') { + return $nickname; + } + if ($mobile !== '') { + return $mobile; + } + return '用户#' . $roleId; + } + + protected function formatOnboardStatus($status) + { + $map = [ + 'draft' => '草稿', + 'submitting' => '提交中', + 'basic_ok' => '基础进件完成', + 'busi_pending' => '业务开通中', + 'approved' => '已通过', + 'rejected' => '已驳回', + 'failed' => '失败', + ]; + $status = trim((string) $status); + return $status !== '' ? ($map[$status] ?? $status) : '—'; + } + + protected function formatAccountMatch($roleId, $onboardHuifuId, $receiverAccount) + { + if ($roleId <= 0) { + return '—'; + } + if ($onboardHuifuId === '' && $receiverAccount === '') { + return '未配置'; + } + if ($onboardHuifuId === '') { + return '未进件'; + } + if ($receiverAccount === '') { + return '未填账号'; + } + return $onboardHuifuId === $receiverAccount ? '与进件一致' : '与进件不一致'; + } + + protected function roleTypeLabel($type) + { + $map = [ + 'platform' => '平台', + 'promoter' => '推广员', + 'regional_agent' => '区域公司', + ]; + return $map[$type] ?? ($type ?: '-'); + } + public function syncWx($ids = null) { $row = $this->model->get($ids); diff --git a/application/admin/view/shopro/split/receiver/add.html b/application/admin/view/shopro/split/receiver/add.html index c2641e5..9de063a 100644 --- a/application/admin/view/shopro/split/receiver/add.html +++ b/application/admin/view/shopro/split/receiver/add.html @@ -2,7 +2,7 @@