|
@@ -56,22 +56,31 @@
|
|
|
</view>
|
|
|
<view class="w-690rpx mt-15rpx h-90rpx w-full flex items-center justify-center text-white">
|
|
|
<image src="@/static/images/trophy/jinbi.png" class="w-60rpx h-60rpx mr-10rpx"></image>
|
|
|
- <text class="text-[60rpx] font-700 mr-10rpx" ref="goldCoinEl">
|
|
|
- {{ currentLibaoData.currentValue }}
|
|
|
- </text>
|
|
|
+ <count-up
|
|
|
+ ref="goldCoinEl"
|
|
|
+ class="text-[60rpx] font-700 mr-10rpx"
|
|
|
+ :end-val="currentLibaoData.currentValue || 0"
|
|
|
+ :duration="1"
|
|
|
+ :options="options"
|
|
|
+ />
|
|
|
<text class="text-24rpx font-400 pt-20rpx">BHCoin</text>
|
|
|
</view>
|
|
|
<view
|
|
|
id="lottieContainer"
|
|
|
class="w-690rpx flex items-center justify-center mt-30rpx h-557rpx"
|
|
|
@click="tishiShow = true"
|
|
|
- >
|
|
|
- <!-- <image src="@/static/images/production/cat.png" class="w-250rpx h-557rpx"></image>-->
|
|
|
- </view>
|
|
|
- <view class="w-full flex items-center justify-center mt-20rpx">
|
|
|
+ ></view>
|
|
|
+ <view class="w-full flex items-center justify-center mt-20rpx relative">
|
|
|
<view class="custrom-bg w-650rpx flex text-white items-center">
|
|
|
<wd-progress :percentage="percentage" hide-text :duration="0.1" />
|
|
|
</view>
|
|
|
+ <view
|
|
|
+ @click.stop="goPage('/pages/play/index')"
|
|
|
+ class="absolute right-50rpx bottom-100rpx libao-scale flex flex-col items-center z-10"
|
|
|
+ >
|
|
|
+ <image src="@/static/images/production/maozhuao.png" class="w-100rpx h-100rpx"></image>
|
|
|
+ <text class="text-28rpx font-700 text-white">game</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
<view class="w-650rpx flex items-center justify-between mt-20rpx">
|
|
|
<view class="flex items-center">
|
|
@@ -85,7 +94,6 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="w-650rpx flex items-center mt-20rpx justify-between">
|
|
|
- <!-- @click="goPage('/pages/play/index')"-->
|
|
|
<view
|
|
|
@click="startGame"
|
|
|
class="w-310rpx h-80rpx flex items-center justify-center relative bg-#111 rounded-20rpx"
|
|
@@ -97,7 +105,7 @@
|
|
|
</text>
|
|
|
</view>
|
|
|
<view
|
|
|
- @click="shengjiShow = true"
|
|
|
+ @click="shengji"
|
|
|
class="w-310rpx h-80rpx flex items-center justify-center relative bg-#111 rounded-20rpx"
|
|
|
>
|
|
|
<image src="@/static/images/production/btn.png" class="w-310rpx h-80rpx absolute"></image>
|
|
@@ -113,16 +121,20 @@
|
|
|
src="@/static/images/production/playbg.png"
|
|
|
class="w-243rpx h-44rpx absolute left-36rpx"
|
|
|
></image>
|
|
|
- <view class="flex items-center justify-center z-1 ml-77rpx mt-10rpx">
|
|
|
+ <view class="w-full flex items-center justify-start z-1 ml-55rpx mt-10rpx">
|
|
|
<image
|
|
|
src="@/static/images/production/shangsheng.png"
|
|
|
class="w-14rpx h-19rpx mr-10rpx"
|
|
|
></image>
|
|
|
- <text class="text-18rpx font-400 text-white">08:01:11(+0.02/s)</text>
|
|
|
+ <text class="text-18rpx font-400 text-white">
|
|
|
+ {{ gamePlayTime }}(+{{
|
|
|
+ playData.temporaryRate
|
|
|
+ ? (playData.temporaryRate ? playData.temporaryRate / 100 : 0).toFixed(2)
|
|
|
+ : 0
|
|
|
+ }}/s)
|
|
|
+ </text>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <!-- <view id="lottieContainer" class="box"></view>-->
|
|
|
- <!-- <button @click="show = !show">Solana Wallet</button>-->
|
|
|
</view>
|
|
|
<!-- 语言 -->
|
|
|
<wd-popup v-model="show" position="top">
|
|
@@ -153,15 +165,22 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
</wd-popup>
|
|
|
- <Dialog v-model:show-value="shengjiShow" position="bottom" width="690rpx" height="672rpx">
|
|
|
- <view class="w-full flex flex-col items-center">
|
|
|
+ <Dialog
|
|
|
+ v-model:show-value="shengjiShow"
|
|
|
+ position="bottom"
|
|
|
+ width="690rpx"
|
|
|
+ :height="uprule.status !== 1 ? '672rpx' : '400rpx'"
|
|
|
+ >
|
|
|
+ <view class="w-full flex flex-col items-center" v-if="uprule.status !== 1">
|
|
|
<text class="text-white mt-90rpx text-36rpx font-700">Speed up the process!</text>
|
|
|
<view
|
|
|
class="w-650rpx h-150rpx flex bg-cards rounded-20rpx items-center justify-between mt-30rpx"
|
|
|
>
|
|
|
<view class="flex flex-col text-primary ml-20rpx">
|
|
|
- <text class="text-42rpx font-700 h-63rpx">BH 0</text>
|
|
|
- <text class="font-400 text-24rpx mt-10rpx">360 HB Coin/H</text>
|
|
|
+ <text class="text-42rpx font-700 h-63rpx">BH {{ uprule.list[0].level }}</text>
|
|
|
+ <text class="font-400 text-24rpx mt-10rpx">
|
|
|
+ {{ uprule.list[0].numericalValueHour }} HB Coin/H
|
|
|
+ </text>
|
|
|
</view>
|
|
|
<image
|
|
|
src="@/static/images/production/maozhuao.png"
|
|
@@ -172,8 +191,10 @@
|
|
|
class="w-650rpx h-280rpx flex flex-col bg-cards rounded-20rpx items-center justify-around mt-30rpx"
|
|
|
>
|
|
|
<view class="flex items-center justify-between text-white w-full">
|
|
|
- <text class="text-42rpx font-700 ml-20rpx">BH 1</text>
|
|
|
- <text class="text-24rpx font-400 mr-20rpx">720 HB Coin/H</text>
|
|
|
+ <text class="text-42rpx font-700 ml-20rpx">BH {{ uprule.list[1].level }}</text>
|
|
|
+ <text class="text-24rpx font-400 mr-20rpx">
|
|
|
+ {{ uprule.list[1].numericalValueHour }} HB Coin/H
|
|
|
+ </text>
|
|
|
</view>
|
|
|
<view class="w-full flex items-center justify-around">
|
|
|
<view
|
|
@@ -181,11 +202,9 @@
|
|
|
>
|
|
|
<view class="flex items-center w-full justify-start ml-30rpx">
|
|
|
<image src="@/static/images/purse/u.png" class="w-30rpx h-30rpx mr-10rpx"></image>
|
|
|
- <text class="text-24rpx font-400 text-white">100</text>
|
|
|
+ <text class="text-24rpx font-400 text-white">{{ uprule.list[1].realMoney }}</text>
|
|
|
</view>
|
|
|
- <view
|
|
|
- class="w-245rpx h-60rpx bg-primary rounded-20rpx flex items-center justify-center"
|
|
|
- >
|
|
|
+ <view class="w-245rpx h-60rpx bg-gray rounded-20rpx flex items-center justify-center">
|
|
|
<text class="text-26rpx font-700 text-textc">Upgrade</text>
|
|
|
</view>
|
|
|
</view>
|
|
@@ -197,9 +216,12 @@
|
|
|
src="@/static/images/trophy/jinbi.png"
|
|
|
class="w-30rpx h-30rpx mr-10rpx"
|
|
|
></image>
|
|
|
- <text class="text-24rpx font-400 text-white">100</text>
|
|
|
+ <text class="text-24rpx font-400 text-white">
|
|
|
+ {{ uprule.list[1].consumeGoldCoin }}
|
|
|
+ </text>
|
|
|
</view>
|
|
|
<view
|
|
|
+ @click="upRules('coin')"
|
|
|
class="w-245rpx h-60rpx bg-primary rounded-20rpx flex items-center justify-center"
|
|
|
>
|
|
|
<text class="text-26rpx font-700 text-textc">Upgrade</text>
|
|
@@ -208,6 +230,23 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
+ <view v-else class="w-full flex flex-col items-center justify-center">
|
|
|
+ <text class="text-white mt-90rpx text-36rpx font-700">level is top!</text>
|
|
|
+ <view
|
|
|
+ class="w-650rpx h-200rpx flex bg-cards rounded-20rpx items-center justify-between mt-30rpx"
|
|
|
+ >
|
|
|
+ <view class="flex flex-col text-primary ml-20rpx">
|
|
|
+ <text class="text-42rpx font-700 h-63rpx">BH {{ uprule.list[0].level }}</text>
|
|
|
+ <text class="font-400 text-24rpx mt-10rpx">
|
|
|
+ {{ uprule.list[0].numericalValueHour }} HB Coin/H
|
|
|
+ </text>
|
|
|
+ </view>
|
|
|
+ <image
|
|
|
+ src="@/static/images/production/maozhuao.png"
|
|
|
+ class="w-90rpx h-90rpx mr-20rpx"
|
|
|
+ ></image>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
</Dialog>
|
|
|
<Dialog v-model:show-value="tishiShow" width="690rpx" height="577rpx">
|
|
|
<view class="w-full flex flex-col items-center">
|
|
@@ -287,127 +326,57 @@
|
|
|
import i18n, { t } from '@/locale/index'
|
|
|
import { useLaunchParams } from '@telegram-apps/sdk-vue'
|
|
|
import lottie from 'lottie-web'
|
|
|
-import animationData from '@/static/Animation.json'
|
|
|
+import animationData from '@/static/data.json'
|
|
|
import Dialog from '@/components/common/Dialog/index.vue'
|
|
|
import { useUserStore } from '@/store/user'
|
|
|
import tabbar from '@/components/TabBar/index.vue'
|
|
|
import { useNotify } from 'wot-design-uni'
|
|
|
import { useImgPath } from '@/hooks/useImgPath'
|
|
|
+import { useGameTimer } from '@/hooks/useGameTimer'
|
|
|
import {
|
|
|
- getGoldCoinProductState,
|
|
|
+ getRateUpgradesRules,
|
|
|
+ ProductionIncreaseInterface,
|
|
|
stageCoinAdd,
|
|
|
- startCoinGame,
|
|
|
- UserCenter,
|
|
|
+ updateGoldCoinProductRate,
|
|
|
} from '@/service/index/foo'
|
|
|
+import CountUp from 'vue-countup-v3'
|
|
|
+
|
|
|
+const {
|
|
|
+ currentLibaoData,
|
|
|
+ displayTime,
|
|
|
+ percentage,
|
|
|
+ isAnimating,
|
|
|
+ libaoShow,
|
|
|
+ refreshGameState,
|
|
|
+ restartGame,
|
|
|
+ stopTimers,
|
|
|
+ gamePlayTime,
|
|
|
+ playData,
|
|
|
+} = useGameTimer()
|
|
|
const { getAssetsImages } = useImgPath()
|
|
|
const { showNotify } = useNotify()
|
|
|
-
|
|
|
+const options = ref({
|
|
|
+ decimalPlaces: 0, // 保留小数位数
|
|
|
+ useEasing: true, // 是否使用缓动效果
|
|
|
+ separator: ',',
|
|
|
+ useGrouping: true,
|
|
|
+})
|
|
|
// 用户信息
|
|
|
const pl = useLaunchParams()
|
|
|
const useStore = useUserStore()
|
|
|
const initUser = async (user: any, shareCode: string) => {
|
|
|
- const data = await useStore.setUserInfo(user, shareCode)
|
|
|
-}
|
|
|
-
|
|
|
-// 获取当前礼包数据
|
|
|
-const currentLibaoData = ref<UserCenter>({} as UserCenter)
|
|
|
-const getGoldCoinProduct = async () => {
|
|
|
- const { data } = await getGoldCoinProductState()
|
|
|
- currentLibaoData.value = data
|
|
|
-}
|
|
|
-const isAnimating = ref(false)
|
|
|
-// 是否有动画
|
|
|
-const libaoShow = computed(() => {
|
|
|
- return currentLibaoData.value.status === 0 || currentLibaoData.value.status === 2
|
|
|
-})
|
|
|
-watch(
|
|
|
- () => libaoShow.value,
|
|
|
- (newValue) => {
|
|
|
- isAnimating.value = newValue
|
|
|
- },
|
|
|
-)
|
|
|
-const formatDisplayTime = (seconds: number): string => {
|
|
|
- if (!seconds || isNaN(seconds)) {
|
|
|
- return '00h 00m 00s'
|
|
|
- }
|
|
|
- if (currentLibaoData.value.status === 0 || currentLibaoData.value.status === 2) {
|
|
|
- return '00h 00m 00s'
|
|
|
- }
|
|
|
- // 限制最大时间为12小时
|
|
|
- seconds = Math.min(seconds, TWELVE_HOURS)
|
|
|
- // 如果小于0,返回0
|
|
|
- seconds = Math.max(0, seconds)
|
|
|
- const hours = Math.floor(seconds / 3600)
|
|
|
- const minutes = Math.floor((seconds % 3600) / 60)
|
|
|
- const remainingSecs = seconds % 60
|
|
|
- return `${hours.toString().padStart(2, '0')}h ${minutes.toString().padStart(2, '0')}m ${remainingSecs.toString().padStart(2, '0')}s`
|
|
|
-}
|
|
|
-const percentage = ref(0) // 进度条
|
|
|
-const TWELVE_HOURS = 12 * 60 * 60 // 12小时的秒数
|
|
|
-const remainingSeconds = ref(0)
|
|
|
-const lastRefreshTime = ref(0)
|
|
|
-const REFRESH_INTERVAL = 10000
|
|
|
-const progressTimer = ref<number | null>(null)
|
|
|
-const initDisplayTime = () => {
|
|
|
- if (currentLibaoData.value?.status === 1 && currentLibaoData.value?.startTimestamp) {
|
|
|
- const currentTimestamp = Math.floor(Date.now() / 1000)
|
|
|
- const startTime = currentLibaoData.value.startTimestamp
|
|
|
- // 计算已经过去的时间
|
|
|
- let elapsedTime: number
|
|
|
- // 如果服务器返回的 endTimestamp 不为 0,优先使用服务器时间
|
|
|
- if (currentLibaoData.value.endTimestamp) {
|
|
|
- elapsedTime = currentLibaoData.value.endTimestamp - startTime
|
|
|
- } else {
|
|
|
- // 使用本地时间计算,但需要校验
|
|
|
- elapsedTime = currentTimestamp - startTime
|
|
|
- }
|
|
|
- // 检查是否超过12小时
|
|
|
- if (elapsedTime >= TWELVE_HOURS) {
|
|
|
- // 如果超过12小时,说明游戏应该已经结束
|
|
|
- remainingSeconds.value = 0
|
|
|
- displayTime.value = '00h 00m 00s'
|
|
|
-
|
|
|
- // 停止所有计时器并刷新状态
|
|
|
- stopAllTimers()
|
|
|
- // refreshData()
|
|
|
- } else if (elapsedTime < 0) {
|
|
|
- // 如果出现负数时间(比如服务器时间与本地时间不同步)
|
|
|
- // 使用服务器时间或重置为0
|
|
|
- remainingSeconds.value = TWELVE_HOURS
|
|
|
- displayTime.value = formatDisplayTime(TWELVE_HOURS)
|
|
|
- } else {
|
|
|
- // 正常情况:计算剩余时间
|
|
|
- remainingSeconds.value = TWELVE_HOURS - elapsedTime
|
|
|
- displayTime.value = formatDisplayTime(remainingSeconds.value)
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 游戏未开始或已结束
|
|
|
- remainingSeconds.value = 0
|
|
|
- displayTime.value = '00h 00m 00s'
|
|
|
- }
|
|
|
+ await useStore.setUserInfo(user, shareCode)
|
|
|
}
|
|
|
// 开始游戏
|
|
|
const startGame = async () => {
|
|
|
if (currentLibaoData.value.status === 2) {
|
|
|
lingquShow.value = true
|
|
|
+ } else if (currentLibaoData.value.status === 1) {
|
|
|
+ tishiShow.value = true
|
|
|
} else {
|
|
|
- // stopAllTimers()
|
|
|
-
|
|
|
+ stopTimers()
|
|
|
try {
|
|
|
- if (currentLibaoData.value.status === 0) {
|
|
|
- await startCoinGame()
|
|
|
- await getGoldCoinProduct()
|
|
|
- percentage.value = 0
|
|
|
- // // 初始化显示时间
|
|
|
- initDisplayTime()
|
|
|
- //
|
|
|
- // // 启动动画和计时器
|
|
|
- isAnimating.value = false
|
|
|
- startCountdown()
|
|
|
- // startProgressAnimation()
|
|
|
- } else {
|
|
|
- tishiShow.value = true
|
|
|
- }
|
|
|
+ await restartGame()
|
|
|
} catch (error) {
|
|
|
console.error('Failed to start game:', error)
|
|
|
setTimeout(() => startGame(), 5000)
|
|
@@ -422,129 +391,21 @@ const lingqu = async () => {
|
|
|
showNotify({ type: 'warning', message: msg })
|
|
|
}
|
|
|
lingquShow.value = false
|
|
|
- await startCoinGame()
|
|
|
- await getGoldCoinProduct()
|
|
|
- if (currentLibaoData.value.status === 1) {
|
|
|
- // 先停止所有计时器
|
|
|
- stopAllTimers()
|
|
|
- // 重新初始化显示时间
|
|
|
- initDisplayTime()
|
|
|
- // 重新启动动画和计时器
|
|
|
- isAnimating.value = true
|
|
|
- startCountdown()
|
|
|
- startProgressAnimation()
|
|
|
- // 更新最后刷新时间
|
|
|
- lastRefreshTime.value = Date.now()
|
|
|
- }
|
|
|
+ await restartGame()
|
|
|
}
|
|
|
+
|
|
|
watch(
|
|
|
- () => currentLibaoData.value.status,
|
|
|
+ () => isAnimating.value,
|
|
|
(newStatus) => {
|
|
|
- console.info('🚀 ~ file:index method: line:443 -----', 11)
|
|
|
- // 确保进度条状态正确
|
|
|
- percentage.value = getProgressPercentage()
|
|
|
- // 如果变成了进行中状态,启动动画
|
|
|
- if (newStatus === 1) {
|
|
|
- // isAnimating.value = false
|
|
|
- startCountdown()
|
|
|
- // startProgressAnimation()
|
|
|
- } else {
|
|
|
- // 其他状态停止动画
|
|
|
- stopAllTimers()
|
|
|
- }
|
|
|
+ nextTick(() => {
|
|
|
+ if (!newStatus) {
|
|
|
+ lottie.play()
|
|
|
+ } else {
|
|
|
+ lottie.pause()
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
)
|
|
|
-const startProgressAnimation = () => {
|
|
|
- if (progressTimer.value) {
|
|
|
- cancelAnimationFrame(progressTimer.value)
|
|
|
- }
|
|
|
-
|
|
|
- const updateProgress = async () => {
|
|
|
- percentage.value = getProgressPercentage()
|
|
|
-
|
|
|
- // 每10秒刷新一次数据
|
|
|
- const now = Date.now()
|
|
|
- if (now - lastRefreshTime.value >= REFRESH_INTERVAL) {
|
|
|
- lastRefreshTime.value = now
|
|
|
- await refreshData()
|
|
|
- }
|
|
|
-
|
|
|
- // 只有在游戏进行中状态才继续动画
|
|
|
- if (currentLibaoData.value.status === 1) {
|
|
|
- progressTimer.value = requestAnimationFrame(updateProgress)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- updateProgress()
|
|
|
-}
|
|
|
-const refreshData = async () => {
|
|
|
- const now = Date.now()
|
|
|
- try {
|
|
|
- // 更新最后刷新时间
|
|
|
- lastRefreshTime.value = now
|
|
|
- await getGoldCoinProduct()
|
|
|
- // // 根据状态显示音符动画
|
|
|
- // if (currentLibaoData.value.status === 1) {
|
|
|
- // showNote.value = true
|
|
|
- // setTimeout(() => {
|
|
|
- // showNote.value = false
|
|
|
- // }, 800)
|
|
|
- // }
|
|
|
- // 不再在这里停止计时器,让外部控制
|
|
|
- } catch (error) {
|
|
|
- console.error('Refresh failed:', error)
|
|
|
- throw error // 向上传递错误
|
|
|
- }
|
|
|
-}
|
|
|
-// countdown
|
|
|
-const countdownTimer = ref<number | null>(null)
|
|
|
-const startCountdown = () => {
|
|
|
- if (countdownTimer.value) {
|
|
|
- clearInterval(countdownTimer.value)
|
|
|
- }
|
|
|
- const updateCountdown = () => {
|
|
|
- if (currentLibaoData.value.status !== 1) {
|
|
|
- stopAllTimers()
|
|
|
- return
|
|
|
- }
|
|
|
- if (remainingSeconds.value > 0) {
|
|
|
- remainingSeconds.value--
|
|
|
- displayTime.value = formatDisplayTime(remainingSeconds.value)
|
|
|
- // 每次时间更新时也更新进度条
|
|
|
- const progress = ((TWELVE_HOURS - remainingSeconds.value) / TWELVE_HOURS) * 100
|
|
|
- percentage.value = Math.min(Math.max(0, progress), 100)
|
|
|
- } else {
|
|
|
- stopAllTimers()
|
|
|
- refreshData()
|
|
|
- }
|
|
|
- }
|
|
|
- // 确保初始时间正确
|
|
|
- if (!remainingSeconds.value) {
|
|
|
- initDisplayTime()
|
|
|
- }
|
|
|
- // 立即执行一次更新
|
|
|
- updateCountdown()
|
|
|
- // 启动定时器
|
|
|
- countdownTimer.value = setInterval(updateCountdown, 1000)
|
|
|
-}
|
|
|
-const stopAllTimers = () => {
|
|
|
- if (countdownTimer.value) {
|
|
|
- clearInterval(countdownTimer.value)
|
|
|
- countdownTimer.value = null
|
|
|
- }
|
|
|
- // if (progressTimer.value) {
|
|
|
- // cancelAnimationFrame(progressTimer.value)
|
|
|
- // progressTimer.value = null
|
|
|
- // }
|
|
|
- //
|
|
|
- // if (timerInterval.value) {
|
|
|
- // clearInterval(timerInterval.value)
|
|
|
- // timerInterval.value = null
|
|
|
- // }
|
|
|
- percentage.value = 0
|
|
|
- isAnimating.value = false
|
|
|
- // showNote.value = false
|
|
|
-}
|
|
|
// Lott
|
|
|
const initLott = () => {
|
|
|
const query = uni.createSelectorQuery()
|
|
@@ -559,45 +420,23 @@ const initLott = () => {
|
|
|
autoplay: false,
|
|
|
animationData,
|
|
|
})
|
|
|
- lottie.play()
|
|
|
+ if (isAnimating.value) {
|
|
|
+ lottie.pause()
|
|
|
+ } else {
|
|
|
+ lottie.play()
|
|
|
+ }
|
|
|
} else {
|
|
|
console.error('Container element not found')
|
|
|
}
|
|
|
})
|
|
|
.exec()
|
|
|
}
|
|
|
-// 添加一个统一的检查和启动函数
|
|
|
-const checkAndStartTimers = async () => {
|
|
|
- try {
|
|
|
- await getGoldCoinProduct()
|
|
|
- // 设置初始进度
|
|
|
- percentage.value = getProgressPercentage()
|
|
|
- if (currentLibaoData.value.status === 1) {
|
|
|
- initDisplayTime()
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- console.error('Failed to check and start timers:', error)
|
|
|
- setTimeout(() => checkAndStartTimers(), 5000)
|
|
|
- }
|
|
|
-}
|
|
|
-const getProgressPercentage = (): number => {
|
|
|
- // 如果状态为0且有金币可以领取,返回100%
|
|
|
- if (currentLibaoData.value.status === 2 && currentLibaoData.value.currentValue > 0) {
|
|
|
- return 100
|
|
|
- }
|
|
|
|
|
|
- // 如果是游戏进行中状态,根据剩余时间计算进度
|
|
|
- if (currentLibaoData.value.status === 1) {
|
|
|
- const progress = ((TWELVE_HOURS - remainingSeconds.value) / TWELVE_HOURS) * 100
|
|
|
- return Math.min(Math.max(0, progress), 100)
|
|
|
- }
|
|
|
- return 0
|
|
|
-}
|
|
|
onShow(async () => {
|
|
|
generateStars()
|
|
|
addStarsGradually()
|
|
|
await initUser(pl.initData.user, uni.getStorageSync('shareCode') || '')
|
|
|
- await checkAndStartTimers()
|
|
|
+ await refreshGameState()
|
|
|
nextTick(() => {
|
|
|
initLott()
|
|
|
})
|
|
@@ -606,6 +445,7 @@ onHide(() => {
|
|
|
if (addStarTimer) {
|
|
|
clearInterval(addStarTimer)
|
|
|
}
|
|
|
+ stopTimers()
|
|
|
lottie.destroy()
|
|
|
})
|
|
|
|
|
@@ -635,11 +475,39 @@ const changeLocale = async (item) => {
|
|
|
// await postCheckLang(item.value)
|
|
|
}
|
|
|
const show = ref(false)
|
|
|
-const displayTime = ref('00h 00m 00s')
|
|
|
const shengjiShow = ref(false)
|
|
|
const tishiShow = ref(false)
|
|
|
const lingquShow = ref(false)
|
|
|
|
|
|
+const uprule = ref<{
|
|
|
+ status: number
|
|
|
+ list: ProductionIncreaseInterface[]
|
|
|
+}>(
|
|
|
+ {} as {
|
|
|
+ status: number
|
|
|
+ list: ProductionIncreaseInterface[]
|
|
|
+ },
|
|
|
+)
|
|
|
+const shengji = async () => {
|
|
|
+ const { data } = await getRateUpgradesRules()
|
|
|
+ uprule.value = data
|
|
|
+ shengjiShow.value = true
|
|
|
+ console.info('🚀 ~ file:index method:shengji line:442 -----', uprule.value)
|
|
|
+}
|
|
|
+const upRules = async (upgradeType: 'coin' | 'currency') => {
|
|
|
+ const { code, msg } = await updateGoldCoinProductRate({
|
|
|
+ ruleId: uprule.value.list[1].id,
|
|
|
+ upgradeType,
|
|
|
+ })
|
|
|
+ if (code === 1) {
|
|
|
+ showNotify({ type: 'success', message: msg })
|
|
|
+ } else {
|
|
|
+ showNotify({ type: 'warning', message: msg })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ shengjiShow.value = false
|
|
|
+ await restartGame()
|
|
|
+}
|
|
|
// 星星
|
|
|
const stars = ref([])
|
|
|
const visibleStars = ref([])
|
|
@@ -689,6 +557,36 @@ const addStarsGradually = () => {
|
|
|
:deep(.wd-progress__inner) {
|
|
|
border-radius: 20px;
|
|
|
background: linear-gradient(90deg, #fff199 0%, #ffdc00 100%) !important;
|
|
|
+ position: relative;
|
|
|
+ overflow: hidden;
|
|
|
+
|
|
|
+ &::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: -100%;
|
|
|
+ width: 50%;
|
|
|
+ height: 100%;
|
|
|
+ background: linear-gradient(
|
|
|
+ 90deg,
|
|
|
+ transparent,
|
|
|
+ hsla(0, 100%, 50%, 0.5) 5%,
|
|
|
+ hsla(15, 100%, 50%, 0.5) 10%,
|
|
|
+ hsla(30, 100%, 50%, 0.5) 15%,
|
|
|
+ hsla(45, 100%, 50%, 0.5) 20%,
|
|
|
+ hsla(60, 100%, 50%, 0.5) 25%,
|
|
|
+ hsla(90, 100%, 50%, 0.5) 35%,
|
|
|
+ hsla(120, 100%, 50%, 0.5) 45%,
|
|
|
+ hsla(180, 100%, 50%, 0.5) 55%,
|
|
|
+ hsla(240, 100%, 50%, 0.5) 65%,
|
|
|
+ hsla(270, 100%, 50%, 0.5) 75%,
|
|
|
+ hsla(300, 100%, 50%, 0.5) 85%,
|
|
|
+ hsla(330, 100%, 50%, 0.5) 90%,
|
|
|
+ hsla(360, 100%, 50%, 0.5) 95%,
|
|
|
+ transparent
|
|
|
+ );
|
|
|
+ animation: flow 1.5s linear infinite;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
:deep(.wd-progress__outer) {
|
|
@@ -697,6 +595,15 @@ const addStarsGradually = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+@keyframes flow {
|
|
|
+ 0% {
|
|
|
+ left: -50%;
|
|
|
+ }
|
|
|
+ 100% {
|
|
|
+ left: 100%;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
.star-container {
|
|
|
perspective: 1000px;
|
|
|
transform-style: preserve-3d;
|
|
@@ -743,6 +650,7 @@ const addStarsGradually = () => {
|
|
|
opacity: 0;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
.libao-scale {
|
|
|
transform-origin: center center;
|
|
|
animation: libaoGuitar 1s ease-out infinite;
|