Browse Source

Merge branch 'zhangjiahao/feature-20250717125955-众筹' into songtongtong/feature-20250717104937-众筹

songtongtong/feature-20250717104937-众筹
songtongtong 4 weeks ago
parent
commit
95d05a0d8b
  1. 36
      src/api/API.js
  2. BIN
      src/assets/img/zhongchou/周年庆装饰.png
  3. BIN
      src/assets/img/zhongchou/手机周年庆装饰.png
  4. 167
      src/views/zhongchou/index.vue

36
src/api/API.js

@ -1,19 +1,19 @@
import request from "../utils/request";
const APIurl = import.meta.env.VITE_APP_API_BASE_URL;
// 开发环境使用代理,生产环境使用环境变量
// const APIurl = import.meta.env.DEV ? '/Api' : import.meta.env.VITE_APP_API_BASE_URL;
// import request from "../utils/request";
// const APIurl = import.meta.env.VITE_APP_API_BASE_URL;
// // 开发环境使用代理,生产环境使用环境变量
// // const APIurl = import.meta.env.DEV ? '/Api' : import.meta.env.VITE_APP_API_BASE_URL;
export function addRecordAPI(data) {
return request({
url: `Api/api/funding/addRecord`,
method: 'post',
data: data
})
}
// 新增:获取活动信息接口
export function getActivity1API() {
return request({
url: `Api/api/funding/getActivity1`,
method: 'post'
})
}
// export function addRecordAPI(data) {
// return request({
// url: `Api/api/funding/addRecord`,
// method: 'post',
// data: data
// })
// }
// // 新增:获取活动信息接口
// export function getActivity1API() {
// return request({
// url: `Api/api/funding/getActivity1`,
// method: 'post'
// })
// }

BIN
src/assets/img/zhongchou/周年庆装饰.png

After

Width: 708  |  Height: 267  |  Size: 155 KiB

BIN
src/assets/img/zhongchou/手机周年庆装饰.png

After

Width: 571  |  Height: 225  |  Size: 109 KiB

167
src/views/zhongchou/index.vue

