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
543b7af7
Commit
543b7af7
authored
Nov 11, 2025
by
spc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed
parent
742d7083
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
42 additions
and
374 deletions
+42
-374
.DS_Store
.DS_Store
+0
-0
request.js
api/request.js
+2
-2
ActivitySelectedPopup.vue
components/ActivitySelectedPopup.vue
+10
-7
main.js
main.js
+2
-2
pages.json
pages.json
+0
-7
actList.vue
subPackages/momclub/actList.vue
+0
-6
FormTree.vue
subPackages/momclub/component/FormTree.vue
+13
-2
index.vue
subPackages/momclub/index.vue
+14
-2
sign.vue
subPackages/momclub/sign.vue
+1
-1
signUpList.vue
subPackages/momclub/signUpList.vue
+0
-345
No files found.
.DS_Store
View file @
543b7af7
No preview for this file type
api/request.js
View file @
543b7af7
...
...
@@ -16,8 +16,8 @@ const {
// request.js
// 通常可以吧 baseUrl 单独放在一个 js 文件了
// export const baseUrl = "http://172.16.230.108:7777/pmall";
export
const
baseUrl
=
"https://momclub-uat.feihe.com/pmall"
;
//测试环境
//
export const baseUrl = "https://momclub-test.feihe.com/pmall";
//
export const baseUrl = "https://momclub-uat.feihe.com/pmall";//测试环境
export
const
baseUrl
=
"https://momclub-test.feihe.com/pmall"
;
// export const baseUrl = "https://momclub.feihe.com/pmall";//生产环境
// export const baseUrl = "https://docs.dui88.com/mock/1956/api";//mock
// export const baseUrl = "https://feihe.m.duibatest.com.cn/pmall"
...
...
components/ActivitySelectedPopup.vue
View file @
543b7af7
...
...
@@ -31,13 +31,16 @@
</view>
<!-- 底部渐变蒙层 -->
<view
v-if=
"activityList.length >= 3"
class=
"scroll-fade-mask"
>
<image
class=
"mask-image"
:src=
"`$
{$baseUrl}homepage/Q3Res/actSelectMask.png`" mode="aspectFit">
<image
class=
"mask-image"
:src=
"`https://course.feihe.com/momclub-picture/homepage/Q3Res/actSelectMask.png`"
mode=
"aspectFit"
>
</image>
</view>
<!-- 底部统一按钮 -->
<view
class=
"bottom-btn-wrapper"
>
<view
class=
"activity-btn"
@
tap=
"handleBottomButtonClick"
>
<image
class=
"activity-btn-image"
:src=
"`$
{$baseUrl}homepage/Q3Res/actSelectLookBtn.png`"
<image
class=
"activity-btn-image"
:src=
"`https://course.feihe.com/momclub-picture/homepage/Q3Res/actSelectLookBtn.png`"
mode=
"aspectFit"
></image>
</view>
</view>
...
...
@@ -46,17 +49,17 @@
<!-- 关闭按钮 -->
<view
class=
"close-btn"
@
tap=
"handleClose"
>
<image
class=
"close-icon"
:src=
"`$
{$baseUrl}homepage/Q3Res/commonCloseBtn.png`" mode="aspectFit">
</image>
<image
class=
"close-icon"
:src=
"`https://course.feihe.com/momclub-picture/homepage/Q3Res/commonCloseBtn.png`"
mode=
"aspectFit"
>
</image>
</view>
</view>
</
template
>
<
script
setup
>
import
{
computed
,
ref
,
getCurrentInstance
}
from
'vue'
import
{
computed
,
ref
}
from
'vue'
import
{
fetchUserClickActivity
}
from
'../api/home'
const
{
proxy
}
=
getCurrentInstance
()
const
$baseUrl
=
proxy
.
$baseUrl
const
props
=
defineProps
({
visible
:
{
...
...
@@ -95,7 +98,7 @@ const handleViewActivity = async (activity, index) => {
}
// 底部按钮点击
const
handleBottomButtonClick
=
()
=>
{
const
handleBottomButtonClick
=
async
()
=>
{
// 调用接口,传所有 activityIds
const
activityIds
=
props
.
activityList
.
filter
(
activity
=>
activity
.
id
)
...
...
main.js
View file @
543b7af7
...
...
@@ -6,8 +6,8 @@ import md from "./md";
const
SENSORS_URL
=
"https://sensors.feihe.com/sa?project=XMH_Content"
;
// const BASE_URL = 'https://duiba.oss-cn-hangzhou.aliyuncs.com/fh/';
//
const BASE_URL = 'https://firmus-member-test-1253290912.cos.ap-beijing.myqcloud.com/xmh-mini-program/';
const
BASE_URL
=
"https://course.feihe.com/momclub-picture/"
;
const
BASE_URL
=
'https://firmus-member-test-1253290912.cos.ap-beijing.myqcloud.com/xmh-mini-program/'
;
//
const BASE_URL = "https://course.feihe.com/momclub-picture/";
md
.
init
(
SENSORS_URL
);
...
...
pages.json
View file @
543b7af7
...
...
@@ -382,13 +382,6 @@
"navigationBarBackgroundColor"
:
"#ffffff"
}
},
{
"path"
:
"momclub/signUpList"
,
"style"
:
{
"navigationBarTitleText"
:
"报名记录"
,
"navigationBarBackgroundColor"
:
"#ffffff"
}
},
{
"path"
:
"momclub/error"
,
"style"
:
{
...
...
subPackages/momclub/actList.vue
View file @
543b7af7
...
...
@@ -173,12 +173,6 @@ const detailClick = (item) => {
url
:
`/subPackages/momclub/index?activityId=
${
item
.
activityId
}
`
})
}
//查看已报名活动
const
recordClick
=
()
=>
{
uni
.
navigateTo
({
url
:
`/subPackages/momclub/signUpList`
})
}
const
getInfo
=
async
(
type
)
=>
{
try
{
const
api
=
type
?
signupListApi
:
activityListApi
...
...
subPackages/momclub/component/FormTree.vue
View file @
543b7af7
...
...
@@ -154,7 +154,7 @@
<
/view
>
<
/view
>
<
/view
>
<
view
:
class
=
"(
item.subFormList && item.subFormList.length > 0)
? 'line-dash' : ''"
><
/view
>
<
view
:
class
=
"(
(!isView && item.subFormList && item.subFormList.length > 0) || (isView && hasFilledOutList(item?.subFormList)))
? 'line-dash' : ''"
><
/view
>
<
view
v
-
if
=
"item.subFormList && item.subFormList.length > 0"
class
=
"sub-box"
>
<
view
v
-
if
=
"!isView"
:
class
=
"item.subFormList.length === 1 ? 'sub-warp-one' : item.subFormList.length === 2 ? 'sub-warp-two' : 'sub-warp-three'"
>
...
...
@@ -165,9 +165,11 @@
<
/view
>
<
/view
>
<
/view
>
<
view
class
=
"white-bg"
><
/view>
<
view
v
-
if
=
"item.subFormList && item.subFormList.length > 0"
v
-
for
=
"(subItm, subIndex) in item.subFormList"
:
key
=
"subIndex"
>
<
view
v
-
if
=
"(!isView && subItm.isShow) || (isView && subItm.hasFilledOut) "
>
<
view
v
-
if
=
"(!isView && subItm.isShow) || (isView && subItm.hasFilledOut)"
class
=
'line-dash'
><
/view
>
<
form
-
tree
v
-
bind
=
"{ item: subItm, index, visible, areaVisible, formData, isView
}
"
@
addSubForm
=
"() => emit('addSubForm', subIndex)"
@
delSubForm
=
"() => emit('delSubForm', subIndex)"
...
...
@@ -182,7 +184,6 @@
@
onImageDel
=
"({ fieldIndex, idx
}
) => emit('onImageDel', { subIndex, fieldIndex, idx
}
)"
@
openAddressPicker
=
"({ fieldIndex
}
) => emit('openAddressPicker', { subIndex, fieldIndex
}
)"
@
openDatePicker
=
"({ fieldIndex
}
) => emit('openDatePicker', { subIndex, fieldIndex
}
)"
/>
<
view
v
-
if
=
"subIndex < item.subFormList.map(i=>i.isShow).length - 1"
class
=
'line-dash'
><
/view
>
<
/view
>
<
/view
>
<
/view
>
...
...
@@ -220,6 +221,9 @@ const props = defineProps({
}
)
const
{
visible
,
areaVisible
,
item
,
index
,
formData
,
isView
}
=
toRefs
(
props
)
const
emit
=
defineEmits
([
'textInput'
,
'mobileInput'
,
'updateMobile'
,
'cardInput'
,
'onUpload'
,
'onPreviewImage'
,
'onImageDel'
,
'openAddressPicker'
,
'openDatePicker'
,
'addSubForm'
,
'delSubForm'
,
'onRadioChange'
,
'onCheckChange'
])
const
hasFilledOutList
=
(
list
)
=>
{
return
list
&&
list
.
some
(
itm
=>
itm
.
hasFilledOut
)
}
<
/script
>
<
style
lang
=
"less"
scoped
>
...
...
@@ -517,6 +521,13 @@ const emit = defineEmits(['textInput', 'mobileInput', 'updateMobile', 'cardInput
.
gray
{
opacity
:
0.2
;
}
.
white
-
bg
{
position
:
relative
;
width
:
100
%
;
height
:
2
rpx
;
background
-
color
:
#
fff
;
top
:
41
rpx
;
}
}
}
<
/style>
\ No newline at end of file
subPackages/momclub/index.vue
View file @
543b7af7
...
...
@@ -172,6 +172,8 @@ import NoticeDialog from './component/noticeDialog.vue'
import
ResultDialog
from
'./component/resultDialog.vue'
import
RegisterDialog
from
'./component/registerDialog.vue'
import
md
from
"../../md.js"
;
import
{
useUserStore
}
from
"@/stores/user"
;
const
userStore
=
useUserStore
();
//存储活动信息等
const
activityInfo
=
ref
({
...
...
@@ -373,7 +375,7 @@ const init = () => {
errorTip
()
}
}
onLoad
((
options
)
=>
{
onLoad
(
async
(
options
)
=>
{
md
.
sensorSignTake
({
bmhdPage
:
"true"
,
page_name
:
activityInfo
.
value
?.
activityTitle
||
''
,
...
...
@@ -387,6 +389,16 @@ onLoad((options) => {
menus
:
[
'shareAppMessage'
]
// 微信小程序支持分享到朋友圈
});
query
.
value
=
options
if
(
options
.
share
==
'true'
){
await
userStore
.
loadUserInfo
()
if
(
userStore
.
userInfo
?.
memberId
!==
"not_login"
)
{
//非会员 未登录,跳转到登录注册页面
uni
.
navigateTo
({
url
:
`/pages/activity/register`
})
return
}
}
init
()
})
...
...
@@ -402,7 +414,7 @@ onShow(()=> {
onShareAppMessage
(()
=>
{
return
{
title
:
activityInfo
.
value
.
shareTitle
||
'星妈会活动'
,
path
:
`/subPackages/momclub/index?activityId=
${
query
.
value
.
activityId
}
`
,
// 分享页面路径
path
:
`/subPackages/momclub/index?activityId=
${
query
.
value
.
activityId
}
&share=true
`
,
// 分享页面路径
imageUrl
:
activityInfo
.
value
.
sharePic
,
// 分享图片
success
:
(
res
)
=>
{
console
.
log
(
'分享成功'
,
res
);
...
...
subPackages/momclub/sign.vue
View file @
543b7af7
...
...
@@ -40,7 +40,7 @@
<image
v-else
:src=
"$baseUrl + 'sign-up/circle.png'"
mode=
"aspectFit"
/>
<view
class=
"read-text"
>
本人知晓并同意
<text
@
click=
"openNoticeDialog"
class=
"agree-text"
>
《星妈会活动协议》
</text>
以及“
报名
须知”的全部条款内容,并保证报名信息填写的真实性
class=
"agree-text"
>
《星妈会活动协议》
</text>
以及“
活动
须知”的全部条款内容,并保证报名信息填写的真实性
</view>
</view>
<button
v-if=
"!query.isView"
form-type=
"submit"
class=
"form-btn"
>
...
...
subPackages/momclub/signUpList.vue
deleted
100644 → 0
View file @
742d7083
<
template
>
<view
class=
"activity-list-warp"
>
<!--
<view
class=
"warp-bg"
></view>
-->
<view
class=
"search"
>
<view
class=
"search-text"
>
您共报名了
{{
activityList
.
length
}}
场活动
</view>
<view
@
click=
"searchClick"
class=
"search-btn"
>
{{
status
===
''
?
'查看已入选'
:
'查看所有'
}}
</view>
</view>
<view
class=
"activity-list-box"
>
<view
v-for=
"(item, index) in activityList"
:key=
"index"
@
click=
"detailClick(item)"
class=
"activity-list-card"
>
<view
class=
"item-pic"
>
<image
:src=
"item.pic"
/>
</view>
<view
class=
"item-content"
>
<view
class=
"content-left"
>
<view
v-if=
"(formatActivityTime(item.activityStartTime, item.activityEndTime).split(',')[0])"
class=
"left-one"
>
<view
class=
"time-top"
>
{{
formatActivityTime
(
item
.
activityStartTime
,
item
.
activityEndTime
).
split
(
','
)[
0
]
}}
</view>
<view
class=
"time-bot"
>
{{
formatActivityTime
(
item
.
activityStartTime
,
item
.
activityEndTime
).
split
(
','
)[
1
]
}}
</view>
</view>
<view
v-else
class=
"left-two"
>
{{
formatActivityTime
(
item
.
activityStartTime
,
item
.
activityEndTime
).
split
(
','
)[
1
]
}}
<br
/>
{{
formatActivityTime
(
item
.
activityStartTime
,
item
.
activityEndTime
).
split
(
','
)[
2
]
}}
</view>
</view>
<view
class=
"content-main"
>
<view
class=
"title"
>
{{
item
.
activityTitle
}}
</view>
<view
class=
"area"
>
<image
:src=
"$baseUrl + 'sign-up/mark.png'"
/>
<view
class=
"text"
>
{{
item
.
addressList
[
0
].
cityName
}}
</view>
<view
class=
"name"
>
{{
item
.
activityTypeName
}}
</view>
</view>
</view>
<view
class=
"content-right"
>
<view
:class=
"(item.prized === 0 || Date.now() > new Date(item.signupEndTime).getTime()) ? 'btn gray' : 'btn'"
>
{{
formatStatus
(
item
)
}}
</view>
</view>
</view>
</view>
</view>
<view
v-if=
"loadMore"
class=
"no-page"
>
{{
loadMore
}}
</view>
</view>
</
template
>
<
script
setup
>
import
{
ref
,
nextTick
}
from
'vue'
import
{
onLoad
,
onReachBottom
}
from
'@dcloudio/uni-app'
import
{
signupListApi
}
from
'@/api/momclub/index.js'
;
const
currentPage
=
ref
(
1
)
const
pageSize
=
ref
(
10
)
const
loadMore
=
ref
(
''
)
const
loadMoreFlag
=
ref
(
true
)
//是否加载
const
activityList
=
ref
()
const
formatActivityTime
=
(
startTime
,
endTime
)
=>
{
const
start
=
new
Date
(
startTime
);
const
end
=
new
Date
(
endTime
);
const
getParts
=
(
date
)
=>
[
date
.
getMonth
()
+
1
,
date
.
getDate
(),
date
.
getHours
().
toString
().
padStart
(
2
,
'0'
),
date
.
getMinutes
().
toString
().
padStart
(
2
,
'0'
)];
const
[
sMonth
,
sDate
,
sHours
,
sMinutes
]
=
getParts
(
start
);
const
[
eMonth
,
eDate
,
eHours
,
eMinutes
]
=
getParts
(
end
);
console
.
log
(
sMonth
,
eMonth
,
sDate
,
eDate
,
'23123dawsaws'
)
if
(
sMonth
===
eMonth
&&
sDate
===
eDate
)
{
//不跨日
return
`
${
sMonth
}
/
${
sDate
}
,
${
sHours
}
:
${
sMinutes
}
-
${
eHours
}
:
${
eMinutes
}
`
;
}
else
if
(
sMonth
===
eMonth
)
{
//跨日
return
`
${
sMonth
}
月,
${
sDate
}
日-
${
eDate
}
日`
;
}
else
{
//跨月
return
`,
${
sMonth
}
月
${
sDate
}
日~,
${
eMonth
}
月
${
eDate
}
日`
;
}
}
const
formatStatus
=
(
item
)
=>
{
const
{
prized
,
signupState
,
signupStartTime
,
signupEndTime
}
=
item
if
(
signupState
===
1
)
{
//用户已报名
if
(
prized
===
-
1
)
{
//未公布
return
"已报名"
}
else
if
(
prized
===
1
)
{
//已入选
return
"已入选"
}
else
{
//未入选
return
"未入选"
}
}
else
{
//用户未报名
if
(
Date
.
now
()
<
new
Date
(
signupStartTime
).
getTime
())
{
//报名未开始
return
"待开启"
}
else
if
(
Date
.
now
()
>
new
Date
(
signupEndTime
).
getTime
())
{
//报名已结束
return
"已结束"
}
else
{
//报名进行中
return
"报名中"
}
}
}
// const formatAddress = (addressList) => {
// let addressStr = addressList.map(itm => itm.cityName).join(' | ')
// console.log(addressStr.length, addressStr, '02323')
// if (addressStr.length > 9) {
// let str = addressStr.slice(0, 9)
// return `${str}...`
// } else {
// return addressStr
// }
// }
//查看活动
const
detailClick
=
(
item
)
=>
{
if
(
item
.
prized
===
0
||
Date
.
now
()
>
new
Date
(
item
.
signupEndTime
).
getTime
())
return
uni
.
navigateTo
({
url
:
`/subPackages/momclub/index?activityId=
${
item
.
activityId
}
`
})
}
const
status
=
ref
(
''
)
//搜索
const
searchClick
=
()
=>
{
console
.
log
(
'点击'
)
if
(
status
.
value
===
1
)
{
status
.
value
=
''
}
else
{
status
.
value
=
1
}
getInfo
()
}
const
getInfo
=
async
()
=>
{
try
{
console
.
log
(
status
.
value
,
'传参'
)
const
res
=
await
signupListApi
({
status
:
status
.
value
,
currentPage
:
currentPage
.
value
,
pageSize
:
pageSize
.
value
})
if
(
res
.
success
)
{
activityList
.
value
=
currentPage
.
value
===
1
?
res
.
data
.
records
:
[...
activityList
.
value
,
...
res
.
data
.
records
]
if
(
activityList
.
value
.
length
==
0
)
{
loadMore
.
value
=
'暂无报名活动'
}
else
{
loadMore
.
value
=
''
}
if
(
res
.
data
.
records
.
length
==
0
)
{
loadMoreFlag
.
value
=
false
}
}
}
catch
(
err
)
{
console
.
log
(
err
,
'err'
)
}
}
onReachBottom
(()
=>
{
if
(
!
loadMoreFlag
.
value
)
return
nextTick
(()
=>
{
currentPage
.
value
=
currentPage
.
value
+
1
getInfo
()
})
})
onLoad
(()
=>
{
loadMoreFlag
.
value
=
true
getInfo
()
})
</
script
>
<
style
lang=
"less"
scoped
>
.activity-list-warp {
background-color: #F7F7F7;
position: relative;
color: #1C1C1C;
min-height: 100vh;
.warp-bg {
// background: linear-gradient(180deg, #ECC990 0%, rgba(211, 164, 88, 0) 100%);
height: 240rpx;
width: 100%;
position: absolute;
}
.search {
padding: 0rpx 20rpx;
height: 92rpx;
display: flex;
justify-content: space-between;
align-items: center;
background-color: #FFFFFF;
.search-text {
line-height: 92rpx;
font-size: 26rpx;
}
.search-btn {
font-size: 24rpx;
border-radius: 44rpx;
height: 40rpx;
line-height: 40rpx;
border: 1px solid #B27C1E;
color: #B27C1E;
padding: 0rpx 15rpx;
}
}
.activity-list-box {
padding: 40rpx 20rpx;
.activity-list-card {
background-color: #FFFFFF;
margin-bottom: 40rpx;
height: 400rpx;
position: relative;
border-radius: 16rpx;
.item-pic {
width: 100%;
height: 354rpx;
image {
width: 100%;
height: 100%;
border-radius: 16rpx 16rpx 0rpx 0rpx;
}
}
.item-content {
width: 100%;
height: 120rpx;
display: flex;
justify-content: space-between;
align-items: center;
padding: 24rpx 40rpx;
box-sizing: border-box;
position: absolute;
bottom: 0;
background: linear-gradient(180deg, rgba(255, 255, 255, 0.5) -33.33%, rgba(255, 255, 255, 0.787882) 11.04%, #FFFFFF 42.29%);
box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.04);
border-radius: 16rpx;
.content-left {
width: 140rpx;
height: 100%;
.left-one{
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
.time-top {
font-size: 28rpx;
font-weight: 600;
}
.time-bot {
font-size: 20rpx;
color: #A8A8A8;
line-height: 28rpx;
}
}
.left-two{
font-size: 24rpx;
line-height: 36rpx;
}
}
.content-main {
width: calc(100% - 380rpx);
display: flex;
flex-direction: column;
align-items: flex-start;
margin: 0rpx 20rpx;
height: 100%;
justify-content: space-between;
.title {
font-size: 26rpx;
font-weight: 500;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.area {
display: flex;
justify-content: center;
align-items: center;
image {
width: 20rpx;
height: 20rpx;
}
.text {
font-size: 20rpx;
margin: 0rpx 20rpx 0rpx 2rpx;
}
.name {
padding: 0rpx 12rpx;
border-radius: 4rpx;
background: rgba(211, 163, 88, 0.2);
font-size: 18rpx;
line-height: 26rpx;
color: #B27C1E;
}
}
}
.content-right {
width: 180rpx;
.btn {
width: 180rpx;
height: 60rpx;
border-radius: 44rpx;
text-align: center;
color: #FFFFFF;
line-height: 60rpx;
background: linear-gradient(180deg, #ECC990 0%, #D3A358 100%);
font-size: 26rpx;
font-weight: 400;
}
.gray {
opacity: 0.5;
}
}
}
}
}
.no-page{
position: absolute;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
}
}
</
style
>
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