# 原 Vue Host Center 逻辑清单 来源: - `chatapp-h5/h5/js/index-CN7d9oZS-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` - 后端参数定义参考 `chatapp3-java/rc-service` ## 页面初始化 - 初始化 i18n:读取当前 locale,并调用语言切换逻辑。 - 初始化路由对象。 - 初始化 identity store,并设置身份为 `HOST`。 - 清空 payee store。 - 使用 `usePageConfig("HOST_CENTER", { needsTeamInfo: true, forceRefresh: true, onDataLoaded })`。 - 页面 mounted 后并发或顺序触发: - 设置身份:`identity = "HOST"` - 获取我的代理资料 - 清空收款人缓存 - 获取银行卡列表 - 获取提现/KYC 信息 - 获取主播工资提现是否可用 ## 用户信息获取 - `usePageConfig` 内部优先读取缓存用户信息。 - 非强制刷新时读取本地缓存用户资料。 - 强制刷新时请求 `/team/member/profile`。 - 页面展示用字段: - `id` - `account` - `userNickname` - `name` - `userAvatar` - `ownSpecialId.account` - Host Center 当前代理/团长资料来自 `/team/team-own/profile`。 - 展示名称:`userNickname || name` - 展示 ID:`ownSpecialId.account || account` - 头像加载失败时走 `imageHandler` fallback。 ## App 连接与请求头 - 判断是否在 App/WebView 环境。 - 若已连接且缓存有效,复用缓存请求头。 - 若未连接,调用 App bridge 获取 access origin 参数。 - 解析 App 返回参数后设置 HTTP 请求头。 - 关键请求头来源: - `Authorization` - `Req-Lang` - `Req-App-Intel` - `Req-Imei` - `Req-Sys-Origin` - 连接失败时可能跳转 `/not_app`。 ## 路由与身份守卫 - 请求 `/app/h5/identity` 获取身份。 - 根据身份字段计算 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` - 当前用户没有 anchor 身份时跳到对应默认页。 ## 收入/工资逻辑 - 可用工资来自 `usePageConfig` 的 `salaryInfo.currentSalary`。 - `usePageConfig` 会请求 `/wallet/bank/balance`。 - 响应 body 是 number 时展示 `body.toFixed(2)`。 - 请求失败时 `currentSalary = 0` 并 toast:`Failed to load balance. Please try again.` - 原 Host Center 还请求 `/team/member-work`,用于获取历史工资和目标数据。 - `/team/member-work` 返回后: - `historySalary` 写入本地变量 - 读取 `targets[0]` - 当前 `hyapp/host-center` 的 Work Time 使用 `targets[0].target.onlineTime` 作为总工作时长 - 当前 `hyapp/host-center` 的 Target 显示 `targets[0].target.acceptGiftValue` 当前礼物积分 - Target 点击明细使用 `targets[0].target.dailyTargets[]`,展示每日 `dateNumber`、`acceptGiftValue`、`onlineTime` - 结算状态映射: - `SETTLED` -> `Completed` - `UNPAID` -> `In Progress` - `HANG_UP` -> `Out of account` - `PAY_OUT` -> `Completed` - 目标等级取 `target.settlementResult.level || target.level || "-"` ## 今日任务/直播数据逻辑 - 原 Vue `usePageConfig` 会请求 `/team/member/work/statistics-now`。 - 请求参数: - `dataType=DAILY` - `memberId=<当前用户 id/account>` - 原 Vue 今日任务展示逻辑: - `anchorType = "Chat"` - `minutesProgress = min(ownTime + otherTime, minutesTotal)` - `minutesTotal = 120` - `giftTask = acceptGiftValue || 0` - 当前 `hyapp/host-center` 的 Work Time 不再用该接口,也不再限制 120;改用 `/team/member-work?userId=<当前用户 id>` 返回的 `targets[0].target.onlineTime` 总时长。 ## 银行卡与提现信息逻辑 - 请求 `/wallet/bank-card/list` 获取银行卡列表。 - 取 `body.find(item => item.use)` 作为当前使用银行卡。 - 请求 `/wallet/withdraw-info/list` 获取提现/KYC 信息。 - 若 `body.length > 0`: - 取第一条 - `passportFrontUrl` 按 JSON 字符串解析成 `previewUrls` - 合并到提现信息对象 - 请求 `/wallet/bank/host-salary/withdraw/enabled`。 - `body` 转 Boolean 后控制是否展示 `Cash withdraw` 入口。 - 点击提现: - 如果没有提现信息或没有当前使用银行卡,打开 `infoMissing` 弹窗。 - 否则跳转 `/cash-withdraw`。 ## 弹窗逻辑 - 弹窗状态: - `infoMissing` - `leave` - `maskLayerShow = infoMissing || leave` - 打开弹窗前先关闭其它弹窗。 - 点击遮罩关闭弹窗。 - `infoMissing` 弹窗: - 标题:`prompt` - 文案:`fill_info_tips` - 辅助文案:`card_issue_tips` - 按钮跳转 `/host-setting` - `leave` 弹窗: - 标题:`tips` - 文案:`leave_agent_tips` - 取消关闭弹窗 - 确认执行退出团队申请 ## 退出团队逻辑 - 请求 `/team/user/apply` - 方法:`POST` - Body: - `reason: "QUIT"` - `teamId: <当前团队 id>` - `teamId` 来源: - 原 Vue 使用 `pe()` 读取当前团队 id - 静态实现里曾兼容读取 `teamInfo.id || agency.teamId || agency.id` - 失败时 toast `errorMsg`。 ## 点击跳转 - 工资详情:`/history-salary` - 平台政策:`/platform-policy?from=hostcenter` - 主播设置/银行卡:`/host-setting` - 兑换金币:`/exchange-gold-coins` - 转账:`/transfer` - 提现:`/cash-withdraw` - 语言切换:`/language` - 返回: - App bridge `closePage` - Flutter bridge `close_page` - 浏览器 `history.back()` ## 原接口与可传参数 ### GET `/team/member/profile` - 用途:获取当前用户信息。 - 显式查询参数:无。 - 隐式参数:App 请求头中用户、语言、来源等上下文。 ### GET `/team/team-own/profile` - 用途:获取我的团长/代理资料。 - 显式查询参数:无。 - 隐式参数:App 请求头中的当前用户上下文。 ### GET `/team/entry` - 用途:获取当前用户团队入口信息。 - 显式查询参数:无。 - 返回中使用 `body.teamProfile || body` 作为团队信息。 ### GET `/team/release/policy` - 用途:获取团队政策。 - 查询参数: - `id`: 团队 ID,必传。线上 Java 接口传 `teamId` 会返回 `REQUEST_PARAMETER_ERROR: id required.` - 团队 ID 来源: - 优先使用 `/team/entry` 返回的 `body.teamProfile.id` - `/team/team-own/profile` 返回的 `body.id` 是团长/用户资料 ID,不是团队政策接口需要的团队 ID;直接传给 `/team/release/policy?id=...` 会返回 `TEAM_NOT_FOUND` - 页面 URL 可以继续带 `teamId` 作为本地跳转参数,但真正请求 Java 接口时必须映射为 `id=`。 - 返回使用: - `body.policy[]` - `policy[].level` - `policy[].onlineTime` - `policy[].target` - `policy[].memberSalary` - `policy[].ownSalary` - `policy[].totalSalary` ### GET `/team/search-account` - 用途:加入代理页搜索代理账号。 - 查询参数: - `account`: 用户输入的代理 ID/账号,必传 - 原 Vue `ApplyView` 使用: - 请求后判断 `body.teamProfile` - `body.teamProfile.id` 作为加入申请的 `teamId` ### GET `/team/wait-apply/profile` - 用途:获取当前用户待处理的加入代理申请。 - 显式查询参数:无。 - 原 Vue `ApplyView` 使用: - 有返回 `body` 时显示一条 pending 申请记录 - 展示 `body.ownUserProfile.userAvatar` - 展示 `body.ownUserProfile.userNickname` - 展示 `body.ownUserProfile.ownSpecialId.account || body.ownUserProfile.account` ### GET `/wallet/bank/balance` - 用途:获取工资/银行卡余额。 - 显式查询参数:无。 - 返回可为数字,也可能为对象。 ### GET `/team/member/work/statistics-now` - 用途:原 Vue 获取成员当天目标/工作统计;当前 `hyapp/host-center` 不再用它展示 Work Time。 - 查询参数: - `dataType`: `DAILY | MONTH` - `memberId`: 成员 ID,必传 - `size`: 数量,可选 - Host Center 使用: - `dataType=DAILY` - `memberId=<当前用户 id/account>` ### GET `/team/member-work` - 用途:成员工资情况。 - 查询参数: - `userId`: 用户 ID,必传 - 返回使用: - `historySalary` - `targets` - `targets[0].target.onlineTime`,当前 `hyapp/host-center` 用作 Work Time 总时长 - `targets[0].target.acceptGiftValue`,当前 `hyapp/host-center` 用作 Target 当前礼物积分 - `targets[0].target.dailyTargets[]`,当前 `hyapp/host-center` 用作每日明细 - `targets[].status` - `targets[].target.settlementResult.level` - `targets[].target.level` ### GET `/wallet/bank-card/list` - 用途:银行卡列表。 - 显式查询参数:无。 - 返回使用: - `body[]` - `item.use` - `item.cardType` - `item.cardNo` - `item.payee` ### POST `/wallet/bank-card/add` - 用途:新增收款方式。 - Body: - `userId`: 当前用户 ID - `cardType`: `USDT | BANK` - `cardName`: 收款方式名称;USDT 时原 Vue 固定为 `USDT` - `cardNo`: 卡号或 USDT 地址 - `payee`: 收款人 ### POST `/wallet/bank-card/use` - 用途:设置当前使用的收款方式。 - Body: - `id`: 收款方式 ID ### GET `/wallet/withdraw-info/list` - 用途:提现/KYC 信息列表。 - 显式查询参数:无。 - 返回使用: - `body[0]` - `body[0].passportFrontUrl` ### GET `/wallet/bank/host-salary/withdraw/enabled` - 用途:主播工资是否允许提现。 - 显式查询参数:无。 - 返回使用: - `body` boolean ### GET `/wallet/bank/check/exchange-gold` - 用途:检查当前用户是否允许兑换金币。 - 显式查询参数:无。 - 原 Vue `ExchangeGoldCoins` 用它做兑换入口权限检查。 ### POST `/wallet/bank/exchange/gold` - 用途:把当前可用余额兑换金币。 - Body(原 Vue 主播兑换页): - `coinId`: 金币档位 ID - `amount`: 美元金额 - `price`: 美元金额 - Body(原静态逻辑页): - `amount`: 美元金额 - 兑换比例未发现后端接口返回;原 Vue 金币档位是前端常量。 ### GET `/wallet/bank/search/user-profile` - 用途:转账前搜索收款用户。 - 查询参数: - `account`: 用户输入的账号/ID - `type`: 原 Vue 传 `AGENT` - `searchType`: 转账场景传 `TRANSFER` ### POST `/wallet/bank/transferGold` - 用途:把当前可用余额转给其它用户。 - Body: - `amount`: 美元金额 - `acceptUserId`: 收款用户 ID - `acceptMethod`: 原 Vue 主播转账传 `BANK_TRANSFER` ### GET `/app/h5/identity` - 用途:获取当前 H5 身份。 - 显式查询参数:无。 - 返回使用字段: - `freightAgent` - `agent` - `bdLeader` - `bd` - `anchor` - `admin` ### POST `/team/user/apply` - 用途:用户申请加入或退出团队。 - Body: - `reason`: `JOIN | QUIT` - `teamId`: 团队 ID,必传 - `url`: 跳转 URL,可选 - Host Center 退出团队使用: - `reason: "QUIT"` - `teamId: <当前团队 id>` - ApplyView 加入代理使用: - `reason: "JOIN"` - `teamId: ` ### POST `/team/user/join-apply-cancel` - 用途:撤销待处理的加入代理申请。 - Body: - `id`: 申请记录 `messageId`,必传