diff --git a/frontend/pages/asset-detail/asset-detail.vue b/frontend/pages/asset-detail/asset-detail.vue index 2086156..a251cb6 100644 --- a/frontend/pages/asset-detail/asset-detail.vue +++ b/frontend/pages/asset-detail/asset-detail.vue @@ -129,7 +129,7 @@ - + @@ -171,8 +171,9 @@ - - + {{ countdownText }} @@ -193,10 +194,19 @@ + + + 来源 + {{ assetData.source || '铸造' }} + + 创作者 - {{ assetData.owner_nickname || '未知' }} + + + {{ assetData.owner_nickname || '未知' }} + @@ -205,27 +215,16 @@ {{ formattedAcquireTime }} - - - 来源 - {{ assetData.source || '铸造' }} - - - + - - + + + + + + + + 链上哈希 + + + {{ displayTxHash }} + @@ -257,18 +270,19 @@ 区块链编号 - {{ showBlockNumber ? (assetData.block_number || '未知') : hiddenBlockNumber }} + {{ showBlockNumber ? (assetData.block_number || '未知') : + hiddenBlockNumber }} - {{ showBlockNumber ? '👁' : '👁‍🗨' }} + - 交易哈希 + 链上哈希 - {{ showTxHash ? displayTxHash : hiddenTxHash }} + {{ hiddenTxHash }} - {{ showTxHash ? '👁' : '👁‍🗨' }} + @@ -278,30 +292,19 @@ - + @@ -400,8 +487,8 @@ onMounted(() => { .card-rate-badge { position: absolute; - bottom: 16rpx; - left: 40%; + top: 16rpx; + left: 25%; transform: translateX(-50%); display: flex; align-items: center; @@ -476,6 +563,35 @@ onMounted(() => { font-weight: 700; } +/* 倒计时背景 */ +.countdown-background { + /* position: absolute; + bottom: 20rpx; + right: 30%; + transform: translateX(-50%); */ + width: 140rpx; + height: 36rpx; + background: linear-gradient(165deg, #F0E4B1 0%, #F08399 50%, #B94E73 90%, #834B9E 100%); + border-radius: 999rpx; + z-index: 9; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.4); + opacity: 0.95; +} + +/* 倒计时文字 */ +.countdown-text { + font-size: 22rpx; + font-weight: bold; + color: #fff; + font-family: 'yt', sans-serif; + text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.8); + z-index: 10; + font-variant-numeric: tabular-nums; + font-feature-settings: "tnum"; + display: flex; + justify-content: center; +} + .empty-exhibition { display: flex; align-items: center; @@ -527,7 +643,7 @@ onMounted(() => { flex-shrink: 0; /* margin-right: 8rpx; */ position: relative; - left: 32rpx; + left: 32rpx; } .rank-icon-1 { diff --git a/frontend/pages/profile/myWorks.vue b/frontend/pages/profile/myWorks.vue index 87f628c..4da80b4 100644 --- a/frontend/pages/profile/myWorks.vue +++ b/frontend/pages/profile/myWorks.vue @@ -11,7 +11,7 @@ - 个人设置 + @@ -30,6 +30,12 @@ @tap="handleExhibitionCardTap(item, index)"> + + + + + 领取收益 + @@ -39,6 +45,14 @@ {{ item.like_count || 0 }} + + + + + {{ formatCountdown(item.id) }} + + @@ -101,13 +115,14 @@ - + - + - + - + +{{ item.reward }} @@ -258,6 +275,12 @@ const goToAssetDetail = (id) => { // 双击点赞处理 const cardTapTimers = {}; +// 领取收益处理 +const handleClaimReward = (item, _index) => { + console.log('领取收益:', item); + uni.showToast({ title: '收益已领取', icon: 'success' }); +}; + const handleExhibitionCardTap = (item, index) => { if (cardTapTimers[item.id]) { // 第二次点击,双击点赞 @@ -302,9 +325,79 @@ const formatScore = (score) => { return Number(score).toLocaleString(); }; +// 计算剩余时间 +const calculateRemainingTime = (item) => { + if (item.remainSeconds !== undefined) { + if (item.remainSeconds <= 0) { + return { hours: 0, minutes: 0, seconds: 0, expired: true }; + } + const hours = Math.floor(item.remainSeconds / 3600); + const minutes = Math.floor((item.remainSeconds % 3600) / 60); + const seconds = Math.floor(item.remainSeconds % 60); + return { hours, minutes, seconds, expired: false }; + } + if (item.expire_at) { + const now = Date.now(); + const expireTime = new Date(item.expire_at).getTime(); + const remaining = expireTime - now; + if (remaining <= 0) { + return { hours: 0, minutes: 0, seconds: 0, expired: true }; + } + const hours = Math.floor(remaining / (60 * 60 * 1000)); + const minutes = Math.floor((remaining % (60 * 60 * 1000)) / (60 * 1000)); + const seconds = Math.floor((remaining % (60 * 1000)) / 1000); + return { hours, minutes, seconds, expired: false }; + } + return { hours: 0, minutes: 0, seconds: 0, expired: true }; +}; + +// 更新所有倒计时 +const updateCountdowns = () => { + exhibitionWorks.value.forEach(item => { + if (item && item.id) { + if (item.remainSeconds !== undefined && item.remainSeconds > 0) { + item.remainSeconds--; + } + countdowns.value[item.id] = calculateRemainingTime(item); + } + }); +}; + +// 格式化倒计时显示 +const formatCountdown = (itemId) => { + const countdown = countdowns.value[itemId]; + if (!countdown || countdown.expired) return '00:00:00'; + const h = String(countdown.hours).padStart(2, '0'); + const m = String(countdown.minutes).padStart(2, '0'); + const s = String(countdown.seconds).padStart(2, '0'); + return `${h}:${m}:${s}`; +}; + +// 判断收益是否可领取(倒计时已到期) +const isRewardClaimable = (itemId) => { + const countdown = countdowns.value[itemId]; + return countdown && countdown.expired; +}; + +// 获取倒计时背景样式 +const getCountdownBackgroundStyle = () => { + return { + position: 'absolute', + bottom: '20rpx', + right: '40%', + transform: 'translateX(50%)', + width: '140rpx', + height: '36rpx', + zIndex: 9 + }; +}; + // 在展作品列表 const exhibitionWorks = ref([]); +// 倒计时状态 +const countdowns = ref({}); + // 当前点赞作品列表 const likedWorks = ref([]); @@ -380,6 +473,11 @@ onMounted(() => { loadExhibitedAssets(); loadLikedAssets(); + // 启动倒计时定时器 + countdownTimer = setInterval(() => { + updateCountdowns(); + }, 1000); + // 监听身份切换事件,切换后刷新数据 uni.$on('userInfoUpdated', () => { loadExhibitedAssets(); @@ -387,7 +485,12 @@ onMounted(() => { }); }); +let countdownTimer = null; + onUnmounted(() => { + if (countdownTimer) { + clearInterval(countdownTimer); + } uni.$off('userInfoUpdated'); }); @@ -464,11 +567,9 @@ onShow(() => { inset 0 2rpx 4rpx rgba(255, 255, 255, 0.4); } -.nav-settings-text { - font-size: 24rpx; - color: #fff; - text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.8); - font-weight: 400; +.nav-settings-icon { + width: 48rpx; + height: 48rpx; } /* 内容区域 */ @@ -560,13 +661,13 @@ onShow(() => { .card-tilt-left { transform: rotate(-4deg) translateY(10rpx); margin-right: 32rpx; - border-radius: 32rpx; + border-radius: 32rpx; box-shadow: -16rpx 16rpx 16rpx rgba(229, 76, 93, 0.9); } .card-tilt-right { transform: rotate(4deg) translateY(10rpx); - border-radius: 32rpx; + border-radius: 32rpx; box-shadow: 16rpx 16rpx 16rpx rgba(229, 76, 93, 0.9); } @@ -598,6 +699,50 @@ onShow(() => { z-index: 2; } +/* 领取收益按钮 */ +.claim-reward-btn { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 88%; + height: 92%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; + z-index: 10; + background: rgba(0, 0, 0, 0.6); + border-radius: 16rpx; + gap: 8rpx; +} + +.claim-crystal-icon { + width: 50%; + height: 50%; + position: absolute; + top: 50%; + transform: translateY(-50%) +} + +.claim-btn-text { + background: linear-gradient(to bottom right, + #F0E4B1 0%, + #F08399 50%, + #B94E73 100%); + border-radius: 24rpx; + padding: 8rpx 20rpx; + box-shadow: + 0 4rpx 12rpx rgba(255, 143, 158, 0.2), + inset 0 2rpx 4rpx rgba(255, 255, 255, 0.4); + font-size: 22rpx; + color: #fff; + font-weight: 600; + text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.3); + position: absolute; + bottom: 24rpx; +} + .card-user-tag { position: absolute; bottom: 56rpx; @@ -617,8 +762,8 @@ onShow(() => { .card-rate-badge { position: absolute; - bottom: 16rpx; - left: 40%; + top: 16rpx; + left: 25%; transform: translateX(-50%); display: flex; align-items: center; @@ -646,7 +791,7 @@ onShow(() => { z-index: 2; margin-right: -16rpx; left: 20rpx; - top: 8rpx + /* top: 8rpx */ } .card-income-text-wrap { @@ -697,6 +842,35 @@ onShow(() => { font-weight: 700; } +/* 倒计时背景 */ +.countdown-background { + /* position: absolute; */ + /* top: 20rpx; + left: 30%; */ + /* transform: translateX(-50%); */ + width: 140rpx; + height: 36rpx; + background: linear-gradient(165deg, #F0E4B1 0%, #F08399 50%, #B94E73 90%, #834B9E 100%); + border-radius: 999rpx; + z-index: 9; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.4); + opacity: 0.95; +} + +/* 倒计时文字 */ +.countdown-text { + font-size: 22rpx; + font-weight: bold; + color: #fff; + font-family: 'yt', sans-serif; + text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.8); + z-index: 10; + font-variant-numeric: tabular-nums; + font-feature-settings: "tnum"; + display: flex; + justify-content: center; +} + /* 空状态 */ .empty-exhibition { display: flex; @@ -931,8 +1105,9 @@ onShow(() => { .reward-amount { font-size: 28rpx; - color: #c060e0; - font-weight: 700; + color: #fff; + font-weight: 600; + text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.7); } /* 空状态 */ diff --git a/frontend/pages/profile/profile.vue b/frontend/pages/profile/profile.vue index 69120f5..e4cd31d 100644 --- a/frontend/pages/profile/profile.vue +++ b/frontend/pages/profile/profile.vue @@ -2,256 +2,273 @@ - + - - + + - - - - - - - + + @@ -268,7 +285,7 @@ import Avatar from '../components/Avatar.vue'; import { getUserProfileApi, deleteAccountApi, updateNicknameApi, updatePasswordApi, getFanIdentitiesApi, addFanIdentityApi, getMyFanIdentitiesApi, switchFanIdentityApi, getOssSignatureApi, updateAvatarApi } from '@/utils/api'; import { validateNickname } from '@/utils/validator.js'; import { clearAvatarCache } from '@/utils/avatarCache'; -import GuideListModal from '@/components/GuideListModal.vue'; +import GuideModal from '@/pages/tasks/GuideModal.vue'; import GuideOverlay from '@/components/GuideOverlay.vue'; import { getClaimableRewardCount @@ -295,8 +312,13 @@ const newPassword = ref(''); const showOldPassword = ref(false); // 新手引导 -const showGuideListModal = ref(false); +const showGuideModal = ref(false); const guideClaimableCount = computed(() => getClaimableRewardCount()); + +// 引导更新回调 +const handleGuideUpdated = () => { + console.log('[Profile] Guide updated'); +}; const showNewPassword = ref(false); // 添加身份弹窗 @@ -325,18 +347,33 @@ const avatarKey = ref(0); // 用于强制刷新Avatar组件 // 手机号 const mobile = ref(''); -// 显示脱敏后的手机号(后端已脱敏,直接显示) +// 显示手机号/地址 +const showBlockNumber = ref(false); +const showMobile = ref(false); + +// 显示手机号(根据showMobile状态显示脱敏或未脱敏) const displayMobile = computed(() => { - return mobile.value || ''; + console.log('displayMobile computed, mobile:', mobile.value, 'showMobile:', showMobile.value); + if (!mobile.value) return ''; + // showMobile为true时显示完整号码,false时显示脱敏号码 + if (showMobile.value) { + return mobile.value; + } + // 脱敏显示:显示前3位和后4位 + const phone = mobile.value; + return phone.length === 11 ? phone.slice(0, 3) + '****' + phone.slice(-4) : phone; }); // 显示截断后的区块链地址 const displayAddress = computed(() => { const address = blockchainAddress.value; + console.log('displayAddress computed, address:', address, 'showBlockNumber:', showBlockNumber.value); // 如果没有地址,显示默认地址 if (!address) return '0xabcd...123c'; + // showBlockNumber为true时显示完整地址,false时显示截断地址 + if (showBlockNumber.value) return address; if (address.length <= 20) return address; - // 显示前10个字符和后8个字符 + // 显示前4个字符和后4个字符 return address.substring(0, 4) + '...' + address.substring(address.length - 4); }); @@ -392,7 +429,7 @@ const fetchUserInfo = async (forceRefresh = false) => { fanTag.value = userForCache.fan_identity?.name || ''; blockchainAddress.value = userForCache.blockchain_address || ''; userAvatarUrl.value = userForCache.avatar_url || ''; - mobile.value = uni.getStorageSync('login_mobile') || ''; + mobile.value = userForCache.mobile || uni.getStorageSync('login_mobile') || ''; } } catch (error) { console.error('获取用户信息失败:', error); @@ -408,7 +445,7 @@ const fetchUserInfo = async (forceRefresh = false) => { fanTag.value = cachedUser.fan_identity?.tag || ''; blockchainAddress.value = cachedUser.blockchain_address || ''; userAvatarUrl.value = cachedUser.avatar_url || ''; - mobile.value = uni.getStorageSync('login_mobile') || ''; + mobile.value = cachedUser.mobile || uni.getStorageSync('login_mobile') || ''; } catch (e) { console.error('解析缓存用户信息失败:', e); } @@ -423,6 +460,12 @@ const fetchUserInfo = async (forceRefresh = false) => { } }; +// 切换手机号显示 +const toggleMobileDisplay = () => { + console.log('toggleMobileDisplay called, showMobile:', showMobile.value); + showMobile.value = !showMobile.value; +}; + // 复制UID const copyUid = () => { if (!uid.value) { @@ -445,19 +488,6 @@ const handleViewNickname = () => { }); }; -// 查看手机号 -const handleViewMobile = () => { - if (!displayMobile.value) { - uni.showToast({ title: '未绑定手机号', icon: 'none' }); - return; - } - uni.setClipboardData({ - data: displayMobile.value, - success: () => uni.showToast({ title: '已复制手机号', icon: 'success' }), - fail: () => uni.showToast({ title: '复制失败', icon: 'none' }) - }); -}; - // 复制区块链地址 const copyAddress = () => { if (!blockchainAddress.value) { @@ -917,50 +947,7 @@ const handleDeleteAccount = () => { // 点击新手指引 const handleGuideClick = () => { - showGuideListModal.value = true; -}; - -// 执行引导 -const handleStartGuide = (params) => { - // 支持传入对象 { key, fromStep, targetPage } 或直接传 key - const key = typeof params === 'string' ? params : (params?.key || ''); - const fromStep = typeof params === 'object' ? (params.fromStep ?? 0) : 0; - const targetPage = typeof params === 'object' ? (params.targetPage || '') : ''; - - console.log('[Profile] handleStartGuide:', { key, fromStep, targetPage }); - - showGuideListModal.value = false; - - // 根据引导类型跳转到对应页面 - if (key === 'square_home') { - // 使用 targetPage 跳转到对应页面 - const navigateUrl = targetPage || '/pages/square/square'; - uni.navigateTo({ - url: navigateUrl, - success: () => { - // 延迟执行确保页面已加载 - setTimeout(() => { - if (fromStep === 0) { - store.dispatch("guide/startGuideFromBeginning", key); - } else { - store.dispatch("guide/resumeGuide", key); - } - }, 500); - } - }); - } else { - // 其他引导在当前页面触发 - if (fromStep === 0) { - store.dispatch("guide/startGuideFromBeginning", key); - } else { - store.dispatch("guide/resumeGuide", key); - } - } -}; - -// 领取奖励成功 -const handleClaimSuccess = (reward) => { - console.log("[Profile] 领取奖励成功:", reward); + showGuideModal.value = true; }; // 关闭注销账号弹窗 @@ -1309,12 +1296,12 @@ onShow(() => { display: none; } -.close-icon-img{ +.close-icon-img { width: 80rpx; height: 80rpx; position: relative; - top: 32rpx; - left: 32rpx; + top: 32rpx; + left: 32rpx; } .user-info-card { @@ -1335,7 +1322,7 @@ onShow(() => { align-items: flex-start; /* gap: 30rpx; */ margin-bottom: 0; - + } .avatar-container { @@ -1353,8 +1340,8 @@ onShow(() => { gap: 8rpx; margin-left: 8rpx; background-image: url(/static/rank/activity-support-icon/beijingkuang.png); - background-size: 100% 110%; - background-position: center; + background-size: 100% 110%; + background-position: center; padding: 24rpx 24rpx 24rpx 240rpx; min-width: 356rpx; } @@ -1371,6 +1358,11 @@ onShow(() => { min-width: 112rpx; } +.address-row { + display: flex; + align-items: center; +} + .info-value { font-size: 24rpx; color: #ffffff; @@ -1378,15 +1370,18 @@ onShow(() => { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + min-width: 200rpx; + } -.uid-value { - max-width: 200rpx; +.uid-value {} + +.toggle-icon { + width: 32rpx; + height: 32rpx; } -.address-value { - max-width: 160rpx; -} +.address-value {} .info-btn { font-size: 20rpx; @@ -1521,7 +1516,7 @@ onShow(() => { .asset-card { background-image: url(/static/rank/activity-support-icon/beijingkuang.png); - background-size: 100% 100%; + background-size: 100% 125%; background-position: center; border-radius: 20rpx; padding: 0 16rpx; @@ -1619,8 +1614,10 @@ onShow(() => { .logout-section { padding: 10rpx 30rpx; - padding-bottom: calc(40rpx + constant(safe-area-inset-bottom)); /* iOS 11.0 */ - padding-bottom: calc(40rpx + env(safe-area-inset-bottom)); /* iOS 11.2+ */ + padding-bottom: calc(40rpx + constant(safe-area-inset-bottom)); + /* iOS 11.0 */ + padding-bottom: calc(40rpx + env(safe-area-inset-bottom)); + /* iOS 11.2+ */ display: flex; position: relative; } @@ -1686,7 +1683,10 @@ onShow(() => { .modal-content { width: 80%; max-width: 600rpx; - background: #ffffff; + /* background: #ffffff; */ + background-image: url('/static/starbookcontent/beijing.png'); + background-size: cover; + background-position: center bottom; border-radius: 30rpx; padding: 60rpx 40rpx; box-sizing: border-box; diff --git a/frontend/pages/support-activity/components/ThemeBanner.vue b/frontend/pages/support-activity/components/ThemeBanner.vue index 613ac42..caba28e 100644 --- a/frontend/pages/support-activity/components/ThemeBanner.vue +++ b/frontend/pages/support-activity/components/ThemeBanner.vue @@ -1,23 +1,17 @@ @@ -131,7 +125,7 @@ const progressPercent = computed(() => { font-size: 64rpx; font-weight: 900; color: #fff; - text-shadow: + text-shadow: 0 0 10rpx rgba(255, 255, 255, 0.8), 0 4rpx 8rpx rgba(0, 0, 0, 0.5); line-height: 1.2; @@ -178,13 +172,26 @@ const progressPercent = computed(() => { display: flex; justify-content: flex-end; align-items: flex-end; + } .progress-text { - font-size: 32rpx; + font-size: 24rpx; color: #fff; text-shadow: 0 0 8rpx rgba(255, 255, 255, 0.6); font-family: 'yt', sans-serif; + background-image: url('@/static/rank/activity-support-icon/beijingkuang.png'); + background-size: cover; + background-position: center; + padding: 0.8rpx 24rpx; + border-radius: 40rpx; + text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.6); + +} + +.current-value { + color: #FFD700; + text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.6); } .progress-bar { diff --git a/frontend/pages/tasks/GuideModal.vue b/frontend/pages/tasks/GuideModal.vue index 70e7de4..f3b3639 100644 --- a/frontend/pages/tasks/GuideModal.vue +++ b/frontend/pages/tasks/GuideModal.vue @@ -17,7 +17,7 @@ - + diff --git a/frontend/static/icon/castlove.png b/frontend/static/icon/castlove.png index 0023a64..ed9643a 100644 Binary files a/frontend/static/icon/castlove.png and b/frontend/static/icon/castlove.png differ diff --git a/frontend/static/icon/dressup.png b/frontend/static/icon/dressup.png index 7ffa73b..a30e9e9 100644 Binary files a/frontend/static/icon/dressup.png and b/frontend/static/icon/dressup.png differ diff --git a/frontend/static/icon/hide.png b/frontend/static/icon/hide.png new file mode 100644 index 0000000..c7ffd11 Binary files /dev/null and b/frontend/static/icon/hide.png differ diff --git a/frontend/static/icon/settings.png b/frontend/static/icon/settings.png new file mode 100644 index 0000000..aa8e230 Binary files /dev/null and b/frontend/static/icon/settings.png differ diff --git a/frontend/static/icon/show.png b/frontend/static/icon/show.png new file mode 100644 index 0000000..8b3f8f4 Binary files /dev/null and b/frontend/static/icon/show.png differ diff --git a/frontend/static/icon/square.png b/frontend/static/icon/square.png index 8cec21f..71f6c45 100644 Binary files a/frontend/static/icon/square.png and b/frontend/static/icon/square.png differ diff --git a/frontend/static/nft/lihe.png b/frontend/static/nft/lihe.png index 01da12c..0698187 100644 Binary files a/frontend/static/nft/lihe.png and b/frontend/static/nft/lihe.png differ diff --git a/frontend/store/modules/user.js b/frontend/store/modules/user.js index 8842011..0e83320 100644 --- a/frontend/store/modules/user.js +++ b/frontend/store/modules/user.js @@ -96,8 +96,8 @@ const actions = { // 缓存用户信息 const user = res.data.user - // 缓存登录手机号(优先使用后端返回的脱敏手机号) - const loginMobile = user.mobile_masked || mobile + // 缓存登录手机号 + const loginMobile = mobile uni.setStorageSync('login_mobile', loginMobile) uni.setStorageSync('user', JSON.stringify(user)) @@ -131,8 +131,8 @@ const actions = { // 缓存用户信息 const user = res.data.user - // 缓存登录手机号(优先使用后端返回的脱敏手机号) - const loginMobile = user.mobile_masked || mobile + // 缓存登录手机号 + const loginMobile = mobile uni.setStorageSync('login_mobile', loginMobile) uni.setStorageSync('user', JSON.stringify(user)) diff --git a/frontend/utils/api.js b/frontend/utils/api.js index 6ed4129..da8ab9b 100644 --- a/frontend/utils/api.js +++ b/frontend/utils/api.js @@ -3,19 +3,19 @@ // 不需要手动注释! // #ifdef H5 -// const baseURL = 'http://localhost:8080' // H5 开发用本机 -const baseURL = 'http://101.132.250.62:8080' // H5 开发用本机 +const baseURL = 'http://192.168.110.60:8080' // H5 开发用本机 +// const baseURL = 'http://101.132.250.62:8080' // H5 开发用本机 // #endif // #ifdef APP-PLUS // 开发调试:手机和电脑同一WiFi时用这个(改成你电脑IP) // 上线后:改成实际服务器地址 -// const baseURL = 'http://192.168.110.60:8080' +const baseURL = 'http://192.168.110.60:8080' // #endif // 服务器地址(正式上线用) // #ifdef APP-PLUS -const baseURL = 'http://101.132.250.62:8080' +// const baseURL = 'http://101.132.250.62:8080' // #endif // 是否使用模拟数据(开发调试时设为 true,后端API准备好后改为 false) @@ -468,7 +468,9 @@ export function getBatchOssPresignedUrlsApi(files, expires = 3600, type = 'asset * @returns {Promise<{ imageUrl: string, orderId?: string, data: object }>} */ export function uploadLocalFileToOss(filePath, options = {}) { - const { type = 'asset', orderId = '', fileName } = options + const { + type = 'asset', orderId = '', fileName + } = options const objectName = fileName || `${Date.now()}.jpg` return new Promise((resolve, reject) => { getOssSignatureApi(type, orderId)