feat: 优化UI
This commit is contained in:
+25
-12
@@ -10,6 +10,7 @@ const api = require('../../utils/api')
|
||||
Page({
|
||||
data: {
|
||||
isVip: false,
|
||||
vipPriceText: '',
|
||||
categories: [],
|
||||
activeFilter: '',
|
||||
filteredDomains: [],
|
||||
@@ -22,6 +23,7 @@ Page({
|
||||
|
||||
onShow() {
|
||||
this._loadChannels()
|
||||
this._loadVipPrice()
|
||||
this._onSubChange = () => this._loadChannels()
|
||||
this._onVipChange = () => this._loadChannels()
|
||||
app.on('subscriptionChange', this._onSubChange)
|
||||
@@ -69,6 +71,9 @@ Page({
|
||||
var filtered = channels.map(function (ch) {
|
||||
var isFree = ch.isFree === 1
|
||||
var isVipOnly = ch.isVipOnly === 1
|
||||
var isSubscribed = ch.hasSubscribed === 1
|
||||
// VIP 用户可播放所有频道
|
||||
var canPlay = gd.isVip || isFree || isSubscribed
|
||||
// 最低价(分→元)
|
||||
var lowestPrice = null
|
||||
if (!isFree && !isVipOnly) {
|
||||
@@ -83,10 +88,11 @@ Page({
|
||||
}
|
||||
}
|
||||
return Object.assign({}, ch, {
|
||||
_isSubscribed: ch.hasSubscribed === 1,
|
||||
_isSubscribed: isSubscribed,
|
||||
_isFree: isFree,
|
||||
_isVipOnly: isVipOnly,
|
||||
_lowestPrice: lowestPrice
|
||||
_lowestPrice: lowestPrice,
|
||||
_canPlay: canPlay
|
||||
})
|
||||
})
|
||||
|
||||
@@ -102,6 +108,19 @@ Page({
|
||||
})
|
||||
},
|
||||
|
||||
_loadVipPrice() {
|
||||
var self = this
|
||||
api.getVipConfig().then(function (res) {
|
||||
if (res.code === 200 && res.data) {
|
||||
var cfg = res.data
|
||||
var p = cfg.discountedPrice > 0 ? cfg.discountedPrice : cfg.price
|
||||
self.setData({ vipPriceText: (p / 100).toFixed(2) + '元' })
|
||||
}
|
||||
}).catch(function () {
|
||||
self.setData({ vipPriceText: '' })
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 切换分类筛选
|
||||
*/
|
||||
@@ -129,25 +148,19 @@ Page({
|
||||
}
|
||||
if (!channel) return
|
||||
|
||||
// 已订阅 → 直接进详情页
|
||||
if (channel._isSubscribed) {
|
||||
// 规则1:canPlay(VIP || isFree || hasSubscribed)→ 进频道详情
|
||||
if (channel._canPlay) {
|
||||
wx.navigateTo({ url: '/pages/channel-detail/index?id=' + id })
|
||||
return
|
||||
}
|
||||
|
||||
// 免费 → 直接进详情收听
|
||||
if (channel._isFree) {
|
||||
wx.navigateTo({ url: '/pages/channel-detail/index?id=' + id })
|
||||
return
|
||||
}
|
||||
|
||||
// VIP专享 → 引导 VIP 页
|
||||
// 规则2:VIP专享 → 只能开通VIP,不可订阅
|
||||
if (channel._isVipOnly) {
|
||||
wx.navigateTo({ url: '/pages/vip/index' })
|
||||
return
|
||||
}
|
||||
|
||||
// 付费订阅 → 跳转 VIP/订阅页(channel 模式)
|
||||
// 付费频道未订阅 → 跳转订阅页
|
||||
var params = 'channelId=' + id
|
||||
+ '&channelName=' + encodeURIComponent(channel.name || '')
|
||||
+ '&monthlyPrice=' + (channel.monthlyPrice || 0)
|
||||
|
||||
@@ -58,26 +58,18 @@
|
||||
</view>
|
||||
|
||||
<!-- 行动按钮 -->
|
||||
<!-- 已订阅 -->
|
||||
<view wx:if="{{item._isSubscribed}}" class="sub-btn subscribed" bindtap="onAction" data-id="{{item.id}}">
|
||||
<t-icon name="check-circle" size="28rpx" color="#999" />
|
||||
<text>已订阅</text>
|
||||
<!-- 可播放(VIP / 免费 / 已订阅)→ 收听 -->
|
||||
<view wx:if="{{item._canPlay}}" class="sub-btn free" bindtap="onAction" data-id="{{item.id}}">
|
||||
<text>▶ 收听</text>
|
||||
</view>
|
||||
|
||||
<!-- 免费 → 收听 -->
|
||||
<view wx:elif="{{item._isFree}}" class="sub-btn free" bindtap="onAction" data-id="{{item.id}}">
|
||||
<t-icon name="play-circle" size="28rpx" color="#FFF" />
|
||||
<text>收听</text>
|
||||
</view>
|
||||
|
||||
<!-- VIP专享 -->
|
||||
<!-- VIP专享(且非VIP用户)-->
|
||||
<view wx:elif="{{item._isVipOnly}}" class="sub-btn vip" bindtap="onAction" data-id="{{item.id}}">
|
||||
<text>👑 VIP专享</text>
|
||||
</view>
|
||||
|
||||
<!-- 付费订阅 -->
|
||||
<view wx:else class="sub-btn paid" bindtap="onAction" data-id="{{item.id}}">
|
||||
<t-icon name="shop" size="28rpx" color="#FFF" />
|
||||
<text>订阅</text>
|
||||
</view>
|
||||
</view>
|
||||
@@ -94,7 +86,7 @@
|
||||
<text class="vip-banner-desc">立享极致畅听体验</text>
|
||||
</view>
|
||||
<view class="vip-banner-price">
|
||||
<text>19.9元/月</text>
|
||||
<text>{{vipPriceText || '会员价'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user