@ -22,6 +22,8 @@
<div class="stock-content"> <div class="stock-content">
<div class="stock-card us-card"> <div class="stock-card us-card">
<div class="card-content us-content"> <div class="card-content us-content">
<!-- 周年庆装饰元素 -->
<div class="anniversary-decoration"></div>
<div class="progress-section"> <div class="progress-section">
<div class="progress-bar"> <div class="progress-bar">
<div class="progress-fill"></div> <div class="progress-fill"></div>
@ -107,7 +109,7 @@
<div class="modal-background"> <div class="modal-background">
<div class="modal-text"> <div class="modal-text">
<div class="rules-list"> <div class="rules-list">
<p>1. 活动时间为2025年7月26日-2025年8月5日</p>
<p>1. 活动时间为{{ activityPeriod }}</p>
<p>2. 每人每天每个活动可以参与一次</p> <p>2. 每人每天每个活动可以参与一次</p>
<p>3. 初始时间为15分钟每一百人参与助力即可扣减一分钟</p> <p>3. 初始时间为15分钟每一百人参与助力即可扣减一分钟</p>
<p>4. 助力成功后对应股票市场将开放实时数据</p> <p>4. 助力成功后对应股票市场将开放实时数据</p>
@ -126,7 +128,9 @@ import { ref, computed, onMounted, nextTick, watch } from 'vue'
// //
const activityPeriod = ref('加载中...') const activityPeriod = ref('加载中...')
// IDID
const activityId = ref(null)
const usMarketId = ref(null)
// //
const formatDate = (dateString) => { const formatDate = (dateString) => {
if (!dateString) return '' if (!dateString) return ''
@ -143,8 +147,13 @@ async function fetchActivity() {
const response = await getActivity1API() const response = await getActivity1API()
if (response.code === 200) { if (response.code === 200) {
console.log('活动数据:', response.data) console.log('活动数据:', response.data)
// //
const { startTime, endTime, marketTwoStatus, marketTwoCount } = response.data
const { activityId: id, data, startTime, endTime, totalcount } = response.data
// ID
activityId.value = id
if (startTime && endTime) { if (startTime && endTime) {
const formattedStartTime = formatDate(startTime) const formattedStartTime = formatDate(startTime)
const formattedEndTime = formatDate(endTime) const formattedEndTime = formatDate(endTime)
@ -153,27 +162,46 @@ async function fetchActivity() {
activityPeriod.value = '时间待定' activityPeriod.value = '时间待定'
} }
// marketTwoStatus
if (marketTwoStatus === '已助力') {
usBoostStatus.value = true
} else {
usBoostStatus.value = false
}
// marketTwoCount
if (marketTwoCount !== undefined) {
const totalPeople = 1500 // 1500
const currentCount = marketTwoCount || 0 //
// (0-100)
const progressPercent = Math.min((currentCount / totalPeople) * 100, 100)
// (15100%)
const usedTime = (progressPercent / 100) * 15
const remainingTime = Math.max(0, 15 - usedTime)
usRemainingTime.value = Math.round(remainingTime)
console.log(`助力人数: ${currentCount}/${totalPeople}, 进度: ${progressPercent.toFixed(1)}%, 剩余时间: ${remainingTime.toFixed(1)}分钟`)
//
if (data && data.length > 0) {
//
data.forEach(item => {
if (item.market === "美股" && item.marketId === 8) {
// ID
usMarketId.value = item.marketId
// marketStatus
if (item.marketStatus === '已助力') {
usBoostStatus.value = true
} else {
usBoostStatus.value = false
}
// marketCount
if (item.marketCount !== undefined) {
const totalPeople = 1500 // 1500
const currentCount = item.marketCount || 0 //
// (0-100)
const progressPercent = Math.min((currentCount / totalPeople) * 100, 100)
// (15100%)
const usedTime = (progressPercent / 100) * 15
const remainingTime = Math.max(0, 15 - usedTime)
usRemainingTime.value = Math.round(remainingTime)
console.log(`美股助力人数: ${currentCount}/${totalPeople}, 进度: ${progressPercent.toFixed(1)}%, 剩余时间: ${remainingTime.toFixed(1)}分钟`)
//
nextTick(() => {
updateProgressDisplay()
})
}
}
//
// if (item.market === "" && item.marketId === 5) { ... }
})
} }
} else { } else {
console.error('获取活动失败:', response.message) console.error('获取活动失败:', response.message)
@ -184,6 +212,8 @@ async function fetchActivity() {
activityPeriod.value = '网络错误' activityPeriod.value = '网络错误'
} }
} }
const numberToChinese = (num) => { const numberToChinese = (num) => {
const chineseNumbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五'] const chineseNumbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五']
return chineseNumbers[num] || num.toString() return chineseNumbers[num] || num.toString()
@ -288,7 +318,7 @@ onMounted(() => {
// //
window.addEventListener('resize', () => { window.addEventListener('resize', () => {
nextTick(() => { nextTick(() => {
updateProgressBarHeight()
updateProgressBarHeight()
}) })
}) })
}) })
@ -306,17 +336,23 @@ onMounted(() => {
const handleBoostClick = async (area) => { const handleBoostClick = async (area) => {
if (area === 'us' && !usBoostStatus.value) { if (area === 'us' && !usBoostStatus.value) {
try { try {
// API
// IDID
if (!activityId.value || !usMarketId.value) {
console.error('活动ID或市场ID未获取,请先获取活动数据')
return
}
// API使
const response = await addRecordAPI({ const response = await addRecordAPI({
"activityId": 40,
"marketSign": 8
"activityId": activityId.value,
"marketSign": usMarketId.value
}); });
if (response.code === 200) { if (response.code === 200) {
console.log('美股助力成功:', response.message) console.log('美股助力成功:', response.message)
// //
await fetchActivity() await fetchActivity()
console.log('美股已助力剩余时间:', usRemainingTime.value)
console.log('美股已助力状态:', usBoostStatus.value, '剩余时间:', usRemainingTime.value)
} else { } else {
console.error('美股助力失败:', response.message) console.error('美股助力失败:', response.message)
} }
@ -324,27 +360,7 @@ const handleBoostClick = async (area) => {
console.error('美股助力请求失败:', error) console.error('美股助力请求失败:', error)
} }
} }
// else if (area === 'hk' && !hkBoostStatus.value) {
// try {
// // API
// const response = await addRecordAPI({
// "activityId": 1,
// "marketSign": 5
// });
// if (response.code === 200) {
// hkBoostStatus.value = true
// // 1
// simulateTimeDecrease('hk')
// console.log('', response.message)
// console.log('', hkRemainingTime.value)
// } else {
// console.error('', response.message)
// }
// } catch (error) {
// console.error('', error)
// }
// }
// ... existing code ...
} }
const showRulesFunc = () => { const showRulesFunc = () => {
@ -570,7 +586,7 @@ const hideRules = () => {
position: absolute; position: absolute;
z-index: 10; z-index: 10;
/* 位置调整到美股卡片右边,确保不覆盖 */ /* 位置调整到美股卡片右边,确保不覆盖 */
top: 50%;
top: 35%;
/* 垂直居中 */ /* 垂直居中 */
left: calc(50% + 25vw); left: calc(50% + 25vw);
/* 美股卡片右边位置,增加间距 */ /* 美股卡片右边位置,增加间距 */
@ -594,6 +610,30 @@ const hideRules = () => {
/* 美股卡片背景 */ /* 美股卡片背景 */
.us-card { .us-card {
background-image: url('@/assets/img/zhongchou/美股.png'); background-image: url('@/assets/img/zhongchou/美股.png');
position: relative;
/* 确保子元素可以相对于它进行绝对定位 */
}
/* 周年庆装饰元素 */
.anniversary-decoration {
position: absolute;
right: -150px;
bottom: -90px;
width: 30vw;
/* 调整宽度 */
height: 30vh;
/* 调整高度 */
background-image: url('@/assets/img/zhongchou/周年庆装饰.png');
/* 图片名称中有空格 */
background-size: contain;
background-repeat: no-repeat;
background-position: center;
z-index: 100;
/* 确保浮现于最上层 */
animation: float 3s ease-in-out infinite;
/* 添加浮动动画 */
pointer-events: none;
/* 确保不会影响鼠标事件 */
} }
/* 港股卡片背景 */ /* 港股卡片背景 */
@ -968,6 +1008,19 @@ const hideRules = () => {
} */ } */
@media (max-width: 768px) { @media (max-width: 768px) {
/* 平板端周年庆装饰元素 */
.anniversary-decoration {
width: 40vw;
/* 调整手机版宽度 */
height: 40vh;
/* 调整手机版高度 */
right: -20px;
bottom: -100px;
background-image: url('@/assets/img/zhongchou/手机周年庆装饰.png');
/* 需要准备此图片资源 */
}
.main-title img { .main-title img {
max-height: 60px; max-height: 60px;
} }
@ -1103,6 +1156,18 @@ const hideRules = () => {
background-image: url('@/assets/img/zhongchou/手机组2.png'); background-image: url('@/assets/img/zhongchou/手机组2.png');
} }
/* 手机端周年庆装饰元素 */
.anniversary-decoration {
width: 60vw;
/* 调整手机版宽度 */
height: 60vh;
/* 调整手机版高度 */
right: 5px;
bottom: -210px;
background-image: url('@/assets/img/zhongchou/手机周年庆装饰.png');
/* 需要准备此图片资源 */
}
.activity-period { .activity-period {
display: none; display: none;

Loading…
Cancel
Save