更新域名为 uzi1.cn,修复相关链接和配置,优化公告管理功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
# 生产环境API基础URL(根据实际情况选择)
|
# 生产环境API基础URL(根据实际情况选择)
|
||||||
VITE_API_BASE=https://2.uzi0.cc/api
|
VITE_API_BASE=https://uzi1.cn/api
|
||||||
|
|
||||||
# 前端基础URL(用于生成分享链接)
|
# 前端基础URL(用于生成分享链接)
|
||||||
VITE_BASE_URL=https://2.uzi0.cc
|
VITE_BASE_URL=https://uzi1.cn
|
||||||
|
|
||||||
IMAGE_BASE_URL=https://2.uzi0.cc/image
|
IMAGE_BASE_URL=https://uzi1.cn/image
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 问题描述
|
## 问题描述
|
||||||
|
|
||||||
当直接访问 `http://2.uzi0.cc/play?code=973F2YTE` 时出现404错误,但其他页面正常。这是典型的单页应用(SPA)部署问题。
|
当直接访问 `http://uzi1.cn/play?code=973F2YTE` 时出现404错误,但其他页面正常。这是典型的单页应用(SPA)部署问题。
|
||||||
|
|
||||||
## 原因分析
|
## 原因分析
|
||||||
|
|
||||||
@@ -49,12 +49,12 @@ npm run build
|
|||||||
# 3. 配置 Web 服务器(选择上述方案之一)
|
# 3. 配置 Web 服务器(选择上述方案之一)
|
||||||
|
|
||||||
# 4. 测试访问
|
# 4. 测试访问
|
||||||
# http://2.uzi0.cc/play?code=973F2YTE 应该能正常访问
|
# http://uzi1.cn/play?code=973F2YTE 应该能正常访问
|
||||||
```
|
```
|
||||||
|
|
||||||
## 验证步骤
|
## 验证步骤
|
||||||
|
|
||||||
1. 直接访问:`http://2.uzi0.cc/play?code=973F2YTE`
|
1. 直接访问:`http://uzi1.cn/play?code=973F2YTE`
|
||||||
2. 应该能看到游戏页面,而不是404错误
|
2. 应该能看到游戏页面,而不是404错误
|
||||||
3. 刷新页面应该仍然正常
|
3. 刷新页面应该仍然正常
|
||||||
4. API 请求应该正常工作(无CORS错误)
|
4. API 请求应该正常工作(无CORS错误)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name 2.uzi0.cc;
|
server_name uzi1.cn;
|
||||||
root /path/to/your/dist; # 修改为你的实际部署路径
|
root /path/to/your/dist; # 修改为你的实际部署路径
|
||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
|
|||||||
@@ -40,3 +40,8 @@ export function updateAnnouncementStatus(id, enabled) {
|
|||||||
export function getEnabledAnnouncements(params) {
|
export function getEnabledAnnouncements(params) {
|
||||||
return http.get('/api/admin/announcement/enabled', { params })
|
return http.get('/api/admin/announcement/enabled', { params })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据代码获取公告
|
||||||
|
export function getAnnouncementByCode(codeNo) {
|
||||||
|
return http.get(`/api/admin/announcement/by-code/${codeNo}`)
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,19 +21,19 @@
|
|||||||
<!-- 游戏截图展示区域 -->
|
<!-- 游戏截图展示区域 -->
|
||||||
<div class="image-gallery">
|
<div class="image-gallery">
|
||||||
<div class="image-item" v-if="machineId">
|
<div class="image-item" v-if="machineId">
|
||||||
<img :src="`https://2.uzi0.cc/image/${machineId}/首次主页.png?t=${timestamp}`" alt="首次主页" class="game-image" />
|
<img :src="`https://uzi1.cn/image/${machineId}/首次主页.png?t=${timestamp}`" alt="首次主页" class="game-image" />
|
||||||
<div class="image-label">首次主页</div>
|
<div class="image-label">首次主页</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="image-item" v-if="machineId">
|
<div class="image-item" v-if="machineId">
|
||||||
<img :src="`https://2.uzi0.cc/image/${machineId}/首次赏金.png?t=${timestamp}`" alt="首次赏金" class="game-image" style="transform: rotate(-90deg);" />
|
<img :src="`https://uzi1.cn/image/${machineId}/首次赏金.png?t=${timestamp}`" alt="首次赏金" class="game-image" style="transform: rotate(-90deg);" />
|
||||||
<div class="image-label">首次赏金</div>
|
<div class="image-label">首次赏金</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="image-item" v-if="machineId">
|
<div class="image-item" v-if="machineId">
|
||||||
<img :src="`https://2.uzi0.cc/image/${machineId}/中途赏金.png?t=${timestamp}`" alt="中途赏金" class="game-image" />
|
<img :src="`https://uzi1.cn/image/${machineId}/中途赏金.png?t=${timestamp}`" alt="中途赏金" class="game-image" />
|
||||||
<div class="image-label">中途赏金</div>
|
<div class="image-label">中途赏金</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="image-item" v-if="machineId">
|
<div class="image-item" v-if="machineId">
|
||||||
<img :src="`https://2.uzi0.cc/image/${machineId}/结束赏金.png?t=${timestamp}`" alt="结束赏金" class="game-image" />
|
<img :src="`https://uzi1.cn/image/${machineId}/结束赏金.png?t=${timestamp}`" alt="结束赏金" class="game-image" />
|
||||||
<div class="image-label">结束赏金</div>
|
<div class="image-label">结束赏金</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -89,6 +89,25 @@ export default {
|
|||||||
currentPoints: {
|
currentPoints: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0
|
default: 0
|
||||||
|
},
|
||||||
|
codeNo: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
timestamp: Date.now()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.setupImageRefresh()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setupImageRefresh() {
|
||||||
|
setInterval(() => {
|
||||||
|
this.timestamp = Date.now()
|
||||||
|
}, 5000)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export function usePlayState() {
|
|||||||
state.status = 'LOGGED_IN'
|
state.status = 'LOGGED_IN'
|
||||||
|
|
||||||
state.assets = {
|
state.assets = {
|
||||||
qrCodeUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
qrCodeUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
||||||
...(gameData.assets || {})
|
...(gameData.assets || {})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ export function usePlayState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
state.assets = {
|
state.assets = {
|
||||||
qrCodeUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/二维码.png?t=${Date.now()}` : null
|
qrCodeUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/二维码.png?t=${Date.now()}` : null
|
||||||
}
|
}
|
||||||
|
|
||||||
state.totalPoints = gameData.totalPoints || 50
|
state.totalPoints = gameData.totalPoints || 50
|
||||||
@@ -230,7 +230,7 @@ export function usePlayState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.mecmachineId) {
|
if (data.mecmachineId) {
|
||||||
const qrUrl = `https://2.uzi0.cc/image/${data.mecmachineId}/二维码.png?t=${Date.now()}`
|
const qrUrl = `https://uzi1.cn/image/${data.mecmachineId}/二维码.png?t=${Date.now()}`
|
||||||
state.qrInfo = {
|
state.qrInfo = {
|
||||||
url: qrUrl,
|
url: qrUrl,
|
||||||
createdAt: data.qrCreatedAt,
|
createdAt: data.qrCreatedAt,
|
||||||
@@ -385,7 +385,7 @@ export function usePlayState() {
|
|||||||
if (!state.machineId) return null
|
if (!state.machineId) return null
|
||||||
|
|
||||||
const progress = getProgressPercent()
|
const progress = getProgressPercent()
|
||||||
const baseUrl = 'https://2.uzi0.cc/image'
|
const baseUrl = 'https://uzi1.cn/image'
|
||||||
|
|
||||||
if (progress === 0) {
|
if (progress === 0) {
|
||||||
return `${baseUrl}/${state.machineId}/首次主页.png`
|
return `${baseUrl}/${state.machineId}/首次主页.png`
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export function useQrCode() {
|
|||||||
|
|
||||||
const fetchQrCodeAfterDelay = async (state, countdown, mecmachineId, qrCreatedAt, qrExpireAt, retryCount = 0) => {
|
const fetchQrCodeAfterDelay = async (state, countdown, mecmachineId, qrCreatedAt, qrExpireAt, retryCount = 0) => {
|
||||||
try {
|
try {
|
||||||
const qrCodeUrl = `https://2.uzi0.cc/image/${mecmachineId}/二维码.png?t=${Date.now()}`
|
const qrCodeUrl = `https://uzi1.cn/image/${mecmachineId}/二维码.png?t=${Date.now()}`
|
||||||
console.log(`尝试获取二维码 (第${retryCount + 1}次):`, qrCodeUrl)
|
console.log(`尝试获取二维码 (第${retryCount + 1}次):`, qrCodeUrl)
|
||||||
|
|
||||||
const isUrlValid = await validateQrCodeUrl(qrCodeUrl)
|
const isUrlValid = await validateQrCodeUrl(qrCodeUrl)
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
:status-message-class="getStatusMessageClass()"
|
:status-message-class="getStatusMessageClass()"
|
||||||
:assets="state.assets"
|
:assets="state.assets"
|
||||||
:current-points="state.currentPoints"
|
:current-points="state.currentPoints"
|
||||||
|
:code-no="state.code"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 完成状态 -->
|
<!-- 完成状态 -->
|
||||||
@@ -64,15 +65,41 @@
|
|||||||
:error-message="getErrorMessage()"
|
:error-message="getErrorMessage()"
|
||||||
@retry="handleRetry"
|
@retry="handleRetry"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<!-- 公告弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
v-model="announcementVisible"
|
||||||
|
title="代理商公告"
|
||||||
|
:width="'90%'"
|
||||||
|
:before-close="handleAnnouncementClose"
|
||||||
|
class="announcement-dialog"
|
||||||
|
>
|
||||||
|
<div v-if="announcement" class="announcement-content">
|
||||||
|
<h3 class="announcement-title">{{ announcement.title }}</h3>
|
||||||
|
<div class="announcement-text">{{ announcement.content }}</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="announcement-empty">
|
||||||
|
暂无公告内容
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="announcement-footer">
|
||||||
|
<el-checkbox v-model="dontShowToday" class="dont-show-checkbox">
|
||||||
|
今日不再弹出
|
||||||
|
</el-checkbox>
|
||||||
|
<el-button type="primary" @click="handleAnnouncementClose">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { onMounted, onUnmounted } from 'vue'
|
import { onMounted, onUnmounted, ref, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { usePlayState } from '@/composables/usePlayState'
|
import { usePlayState } from '@/composables/usePlayState'
|
||||||
import { useTimers } from '@/composables/useTimers'
|
import { useTimers } from '@/composables/useTimers'
|
||||||
import { useQrCode } from '@/composables/useQrCode'
|
import { useQrCode } from '@/composables/useQrCode'
|
||||||
|
import { getAnnouncementByCode } from '@/api/announcement'
|
||||||
|
|
||||||
import LoadingOverlay from '@/components/play/LoadingOverlay.vue'
|
import LoadingOverlay from '@/components/play/LoadingOverlay.vue'
|
||||||
import SelectRegion from '@/components/play/SelectRegion.vue'
|
import SelectRegion from '@/components/play/SelectRegion.vue'
|
||||||
@@ -94,6 +121,119 @@ export default {
|
|||||||
setup() {
|
setup() {
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
|
// 公告相关状态
|
||||||
|
const announcementVisible = ref(false)
|
||||||
|
const announcement = ref(null)
|
||||||
|
const dontShowToday = ref(false)
|
||||||
|
|
||||||
|
// 本地存储相关函数
|
||||||
|
const getStorageKey = (codeNo, announcementId) => {
|
||||||
|
return `announcement_dismissed_${codeNo}_${announcementId}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const getTodayKey = (codeNo) => {
|
||||||
|
const today = new Date().toDateString()
|
||||||
|
return `announcement_dont_show_today_${codeNo}_${today}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const isDismissedPermanently = (codeNo, announcementId) => {
|
||||||
|
const key = getStorageKey(codeNo, announcementId)
|
||||||
|
return localStorage.getItem(key) === 'true'
|
||||||
|
}
|
||||||
|
|
||||||
|
const isDontShowToday = (codeNo) => {
|
||||||
|
const key = getTodayKey(codeNo)
|
||||||
|
return localStorage.getItem(key) === 'true'
|
||||||
|
}
|
||||||
|
|
||||||
|
const markDismissedPermanently = (codeNo, announcementId) => {
|
||||||
|
const key = getStorageKey(codeNo, announcementId)
|
||||||
|
localStorage.setItem(key, 'true')
|
||||||
|
}
|
||||||
|
|
||||||
|
const markDontShowToday = (codeNo) => {
|
||||||
|
const key = getTodayKey(codeNo)
|
||||||
|
localStorage.setItem(key, 'true')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查并显示公告
|
||||||
|
const checkAnnouncement = async (codeNo) => {
|
||||||
|
if (!codeNo) return
|
||||||
|
|
||||||
|
console.log('检查公告:', codeNo)
|
||||||
|
|
||||||
|
// 检查今日是否设置为不弹出
|
||||||
|
if (isDontShowToday(codeNo)) {
|
||||||
|
console.log('今日已设置不弹出')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await getAnnouncementByCode(codeNo)
|
||||||
|
console.log('公告接口响应:', response)
|
||||||
|
|
||||||
|
// 修复:应该检查 response.data.data 而不是 response.data
|
||||||
|
if (response.data && response.data.success && response.data.data && response.data.data.length > 0) {
|
||||||
|
const announcementData = response.data.data[0]
|
||||||
|
console.log('公告数据:', announcementData)
|
||||||
|
|
||||||
|
if (announcementData.enabled) {
|
||||||
|
// 检查是否已永久关闭此公告
|
||||||
|
const isDismissed = isDismissedPermanently(codeNo, announcementData.id)
|
||||||
|
console.log('是否已永久关闭:', isDismissed)
|
||||||
|
|
||||||
|
if (!isDismissed) {
|
||||||
|
announcement.value = announcementData
|
||||||
|
announcementVisible.value = true
|
||||||
|
console.log('显示公告弹窗')
|
||||||
|
} else {
|
||||||
|
console.log('公告已被永久关闭')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log('公告未启用')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log('无公告数据')
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取公告失败:', error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理公告关闭
|
||||||
|
const handleAnnouncementClose = () => {
|
||||||
|
const codeNo = state.code
|
||||||
|
const announcementData = announcement.value
|
||||||
|
|
||||||
|
if (dontShowToday.value && codeNo) {
|
||||||
|
markDontShowToday(codeNo)
|
||||||
|
console.log('已设置今日不弹出')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (announcementData && codeNo) {
|
||||||
|
markDismissedPermanently(codeNo, announcementData.id)
|
||||||
|
console.log('已永久关闭公告:', announcementData.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
announcementVisible.value = false
|
||||||
|
dontShowToday.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 临时调试:清除本地存储
|
||||||
|
const clearAnnouncementStorage = () => {
|
||||||
|
Object.keys(localStorage).forEach(key => {
|
||||||
|
if (key.startsWith('announcement_')) {
|
||||||
|
localStorage.removeItem(key)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log('已清除所有公告本地存储')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开发环境下添加到window对象方便调试
|
||||||
|
if (process.env.NODE_ENV === 'development') {
|
||||||
|
window.clearAnnouncementStorage = clearAnnouncementStorage
|
||||||
|
}
|
||||||
|
|
||||||
const {
|
const {
|
||||||
state,
|
state,
|
||||||
initializePage,
|
initializePage,
|
||||||
@@ -142,6 +282,11 @@ export default {
|
|||||||
|
|
||||||
state.code = code
|
state.code = code
|
||||||
initializePage()
|
initializePage()
|
||||||
|
|
||||||
|
// 检查公告
|
||||||
|
setTimeout(() => {
|
||||||
|
checkAnnouncement(code)
|
||||||
|
}, 1000) // 延迟1秒执行,确保页面已经加载完成
|
||||||
})
|
})
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
@@ -205,7 +350,12 @@ export default {
|
|||||||
getGameStatus,
|
getGameStatus,
|
||||||
getStatusClass,
|
getStatusClass,
|
||||||
getErrorTitle,
|
getErrorTitle,
|
||||||
getErrorMessage
|
getErrorMessage,
|
||||||
|
// 公告相关
|
||||||
|
announcementVisible,
|
||||||
|
announcement,
|
||||||
|
dontShowToday,
|
||||||
|
handleAnnouncementClose
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -237,9 +387,77 @@ export default {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.announcement-dialog {
|
||||||
|
:deep(.el-dialog__body) {
|
||||||
|
padding: 16px 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-content {
|
||||||
|
max-height: 60vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-title {
|
||||||
|
color: #333;
|
||||||
|
font-size: 18px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding-bottom: 8px;
|
||||||
|
border-bottom: 1px solid #e9ecef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-text {
|
||||||
|
color: #666;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.6;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-empty {
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
padding: 20px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dont-show-checkbox {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.completed-text {
|
.completed-text {
|
||||||
font-size: 36px;
|
font-size: 36px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.announcement-dialog {
|
||||||
|
:deep(.el-dialog) {
|
||||||
|
width: 95vw !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-title {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-text {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.announcement-footer {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dont-show-checkbox {
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -325,18 +325,18 @@ export default {
|
|||||||
midRewardUrl: gameData.midRewardUrl,
|
midRewardUrl: gameData.midRewardUrl,
|
||||||
endRewardUrl: gameData.endRewardUrl,
|
endRewardUrl: gameData.endRewardUrl,
|
||||||
|
|
||||||
qrCodeUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
qrCodeUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
||||||
// 保留原有的assets数据(如果存在)
|
// 保留原有的assets数据(如果存在)
|
||||||
...(gameData.assets || {})
|
...(gameData.assets || {})
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
state.assets = {
|
state.assets = {
|
||||||
homepageUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/首次主页.png?t=${new Date().getTime()}` : null,
|
homepageUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/首次主页.png?t=${new Date().getTime()}` : null,
|
||||||
firstRewardUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/首次赏金.png?t=${new Date().getTime()}` : null,
|
firstRewardUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/首次赏金.png?t=${new Date().getTime()}` : null,
|
||||||
midRewardUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/中途赏金.png?t=${new Date().getTime()}` : null,
|
midRewardUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/中途赏金.png?t=${new Date().getTime()}` : null,
|
||||||
endRewardUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/结束赏金.png?t=${new Date().getTime()}` : null,
|
endRewardUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/结束赏金.png?t=${new Date().getTime()}` : null,
|
||||||
|
|
||||||
qrCodeUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
qrCodeUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/二维码.png?t=${new Date().getTime()}` : null,
|
||||||
// 保留原有的assets数据(如果存在)
|
// 保留原有的assets数据(如果存在)
|
||||||
...(gameData.assets || {})
|
...(gameData.assets || {})
|
||||||
|
|
||||||
@@ -407,7 +407,7 @@ export default {
|
|||||||
firstRewardUrl: gameData.firstRewardUrl,
|
firstRewardUrl: gameData.firstRewardUrl,
|
||||||
midRewardUrl: gameData.midRewardUrl,
|
midRewardUrl: gameData.midRewardUrl,
|
||||||
endRewardUrl: gameData.endRewardUrl,
|
endRewardUrl: gameData.endRewardUrl,
|
||||||
qrCodeUrl: gameData.mecmachineId ? `https://2.uzi0.cc/image/${gameData.mecmachineId}/二维码.png?t=${Date.now()}` : null
|
qrCodeUrl: gameData.mecmachineId ? `https://uzi1.cn/image/${gameData.mecmachineId}/二维码.png?t=${Date.now()}` : null
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置点数信息 - 已完成时当前点数等于目标点数
|
// 设置点数信息 - 已完成时当前点数等于目标点数
|
||||||
@@ -488,7 +488,7 @@ export default {
|
|||||||
|
|
||||||
// 处理二维码信息
|
// 处理二维码信息
|
||||||
if (data.mecmachineId) {
|
if (data.mecmachineId) {
|
||||||
const qrUrl = `https://2.uzi0.cc/image/${data.mecmachineId}/二维码.png?t=${Date.now()}`
|
const qrUrl = `https://uzi1.cn/image/${data.mecmachineId}/二维码.png?t=${Date.now()}`
|
||||||
state.qrInfo = {
|
state.qrInfo = {
|
||||||
url: qrUrl,
|
url: qrUrl,
|
||||||
createdAt: data.qrCreatedAt,
|
createdAt: data.qrCreatedAt,
|
||||||
@@ -554,7 +554,7 @@ export default {
|
|||||||
// 延迟获取二维码(带重试机制)
|
// 延迟获取二维码(带重试机制)
|
||||||
const fetchQrCodeAfterDelay = async (mecmachineId, qrCreatedAt, qrExpireAt, retryCount = 0) => {
|
const fetchQrCodeAfterDelay = async (mecmachineId, qrCreatedAt, qrExpireAt, retryCount = 0) => {
|
||||||
try {
|
try {
|
||||||
const qrCodeUrl = `https://2.uzi0.cc/image/${mecmachineId}/二维码.png?t=${Date.now()}`
|
const qrCodeUrl = `https://uzi1.cn/image/${mecmachineId}/二维码.png?t=${Date.now()}`
|
||||||
console.log(`尝试获取二维码 (第${retryCount + 1}次):`, qrCodeUrl)
|
console.log(`尝试获取二维码 (第${retryCount + 1}次):`, qrCodeUrl)
|
||||||
|
|
||||||
// 验证二维码URL是否可访问
|
// 验证二维码URL是否可访问
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name 2.uzi0.cc; # 你的域名
|
server_name uzi1.cn; # 你的域名
|
||||||
index index.php index.html index.htm default.php default.htm default.html;
|
index index.php index.html index.htm default.php default.htm default.html;
|
||||||
root /www/wwwroot/2.uzi0.cc; # 修改为你的实际网站根目录路径
|
root /www/wwwroot/uzi1.cn; # 修改为你的实际网站根目录路径
|
||||||
|
|
||||||
# SSL配置(如果有SSL证书)
|
# SSL配置(如果有SSL证书)
|
||||||
# listen 443 ssl http2;
|
# listen 443 ssl http2;
|
||||||
@@ -78,6 +78,6 @@ server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# 宝塔面板访问日志
|
# 宝塔面板访问日志
|
||||||
access_log /www/wwwlogs/2.uzi0.cc.log;
|
access_log /www/wwwlogs/uzi1.cn.log;
|
||||||
error_log /www/wwwlogs/2.uzi0.cc.error.log;
|
error_log /www/wwwlogs/uzi1.cn.error.log;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ server
|
|||||||
listen 443 ssl http2 ;
|
listen 443 ssl http2 ;
|
||||||
listen 991;
|
listen 991;
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name 2.uzi0.cc 192.140.164.137;
|
server_name uzi1.cn 192.140.164.137;
|
||||||
index index.html index.htm default.htm default.html;
|
index index.html index.htm default.htm default.html;
|
||||||
root /www/wwwroot/192.140.164.137_81;
|
root /www/wwwroot/192.140.164.137_81;
|
||||||
#CERT-APPLY-CHECK--START
|
#CERT-APPLY-CHECK--START
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
1. **登录宝塔面板**
|
1. **登录宝塔面板**
|
||||||
2. **进入网站管理**
|
2. **进入网站管理**
|
||||||
- 点击 "网站"
|
- 点击 "网站"
|
||||||
- 找到你的站点 `2.uzi0.cc` 或 `192.140.164.137`
|
- 找到你的站点 `uzi1.cn` 或 `192.140.164.137`
|
||||||
- 点击 "设置"
|
- 点击 "设置"
|
||||||
|
|
||||||
3. **修改配置文件**
|
3. **修改配置文件**
|
||||||
@@ -64,8 +64,8 @@ location @fallback {
|
|||||||
### 3. 验证部署
|
### 3. 验证部署
|
||||||
|
|
||||||
访问以下链接测试:
|
访问以下链接测试:
|
||||||
- ✅ `http://2.uzi0.cc/` (首页)
|
- ✅ `http://uzi1.cn/` (首页)
|
||||||
- ✅ `http://2.uzi0.cc/play?code=973F2YTE` (游戏页面,之前404的)
|
- ✅ `http://uzi1.cn/play?code=973F2YTE` (游戏页面,之前404的)
|
||||||
- ✅ 刷新游戏页面应该正常
|
- ✅ 刷新游戏页面应该正常
|
||||||
- ✅ API请求应该不会有CORS错误
|
- ✅ API请求应该不会有CORS错误
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user