refundLogs 动态渲染 + 到账预期 + 成功结果卡 + 常驻客服。statusName,禁止按 status 数字硬编码映射。-1 / -2 写反了——代码真实为 -1 = 运营驳回、-2 = 用户取消,以代码为准。
| status | statusName | 用户端一句话说明 | 进度态 | 用户可执行操作 |
|---|---|---|---|---|
1 | 待审核 | 已提交申请,等待平台审核 | 进行中 | 撤销退款申请(文字链 + 二次确认) |
2 | 待打款 | 审核已通过,等待财务确认渠道并打款 | 进行中 | 撤销退款申请;refundType=3 时补充 / 修改银行卡 |
3 | 打款完成 | 钱已退出(原路退已到 / 银行打款已发起) | 接近完成 | 确认收款(主按钮);隐藏「撤销」 |
4 | 用户确认 | 已确认收款,流程闭环 | 已完成(终态) | 查看 / 联系客服 |
-1 | 运营驳回 | 申请被驳回,醒目展示 rejectReason | 失败(终态) | 看驳回原因;联系客服;可重新申请 |
-2 | 用户取消 | 已撤销申请 | 已取消(终态) | 查看;可重新申请 |
关键流转,用户端必须如实反馈:
refundType=1 → 后端一步到 status=3,返回「已自动审批并原路退回」。判定:会员卡 order.orderTime >= now-48h、私教 order.orderTime >= now-7d。提交后重查详情按真实状态显示「已秒退」,不得统一显示「待审核」。refundType ∈ {1,2,4} 审核通过即自动到 status=3(跳过财务);仅 refundType=3 停在 status=2 等线下打款。CommonResponse.msg(含流水号)透传 → 用户端必须捕获展示,不能吞掉。-1)或用户撤销(-2) → 权益自动解冻、恢复正常使用;3 / 4) → 权益正式退出(已退款,自然不可用)。refundApply 时冻结、userCancle / 驳回时解冻。)pay())时(cancelMemberRightsByOrder / cancelRightsByOrder 保持不变);在此之上新增「申请即冻结」中间态——refundApply() 阶段冻结权益、userCancle() 与运营驳回阶段解冻,打款完成则正式扣减退出。即「扣减在退款完成时、冻结是新加在申请时」。
渠道 refundType 由后端按原订单 payType 自动判定,用户不可选、不可见,前端只按它切换表单与文案。
| 维度 | 原路退回 refundType=1泰荣 / 微信自动续费 | 团购 refundType=2/4payType=4 | 银行卡线下打款 refundType=3 |
|---|---|---|---|
| 申请表单银行卡 | 隐藏,不填 | 隐藏,不填 | 显示且必填(卡号 / 户名 / 开户行 + 下拉) |
| 凭证上传 | 选填 | 选填 | 强调上传打款凭证 |
| 渠道说明条 | 按原支付方式原路退回,无需填卡 | 平台撤销核销后原路退款 | 需补充银行卡,由财务人工打款 |
| 到账时效 | 较快到账(命中可秒退) | 平台侧处理 | 预计 1–3 个工作日 |
| 时间轴节点 | 最短 | 含撤销核销 | 最长(含财务打款) |
| 进度页银行卡区 | 不显示 | 不显示 | 未填→提示补充;已填→脱敏 |
| 成功结果卡到账目标 | 原路退回至 微信 / 泰荣 | 平台 | 银行尾号 ×××× |
所有金额后端算好下发,前端只展示不计算。卡片常驻、默认展开,不藏「?」。
| 展示行 | 后端字段(申请值 / 实退值) |
|---|---|
| 应退金额(剩余权益) | refundTotal / actualRefundTotal |
| └ 次数卡:单价 × 剩余次数 | rightsRes.unitPrice / remain / times |
| └ 时长卡:实付 × 剩余天数 / 总天数 | orderPrice × 比例 |
| − 违约金 | serviceFee / actualServiceFee |
− 连续包月退订补差(isAuto=1 才出) | autoDiffAmt |
| = 实际到账 | refundAmt / actualRefundAmt |
isWithinNoReason && nouse)按商品类型区分:会员卡窗口为 48 小时——48 小时内显示「48 小时内无理由 · 免违约金」,超 48 小时显示「已超 48 小时 · 按剩余权益 20% 收取」;私教课窗口仍为 7 天——7 天内显示「7 天内无理由 · 免违约金」,超 7 天显示「已超 7 天 · 按剩余权益 20% 收取」。#303133(结算对账语境,红色易被读成「扣款」),主数字中性加粗、仅减项(违约金/补差)用警告橙 #ff9900 标注。此例外与价格红规范不冲突,请勿误改回品牌红。
配色克制:浅灰底 + 白卡片 + 统一 12–14px 圆角,品牌红仅作进度高亮与当前态强调。
refundInfo 试算,金额卡置顶refundType=3 才出现银行卡卡片,必填payBankIdstatusName,下方一句话说明refundLogs 渲染,进行中给到账预期rejectReason(现有 UI 最该补的)11031saveRefundBank 入口status≥3 后不可再改卡(APPLY_EDIT_AGAIN_ERROR)order/apply.vue、详情页 order/refundDetail.vue、规则弹窗 order/component/refundRule.vue 均为生产可用。本次是重做这些页面的 UI,不新增页面。设计稿 10 屏精确映射到下列已有文件。
user/index.vueorder/index.vue · memberItemcard/orderDetail.vue:19 · course/orderDetail.vue:38card · course / orderDetail.vueorder/apply.vuerefundDetail.vue
| 设计屏 | 现有页面文件 | 路由 | 现状 |
|---|---|---|---|
| A 订单详情(退款入口) | pages/course/orderDetail.vue(私教)pages/card/orderDetail.vue(会员卡) | /pages/course/orderDetail/pages/card/orderDetail | 活跃;「申请退款」按钮已被注释(L38 / L19),需放开并按新稿重做 |
| B1 / B2 退款申请 | pages/order/apply.vue | /pages/order/apply?billcode&type&orign | 活跃(16KB 完整:试算/原因/银行卡/附件) |
| C / D / E / F / G 退款进度详情 | pages/order/refundDetail.vue | /pages/order/refundDetail?billcode | 活跃(18KB);现仅画到 3 级进度,缺 -1 驳回 / -2 取消 终态,本次补齐 |
| 计算规则弹层(§4 金额卡来源) | pages/order/component/refundRule.vue | —(弹窗) | 活跃;升级为正文常驻可解释卡 |
| 动作 | 入口位置(现有代码) | 跳转 | 对应屏 |
|---|---|---|---|
| 发起退款申请 | 订单详情底部「申请退款」按钮 —— 当前注释,需放开(P0)course/orderDetail.vue:38 · card/orderDetail.vue:19 | apply?billcode&type(type 1=会员卡 / 2=私教) | A → B |
| 补充银行卡 | 退款详情 待打款态「补充银行卡信息」 | apply?billcode&orign=bank | F → B2 |
| 查看进度(列表入口) | 订单中心卡片:payItem.vue:199 / memberItem.vue:121,在 orderStatus==8 待退款 / ==9 已退款 时透出退款金额 | refundDetail?billcode | 订单列表 → C/D/E |
| 查看进度(详情入口) | 订单详情「退款详情」按钮(待退款 / 已退款态) | refundDetail?billcode | A → C/D/E |
「我的」页(pages/user/index.vue):快捷导航宫格已有 「我的订单」→ /pages/order/index。退款不单独设入口,沿用「订单 → 退款」的标准电商路径即可(与现状一致,无需改动「我的」页)。
订单中心(pages/order/index.vue):4 个一级 tab(私教 / 场地卡 / 团课 / 积分)× 二级 tab(全部 / 待支付 / 已支付 / 待退款 / 已退款 / 已关闭),退款单已在「待退款 / 已退款」筛选下可达。建议:
refundInfo 试算)。| 层级 | 取值 | 用途 |
|---|---|---|
订单态(utils/common.ts,列表用) | 8 待退款 / 9 已退款 | 仅决定订单卡片是否透出退款入口 / 退款金额 |
退款单态(refundDetail 内部,本 PRD §2) | 1 待审核 / 2 待打款 / 3 打款完成 / 4 用户确认 / -1 运营驳回 / -2 用户取消 | 退款进度详情页的真实状态,取 statusName |
refundDetail.vue 只画到 3 级进度条(待审核 → 审核待打款 → 打款完成),缺 -1 驳回 / -2 取消 的终态 UI —— 这正是本次重做要补的(设计屏 E 驳回 / G 取消),并把「审核待打款」对齐为 statusName「待打款」。
复用 apply.vue + refundDetail.vue + refundRule.vue + order/index 现有页面,只重做 UI。唯一需新放开的代码是订单详情两处被注释的「申请退款」按钮;其余为视觉与状态覆盖的重做。退款 API(refund.ts:refundInfo / refundApply / getRefundDesc / userCancle / userConfirm / saveRefundBank / getRefundDicts → /payment/front/*)已就绪,无需新增。
statusName,无 status 数字硬编码-1=运营驳回、-2=用户取消(不被注释误导)status=-1 醒目展示 rejectReasonmsg/重查真实反馈(秒退/待财务/待审核)refundType=1/2/4 不出现银行卡输入与空银行卡行refundType=3 银行卡四件套必填 + 卡号分段 + 银行下拉refundInfo 试算;金额卡常驻展开isAuto=1 展示连续包月退订补差 autoDiffAmtrefundLogs 动态渲染,无文字挤压status=3/4 隐藏「撤销」;status=3 主按钮为确认收款msg(含流水号),不吞掉status=3/4 出成功结果卡(金额+渠道/尾号+时间+凭证)attachs 凭证图详情页可回看11031、已申请 APPLY_AGAIN_ERROR、无权益 APPLY_ERROR 均有友好提示| 用途 | 接口 | 关键入参 / 返回 |
|---|---|---|
| 退款试算(不落库) | POST /front/refundInfo | 入 billcode + type;出金额可解释卡数据 |
| 提交申请 | POST /front/refundApply | ApplyRefundOrderReq:reasonId/reasonDesc/银行卡四件套/attachs |
| 退款详情 | POST /front/getRefundDesc | 入原订单 billcode;出 RefundOrderDescRes(含 refundLogs) |
| 撤销申请 | POST /front/userCancle | → status=-2 |
| 确认收款 | POST /front/userConfirm | → status=4 |
| 补充银行卡 | POST /front/saveRefundBank | status≥3 不可改(APPLY_EDIT_AGAIN_ERROR) |
| 退款原因字典 | GET /front/getRefundDicts | 出 id / name → chips |
本稿为 HTML 设计稿,落地小程序时按下表对齐现行设计 token / 组件 / 图标,已通过规范符合性评审。
| 用途 | 稿内值 | 落地 token(仓库真实值) |
|---|---|---|
| 品牌强调红(进度/当前态/chips 选中/时间轴高亮) | #FF3939 | #FF3939(--base-color,与 tabBar selectedColor 一致) |
| 主按钮渐变 / 状态头卡红橙 | 渐变 | linear-gradient(90deg,#FF3939,#EA0B2A);头卡 135deg,#ff5b4a,#e0231c |
| 成功绿(已到账/确认) | #01d28e | #01d28e(--base-green-color) |
| 警告橙(减项/提示) | #ff9900 | #ff9900(--base-orange-color) |
| 主文字 / 金额 | #303133 | #303133(--body-font-color) |
| 页面背景 | #f6f7fb | #f6f7fb(globalStyle backgroundColor) |
| 稿内字符 | 含义 | 落地图标(wd-icon / iconfont) |
|---|---|---|
| 返回箭头 | 导航返回 | wd-icon name="arrow-left" / uni-icons type="left" |
| 勾选 / 完成 | 成功结果、时间轴已完成 | wd-icon name="check" / check-circle-filled |
| 电话 | 联系客服入口 | iconfont lianxikefu(仓库已有) |
| 退回箭头 | 原路退回提示 | iconfont icon-tuikuan(缺则新增,勿用字符) |
| 加号 | 上传凭证 | wd-icon name="add" / uni-icons type="plusempty" |
| 警示 / 信息 | 提示条 | wd-icon name="warning" / info-circle,配 #ff9900 |
999rpx、弹窗 24rpx。0 6rpx 12rpx rgba(234,234,234,.5)(仓库卡片阴影 token)。wd-button type="primary" size="large" block;弹窗 wd-popup position="center" + custom-style="border-radius:24rpx",遮罩 rgba(0,0,0,.4);navbar 自绘并注入 statusBarHeight(44px 仅标题栏,不含状态栏)。#303133,不走品牌红——退款是结算对账语境,红色在金融场景易被读成「扣款」,中性色更利用户核对「应退 − 违约金 = 到账」。仅减项(违约金/补差)用 #ff9900 标注。此为与购买页区分的有意例外,非违反「价格红」规范,后续勿误改回红色。Empty.vue(emptyImg.png + 文案 #c8c7d0 / 36rpx),文案如「暂无退款记录」。Skeleton(row=10) 或 uni.showLoading,即本稿「I · 加载骨架」。CommonResponse.msg(含流水号)。练二 / FitMoments · 全流程全渠道退款用户端重做 · PRD + 设计稿合一 · 已通过设计规范符合性评审