chatapp-h5/h5/hyapp/host-center/original-vue-logic.md

11 KiB
Raw Blame History

原 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
  • 展示 IDownSpecialId.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 身份时跳到对应默认页。

收入/工资逻辑

  • 可用工资来自 usePageConfigsalaryInfo.currentSalary
  • usePageConfig 会请求 /wallet/bank/balance
  • 响应 body 是 number 时展示 body.toFixed(2)
  • 请求失败时 currentSalary = 0 并 toastFailed 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[],展示每日 dateNumberacceptGiftValueonlineTime
    • 结算状态映射:
      • 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=<teamProfile.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: <GET /team/search-account 返回的 body.teamProfile.id>

POST /team/user/join-apply-cancel

  • 用途:撤销待处理的加入代理申请。
  • Body
    • id: 申请记录 messageId,必传