diff --git a/package1/components/planet/hunt-modal.vue b/package1/components/planet/hunt-modal.vue
index 1cb1088..af3247b 100644
--- a/package1/components/planet/hunt-modal.vue
+++ b/package1/components/planet/hunt-modal.vue
@@ -58,14 +58,14 @@
},
resultBadge() {
if (!this.result) return 'GO'
- if (this.result.result === 'success') return 'GET'
- if (this.result.result === 'shield') return 'SAFE'
+ if (this.result.result === 'success') return '哈哈'
+ if (this.result.result === 'shield') return '哭哭'
return 'MISS'
},
resultTitle() {
if (!this.result) return ''
if (this.result.result === 'success') return '追捕成功'
- if (this.result.result === 'shield') return '目标已防护'
+ if (this.result.result === 'shield') return '被防御塔击中'
return '追捕扑空'
}
},
@@ -216,20 +216,31 @@
height: 160rpx;
line-height: 160rpx;
text-align: center;
- border-radius: 50%;
- background: linear-gradient(145deg, #E5FFF1, #EAF8FF);
- color: #22B889;
- font-size: 30rpx;
+ border-radius: 54rpx 54rpx 64rpx 64rpx;
+ background: linear-gradient(145deg, #FFF2B8, #FFB84D);
+ color: #7A3C00;
+ font-size: 38rpx;
font-weight: 900;
letter-spacing: 2rpx;
- animation: pop 0.5s ease;
- box-shadow: inset 0 0 0 2rpx rgba(255,255,255,0.92), 0 18rpx 42rpx rgba(53,214,166,0.14);
+ animation: pirateLaugh 0.72s ease infinite;
+ box-shadow: inset 0 0 0 2rpx rgba(255,255,255,0.92), 0 18rpx 42rpx rgba(255,184,77,0.18);
+ position: relative;
+ }
+
+ .hm-result-emoji:before {
+ content: '';
+ position: absolute;
+ left: 30rpx;
+ right: 30rpx;
+ top: 48rpx;
+ height: 18rpx;
+ border-radius: 999rpx;
+ background: rgba(122,60,0,0.18);
}
- @keyframes pop {
- 0% { transform: scale(0.3); opacity: 0; }
- 70% { transform: scale(1.2); }
- 100% { transform: scale(1); opacity: 1; }
+ @keyframes pirateLaugh {
+ 0%, 100% { transform: translateY(0) rotate(-3deg); }
+ 50% { transform: translateY(-8rpx) rotate(3deg); }
}
.hm-result-title {
diff --git a/package1/components/planet/planet-box.vue b/package1/components/planet/planet-box.vue
index 8a4097c..e346dbe 100644
--- a/package1/components/planet/planet-box.vue
+++ b/package1/components/planet/planet-box.vue
@@ -1,5 +1,5 @@
-
+
{{available ? 'TODAY DROP' : 'TOMORROW DROP'}}
@@ -28,6 +28,10 @@
opening: {
type: Boolean,
default: false
+ },
+ compact: {
+ type: Boolean,
+ default: false
}
},
methods: {
@@ -175,4 +179,74 @@
color: #7E9691;
box-shadow: none;
}
+
+ .pb.compact {
+ flex: 1;
+ min-width: 0;
+ min-height: 190rpx;
+ margin-top: 0;
+ padding: 22rpx 18rpx;
+ border-radius: 34rpx;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+
+ .pb.compact .pb-tag {
+ right: 18rpx;
+ top: 14rpx;
+ font-size: 15rpx;
+ }
+
+ .pb.compact .pb-visual {
+ width: 94rpx;
+ height: 94rpx;
+ }
+
+ .pb.compact .pb-glow {
+ width: 112rpx;
+ height: 112rpx;
+ }
+
+ .pb.compact .pb-box {
+ width: 66rpx;
+ height: 68rpx;
+ border-radius: 18rpx;
+ }
+
+ .pb.compact .pb-box-lid {
+ left: -6rpx;
+ top: -14rpx;
+ width: 78rpx;
+ height: 26rpx;
+ }
+
+ .pb.compact .pb-box-face {
+ width: 32rpx;
+ height: 32rpx;
+ line-height: 32rpx;
+ font-size: 22rpx;
+ }
+
+ .pb.compact .pb-mid {
+ margin-left: 0;
+ margin-top: 10rpx;
+ }
+
+ .pb.compact .pb-title {
+ font-size: 27rpx;
+ }
+
+ .pb.compact .pb-desc {
+ font-size: 20rpx;
+ line-height: 28rpx;
+ margin-top: 6rpx;
+ }
+
+ .pb.compact .pb-btn {
+ margin-top: 14rpx;
+ height: 48rpx;
+ line-height: 48rpx;
+ padding: 0 18rpx;
+ font-size: 21rpx;
+ }
diff --git a/package1/components/planet/planet-daily-loop.vue b/package1/components/planet/planet-daily-loop.vue
index 4b1c1b7..81c8f57 100644
--- a/package1/components/planet/planet-daily-loop.vue
+++ b/package1/components/planet/planet-daily-loop.vue
@@ -42,31 +42,6 @@
→
-
-
-
-
- {{taskDone('sign') ? '✓ 已完成' : '待签到'}}
-
- 签到收券
- 奖励 +1 星球券
-
-
-
-
- {{taskDone('hunt') ? '✓ 已完成' : '去搜查 →'}}
-
- 星球搜查令
- 随机搜查,白嫖得券
-
-
-
{{data.todayCollectedTickets || 0}}
@@ -112,16 +87,13 @@
doneCount() {
let count = 0
if (this.taskDone('pool')) count += 1
- if (this.taskDone('sign')) count += 1
- if (this.taskDone('hunt')) count += 1
return count
},
progressPercent() {
- return Math.round((this.doneCount / 3) * 100)
+ return this.taskDone('pool') ? 100 : 0
},
progressTitle() {
- const left = 3 - this.doneCount
- return left > 0 ? ('离瓜分奖金池还差 ' + left + ' 步') : '今日白嫖进度已完成'
+ return this.taskDone('pool') ? '今日已参与奖金池' : '投入星球券瓜分奖金池'
},
boostText() {
const current = Number(this.data.myProbability || 0)
@@ -136,19 +108,9 @@
},
methods: {
taskDone(type) {
- if (type === 'sign') return !!this.data.signedToday && !this.data.boxAvailable
- if (type === 'hunt') return !!this.data.searchedToday || !!this.data.huntedToday || (this.data.remainSearchCount === 0)
if (type === 'pool') return (this.data.myPoolTickets || 0) > 0
return false
},
- onCollect() {
- this.playReward('+1 星球券', 'sign')
- this.$emit('collect')
- },
- onRevenge() {
- this.playReward('随机奖励', 'hunt')
- this.$emit('revenge')
- },
playReward(text, type) {
if (this.rewardTimer) clearTimeout(this.rewardTimer)
this.rewardFloat = {
diff --git a/package1/components/planet/planet-header.vue b/package1/components/planet/planet-header.vue
index a438568..5e3314f 100644
--- a/package1/components/planet/planet-header.vue
+++ b/package1/components/planet/planet-header.vue
@@ -5,7 +5,6 @@
Hello,白嫖居民
- 得券明细
开奖记录
@@ -65,7 +64,7 @@
-
+
我的星球券 {{data.myTicketCount || 0}} 张
diff --git a/package1/components/planet/planet-me.vue b/package1/components/planet/planet-me.vue
index c221f04..77ee87e 100644
--- a/package1/components/planet/planet-me.vue
+++ b/package1/components/planet/planet-me.vue
@@ -1,5 +1,5 @@
-
+
PLANET PASS
@@ -39,6 +39,10 @@
data: {
type: Object,
default: () => ({})
+ },
+ compact: {
+ type: Boolean,
+ default: false
}
},
data() {
@@ -233,4 +237,86 @@
color: #22B889;
font-family: DIN, Arial, sans-serif;
}
+
+ .pm.compact {
+ flex: 1;
+ min-width: 0;
+ min-height: 190rpx;
+ margin-top: 0;
+ padding: 22rpx 18rpx;
+ border-radius: 34rpx;
+ }
+
+ .pm.compact .pm-stamp {
+ right: 18rpx;
+ top: 16rpx;
+ font-size: 16rpx;
+ letter-spacing: 2rpx;
+ }
+
+ .pm.compact .pm-avatar {
+ width: 68rpx;
+ height: 68rpx;
+ border-width: 4rpx;
+ }
+
+ .pm.compact .pm-info {
+ margin-left: 12rpx;
+ }
+
+ .pm.compact .pm-name {
+ font-size: 27rpx;
+ }
+
+ .pm.compact .pm-sub {
+ margin-top: 6rpx;
+ }
+
+ .pm.compact .pm-sub text {
+ font-size: 19rpx;
+ margin-right: 8rpx;
+ }
+
+ .pm.compact .pm-ticket {
+ min-width: 94rpx;
+ height: 74rpx;
+ border-radius: 22rpx;
+ padding: 0 10rpx;
+ }
+
+ .pm.compact .pm-ticket-num {
+ font-size: 28rpx;
+ line-height: 30rpx;
+ }
+
+ .pm.compact .pm-ticket-label {
+ font-size: 17rpx;
+ }
+
+ .pm.compact .pm-sign {
+ margin-top: 16rpx;
+ height: 50rpx;
+ line-height: 50rpx;
+ font-size: 21rpx;
+ }
+
+ .pm.compact .pm-buffs {
+ margin-top: 14rpx;
+ }
+
+ .pm.compact .pm-buffs-label {
+ font-size: 19rpx;
+ margin-right: 8rpx;
+ }
+
+ .pm.compact .pm-buff {
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 14rpx;
+ margin-right: 8rpx;
+ }
+
+ .pm.compact .pm-buff-emoji {
+ font-size: 16rpx;
+ }
diff --git a/package1/components/planet/planet-operate.vue b/package1/components/planet/planet-operate.vue
index 4b397db..dbadbfc 100644
--- a/package1/components/planet/planet-operate.vue
+++ b/package1/components/planet/planet-operate.vue
@@ -4,11 +4,11 @@
CAMPUS FARM
松鼠星际农场
- 种券、仓库、防御塔和地标争夺,每天都有一点成长
-
-
- {{state.stamina || 0}}
- 体力
+ 种券和防御塔保留,每天一点成长,轻量经营。
+
+
+ Lv{{state.towerLevel || 1}}
+ 防御塔
@@ -28,42 +28,12 @@
-
- SAFE
- 松鼠仓库 Lv{{state.warehouseLevel || 1}}
-
- {{state.warehouseTicketCount || 0}} / {{state.warehouseCapacity || 10}} 张安全券
-
- 存入
- 取出
- 升级
-
-
-
TOWER
防御塔 Lv{{state.towerLevel || 1}}
- 拦截 {{state.towerInterceptRate || 0}}% · 伤害 {{state.towerDamage || 0}}
+ 拦截 {{state.towerInterceptRate || 0}}% · 反击 {{state.towerCounterRate || 0}}% · 伤害 {{state.towerDamage || 0}}
升级防御
-
-
- RADAR
- 星际搜查
- 今日 {{state.dailySearchCount || 0}} 次 · 获得 {{state.dailySearchGain || 0}} 券
- 派出松鼠宇航员
-
-
-
-
- 校园地标
-
-
- {{l.icon || 'LAND'}}
- {{l.name}}
- {{benefitText(l)}}
-
-
@@ -93,25 +63,11 @@
},
treeOrders() {
return (this.data && this.data.treeOrders) || []
- },
- landmarks() {
- return (this.data && this.data.landmarks) || []
- },
- warehousePercent() {
- const cap = this.state.warehouseCapacity || 10
- return Math.min(100, Math.round(((this.state.warehouseTicketCount || 0) / cap) * 100))
}
},
methods: {
rateText(rate) {
return Math.round((Number(rate || 0)) * 100) + '%'
- },
- benefitText(item) {
- if (item.benefitType === 'ticket') return '每日+' + item.benefitValue + '券'
- if (item.benefitType === 'stamina_speed') return '体力+' + item.benefitValue + '%'
- if (item.benefitType === 'search_rate') return '搜查+' + item.benefitValue + '%'
- if (item.benefitType === 'tower_damage') return '防御+' + item.benefitValue + '%'
- return '校园增益'
}
}
}
@@ -123,9 +79,9 @@
.po-kicker { color: #59CBB5; font-size: 20rpx; font-weight: 900; letter-spacing: 2rpx; }
.po-title { margin-top: 6rpx; color: #12342F; font-size: 40rpx; font-weight: 900; }
.po-sub { margin-top: 8rpx; color: #6B817D; font-size: 24rpx; }
- .po-stamina { width: 124rpx; height: 124rpx; border-radius: 44rpx; background: linear-gradient(145deg, rgba(255,255,255,0.96), rgba(225,250,255,0.82)); display: flex; flex-direction: column; align-items: center; justify-content: center; box-shadow: 0 18rpx 42rpx rgba(79,183,255,0.16); }
- .po-stamina-num { color: #22B889; font-size: 36rpx; font-weight: 900; }
- .po-stamina-label { color: #6B817D; font-size: 20rpx; }
+ .po-tower-badge { width: 124rpx; height: 124rpx; border-radius: 44rpx; background: linear-gradient(145deg, rgba(255,255,255,0.96), rgba(225,250,255,0.82)); display: flex; flex-direction: column; align-items: center; justify-content: center; box-shadow: 0 18rpx 42rpx rgba(79,183,255,0.16); }
+ .po-tower-badge text:first-child { color: #22B889; font-size: 36rpx; font-weight: 900; }
+ .po-tower-badge text:last-child { color: #6B817D; font-size: 20rpx; }
.po-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18rpx; }
.po-card { position: relative; min-height: 250rpx; padding: 24rpx; border-radius: 38rpx; background: linear-gradient(155deg, rgba(255,255,255,0.9), rgba(241,255,249,0.72)); border: 2rpx solid rgba(255,255,255,0.9); box-shadow: 0 20rpx 46rpx rgba(53,214,166,0.12); overflow: hidden; }
.po-card.tree { grid-column: span 2; min-height: 280rpx; }
@@ -143,13 +99,8 @@
.po-actions { display: flex; gap: 10rpx; margin-top: 18rpx; }
.po-actions text, .po-main-btn { display: inline-flex; align-items: center; justify-content: center; height: 54rpx; padding: 0 18rpx; border-radius: 999rpx; background: linear-gradient(135deg, #DFFBF1, #E8F6FF); color: #22B889; font-size: 22rpx; font-weight: 800; }
.po-main-btn { margin-top: 18rpx; }
- .po-land, .po-orders { margin-top: 20rpx; padding: 24rpx; border-radius: 38rpx; background: rgba(255,255,255,0.62); border: 2rpx solid rgba(255,255,255,0.86); box-shadow: 0 18rpx 42rpx rgba(79,183,255,0.1); }
+ .po-orders { margin-top: 20rpx; padding: 24rpx; border-radius: 38rpx; background: rgba(255,255,255,0.62); border: 2rpx solid rgba(255,255,255,0.86); box-shadow: 0 18rpx 42rpx rgba(79,183,255,0.1); }
.po-land-title { color: #12342F; font-size: 30rpx; font-weight: 900; }
- .po-land-scroll { margin-top: 18rpx; white-space: nowrap; width: 100%; }
- .po-land-item { display: inline-flex; flex-direction: column; justify-content: center; width: 190rpx; height: 170rpx; margin-right: 18rpx; padding: 18rpx; border-radius: 32rpx; background: linear-gradient(155deg, rgba(255,255,255,0.92), rgba(247,239,255,0.68)); box-sizing: border-box; }
- .po-land-icon { color: #8F7CFF; font-size: 20rpx; font-weight: 900; }
- .po-land-name { margin-top: 12rpx; color: #12342F; font-size: 27rpx; font-weight: 900; }
- .po-land-benefit { margin-top: 8rpx; color: #6B817D; font-size: 22rpx; }
.po-order { display: flex; align-items: center; justify-content: space-between; margin-top: 18rpx; padding: 18rpx; border-radius: 28rpx; background: rgba(255,255,255,0.78); }
.po-order-title { color: #12342F; font-size: 26rpx; font-weight: 800; }
.po-order-desc { margin-top: 6rpx; color: #6B817D; font-size: 22rpx; }
diff --git a/package1/components/planet/rank-item.vue b/package1/components/planet/rank-item.vue
index f9e8886..ecd8c8b 100644
--- a/package1/components/planet/rank-item.vue
+++ b/package1/components/planet/rank-item.vue
@@ -23,7 +23,7 @@
@tap.stop="onHunt">
防护中
榜上有我
- 发起追捕
+ 发起掠夺
diff --git a/package1/planet/index.vue b/package1/planet/index.vue
index 415978b..1b2766c 100644
--- a/package1/planet/index.vue
+++ b/package1/planet/index.vue
@@ -43,25 +43,25 @@
-
-
-
-
-
+
+
+
+
+
+
@@ -86,6 +86,22 @@
+
+
+
+ WIN
+ 恭喜中奖啦
+ {{winningModal.data.levelName || '白嫖星球奖励'}}
+
+ ¥{{winningAmount}}
+
+ 奖金已准备好,开心收下后会进入账户余额
+
+ {{winningModal.receiving ? '领取中...' : '开心收下'}}
+
+
+
+
BANJINLI GUIDE
@@ -160,6 +176,11 @@
show: false,
data: {}
},
+ winningModal: {
+ show: false,
+ data: {},
+ receiving: false
+ },
guideVisible: false,
huntModal: {
show: false,
@@ -180,6 +201,10 @@
arr.push(`top:${top}%;left:${left}%;width:${size}px;height:${size}px;animation-delay:${delay}s;`)
}
return arr
+ },
+ winningAmount() {
+ const amount = Number((this.winningModal.data && this.winningModal.data.amount) || 0)
+ return amount.toFixed(2)
}
},
onLoad() {
@@ -229,6 +254,7 @@
this.loading = false
if (res.code == 200 && res.result) {
this.home = res.result
+ this.showUnreadWinning()
} else if (res.message) {
this.tui.toast(res.message)
}
@@ -266,6 +292,49 @@
this.boxOpening = false
})
},
+ showUnreadWinning() {
+ const win = this.home && this.home.unreadWinning
+ const winnerId = this.getWinnerId(win)
+ if (!win || !winnerId) return
+ if (this.winningModal.show && this.getWinnerId(this.winningModal.data) === winnerId) return
+ this.winningModal = {
+ show: true,
+ data: win,
+ receiving: false
+ }
+ },
+ getWinnerId(win) {
+ if (!win) return ''
+ return win.id || win.winnerId || win._id || ''
+ },
+ receiveWinning() {
+ const win = this.winningModal.data || {}
+ const winnerId = this.getWinnerId(win)
+ if (this.winningModal.receiving) return
+ if (!winnerId) {
+ this.tui.toast('中奖记录ID缺失')
+ return
+ }
+ if (win.isReceived === 1) {
+ this.winningModal.show = false
+ return
+ }
+ this.winningModal.receiving = true
+ this.tui.request('/app/planet/draw/receive', 'POST', {
+ userId: this.userId,
+ regionId: this.regionId,
+ winnerId
+ }).then((res) => {
+ this.winningModal.receiving = false
+ this.tui.toast(res.message, 1500, res.code == 200)
+ if (res.code == 200) {
+ this.winningModal.show = false
+ this.loadHome(true)
+ }
+ }).catch(() => {
+ this.winningModal.receiving = false
+ })
+ },
onHunt(item) {
if (item.self) {
this.tui.toast('不能追捕自己')
@@ -354,10 +423,10 @@
setTimeout(() => {
if (res.code == 200 && res.result) {
this.huntModal.result = {
- result: res.result.intercepted ? 'shield' : 'success',
+ result: res.result.countered ? 'shield' : (res.result.intercepted ? 'fail' : 'success'),
message: res.result.message,
gainTickets: res.result.gainTickets,
- totalGain: res.result.gainTickets,
+ totalGain: res.result.gainTickets || 0,
remainHunt: res.result.remainSearchCount
}
this.huntModal.phase = 'result'
@@ -680,6 +749,13 @@
height: 60rpx;
}
+ .planet-quick-row {
+ margin-top: 24rpx;
+ display: flex;
+ gap: 18rpx;
+ align-items: stretch;
+ }
+
/* 骨架屏 */
.skeleton {
padding-top: 22rpx;
@@ -791,6 +867,113 @@
box-shadow: 0 18rpx 36rpx rgba(53,214,166,0.25);
}
+ .win-mask {
+ position: fixed;
+ top: 0; left: 0; right: 0; bottom: 0;
+ z-index: 86;
+ background: rgba(18,52,47,0.34);
+ backdrop-filter: blur(10px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0 42rpx;
+ }
+
+ .win-card {
+ position: relative;
+ width: 100%;
+ padding: 62rpx 40rpx 42rpx;
+ border-radius: 52rpx;
+ background: linear-gradient(155deg, rgba(255,255,255,0.96), rgba(255,247,225,0.9) 54%, rgba(235,255,246,0.88));
+ border: 2rpx solid rgba(255,255,255,0.94);
+ box-shadow: 0 38rpx 90rpx rgba(255,184,77,0.24);
+ text-align: center;
+ overflow: hidden;
+ }
+
+ .win-burst {
+ position: absolute;
+ left: 50%;
+ top: -120rpx;
+ width: 520rpx;
+ height: 520rpx;
+ transform: translateX(-50%);
+ border-radius: 50%;
+ background: radial-gradient(circle, rgba(255,206,89,0.46), transparent 66%);
+ animation: pulse 1.5s ease-in-out infinite;
+ }
+
+ .win-medal {
+ position: relative;
+ margin: 0 auto;
+ width: 178rpx;
+ height: 178rpx;
+ line-height: 178rpx;
+ border-radius: 50%;
+ background: linear-gradient(145deg, #FFF7B8, #FFB84D);
+ color: #9A5A00;
+ font-size: 34rpx;
+ font-weight: 900;
+ letter-spacing: 3rpx;
+ box-shadow: inset -12rpx -16rpx 28rpx rgba(154,90,0,0.12), 0 22rpx 48rpx rgba(255,184,77,0.28);
+ animation: bounce 1s ease infinite;
+ }
+
+ .win-title {
+ position: relative;
+ margin-top: 24rpx;
+ color: #12342F;
+ font-size: 42rpx;
+ font-weight: 900;
+ }
+
+ .win-sub {
+ position: relative;
+ margin-top: 10rpx;
+ color: #8A6A26;
+ font-size: 26rpx;
+ font-weight: 800;
+ }
+
+ .win-amount {
+ position: relative;
+ margin-top: 18rpx;
+ color: #FF7A59;
+ font-size: 64rpx;
+ font-weight: 900;
+ font-family: DIN, Arial, sans-serif;
+ }
+
+ .win-amount text {
+ font-size: 32rpx;
+ margin-right: 4rpx;
+ }
+
+ .win-tip {
+ position: relative;
+ margin-top: 10rpx;
+ color: #42635E;
+ font-size: 25rpx;
+ line-height: 1.5;
+ }
+
+ .win-btn {
+ position: relative;
+ margin-top: 34rpx;
+ height: 82rpx;
+ line-height: 82rpx;
+ border-radius: 999rpx;
+ background: linear-gradient(135deg, #FFB84D, #FF7A59);
+ color: #FFFFFF;
+ font-size: 30rpx;
+ font-weight: 900;
+ box-shadow: 0 18rpx 38rpx rgba(255,122,89,0.26);
+ }
+
+ .win-btn.disabled {
+ opacity: 0.68;
+ }
+
.guide-mask {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
diff --git a/package1/planet/more.vue b/package1/planet/more.vue
index c977af0..134b0b3 100644
--- a/package1/planet/more.vue
+++ b/package1/planet/more.vue
@@ -11,8 +11,8 @@
PLANET SUPPLY
- 把长期玩法都放在这里
- 券树、仓库、防御塔、地标、任务和能量站,想深入经营时再进来。
+ 轻量经营补给地图
+ 保留松鼠星际农场、券树培育和防御塔成长,玩法更轻更直接。
{{home.myTicketCount || 0}}
@@ -26,12 +26,7 @@
:data="home.operate"
@plant="onPlantTree"
@harvest="onHarvestTree"
- @store="onStoreWarehouse"
- @take="onTakeWarehouse"
- @upgradeWarehouse="onUpgradeWarehouse"
- @upgradeTower="onUpgradeTower"
- @search="onRandomSearch"
- @bid="onBidLandmark">
+ @upgradeTower="onUpgradeTower">
-
-
-
-
-
-