Files
huangjingfen/pro_v3.5.1/view/uniapp_v2/pages/queue/rules.vue
apple 8e17762510 feat(uniapp_v2): 二开功能迁移与小程序主包优化
- 从 uniapp 迁移 HJF 页面、API、组件及用户/订单相关改动
- queue、assets 使用独立分包以降低主包体积
- 修复首页单根节点与支付结果页 v-if 链
- 关闭 HjfDemoPanel 全局注册;uniNoticeBar 注释 $getAppWebview 避免 __webviewId__ 报错
- 配置域名与 manifest 应用名称;cache/store 防御性处理

Made-with: Cursor
2026-03-26 12:16:01 +08:00

532 lines
13 KiB
Vue
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.
<template>
<view :style="colorStyle" class="queue-rules">
<!-- 推荐佣金流程图示 -->
<view class="section">
<view class="section-title">推荐佣金流程</view>
<view class="mechanism-card">
<view class="mechanism-title">推荐3人周期佣金流程</view>
<view class="flow-diagram">
<!-- 第一步 -->
<view class="flow-step">
<view class="step-circle step-in"></view>
<view class="step-desc">您邀请用户A 购买报单商品</view>
<view class="step-sub">您获得 20% 佣金第1位比例</view>
</view>
<view class="flow-arrow"></view>
<!-- 第二步 -->
<view class="flow-step">
<view class="step-circle step-in"></view>
<view class="step-desc">您邀请用户B 购买报单商品</view>
<view class="step-sub">您获得 30% 佣金第2位比例</view>
</view>
<view class="flow-arrow"></view>
<!-- 第三步触发完整周期 -->
<view class="flow-step trigger">
<view class="step-circle step-in"></view>
<view class="step-desc">您邀请用户C 购买报单商品</view>
<view class="step-sub">您获得 50% 佣金第3位比例</view>
<view class="trigger-badge">完成一个周期</view>
</view>
<view class="flow-arrow refund-arrow"></view>
<!-- 新周期 -->
<view class="flow-step refund-step">
<view class="step-circle step-out"></view>
<view class="step-desc">进入下一推荐周期</view>
<view class="step-sub">重新从 20% 开始计算</view>
</view>
</view>
<!-- 循环说明 -->
<view class="cycle-note">
<text class="cycle-icon">🔄</text>
<text class="cycle-text">如此循环每推荐3人为一个周期按比例获得佣金</text>
</view>
</view>
<!-- 示例计算卡片 -->
<view class="example-card">
<view class="example-title">示例计算报单商品 ¥3,600</view>
<view class="example-row">
<text class="example-label">推荐第1人佣金20%</text>
<text class="example-value">¥720.00</text>
</view>
<view class="example-row">
<text class="example-label">推荐第2人佣金30%</text>
<text class="example-value">¥1,080.00</text>
</view>
<view class="example-row">
<text class="example-label">推荐第3人佣金50%</text>
<text class="example-value highlight">¥1,800.00</text>
</view>
<view class="example-divider"></view>
<view class="example-row">
<text class="example-label">一个周期累计佣金</text>
<text class="example-value highlight">¥3,600.00100%</text>
</view>
<view class="example-divider"></view>
<view class="example-desc">
佣金将在被推荐人支付订单后直接发放至您的佣金余额可随时申请提现手续费7%
</view>
</view>
</view>
<!-- 规则条款列表 -->
<view class="section">
<view class="section-title">规则条款</view>
<view class="rules-card">
<view
class="rule-item"
v-for="(rule, index) in ruleItems"
:key="index"
>
<view class="rule-index">{{ index + 1 }}</view>
<view class="rule-content">
<view class="rule-title-text">{{ rule.title }}</view>
<view class="rule-body">{{ rule.content }}</view>
</view>
</view>
</view>
</view>
<!-- 常见问题 FAQ 手风琴 -->
<view class="section">
<view class="section-title">常见问题</view>
<view class="faq-list">
<view
class="faq-item"
v-for="(item, index) in faqItems"
:key="index"
@click="toggleFaq(index)"
>
<view class="faq-header acea-row row-between-wrapper">
<view class="faq-question">{{ item.question }}</view>
<view class="faq-arrow" :class="{ 'arrow-up': item.open }"></view>
</view>
<view class="faq-answer" v-if="item.open">{{ item.answer }}</view>
</view>
</view>
</view>
<!-- 底部声明 -->
<view class="footer-note">
<text>本平台推荐佣金规则最终解释权归范氏国香商城所有</text>
</view>
</view>
</template>
<script>
/**
* @file pages/queue/rules.vue
* @description P14 公排规则说明页 — 静态展示页面,无 API 调用
*
* 页面结构:
* 1. 公排机制图示(进四退一流程图 + 示例计算)
* 2. 规则条款列表(编号条款)
* 3. 常见问题 FAQ 手风琴(点击展开/收起)
*
* @module pages/queue/rules
* @requires mixin/color.js — 提供 colorStyle 计算属性(主题色 CSS 变量注入)
*/
import { mapGetters } from 'vuex';
export default {
name: 'QueueRules',
data() {
return {
/**
* @type {Array<{title: string, content: string}>}
* @description 规则条款列表,静态数据
*/
ruleItems: [
{
title: '推荐佣金机制',
content: '购买报单商品¥3,600当您推荐好友购买时您可获得对应周期位次的佣金比例20%/30%/50%)。'
},
{
title: '3人周期循环',
content: '每推荐3人为一个完整周期依次按第1人20%、第2人30%、第3人50%发放佣金。周期结束后自动进入下一轮。'
},
{
title: '佣金自动到账',
content: '佣金将在被推荐人支付订单后直接发放至您的佣金余额,无需手动申请,可在"推荐佣金"页查看。'
},
{
title: '报单商品范围',
content: '仅购买标注为"报单商品"的商品才参与佣金计算,普通商品按常规佣金比例计算。'
},
{
title: '推荐关系绑定',
content: '被推荐人须通过您的专属邀请链接/二维码注册并购买,方可绑定推荐关系并产生佣金。'
},
{
title: '积分奖励叠加',
content: '推荐佣金与积分奖励体系相互独立获得佣金的同时可正常获得待释放积分奖励每日自动释放0.4‰到可用积分。'
},
{
title: '规则变更通知',
content: '若平台对佣金规则进行调整,将提前通过公告及消息通知用户,变更后的规则不溯及既往订单。'
}
],
/**
* @type {Array<{question: string, answer: string, open: boolean}>}
* @description 常见问题列表open 字段控制手风琴展开状态
*/
faqItems: [
{
question: '推荐一个人能得多少佣金?',
answer: '取决于您在当前周期的位次。第1人20%第2人30%第3人50%。以报单商品¥3,600为例分别是¥720、¥1,080、¥1,800。',
open: false
},
{
question: '佣金会到哪里?',
answer: '佣金将发放至您的佣金余额,可在"推荐佣金"页查看并可随时申请提现提现手续费7%)。',
open: false
},
{
question: '推荐超过3人怎么计算',
answer: '每满3人为一个周期自动进入下一周期重新从第1位20%开始计算。如推荐第4人其佣金比例与第1人相同20%)。',
open: false
},
{
question: '我没有购买报单商品可以推荐别人吗?',
answer: '可以推荐,但获得佣金需要您有对应的分销等级。建议先购买报单商品成为会员,再邀请好友。',
open: false
},
{
question: '待释放积分是什么?',
answer: '每次获得佣金时同步获得等额待释放积分1元佣金=100积分。积分每天自动释放0.4‰到可用积分,可用于平台消费抵扣。',
open: false
},
{
question: '佣金和积分可以同时获得吗?',
answer: '可以。推荐好友购买报单商品后,您同时获得佣金和待释放积分,两套机制并行运作,互不影响。',
open: false
},
{
question: '如何查看我的佣金进度?',
answer: '进入"推荐佣金"页可查看当前周期推荐进度X/3、各档比例、累计佣金、佣金记录明细。',
open: false
}
]
};
},
computed: {
...mapGetters(['colorStyle'])
},
methods: {
/**
* @description 切换 FAQ 手风琴展开/收起状态
* @param {number} index - FAQ 条目的索引
*/
toggleFaq(index) {
this.faqItems[index].open = !this.faqItems[index].open;
}
}
};
</script>
<style scoped lang="scss">
.queue-rules {
min-height: 100vh;
background-color: #f5f5f5;
padding-bottom: 40rpx;
}
/* ===== 通用区块 ===== */
.section {
margin: 20rpx 24rpx 0;
}
.section-title {
font-size: 30rpx;
font-weight: 600;
color: #282828;
padding: 24rpx 0 16rpx;
}
/* ===== 机制图示卡片 ===== */
.mechanism-card {
background: #fff;
border-radius: 16rpx;
padding: 30rpx 28rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
.mechanism-title {
font-size: 28rpx;
font-weight: 600;
color: var(--view-theme, #e93323);
text-align: center;
margin-bottom: 30rpx;
}
/* 流程图 */
.flow-diagram {
display: flex;
flex-direction: column;
align-items: center;
}
.flow-step {
width: 100%;
background: #f9f9f9;
border-radius: 12rpx;
padding: 18rpx 24rpx;
text-align: center;
position: relative;
&.trigger {
background: #fff7f0;
border: 2rpx solid #ff9d4d;
}
&.refund-step {
background: #f0fff4;
border: 2rpx solid #52c41a;
}
}
.step-circle {
display: inline-flex;
align-items: center;
justify-content: center;
width: 52rpx;
height: 52rpx;
border-radius: 50%;
font-size: 24rpx;
font-weight: 700;
color: #fff;
margin-bottom: 10rpx;
&.step-in {
background: var(--view-theme, #e93323);
}
&.step-out {
background: #52c41a;
}
}
.step-desc {
font-size: 26rpx;
color: #333;
font-weight: 500;
}
.step-sub {
font-size: 22rpx;
color: #999;
margin-top: 6rpx;
}
.trigger-badge {
display: inline-block;
background: #ff9d4d;
color: #fff;
font-size: 20rpx;
border-radius: 20rpx;
padding: 4rpx 16rpx;
margin-top: 10rpx;
}
.flow-arrow {
font-size: 36rpx;
color: #ccc;
line-height: 50rpx;
text-align: center;
&.refund-arrow {
color: #52c41a;
}
}
/* 循环说明 */
.cycle-note {
display: flex;
align-items: center;
justify-content: center;
margin-top: 24rpx;
padding: 16rpx 20rpx;
background: #f0f4ff;
border-radius: 10rpx;
}
.cycle-icon {
font-size: 28rpx;
margin-right: 10rpx;
}
.cycle-text {
font-size: 24rpx;
color: #555;
}
/* 示例计算卡片 */
.example-card {
background: #fff;
border-radius: 16rpx;
padding: 28rpx;
margin-top: 20rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
.example-title {
font-size: 26rpx;
font-weight: 600;
color: #282828;
margin-bottom: 18rpx;
}
.example-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx 0;
}
.example-label {
font-size: 26rpx;
color: #666;
}
.example-value {
font-size: 26rpx;
color: #333;
font-weight: 500;
&.highlight {
color: #52c41a;
font-weight: 700;
}
}
.example-divider {
height: 1rpx;
background: #f0f0f0;
margin: 16rpx 0;
}
.example-desc {
font-size: 24rpx;
color: #999;
line-height: 1.8;
}
/* ===== 规则条款 ===== */
.rules-card {
background: #fff;
border-radius: 16rpx;
padding: 10rpx 28rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
.rule-item {
display: flex;
padding: 24rpx 0;
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
}
.rule-index {
flex-shrink: 0;
width: 44rpx;
height: 44rpx;
border-radius: 50%;
background: var(--view-theme, #e93323);
color: #fff;
font-size: 22rpx;
font-weight: 700;
display: flex;
align-items: center;
justify-content: center;
margin-right: 20rpx;
margin-top: 4rpx;
}
.rule-content {
flex: 1;
}
.rule-title-text {
font-size: 28rpx;
font-weight: 600;
color: #333;
margin-bottom: 8rpx;
}
.rule-body {
font-size: 24rpx;
color: #777;
line-height: 1.7;
}
/* ===== FAQ 手风琴 ===== */
.faq-list {
background: #fff;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.06);
}
.faq-item {
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
}
.faq-header {
padding: 28rpx;
align-items: center;
}
.faq-question {
flex: 1;
font-size: 28rpx;
color: #333;
font-weight: 500;
line-height: 1.5;
padding-right: 20rpx;
}
.faq-arrow {
flex-shrink: 0;
font-size: 40rpx;
color: #ccc;
transform: rotate(90deg);
transition: transform 0.25s ease;
line-height: 1;
&.arrow-up {
transform: rotate(-90deg);
color: var(--view-theme, #e93323);
}
}
.faq-answer {
padding: 0 28rpx 24rpx;
font-size: 24rpx;
color: #888;
line-height: 1.8;
background: #fafafa;
}
/* ===== 底部声明 ===== */
.footer-note {
margin: 30rpx 24rpx 0;
text-align: center;
font-size: 22rpx;
color: #bbb;
}
</style>