|
|
@@ -61,17 +61,11 @@
|
|
|
<view class="compare-table">
|
|
|
<view class="compare-row header-row">
|
|
|
<text class="compare-cell cell-feature">权益项</text>
|
|
|
- <text class="compare-cell cell-free">免费</text>
|
|
|
- <text class="compare-cell cell-basic" :class="selectedLevel === 'BASIC' ? 'active' : ''">体验会员</text>
|
|
|
- <text class="compare-cell cell-family" :class="selectedLevel === 'FAMILY' ? 'active' : ''">家庭会员</text>
|
|
|
- <text class="compare-cell cell-premium" :class="selectedLevel === 'PREMIUM' ? 'active' : ''">高级会员</text>
|
|
|
+ <text class="compare-cell" v-for="(col, cidx) in compareColumns" :key="cidx" :class="col.levelCode === selectedLevel ? 'active' : ''">{{ col.levelName || col.levelCode }}</text>
|
|
|
</view>
|
|
|
<view class="compare-row" v-for="(item, idx) in compareData" :key="idx">
|
|
|
- <text class="compare-cell cell-feature">{{ item.name }}</text>
|
|
|
- <text class="compare-cell cell-free">{{ item.free }}</text>
|
|
|
- <text class="compare-cell cell-basic" :class="selectedLevel === 'BASIC' ? 'active' : ''">{{ item.basic }}</text>
|
|
|
- <text class="compare-cell cell-family" :class="selectedLevel === 'FAMILY' ? 'active' : ''">{{ item.family }}</text>
|
|
|
- <text class="compare-cell cell-premium" :class="selectedLevel === 'PREMIUM' ? 'active' : ''">{{ item.premium }}</text>
|
|
|
+ <text class="compare-cell cell-feature">{{ item.benefitName || item.name }}</text>
|
|
|
+ <text class="compare-cell" v-for="(col, cidx) in compareColumns" :key="cidx" :class="col.levelCode === selectedLevel ? 'active' : ''">{{ getCompareCell(item, col.levelCode) }}</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -121,8 +115,9 @@ export default {
|
|
|
{ key: 'yearly', label: '年度', unit: '/年' }
|
|
|
],
|
|
|
selectedPeriod: 'yearly',
|
|
|
- selectedLevel: 'FAMILY',
|
|
|
+ selectedLevel: '',
|
|
|
joinRules: [],
|
|
|
+ compareColumns: [],
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -172,13 +167,13 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
getLevelName(code) {
|
|
|
- var map = {
|
|
|
- FREE: '免费版',
|
|
|
- BASIC: '体验会员',
|
|
|
- FAMILY: '家庭会员',
|
|
|
- PREMIUM: '高级会员'
|
|
|
+ if (!code) return ''
|
|
|
+ for (var i = 0; i < this.levels.length; i++) {
|
|
|
+ if (this.levels[i].levelCode === code) {
|
|
|
+ return this.levels[i].levelName || code
|
|
|
+ }
|
|
|
}
|
|
|
- return map[code] || code || ''
|
|
|
+ return code || ''
|
|
|
},
|
|
|
getSelectedLevelName() {
|
|
|
var name = ''
|
|
|
@@ -206,10 +201,10 @@ export default {
|
|
|
this.membership = membershipRes.data
|
|
|
if (this.membership && this.membership.memberLevel && this.membership.memberLevel !== 'FREE') {
|
|
|
this.isFree = false
|
|
|
- this.currentLevelName = this.membership.levelName || '家庭会员'
|
|
|
+ this.currentLevelName = this.membership.levelName || this.getLevelName(this.membership.memberLevel)
|
|
|
} else {
|
|
|
this.isFree = true
|
|
|
- this.currentLevelName = '免费用户'
|
|
|
+ this.currentLevelName = (this.membership && this.membership.levelName) || ''
|
|
|
}
|
|
|
} catch (e) {
|
|
|
console.error('加载会员信息失败', e)
|
|
|
@@ -218,6 +213,9 @@ export default {
|
|
|
const levelsRes = await getMembershipPlans()
|
|
|
this.levels = levelsRes.data || []
|
|
|
this.applyDefaultLevel()
|
|
|
+ // 等级名改从接口返回的 levelName 读取(含免费用户),前端不再维护等级名映射
|
|
|
+ var lvCode = (this.membership && this.membership.memberLevel) ? this.membership.memberLevel : 'FREE'
|
|
|
+ this.currentLevelName = (this.membership && this.membership.levelName) || this.getLevelName(lvCode)
|
|
|
} catch (e) {
|
|
|
console.error('加载会员等级失败', e)
|
|
|
}
|
|
|
@@ -234,13 +232,21 @@ export default {
|
|
|
loadCompare() {
|
|
|
var self = this
|
|
|
getMembershipCompare().then(function(res) {
|
|
|
- if (res.code === 200 && res.data && res.data.rows) {
|
|
|
- self.compareData = res.data.rows
|
|
|
+ if (res.code === 200 && res.data) {
|
|
|
+ self.compareColumns = res.data.columns || []
|
|
|
+ self.compareData = res.data.rows || []
|
|
|
}
|
|
|
}).catch(function(e) {
|
|
|
console.error('加载权益对比表失败', e)
|
|
|
})
|
|
|
},
|
|
|
+ getCompareCell(item, levelCode) {
|
|
|
+ if (!item || !item.cells) return ''
|
|
|
+ var cell = item.cells[levelCode]
|
|
|
+ if (!cell) return ''
|
|
|
+ if (cell.value != null && cell.value !== '') return cell.value
|
|
|
+ return cell.included ? '✓' : '—'
|
|
|
+ },
|
|
|
selectLevel: function(code) {
|
|
|
this.selectedLevel = code
|
|
|
// 选中第一个有价格的周期,避免切换到无价格的周期导致空档
|
|
|
@@ -259,16 +265,23 @@ export default {
|
|
|
selectPeriod: function(key) {
|
|
|
this.selectedPeriod = key
|
|
|
},
|
|
|
+ getLevelOrder(code) {
|
|
|
+ // 等级高低改由接口返回的 levelOrder 比较,前端不再维护任何等级排序映射
|
|
|
+ for (var i = 0; i < this.levels.length; i++) {
|
|
|
+ if (this.levels[i].levelCode === code) {
|
|
|
+ var o = this.levels[i].levelOrder
|
|
|
+ return (o != null) ? o : 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return 0
|
|
|
+ },
|
|
|
applyDefaultLevel: function() {
|
|
|
var current = this.membership && this.membership.memberLevel ? this.membership.memberLevel : 'FREE'
|
|
|
- // level_order 与 DB membership_levels.level_order 一致:FREE=1 BASIC=2 FAMILY=3 PREMIUM=4 LIFETIME=5;
|
|
|
- // PROVIDER 为服务商独立角色(不参与会员权益),level_order=1 与 FREE 同级
|
|
|
- var rank = { 'FREE': 1, 'BASIC': 2, 'FAMILY': 3, 'PROVIDER': 1, 'PREMIUM': 4, 'LIFETIME': 5 }
|
|
|
- var currentRank = rank[current] !== undefined ? rank[current] : 0
|
|
|
+ var currentOrder = this.getLevelOrder(current)
|
|
|
var target = null
|
|
|
for (var i = 0; i < this.buyableLevels.length; i++) {
|
|
|
- var r = rank[this.buyableLevels[i].levelCode]
|
|
|
- if (r !== undefined && r > currentRank) { target = this.buyableLevels[i].levelCode; break }
|
|
|
+ var r = this.getLevelOrder(this.buyableLevels[i].levelCode)
|
|
|
+ if (r > currentOrder) { target = this.buyableLevels[i].levelCode; break }
|
|
|
}
|
|
|
this.selectedLevel = target || current
|
|
|
},
|
|
|
@@ -533,6 +546,11 @@ export default {
|
|
|
background: $violet-tint-100;
|
|
|
color: $facade-violet;
|
|
|
}
|
|
|
+.compare-cell.active {
|
|
|
+ background: $facade-brand-tint-2;
|
|
|
+ color: $brand-primary;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
|
|
|
/* ===== 等级切换 Tabs ===== */
|
|
|
.level-tabs {
|