chatapp-h5/h5/hyapp/agency-center/original-vue-logic.md
2026-04-29 00:14:49 +08:00

337 lines
12 KiB
Markdown
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.

# 原 Vue Agency Center 逻辑清单
来源:
- `chatapp-h5/h5/js/index--RUKA0EA-1776148658686.js`
- `chatapp-h5/h5/js/pageConfig-BUpLPO7w-1776148658686.js`
- `chatapp-h5/h5/js/teamBill-BWXvrc1S-1776148658686.js`
- `chatapp-h5/h5/js/index-CIAVq8iD-1776148658686.js`
- 旧静态复刻:`chatapp-h5/h5/agency-center/agency-center.js`
## 页面初始化
- 初始化 i18n读取当前 locale并调用语言切换逻辑。
- 初始化 Vue Router。
- 初始化 identity store并设置身份为 `AGENCY`
- 清空 payee store。
- 使用 `usePageConfig("AGENCY_CENTER", { needsTeamInfo: true, forceRefresh: true, onDataLoaded })`
- 页面 mounted 后触发:
- `identity = "AGENCY"`
- 获取银行卡列表
- 获取提现/KYC 信息
- 获取主播工资提现是否可用
- 清空收款人缓存
- `usePageConfig` 完成基础数据加载后执行:
- 获取团队成员数量
- 获取团队账单概要
- 获取当前用户成员工作汇总
## App 连接与请求头
- 判断是否在 App/WebView 环境。
- 如果已有连接且请求头缓存有效,复用缓存请求头。
- 如果未连接,调用 App bridge 获取 access origin 参数。
- 解析 App 返回参数后写入 HTTP 请求头。
- 关键请求头:
- `Authorization`
- `Req-Lang`
- `Req-App-Intel`
- `Req-Imei`
- `Req-Sys-Origin`
- 连接失败时可能跳转 `/not_app`
-`hyapp` 页面可沿用 Host Center 的 URL token 模式:从 `?token=` 或 hash query 读取 token再转为 `Authorization: Bearer <token>` 请求 Java 接口。
## 用户与团队信息
### GET `/team/member/profile`
- 用途:获取当前用户信息。
- 显式查询参数:无。
- 依赖:`Authorization` 请求头。
- 原 Vue 展示或缓存字段:
- `id`
- `account`
- `userNickname`
- `name`
- `userAvatar`
- `ownSpecialId.account`
- `usePageConfig` 中写入 `userInfo`
- `id = body.account`
- `account = body.account`
- `userNickname = body.userNickname`
- `userAvatar = body.userAvatar`
- 旧静态复刻中保留完整 `body``state.userProfile`,并缓存到 `localStorage.userProfile`
### GET `/team/entry`
- 用途:获取当前用户所属团队入口信息。
- 显式查询参数:无。
- 依赖:`Authorization` 请求头。
- 原 Vue 使用 `body.teamProfile || body` 作为团队信息。
- 团队 ID 来源:`teamProfile.id || body.id`
- 旧静态复刻缓存到 `localStorage.teamInfo`
- `team/entry` 失败或空返回时,团队信息置空。
### GET `/team/bd-profile`
- 用途:获取当前用户所在团队关联的 BD 用户资料。
- 显式查询参数:无。
- 依赖:`Authorization` 请求头。
- 后端实现:当前登录用户 -> `TeamMember.teamId` -> `BusinessDevelopmentTeamService.getBdUserIdByTeamId(teamId)` -> `UserProfileDTO`
- 原 Vue agency-center 未直接调用该接口;该接口由 Java 后端已有的 `TeamRestController#getTeamBdProfile` 提供。
## 身份与权限
### GET `/app/h5/identity`
- 用途:获取 H5 身份和路由权限。
- 显式查询参数:无。
- 原逻辑根据返回字段生成 roles
- `freightAgent`
- `agent`
- `bdLeader`
- `bd`
- `anchor`
- `admin`
- 主角色优先级:
- `guest`
- `anchor`
- `agent`
- `bd`
- `bdLeader`
- `freightAgent`
- `admin`
- 默认跳转页:
- `admin` -> `/admin-center`
- `freightAgent` -> `/coin-seller`
- `agent` -> `/agency-center`
- `bdLeader` -> `/bd-leader-center`
- `bd` -> `/bd-center`
- `anchor` -> `/host-center`
- `guest` -> `/apply`
- Agency Center 允许 `agent` 访问;旧权限配置里 `freightAgent` 也允许访问 `/agency-center`
- 如果当前路由不在允许列表中,跳转到主角色默认页。
## 工资/余额
### GET `/wallet/bank/balance`
- 用途:获取可用工资余额。
- 显式查询参数:无。
- 原 Vue `usePageConfig` 写入 `salaryInfo.currentSalary`
- 展示字段:`$${salaryInfo.currentSalary}`
- 原逻辑只在 `body` 是 number 时使用 `body.toFixed(2)`,否则展示 `0`
- 请求失败时展示 `0`,并 toast`Failed to load balance. Please try again.`
- 新页面如果展示 Agency 可用工资,优先复用这个数据源。
## 今日任务/主播任务
### GET `/team/member/work/statistics-now`
- 用途:获取当前用户今日工作统计。
- 查询参数:
- `dataType=DAILY`
- `memberId=<当前用户 id/account>`
- 原 Vue `taskInfo`
- `anchorType = "Chat"`
- `minutesProgress = min(ownTime + otherTime, 120)`
- `minutesTotal = 120`
- `giftTask = acceptGiftValue || 0`
- 原 Agency Center 组件展示三个格子:
- `Host type`
- `Minutes`
- `Gift Task`
- 旧静态复刻里实际只展示 `Minutes``Host type``Gift Task` HTML 被注释。
## 成员工作汇总
### GET `/team/member-work`
- 用途:获取当前用户工作目标和结算汇总。
- 查询参数:
- `userId=<当前用户 id>`
- 原函数名:`fetchMemberWorkTotal`
- 原逻辑:
- 读取 `body.targets || []`
- 跳过 `targets[0]`
- 再请求或读取 identity 判断身份
- 如果是 `agent`:累加 `target.settlementResult.ownSalary + target.settlementResult.memberSalary`
- 如果是 `anchor`:累加 `target.settlementResult.memberSalary`
- 写入 `memberWorkTotal = total.toFixed(2)`
- 注意Agency Center 主模板里没有明确展示 `memberWorkTotal`,这是页面加载时保留的汇总逻辑。
## 团队成员数量
### GET `/team/members/count`
- 用途:获取团队成员数量。
- 查询参数:
- `id=<teamId>`
- 团队 ID 来源:`/team/entry``teamProfile.id || id`
- 返回使用:
- `body.memberQuantity`
- 原点击 Team Member 时会把成员数量带到 URL
- `/team-member?source=agency-center&members=<memberQuantity>`
- 请求失败时旧静态复刻 fallback 为 `87`Vue 构建产物 catch 中也有相同 fallback。
## 团队账单概要
### GET `/team/bill`
- 用途获取团队账单列表Agency Center 首页只取第一条作为概要。
- 查询参数:
- `id=<teamId>`
- 原逻辑:
- 读取 `body[0]`
- `billBelong` 形如 `YYYYMM`,展示为 `YYYY.MM`
- `hostSalary = settleResult.memberSalary.toFixed(2) || ""`
- `agentSalary = settleResult.ownSalary.toFixed(2) || ""`
- `total = settleResult.totalSalary.toFixed(2) || ""`
- 状态映射:
- `SETTLED` -> `Completed`
- `UNPAID` -> `In progress`
- `HANG_UP` -> `Out of account`
- `PAY_OUT` -> `Completed`
- 状态颜色逻辑:
- `In progress`:蓝色
- `Pending`:红色
- `Completed`:绿色
- `Out of account`:灰色
- 注意Agency Center 首页初始化了 `teamBill`,但主模板只提供 Team Bill 入口,不直接展示账单卡片。
## 团队政策
### GET `/team/release/policy`
- 用途Platform Policy 页面使用,不在 Agency Center 首页直接渲染。
- 查询参数:
- `id=<teamId>`
-`PlatformPolicy` 通过 URL `from=agencycenter` 判断是否展示代理字段。
-`from=agencycenter` 时,政策卡片展示:
- `time/hours`
- `target`
- `host_salary`
- `agent_salary`
- `total_salary`
- 线上 Java 接口需要参数名 `id`,不能用 `teamId`
## 银行卡与提现信息
### GET `/wallet/bank-card/list`
- 用途:获取银行卡/收款方式列表。
- 显式查询参数:无。
- 原逻辑:
- `bankCards = body`
- `defaultBankCard = body.find(item => item.use) || null`
### GET `/wallet/withdraw-info/list`
- 用途:获取提现/KYC 信息。
- 显式查询参数:无。
- 原逻辑:
- 如果 `body.length > 0`,取第一条
- `passportFrontUrl` 按 JSON 字符串解析成 `previewUrls`
- 合并成 `withdrawInfo`
- 点击提现时如果 `withdrawInfo` 缺失,会弹出补全信息弹窗。
### GET `/wallet/bank/host-salary/withdraw/enabled`
- 用途:控制是否展示 `Cash withdraw` 入口。
- 显式查询参数:无。
- 原 Agency Center 仍然调用 `host-salary` 提现开关。
- 返回使用:
- `withdrawEnabled = Boolean(body)`
## 点击提现逻辑
- 计算值:`missingWithdrawInfo = withdrawInfo == null || defaultBankCard == null`
- 点击 `Cash withdraw`
- 如果缺提现信息或默认银行卡,打开补全信息弹窗。
- 否则跳转 `/cash-withdraw`
- 补全信息弹窗:
- 标题:`prompt`
- 主文案:`fill_info_tips`
- 辅助文案:`card_issue_tips`
- 按钮:`to_improve`
- 按钮跳转 `/agency-setting`
## 页面展示结构
- 顶部:
- `GeneralHeader`
- 标题:`agency_center`
- 右侧消息图标,点击跳转 `/message`
- 原 Agency Center 没有未读红点逻辑。
- 消息页:
- `Message` 页面 mounted 后请求 `/team/user/apply/record?teamId=<teamId>&status=WAIT`
- 返回的 WAIT 记录作为待处理入团申请列表展示。
- 可在新 Agency Center 中复用该 WAIT 记录数量作为消息红点依据;原 Vue 没有单独的 unread 字段或 unread 接口。
- 原 Message 记录格式:
- `createUserProfile.userAvatar`
- `createUserProfile.userNickname`
- `createUserProfile.account`
- 操作按钮:`Agree``Refuse`
- 同意/拒绝接口:`POST /team/process/user/apply`body 为 `{ id, status }``status` 可取 `AGREE``REJECT`
- 工资卡片:
- 标题:`my_available_salary`
- 右侧按钮:`my_salary_details`
- 金额:`$${salaryInfo.currentSalary}`
- 今日任务卡片:
- 标题:`today_host_task`
- 原 Vue 展示 `Host type``Minutes``Gift Task`
- 旧静态复刻只展示 `Minutes`
- 菜单卡片:
- `Platform policy`
- `Exchange coins`
- `Transfer`
- `Cash withdraw`,受提现开关控制
- `Bank Accounts`
- `Team Member`
- `Team Bill`
- `Invite Members`
## 点击跳转
- 消息:`/message`
- 工资详情:`/history-salary`
- 平台政策:`/platform-policy?from=agencycenter`
- 兑换金币:`/exchange-gold-coins`
- 转账:`/transfer`
- 提现:`/cash-withdraw`
- 银行卡/收款信息:`/agency-setting`
- 团队成员:`/team-member?source=agency-center&members=<memberQuantity>`
- 团队账单:`/team-bill`
- 邀请成员:`/invite-members`
- 补全提现信息:`/agency-setting`
## 可复用到新 `h5/hyapp/agency-center` 的数据源
- 当前用户信息:`GET /team/member/profile`
- 可展示头像、昵称、UID、靓号。
- 当前团队信息:`GET /team/entry`
- 可取 agency/team 名称、teamId并作为团队成员、账单、政策接口的前置数据。
- 当前团队关联 BD`GET /team/bd-profile`
- 可展示 BD 的头像/昵称/账号等用户资料;旧 Vue agency-center 未直接调用,但后端已有接口。
- 当前余额/工资:`GET /wallet/bank/balance`
- 可作为 Agency Center 的 Salary。
- 今日工作数据:`GET /team/member/work/statistics-now?dataType=DAILY&memberId=<当前用户 id/account>`
- 可展示 Minutes是否保留 Host type/Gift Task 需要按新设计决定。
- 团队成员数量:`GET /team/members/count?id=<teamId>`
- 可展示 Team Member 入口右侧数量,或用于跳转参数。
- 团队账单概要:`GET /team/bill?id=<teamId>`
- 可展示最近账单、Agent salary、Host salary、Total。
- 提现入口开关:`GET /wallet/bank/host-salary/withdraw/enabled`
- 可决定是否展示 Cash withdraw。
- 收款/提现信息:`GET /wallet/bank-card/list``GET /wallet/withdraw-info/list`
- 可决定点击提现时直接进入还是提示补充信息。
- 身份权限:`GET /app/h5/identity`
- 可判断是否为 `agent`,非代理时应避免展示代理中心主内容。
## 新页面实现注意点
- 新页面应放在 `h5/hyapp/agency-center/`,不要改旧 Vue 构建产物和旧 `h5/agency-center`
- 视觉风格参考 `h5/hyapp/host-center`浅绿色背景、圆角白色卡片、移动端固定宽度体验、URL token 请求。
- 先完成数据加载再决定展示代理中心或非代理状态,避免接口完成前闪跳。
- 如果需要非代理兜底页,应基于 `/app/h5/identity``agent` 字段判断。
- 如果继续使用政策接口Java 线上接口参数必须是 `id=<teamId>`