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

12 KiB
Raw Blame History

原 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
  • 旧静态复刻中保留完整 bodystate.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,并 toastFailed 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
  • 旧静态复刻里实际只展示 MinutesHost typeGift 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/entryteamProfile.id || id
  • 返回使用:
    • body.memberQuantity
  • 原点击 Team Member 时会把成员数量带到 URL
    • /team-member?source=agency-center&members=<memberQuantity>
  • 请求失败时旧静态复刻 fallback 为 87Vue 构建产物 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
      • 操作按钮:AgreeRefuse
    • 同意/拒绝接口:POST /team/process/user/applybody 为 { id, status }status 可取 AGREEREJECT
  • 工资卡片:
    • 标题:my_available_salary
    • 右侧按钮:my_salary_details
    • 金额:$${salaryInfo.currentSalary}
  • 今日任务卡片:
    • 标题:today_host_task
    • 原 Vue 展示 Host typeMinutesGift 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并作为团队成员、账单、政策接口的前置数据。
  • 当前团队关联 BDGET /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/listGET /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/identityagent 字段判断。
  • 如果继续使用政策接口Java 线上接口参数必须是 id=<teamId>