Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
飞
飞鹤小程序
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
FH
飞鹤小程序
Commits
d3a0bb19
Commit
d3a0bb19
authored
Oct 25, 2025
by
jt
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feihesanqi_20251014' of gitlab2.dui88.com:fh/20250528_FHQ1 into feihesanqi_20251014
parents
5c5f5a0c
b7cae427
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
431 additions
and
67 deletions
+431
-67
goods.js
api/goods.js
+2
-8
InviteGift.vue
components/integralArea/InviteGift.vue
+21
-5
InvitePrizePanel.vue
components/integralArea/InvitePrizePanel.vue
+1
-1
sharenpopnologin.less
components/integralArea/sharenpopnologin.less
+86
-0
sharenpopnologin.vue
components/integralArea/sharenpopnologin.vue
+70
-0
sharepoplogin.less
components/integralArea/sharepoplogin.less
+94
-0
sharepoplogin.vue
components/integralArea/sharepoplogin.vue
+71
-0
sharepage.vue
pages/invate/sharepage.vue
+48
-0
goodDetail.vue
v3/goodDetail/goodDetail.vue
+21
-36
Integral.vue
views/Integral.vue
+17
-17
No files found.
api/goods.js
View file @
d3a0bb19
...
...
@@ -15,14 +15,8 @@ export const fetchGoodsDetail = (data) => api.get('/c/goods/detail', data);
/**
* 获取秒杀商品详情
* @param {Object} data - 请求参数
* @param {string} data.id - 商品ID (必须)
* @param {string} [data.phone] - 充值号码 (可选)
* @param {string} [data.buyNum=1] - 下单数量 (可选,默认1)
* @param {string} [data.storeId] - 门店ID (可选)
* @param {string} [data.amount] - 充值面额 (可选)
* @param {string} [data.channel] - 渠道 (可选)
* @param {string} [data.addressId] - 地址ID (可选)
* @param {string} data.appGoodsId - 应用商品ID (必须)
* @param {string} data.gid - 商品ID (必须)
* @param {string} data.activityId - 活动ID (必须)
* @param {string} data.sessionKey - 会话密钥 (必须)
* @returns {Promise} API响应
* @description 获取秒杀商品详情信息
...
...
components/integralArea/InviteGift.vue
View file @
d3a0bb19
...
...
@@ -14,9 +14,9 @@
<text
class=
"card_description"
>
成功邀请一位好友注册即可获得XXX
</text>
<!-- 去邀请按钮 -->
<
Button
class=
"invite_button"
@
click=
"handleInviteClick"
type=
"share"
>
<
view
class=
"invite_button"
@
tap=
"handleInviteClick"
open-
type=
"share"
>
<text
class=
"invite_button_text"
>
去邀请
</text>
</
Button
>
</
view
>
</view>
<!-- 3D星星角色 -->
<view
class=
"star_character"
>
...
...
@@ -33,13 +33,13 @@
</view>
<!-- 3D星星角色 -->
<view
class=
"star_character"
>
<
!--
<
view
class=
"star_character"
>
<image
class=
"star_img"
:src=
"$baseUrl + 'integral/1023/star_character.png'"
mode=
"aspectFit"
/>
</view>
</view>
-->
</view>
</view>
</
template
>
...
...
@@ -47,17 +47,33 @@
<
script
setup
>
import
{
defineEmits
}
from
'vue'
;
import
{
onShareAppMessage
}
from
'@dcloudio/uni-app'
;
import
{
jump
,
JumpType
}
from
'../../utils'
;
// Emits 定义
const
emit
=
defineEmits
([
'invite'
,
'record'
]);
// 去邀请按钮点击事件
const
handleInviteClick
=
()
=>
{
console
.
log
(
'去邀请按钮点击'
);
jump
({
url
:
'/pages/invate/sharepage'
,
type
:
JumpType
.
INNER
});
emit
(
'invite'
);
};
// 分享配置
onShareAppMessage
(()
=>
{
return
{
title
:
'积分分享'
,
path
:
'/pages/invate/sharepage'
,
imageUrl
:
''
};
});
// 邀请记录按钮点击事件
const
handleRecordClick
=
()
=>
{
console
.
log
(
'邀请记录按钮点击'
);
...
...
components/integralArea/InvitePrizePanel.vue
View file @
d3a0bb19
...
...
@@ -10,7 +10,7 @@
<view
class=
"prize_image_area"
>
<image
class=
"prize_image"
:src=
"prizeImage || $baseUrl + 'integral/1023/
prize_placeholder
.png'"
:src=
"prizeImage || $baseUrl + 'integral/1023/
invate_star_character1023
.png'"
mode=
"aspectFit"
/>
</view>
...
...
components/integralArea/sharenpopnologin.less
0 → 100644
View file @
d3a0bb19
.sharenpopnologin_overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
.sharenpopnologin_container {
width: 546rpx;
height: 536rpx;
background: linear-gradient(to top, #ffffff 0%, #ffffff 50%, #FFE9C5 100%); // 金色渐变,上面渐变更慢
border-radius: 30rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.2);
position: relative;
padding: 92rpx 30rpx 0rpx 30rpx;
.popup_content {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.popup_title {
font-size: 36rpx;
font-weight: bold;
color: #D3A458;
margin-bottom: 60rpx;
line-height: 1.4;
}
.star_character {
margin-bottom: 60rpx;
.star_img {
width: 200rpx;
height: 200rpx;
}
}
.view_button {
width: 400rpx;
height: 80rpx;
background: #D3A458; // 金色渐变
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(212, 164, 104, 0.3);
.view_button_text {
font-size: 32rpx;
font-weight: bold;
color: #ffffff;
}
}
}
.close_button {
position: absolute;
bottom: -120rpx;
left: 50%;
transform: translateX(-50%);
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2);
z-index: 2;
.close_icon {
font-size: 36rpx;
color: #fff;
font-weight: bold;
line-height: 1;
}
}
}
}
components/integralArea/sharenpopnologin.vue
0 → 100644
View file @
d3a0bb19
<
template
>
<view
class=
"sharenpopnologin_overlay"
v-if=
"visible"
>
<view
class=
"sharenpopnologin_container"
@
click
.
stop
>
<!-- 弹窗内容 -->
<view
class=
"popup_content"
>
<!-- 标题文字 -->
<text
class=
"popup_title"
>
快去查看你的权益吧
</text>
<!-- 3D星星角色 -->
<view
class=
"star_character"
>
<image
class=
"star_img"
:src=
"$baseUrl + 'integral/1023/invate_star_character1023.png'"
mode=
"aspectFit"
/>
</view>
<!-- 立即查看按钮 -->
<view
class=
"view_button"
@
click=
"handleViewBenefits"
>
<text
class=
"view_button_text"
>
立即查看
</text>
</view>
</view>
<!-- 关闭按钮 -->
<view
class=
"close_button"
@
click=
"handleClose"
>
<text
class=
"close_icon"
>
×
</text>
</view>
</view>
</view>
</
template
>
<
script
setup
>
import
{
defineProps
,
defineEmits
}
from
'vue'
;
import
{
jump
,
JumpType
}
from
'../../utils'
;
// Props 定义
const
props
=
defineProps
({
visible
:
{
type
:
Boolean
,
default
:
false
}
});
// Emits 定义
const
emit
=
defineEmits
([
'close'
,
'viewBenefits'
]);
// 关闭弹窗
const
handleClose
=
()
=>
{
emit
(
'close'
);
gotoIntegral
();
};
// 查看权益按钮点击
const
handleViewBenefits
=
()
=>
{
emit
(
'viewBenefits'
);
emit
(
'close'
);
gotoIntegral
();
};
const
gotoIntegral
=
()
=>
{
jump
({
url
:
'/pages/index/index?pageType=integral'
,
type
:
JumpType
.
INNER
});
};
</
script
>
<
style
lang=
"less"
scoped
>
@import '@/components/integralArea/sharenpopnologin.less';
</
style
>
components/integralArea/sharepoplogin.less
0 → 100644
View file @
d3a0bb19
.sharepoplogin_overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
.sharepoplogin_container {
// box-sizing: border-box;
width: 546rpx;
height: 536rpx;
background: linear-gradient(to top, #ffffff 0%, #ffffff 50%, #FFE9C5 100%); // 金色渐变,上面渐变更慢
border-radius: 30rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.2);
position: relative;
padding: 72rpx 30rpx 0rpx 30rpx;
.popup_content {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
.popup_title {
font-size: 36rpx;
font-weight: bold;
color: #D3A458;
margin-bottom: 16rpx;
line-height: 1.4;
}
.popup_subtitle {
font-size: 28rpx;
color: #54390D;
margin-bottom: 40rpx;
line-height: 1.4;
}
.star_character {
margin-bottom: 40rpx;
.star_img {
width: 200rpx;
height: 200rpx;
}
}
.benefits_button {
width: 400rpx;
height: 80rpx;
background: #D3A458;
border-radius: 40rpx;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(212, 164, 104, 0.3);
.benefits_button_text {
font-size: 32rpx;
font-weight: bold;
color: #ffffff;
}
}
}
.close_button {
position: absolute;
bottom: -120rpx;
left: 50%;
transform: translateX(-50%);
width: 60rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.2);
z-index: 2;
.close_icon {
font-size: 36rpx;
color: #fff;
font-weight: bold;
line-height: 1;
}
}
}
}
components/integralArea/sharepoplogin.vue
0 → 100644
View file @
d3a0bb19
<
template
>
<view
class=
"sharepoplogin_overlay"
v-if=
"visible"
>
<view
class=
"sharepoplogin_container"
@
click
.
stop
>
<!-- 弹窗内容 -->
<view
class=
"popup_content"
>
<!-- 标题文字 -->
<text
class=
"popup_title"
>
你已注册过飞鹤星妈会会员
</text>
<text
class=
"popup_subtitle"
>
直接领取你的权益吧
</text>
<!-- 3D星星角色 -->
<view
class=
"star_character"
>
<image
class=
"star_img"
:src=
"$baseUrl + 'integral/1023/invate_star_character1023.png'"
mode=
"aspectFit"
/>
</view>
<!-- 查看权益按钮 -->
<view
class=
"benefits_button"
@
click=
"handleViewBenefits"
>
<text
class=
"benefits_button_text"
>
查看我的权益
</text>
</view>
</view>
<!-- 关闭按钮 -->
<view
class=
"close_button"
@
click=
"handleClose"
>
<text
class=
"close_icon"
>
×
</text>
</view>
</view>
</view>
</
template
>
<
script
setup
>
import
{
defineProps
,
defineEmits
}
from
'vue'
;
import
{
jump
,
JumpType
}
from
'../../utils'
;
// Props 定义
const
props
=
defineProps
({
visible
:
{
type
:
Boolean
,
default
:
false
}
});
// Emits 定义
const
emit
=
defineEmits
([
'close'
,
'viewBenefits'
]);
// 关闭弹窗
const
handleClose
=
()
=>
{
emit
(
'close'
);
gotoIntegral
();
};
// 查看权益按钮点击
const
handleViewBenefits
=
()
=>
{
emit
(
'viewBenefits'
);
emit
(
'close'
);
gotoIntegral
();
};
const
gotoIntegral
=
()
=>
{
jump
({
url
:
'/pages/index/index?pageType=integral'
,
type
:
JumpType
.
INNER
});
};
</
script
>
<
style
lang=
"less"
scoped
>
@import '@/components/integralArea/sharepoplogin.less';
</
style
>
pages/invate/sharepage.vue
View file @
d3a0bb19
...
...
@@ -9,11 +9,59 @@
<text
class=
"claim_text"
>
一键领取
</text>
</view>
</view>
<!-- 分享登录弹窗 -->
<sharepoplogin
:visible=
"showSharePopLogin"
@
close=
"handleCloseSharePopLogin"
@
viewBenefits=
"handleViewBenefits"
/>
<!-- 分享未登录弹窗 -->
<sharenpopnologin
:visible=
"showShareNPopNoLogin"
@
close=
"handleCloseShareNPopNoLogin"
@
viewBenefits=
"handleViewBenefits"
/>
</view>
</
template
>
<
script
setup
>
import
{
onMounted
,
ref
}
from
'vue'
;
import
{
onShareAppMessage
}
from
'@dcloudio/uni-app'
;
import
sharepoplogin
from
'@/components/integralArea/sharepoplogin.vue'
;
import
sharenpopnologin
from
'@/components/integralArea/sharenpopnologin.vue'
;
// 分享登录弹窗状态
const
showSharePopLogin
=
ref
(
false
);
// 分享未登录弹窗状态
const
showShareNPopNoLogin
=
ref
(
true
);
onMounted
(()
=>
{
// 页面加载时显示分享未登录弹窗
showShareNPopNoLogin
.
value
=
true
;
});
// 关闭分享登录弹窗
const
handleCloseSharePopLogin
=
()
=>
{
showSharePopLogin
.
value
=
false
;
};
// 关闭分享未登录弹窗
const
handleCloseShareNPopNoLogin
=
()
=>
{
showShareNPopNoLogin
.
value
=
false
;
};
// 查看权益按钮点击
const
handleViewBenefits
=
()
=>
{
console
.
log
(
'查看我的权益'
);
// 这里可以添加跳转到权益页面的逻辑
uni
.
showToast
({
title
:
'跳转到权益页面'
,
icon
:
'none'
});
};
// 一键领取按钮点击事件
const
handleClaim
=
()
=>
{
...
...
v3/goodDetail/goodDetail.vue
View file @
d3a0bb19
...
...
@@ -314,20 +314,14 @@ export default {
// 构建秒杀API请求参数
const
seckillParams
=
{
id
:
this
.
seckillParams
.
appGoodsId
,
phone
:
options
.
phone
||
''
,
buyNum
:
options
.
buyNum
||
'1'
,
storeId
:
options
.
storeId
||
''
,
amount
:
options
.
amount
||
''
,
channel
:
options
.
channel
||
''
,
addressId
:
options
.
addressId
||
''
,
appGoodsId
:
this
.
seckillParams
.
appGoodsId
,
gid
:
this
.
seckillParams
.
appGoodsId
,
activityId
:
this
.
seckillParams
.
activityId
,
sessionKey
:
this
.
seckillParams
.
sessionKey
};
console
.
log
(
'秒杀API请求参数:'
,
seckillParams
);
if
(
seckillParams
.
id
&&
seckillParams
.
appGoods
Id
&&
seckillParams
.
sessionKey
)
{
if
(
seckillParams
.
gid
&&
seckillParams
.
activity
Id
&&
seckillParams
.
sessionKey
)
{
this
.
fetchSeckillDetail
(
seckillParams
);
}
else
{
uni
.
showToast
({
...
...
@@ -682,9 +676,9 @@ export default {
getButtonClass
()
{
const
classes
=
{};
// 未登录状态
// 未登录状态
保持正常样式
if
(
!
this
.
cfgStatus
.
isRegister
)
{
return
classes
;
// 未登录时保持正常样式
return
classes
;
}
// 根据兑换状态添加对应样式
...
...
@@ -1281,14 +1275,14 @@ export default {
.points-value
{
font-size
:
48
rpx
;
font-weight
:
bold
;
color
:
#
e6a23c
;
color
:
#
D3A458
;
margin-right
:
10
rpx
;
}
.points-unit
{
font-size
:
28
rpx
;
font-weight
:
normal
;
color
:
#
e6a23c
;
color
:
#
D3A458
;
}
.exchange-count
{
...
...
@@ -1379,7 +1373,7 @@ export default {
.exchange-btn
{
width
:
100%
;
height
:
90
rpx
;
background-color
:
#
e6a23c
;
background-color
:
#
D3A458
;
color
:
#fff
;
font-size
:
32
rpx
;
border-radius
:
45
rpx
;
...
...
@@ -1390,32 +1384,23 @@ export default {
}
.exchange-btn
:active
{
background-color
:
#d4902b
;
}
.exchange-btn.disabled
{
background-color
:
#ccc
;
color
:
#999
;
}
.exchange-btn.sold-out
{
background-color
:
#999
;
color
:
#fff
;
}
.exchange-btn.insufficient-points
{
background-color
:
#f56c6c
;
color
:
#fff
;
background-color
:
#B8944A
;
}
.exchange-btn.insufficient-level
{
background-color
:
#909399
;
/* 未登录状态保持金色背景 */
.exchange-btn
:not
(
.sold-out
)
:not
(
.insufficient-points
)
:not
(
.insufficient-level
)
:not
(
.exchange-limit
)
:not
(
.disabled
)
{
background-color
:
#D3A458
;
color
:
#fff
;
}
.exchange-btn.exchange-limit
{
background-color
:
#909399
;
color
:
#fff
;
/* 各种不可兑换状态都显示灰色背景 */
.exchange-btn.sold-out
,
.exchange-btn.insufficient-points
,
.exchange-btn.insufficient-level
,
.exchange-btn.exchange-limit
,
.exchange-btn.disabled
{
background-color
:
#ccc
;
color
:
#999
;
}
/* 规格选择弹窗样式 */
...
...
@@ -1489,7 +1474,7 @@ export default {
.product-points
{
font-size
:
32
rpx
;
font-weight
:
bold
;
color
:
#
e6a23c
;
color
:
#
D3A458
;
margin-bottom
:
10
rpx
;
display
:
block
;
}
...
...
views/Integral.vue
View file @
d3a0bb19
...
...
@@ -2828,23 +2828,23 @@ const handleInviteClick = () => {
console.log('
准备调起分享面板
');
// 方法1:使用 showShareMenu
uni.showShareMenu({
withShareTicket: true,
menus: ['
shareAppMessage
', '
shareTimeline
'],
success: (res) => {
console.log('
showShareMenu
成功
:
', res);
}
,
fail: (err) => {
console.error('
showShareMenu
失败
:
', err);
// 备用方案:显示提示用户手动分享
uni.showModal({
title: '
分享提示
',
content: '
请点击右上角菜单选择分享给好友或朋友圈
',
showCancel: false,
confirmText: '
知道了
'
}
);
}
}
);
//
uni.showShareMenu({
//
withShareTicket: true,
//
menus: ['
shareAppMessage
', '
shareTimeline
'],
//
success: (res) => {
//
console.log('
showShareMenu
成功
:
', res);
//
}
,
//
fail: (err) => {
//
console.error('
showShareMenu
失败
:
', err);
//
// 备用方案:显示提示用户手动分享
//
uni.showModal({
//
title: '
分享提示
',
//
content: '
请点击右上角菜单选择分享给好友或朋友圈
',
//
showCancel: false,
//
confirmText: '
知道了
'
//
}
);
//
}
//
}
);
// 展示邀请得礼弹窗
// globalStore.isShowInvitePrizePanel = true;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment