Add landing page, referral system, usage quotas, search API management, and yearly pricing
- Separate workspace landing from login for better UX - Referral system rewards both parties with Pro days - Quota enforcement prevents abuse without breaking endpoints - 7-day free trial with auto-downgrade on expiry - Admin-managed search provider config (SearXNG, Bing) - 15% discount on annual subscriptions - MCP search server wrapping opencode search - Fix discovery module field name mismatch causing 422
This commit is contained in:
@@ -209,13 +209,29 @@
|
||||
<text class="ob-result-hint">你可以去"营销素材"和"产品库"查看更多</text>
|
||||
</view>
|
||||
|
||||
<view class="ob-upgrade" v-if="onboardingStep === 4">
|
||||
<text class="ob-upgrade-title">🚀 升级 Pro,解锁全部功能</text>
|
||||
<view class="ob-compare-row"><text>翻译字符/天</text><text class="free">5,000</text><text class="pro">50,000</text></view>
|
||||
<view class="ob-compare-row"><text>客户管理</text><text class="free">最多5个</text><text class="pro">最多100个</text></view>
|
||||
<view class="ob-compare-row"><text>产品管理</text><text class="free">最多1个</text><text class="pro">最多20个</text></view>
|
||||
<view class="ob-compare-row"><text>跟进提醒</text><text class="free">—</text><text class="pro">✓</text></view>
|
||||
<view class="ob-compare-row"><text>挖掘新客</text><text class="free">—</text><text class="pro">✓</text></view>
|
||||
<text class="ob-upgrade-price">仅 ¥99/月</text>
|
||||
</view>
|
||||
|
||||
<view class="ob-actions">
|
||||
<button class="ob-btn ob-btn-primary" @click="onboardingNext" v-if="onboardingStep === 1">
|
||||
开始生成
|
||||
</button>
|
||||
<button class="ob-btn ob-btn-primary" @click="finishOnboarding" v-if="onboardingStep === 3">
|
||||
<button class="ob-btn ob-btn-primary" @click="onboardingStep = 4" v-if="onboardingStep === 3">
|
||||
开始使用
|
||||
</button>
|
||||
<button class="ob-btn ob-btn-primary" @click="goUpgrade" v-if="onboardingStep === 4">
|
||||
升级 Pro 版
|
||||
</button>
|
||||
<button class="ob-btn ob-btn-secondary" @click="finishOnboarding" v-if="onboardingStep === 4">
|
||||
暂时不用
|
||||
</button>
|
||||
</view>
|
||||
|
||||
<text class="ob-skip" @click="finishOnboarding" v-if="onboardingStep === 1">跳过,以后再说</text>
|
||||
@@ -403,6 +419,11 @@ const finishOnboarding = () => {
|
||||
loadData()
|
||||
}
|
||||
|
||||
const goUpgrade = () => {
|
||||
finishOnboarding()
|
||||
uni.navigateTo({ url: PAGES.UPGRADE })
|
||||
}
|
||||
|
||||
const loadData = async () => {
|
||||
try {
|
||||
const [userRes, silentRes, overviewRes] = await Promise.all([
|
||||
@@ -1111,8 +1132,16 @@ const playTryResult = () => {
|
||||
.ob-actions { margin-top: 32rpx; }
|
||||
.ob-btn { width: 100%; height: 88rpx; border-radius: 12rpx; font-size: 30rpx; border: none; display: flex; align-items: center; justify-content: center; }
|
||||
.ob-btn-primary { background: #1890ff; color: #fff; }
|
||||
.ob-btn-secondary { background: #f5f5f5; color: #666; margin-top: 12rpx; }
|
||||
.ob-skip { display: block; text-align: center; margin-top: 24rpx; font-size: 24rpx; color: #999; }
|
||||
|
||||
.ob-upgrade { margin: 20rpx 0; }
|
||||
.ob-upgrade-title { font-size: 30rpx; font-weight: 600; color: #333; display: block; text-align: center; margin-bottom: 24rpx; }
|
||||
.ob-compare-row { display: flex; justify-content: space-between; padding: 16rpx 0; border-bottom: 1px solid #f0f0f0; font-size: 26rpx; }
|
||||
.ob-compare-row .free { color: #999; width: 80rpx; text-align: center; }
|
||||
.ob-compare-row .pro { color: #1890ff; font-weight: 500; width: 80rpx; text-align: center; }
|
||||
.ob-upgrade-price { display: block; text-align: center; margin-top: 20rpx; font-size: 28rpx; color: #ff4d4f; font-weight: 600; }
|
||||
|
||||
.modal-overlay {
|
||||
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: rgba(0,0,0,0.5);
|
||||
|
||||
Reference in New Issue
Block a user